@wowok/agent-mcp 2.5.5 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +5 -3
  2. package/dist/config/runtime.js +3 -6
  3. package/dist/extensions/capability-manifest.d.ts +125 -0
  4. package/dist/extensions/capability-manifest.js +594 -0
  5. package/dist/extensions/constraint-registry.d.ts +24 -0
  6. package/dist/extensions/constraint-registry.js +196 -0
  7. package/dist/extensions/index.d.ts +12 -0
  8. package/dist/extensions/index.js +6 -0
  9. package/dist/extensions/metric-registry.d.ts +26 -0
  10. package/dist/extensions/metric-registry.js +257 -0
  11. package/dist/extensions/mode-evaluator.d.ts +15 -0
  12. package/dist/extensions/mode-evaluator.js +170 -0
  13. package/dist/extensions/modes.d.ts +2 -0
  14. package/dist/extensions/modes.js +407 -0
  15. package/dist/extensions/registry.d.ts +48 -0
  16. package/dist/extensions/registry.js +629 -0
  17. package/dist/extensions/types.d.ts +218 -0
  18. package/dist/extensions/types.js +1 -0
  19. package/dist/harness/checkpoint.js +2 -2
  20. package/dist/knowledge/deployment-scanner.d.ts +3 -0
  21. package/dist/knowledge/deployment-scanner.js +64 -3
  22. package/dist/knowledge/flywheel-loop.js +2 -5
  23. package/dist/knowledge/guard-risk.d.ts +13 -0
  24. package/dist/knowledge/guard-risk.js +57 -0
  25. package/dist/knowledge/guard-templates.js +278 -0
  26. package/dist/knowledge/machine-templates.js +20 -1
  27. package/dist/knowledge/overrides-loader.js +2 -4
  28. package/dist/knowledge/progress-ledger.js +3 -0
  29. package/dist/knowledge/progress-translation.js +5 -1
  30. package/dist/knowledge/service-confirm.d.ts +14 -5
  31. package/dist/knowledge/service-confirm.js +116 -8
  32. package/dist/knowledge/tool-constraints.js +6 -2
  33. package/dist/loop-engineering/improve.js +2 -4
  34. package/dist/project/deployment-bridge.d.ts +5 -0
  35. package/dist/project/deployment-bridge.js +119 -0
  36. package/dist/project/deployment-doc.d.ts +3 -0
  37. package/dist/project/deployment-doc.js +72 -10
  38. package/dist/project/evaluation.d.ts +2 -0
  39. package/dist/project/evaluation.js +578 -86
  40. package/dist/project/graph-builder.d.ts +4 -1
  41. package/dist/project/graph-builder.js +141 -63
  42. package/dist/project/graph.d.ts +1 -0
  43. package/dist/project/handlers.d.ts +221 -5
  44. package/dist/project/handlers.js +933 -14
  45. package/dist/project/index.js +2 -6
  46. package/dist/project/project-store.js +2 -5
  47. package/dist/project/stage-gate.d.ts +4 -0
  48. package/dist/project/stage-gate.js +64 -5
  49. package/dist/project/task-tracker.d.ts +26 -0
  50. package/dist/project/task-tracker.js +78 -0
  51. package/dist/safety/preview.js +16 -0
  52. package/dist/schema/call/allocation.d.ts +16 -16
  53. package/dist/schema/call/base.d.ts +21 -13
  54. package/dist/schema/call/base.js +27 -6
  55. package/dist/schema/call/bridge.d.ts +5 -5
  56. package/dist/schema/call/bridge.js +3 -1
  57. package/dist/schema/call/demand.d.ts +23 -31
  58. package/dist/schema/call/guard.js +1 -1
  59. package/dist/schema/call/machine.d.ts +402 -376
  60. package/dist/schema/call/order.d.ts +149 -228
  61. package/dist/schema/call/order.js +7 -3
  62. package/dist/schema/call/payment.d.ts +183 -3
  63. package/dist/schema/call/payment.js +21 -3
  64. package/dist/schema/call/personal.d.ts +241 -52
  65. package/dist/schema/call/progress.d.ts +53 -61
  66. package/dist/schema/call/progress.js +18 -4
  67. package/dist/schema/call/repository.d.ts +23 -31
  68. package/dist/schema/call/semantic.d.ts +1 -1
  69. package/dist/schema/call/semantic.js +30 -1
  70. package/dist/schema/call/service.d.ts +95 -119
  71. package/dist/schema/call/service.js +22 -1
  72. package/dist/schema/common/index.d.ts +11 -2
  73. package/dist/schema/common/index.js +43 -14
  74. package/dist/schema/config/index.d.ts +12 -12
  75. package/dist/schema/local/index.d.ts +140 -143
  76. package/dist/schema/local/index.js +44 -23
  77. package/dist/schema/messenger/index.d.ts +290 -62
  78. package/dist/schema/messenger/index.js +2 -2
  79. package/dist/schema/operations.d.ts +680 -545
  80. package/dist/schema/operations.js +22 -0
  81. package/dist/schema/project/index.d.ts +2064 -84
  82. package/dist/schema/project/index.js +354 -12
  83. package/dist/schema/query/index.d.ts +715 -354
  84. package/dist/schema/query/index.js +164 -31
  85. package/dist/schema/schema-query/index.d.ts +15 -3
  86. package/dist/schema/schema-query/index.js +23 -5
  87. package/dist/schema/trust/index.d.ts +8 -8
  88. package/dist/schema/utils/node-parser.js +7 -4
  89. package/dist/schema-query/index.d.ts +7 -1
  90. package/dist/schema-query/index.js +204 -4
  91. package/dist/schemas/account_operation.output.json +14 -22
  92. package/dist/schemas/account_operation.schema.json +11 -25
  93. package/dist/schemas/bridge_operation.output.json +6 -0
  94. package/dist/schemas/bridge_operation.schema.json +1 -1
  95. package/dist/schemas/guard-templates.json +379 -0
  96. package/dist/schemas/guard2file.schema.json +1 -1
  97. package/dist/schemas/index.json +1 -1
  98. package/dist/schemas/local_info_operation.output.json +6 -0
  99. package/dist/schemas/local_mark_operation.output.json +7 -1
  100. package/dist/schemas/local_mark_operation.schema.json +1 -1
  101. package/dist/schemas/machineNode2file.schema.json +1 -1
  102. package/dist/schemas/messenger_operation.schema.json +10 -10
  103. package/dist/schemas/onchain_events.output.json +1 -1
  104. package/dist/schemas/onchain_operations.schema.json +348 -296
  105. package/dist/schemas/onchain_operations_allocation.schema.json +34 -25
  106. package/dist/schemas/onchain_operations_arbitration.schema.json +8 -8
  107. package/dist/schemas/onchain_operations_contact.schema.json +8 -8
  108. package/dist/schemas/onchain_operations_demand.schema.json +8 -8
  109. package/dist/schemas/onchain_operations_gen_passport.schema.json +14 -14
  110. package/dist/schemas/onchain_operations_gen_proof.schema.json +2 -2
  111. package/dist/schemas/onchain_operations_guard.schema.json +1 -1
  112. package/dist/schemas/onchain_operations_machine.schema.json +41 -33
  113. package/dist/schemas/onchain_operations_order.schema.json +71 -77
  114. package/dist/schemas/onchain_operations_payment.schema.json +141 -111
  115. package/dist/schemas/onchain_operations_permission.schema.json +2 -2
  116. package/dist/schemas/onchain_operations_personal.schema.json +7 -7
  117. package/dist/schemas/onchain_operations_progress.schema.json +8 -8
  118. package/dist/schemas/onchain_operations_proof.schema.json +7 -7
  119. package/dist/schemas/onchain_operations_repository.schema.json +8 -8
  120. package/dist/schemas/onchain_operations_reward.schema.json +10 -10
  121. package/dist/schemas/onchain_operations_service.schema.json +46 -35
  122. package/dist/schemas/onchain_operations_treasury.schema.json +8 -8
  123. package/dist/schemas/onchain_table_data.output.json +33 -25
  124. package/dist/schemas/onchain_table_data.schema.json +12 -12
  125. package/dist/schemas/project_operation.output.json +1352 -20
  126. package/dist/schemas/project_operation.schema.json +53 -4
  127. package/dist/schemas/query_toolkit.output.json +111 -82
  128. package/dist/schemas/query_toolkit.schema.json +9 -13
  129. package/dist/schemas/schema_query.output.json +7 -3
  130. package/dist/schemas/schema_query.schema.json +17 -3
  131. package/dist/telemetry/storage.js +2 -2
  132. package/dist/tools/handlers/local.js +20 -5
  133. package/dist/tools/handlers/onchain.js +36 -0
  134. package/dist/tools/handlers/project.js +72 -1
  135. package/dist/tools/handlers/query.js +27 -0
  136. package/dist/tools/handlers/schema-query.js +19 -0
  137. package/dist/tools/handlers/task-status.d.ts +170 -0
  138. package/dist/tools/handlers/task-status.js +55 -0
  139. package/dist/tools/handlers/wip.js +47 -1
  140. package/dist/tools/index.js +212 -8
  141. package/dist/tools/retry.d.ts +8 -0
  142. package/dist/tools/retry.js +85 -0
  143. package/dist/tools/wip-deploy-assist.d.ts +28 -0
  144. package/dist/tools/wip-deploy-assist.js +278 -0
  145. package/package.json +2 -2
  146. package/dist/schemas/guard-node-examples.md +0 -199
@@ -23,148 +23,178 @@
23
23
  ],
24
24
  "definitions": {
25
25
  "data": {
26
- "type": "object",
27
- "properties": {
28
- "object": {
26
+ "anyOf": [
27
+ {
29
28
  "type": "object",
30
29
  "properties": {
31
- "name": {
32
- "type": "string",
33
- "description": "The name of the object"
30
+ "object": {
31
+ "type": "object",
32
+ "properties": {
33
+ "name": {
34
+ "type": "string",
35
+ "description": "The name of the object"
36
+ },
37
+ "tags": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "string"
41
+ },
42
+ "description": "The tags of the object"
43
+ },
44
+ "onChain": {
45
+ "type": "boolean",
46
+ "description": "CRITICAL: Whether to sync the name to the blockchain. DEFAULT (undefined/false): The name is stored LOCALLY ONLY on your device (PRIVATE). If set to true: The name is published ON-CHAIN and becomes PUBLICLY VISIBLE to everyone. Only set to true for displaying the relationships you are willing to make public on the chain."
47
+ },
48
+ "replaceExistName": {
49
+ "type": "boolean",
50
+ "description": "FORCE CLAIM: Set to true ONLY when the user explicitly expresses a STRONG INTENTION to forcefully take over an existing name (e.g., 'I must use this name', 'force rename', 'replace the existing one'). WARNING: This will UNBIND the name from its original object and rebind it to the new one, potentially breaking existing references. If not specified or false: the operation will FAIL with an error when the name is already in use (safe default behavior)."
51
+ },
52
+ "type_parameter": {
53
+ "type": "string",
54
+ "description": "Payment token type for this object (format: {address}::{module}::{struct}). e.g. '0x2::wow::WOW' (WOW, the default), '0x...::usdt::USDT' (USDT), '0x...::eth::ETH' (ETH). Defines which token this object accepts for payments. To discover all available tokens and their type tags, call wowok_buildin_info with info 'mainnet bridge tokens' and use the returned `wowTypeTag` value here.",
55
+ "default": "0x2::wow::WOW"
56
+ }
57
+ },
58
+ "additionalProperties": false,
59
+ "description": "Create a new named object (with optional tags) and specify a token type for payments (e.g., WOW, USDT, ETH)."
34
60
  },
35
- "tags": {
61
+ "revenue": {
36
62
  "type": "array",
37
63
  "items": {
38
- "type": "string"
39
- },
40
- "description": "The tags of the object"
41
- },
42
- "onChain": {
43
- "type": "boolean",
44
- "description": "CRITICAL: Whether to sync the name to the blockchain. DEFAULT (undefined/false): The name is stored LOCALLY ONLY on your device (PRIVATE). If set to true: The name is published ON-CHAIN and becomes PUBLICLY VISIBLE to everyone. Only set to true for displaying the relationships you are willing to make public on the chain."
45
- },
46
- "replaceExistName": {
47
- "type": "boolean",
48
- "description": "FORCE CLAIM: Set to true ONLY when the user explicitly expresses a STRONG INTENTION to forcefully take over an existing name (e.g., 'I must use this name', 'force rename', 'replace the existing one'). WARNING: This will UNBIND the name from its original object and rebind it to the new one, potentially breaking existing references. If not specified or false: the operation will FAIL with an error when the name is already in use (safe default behavior)."
49
- },
50
- "type_parameter": {
51
- "type": "string",
52
- "description": "Payment token type for this object (format: {address}::{module}::{struct}). e.g. '0x2::wow::WOW' (WOW, the default), '0x...::usdt::USDT' (USDT), '0x...::eth::ETH' (ETH). Defines which token this object accepts for payments. To discover all available tokens and their type tags, call wowok_buildin_info with info 'mainnet bridge tokens' and use the returned `wowTypeTag` value here.",
53
- "default": "0x2::wow::WOW"
54
- }
55
- },
56
- "additionalProperties": false,
57
- "description": "Create a new named object (with optional tags) and specify a token type for payments (e.g., WOW, USDT, ETH)."
58
- },
59
- "revenue": {
60
- "type": "array",
61
- "items": {
62
- "type": "object",
63
- "properties": {
64
- "recipient": {
65
64
  "type": "object",
66
65
  "properties": {
67
- "name_or_address": {
68
- "type": "string",
69
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
70
- },
71
- "local_mark_first": {
72
- "type": "boolean",
73
- "description": "Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks"
74
- }
75
- },
76
- "additionalProperties": false,
77
- "description": "Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account."
78
- },
79
- "amount": {
80
- "anyOf": [
81
- {
66
+ "recipient": {
82
67
  "type": "object",
83
68
  "properties": {
84
- "balance": {
85
- "type": [
86
- "number",
87
- "string"
88
- ],
89
- "description": "Balance type"
69
+ "name_or_address": {
70
+ "type": "string",
71
+ "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
72
+ },
73
+ "local_mark_first": {
74
+ "type": "boolean",
75
+ "description": "Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks"
90
76
  }
91
77
  },
92
- "required": [
93
- "balance"
94
- ],
95
78
  "additionalProperties": false,
96
- "description": "Specify an amount value."
79
+ "description": "Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account."
97
80
  },
98
- {
99
- "type": "object",
100
- "properties": {
101
- "coin": {
102
- "type": "string",
103
- "description": "Coin object ID or name(local mark). Use a specified Coin object."
81
+ "amount": {
82
+ "anyOf": [
83
+ {
84
+ "type": "object",
85
+ "properties": {
86
+ "balance": {
87
+ "type": [
88
+ "number",
89
+ "string"
90
+ ],
91
+ "description": "A coin/balance amount in the smallest on-chain unit (u64). Accepts a JS number OR a numeric string. PRECISION RULE: for values exceeding 2^53 (e.g. token amounts with 18 decimals), ALWAYS pass a numeric STRING (e.g. \"1000000000000000000\") to preserve precision — JS numbers lose precision above 2^53. UNIT: this is the smallest unit, NOT the display unit. For SUI: 1 SUI = 10^9 MIST, so 10 SUI = 10000000000. For custom tokens: use the token's native smallest unit (decimals from coin metadata). Examples: 10000000000 (10 SUI), \"1000000000000000000\" (1 token with 18 decimals), 500 (500 units of a token with 0 decimals). Used for: Service.sale.price, Service.compensation_fund_add balance, Treasury.deposit, Arbitration.fee, Reward.amount, stock quantities."
92
+ }
93
+ },
94
+ "required": [
95
+ "balance"
96
+ ],
97
+ "additionalProperties": false,
98
+ "description": "Specify an amount value."
99
+ },
100
+ {
101
+ "type": "object",
102
+ "properties": {
103
+ "coin": {
104
+ "type": "string",
105
+ "description": "Coin object ID or name(local mark). Use a specified Coin object."
106
+ }
107
+ },
108
+ "required": [
109
+ "coin"
110
+ ],
111
+ "additionalProperties": false
104
112
  }
105
- },
106
- "required": [
107
- "coin"
108
113
  ],
109
- "additionalProperties": false
114
+ "description": "Specify the amount to pay from the transaction account, or the Coin ID owned by the transaction account. Used for payment."
110
115
  }
116
+ },
117
+ "required": [
118
+ "recipient",
119
+ "amount"
111
120
  ],
112
- "description": "Specify the amount to pay from the transaction account, or the Coin ID owned by the transaction account. Used for payment."
113
- }
121
+ "additionalProperties": false,
122
+ "description": "Payment recipient and amount"
123
+ },
124
+ "description": "Array of payment recipients and amounts"
114
125
  },
115
- "required": [
116
- "recipient",
117
- "amount"
118
- ],
119
- "additionalProperties": false,
120
- "description": "Payment recipient and amount"
126
+ "info": {
127
+ "type": "object",
128
+ "properties": {
129
+ "for_object": {
130
+ "type": [
131
+ "string",
132
+ "null"
133
+ ],
134
+ "description": "Payment for a specific object ID"
135
+ },
136
+ "for_guard": {
137
+ "type": [
138
+ "string",
139
+ "null"
140
+ ],
141
+ "description": "Payment to satisfy verification of a Guard object"
142
+ },
143
+ "remark": {
144
+ "type": "string",
145
+ "description": "Payment record remark"
146
+ },
147
+ "index": {
148
+ "type": [
149
+ "number",
150
+ "string"
151
+ ],
152
+ "description": "Payment record index"
153
+ }
154
+ },
155
+ "required": [
156
+ "remark",
157
+ "index"
158
+ ],
159
+ "additionalProperties": false,
160
+ "description": "Payment information"
161
+ }
121
162
  },
122
- "description": "Array of payment recipients and amounts"
163
+ "required": [
164
+ "object",
165
+ "revenue",
166
+ "info"
167
+ ],
168
+ "additionalProperties": false,
169
+ "description": "Create a new Payment. USAGE: Set 'object' field with {name, type, ...} to create a named Payment. NOTE: 'name' goes INSIDE 'object', NOT at the data root level. Payment is an immutable object - it can only be created, not modified. The 'object' field is CRITICAL and REQUIRED."
123
170
  },
124
- "info": {
171
+ {
125
172
  "type": "object",
126
173
  "properties": {
127
- "for_object": {
128
- "type": [
129
- "string",
130
- "null"
131
- ],
132
- "description": "Payment for a specific object ID"
174
+ "object": {
175
+ "$ref": "#/definitions/data/anyOf/0/properties/revenue/items/properties/recipient/properties/name_or_address",
176
+ "description": "CoinWrapper object ID (0x...) or local name to unwrap. Find received CoinWrappers via query_toolkit with query_type='onchain_received'."
133
177
  },
134
- "for_guard": {
135
- "type": [
136
- "string",
137
- "null"
138
- ],
139
- "description": "Payment to satisfy verification of a Guard object"
178
+ "receive": {
179
+ "type": "boolean",
180
+ "const": true,
181
+ "description": "Set to true to activate receive mode. CoinWrapper objects ARE transferred to recipients via transfer::public_transfer (they arrive as owned objects), but they are NOT spendable coins. This mode unwraps a CoinWrapper into actual coins in your wallet via payment::unwrap_to_myself. The caller must be the CoinWrapper's owner (the recipient specified in the Allocation's revenue split)."
140
182
  },
141
- "remark": {
183
+ "type_parameter": {
142
184
  "type": "string",
143
- "description": "Payment record remark"
144
- },
145
- "index": {
146
- "type": [
147
- "number",
148
- "string"
149
- ],
150
- "description": "Payment record index"
185
+ "description": "Coin type of the CoinWrapper, e.g. '0x2::wow::WOW'. Must match the type used when the Allocation created the Payment."
151
186
  }
152
187
  },
153
188
  "required": [
154
- "remark",
155
- "index"
189
+ "object",
190
+ "receive",
191
+ "type_parameter"
156
192
  ],
157
193
  "additionalProperties": false,
158
- "description": "Payment information"
194
+ "description": "Receive mode: unwrap a CoinWrapper to the caller's wallet. Use after Allocation's alloc_by_guard creates a Payment with your address as a revenue recipient. The CoinWrapper holds your share — call this to convert it to actual coins in your wallet."
159
195
  }
160
- },
161
- "required": [
162
- "object",
163
- "revenue",
164
- "info"
165
196
  ],
166
- "additionalProperties": false,
167
- "description": "On-chain Payment creation. USAGE: Set 'object' field with {name, type, ...} to create a named Payment. NOTE: 'name' goes INSIDE 'object', NOT at the data root level. Payment is an immutable object - it can only be created, not modified. The 'object' field is CRITICAL and REQUIRED."
197
+ "description": "On-chain Payment operations. TWO modes:\n(1) CREATE: Set 'object' with {name, type_parameter, ...}, 'revenue', and 'info' to create a new Payment.\n(2) RECEIVE: Set {object: '<coinwrapper_id_or_name>', receive: true, type_parameter: '0x2::wow::WOW'} to unwrap a CoinWrapper to your wallet.\nThe 'object' field is CRITICAL and REQUIRED in both modes. STRING for receive (CoinWrapper ID/name), OBJECT for create."
168
198
  },
169
199
  "env": {
170
200
  "type": "object",
@@ -192,7 +222,7 @@
192
222
  "testnet",
193
223
  "mainnet"
194
224
  ],
195
- "description": "Network entrypoint: Specifies which network the operation occurs on"
225
+ "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."
196
226
  },
197
227
  "referrer": {
198
228
  "$ref": "#/definitions/env/properties/account",
@@ -473,7 +473,7 @@
473
473
  "number",
474
474
  "string"
475
475
  ],
476
- "description": "Balance type"
476
+ "description": "A coin/balance amount in the smallest on-chain unit (u64). Accepts a JS number OR a numeric string. PRECISION RULE: for values exceeding 2^53 (e.g. token amounts with 18 decimals), ALWAYS pass a numeric STRING (e.g. \"1000000000000000000\") to preserve precision — JS numbers lose precision above 2^53. UNIT: this is the smallest unit, NOT the display unit. For SUI: 1 SUI = 10^9 MIST, so 10 SUI = 10000000000. For custom tokens: use the token's native smallest unit (decimals from coin metadata). Examples: 10000000000 (10 SUI), \"1000000000000000000\" (1 token with 18 decimals), 500 (500 units of a token with 0 decimals). Used for: Service.sale.price, Service.compensation_fund_add balance, Treasury.deposit, Arbitration.fee, Reward.amount, stock quantities."
477
477
  },
478
478
  "token_type": {
479
479
  "type": "string",
@@ -563,7 +563,7 @@
563
563
  "testnet",
564
564
  "mainnet"
565
565
  ],
566
- "description": "Network entrypoint: Specifies which network the operation occurs on"
566
+ "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."
567
567
  },
568
568
  "referrer": {
569
569
  "$ref": "#/definitions/env/properties/account",
@@ -575,14 +575,14 @@
575
575
  "address": {
576
576
  "anyOf": [
577
577
  {
578
- "type": "string",
579
- "description": "Account name, address (0x...), or mark name. When using string format, local marks are searched first. EXAMPLE: 'alice' - searches local marks first, then global; EXAMPLE: '0x1234...' - uses address directly"
578
+ "$ref": "#/definitions/data/properties/referrer/anyOf/1/properties/name_or_address",
579
+ "description": "Account name, address (0x...), or mark name. When using string format, local marks are searched first. EXAMPLE: 'alice' - searches local marks first, then global; EXAMPLE: '0x2...' (64 hex chars) - uses address directly; EXAMPLE: '' - uses the default local account"
580
580
  },
581
581
  {
582
582
  "$ref": "#/definitions/data/properties/referrer/anyOf/1"
583
583
  }
584
584
  ],
585
- "description": "Account or address lookup. Can be a simple string (recommended for AI) or full object with explicit local_mark_first control"
585
+ "description": "Account or address lookup. Can be a simple string (recommended for AI) or full object with explicit local_mark_first control. String form auto-converts to { name_or_address: <string>, local_mark_first: true }."
586
586
  },
587
587
  "name": {
588
588
  "$ref": "#/definitions/data/properties/information/anyOf/1/properties/name/items"
@@ -656,15 +656,15 @@
656
656
  {
657
657
  "type": "array",
658
658
  "items": {
659
- "type": "string"
659
+ "$ref": "#/definitions/data/properties/referrer/anyOf/1/properties/name_or_address"
660
660
  },
661
- "description": "Array of account names, addresses, or mark names. Local marks are searched first for each entry"
661
+ "description": "Array of account names, addresses, or mark names. Local marks are searched first for each entry. EXAMPLE: ['alice', '0x2...', 'bob']"
662
662
  },
663
663
  {
664
664
  "$ref": "#/definitions/data/properties/information/anyOf/0/properties/data/items/properties/value/anyOf/0/anyOf/5/anyOf/0"
665
665
  }
666
666
  ],
667
- "description": "Batch account or address lookup. Can be an array of strings (recommended for AI) or full object with explicit control"
667
+ "description": "Batch account or address lookup. Can be an array of strings (recommended for AI) or full object with explicit control. Array form auto-converts to { entities: [...], check_all_founded: true }."
668
668
  }
669
669
  },
670
670
  "required": [
@@ -757,7 +757,7 @@
757
757
  "testnet",
758
758
  "mainnet"
759
759
  ],
760
- "description": "Network entrypoint: Specifies which network the operation occurs on"
760
+ "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."
761
761
  },
762
762
  "referrer": {
763
763
  "$ref": "#/definitions/env/properties/account",
@@ -186,7 +186,7 @@
186
186
  "unhold",
187
187
  "adminUnhold"
188
188
  ],
189
- "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)."
189
+ "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."
190
190
  },
191
191
  "message": {
192
192
  "type": "string",
@@ -233,7 +233,7 @@
233
233
  "testnet",
234
234
  "mainnet"
235
235
  ],
236
- "description": "Network entrypoint: Specifies which network the operation occurs on"
236
+ "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."
237
237
  },
238
238
  "referrer": {
239
239
  "$ref": "#/definitions/env/properties/account",
@@ -613,7 +613,7 @@
613
613
  "description": "vecvecu8"
614
614
  }
615
615
  ],
616
- "description": "Type of the value"
616
+ "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."
617
617
  },
618
618
  "value": {
619
619
  "anyOf": [
@@ -706,12 +706,12 @@
706
706
  }
707
707
  }
708
708
  ],
709
- "description": "The actual value data"
709
+ "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)."
710
710
  },
711
711
  "name": {
712
712
  "type": "string",
713
713
  "default": "",
714
- "description": "Name or description of this data"
714
+ "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."
715
715
  },
716
716
  "object_type": {
717
717
  "type": "string",
@@ -749,7 +749,7 @@
749
749
  "TableItem_AddressMark",
750
750
  "TableItem_EntityRegistrar"
751
751
  ],
752
- "description": "Object type when value_type is Address and represents a specific object"
752
+ "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."
753
753
  }
754
754
  },
755
755
  "required": [
@@ -758,7 +758,7 @@
758
758
  "value_type"
759
759
  ],
760
760
  "additionalProperties": false,
761
- "description": "Guard table item"
761
+ "description": "Guard table item (QUERY/OUTPUT form — includes auto-derived object_type field)"
762
762
  },
763
763
  "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...'}]"
764
764
  }
@@ -770,7 +770,7 @@
770
770
  "additionalProperties": false,
771
771
  "description": "One Guard's submission data: the Guard to verify plus the user-provided data that satisfies its requirements."
772
772
  },
773
- "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."
773
+ "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:[...]}}"
774
774
  }
775
775
  },
776
776
  "required": [
@@ -151,7 +151,7 @@
151
151
  "testnet",
152
152
  "mainnet"
153
153
  ],
154
- "description": "Network entrypoint: Specifies which network the operation occurs on"
154
+ "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."
155
155
  },
156
156
  "referrer": {
157
157
  "$ref": "#/definitions/env/properties/account",
@@ -531,7 +531,7 @@
531
531
  "description": "vecvecu8"
532
532
  }
533
533
  ],
534
- "description": "Type of the value"
534
+ "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."
535
535
  },
536
536
  "value": {
537
537
  "anyOf": [
@@ -624,12 +624,12 @@
624
624
  }
625
625
  }
626
626
  ],
627
- "description": "The actual value data"
627
+ "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)."
628
628
  },
629
629
  "name": {
630
630
  "type": "string",
631
631
  "default": "",
632
- "description": "Name or description of this data"
632
+ "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."
633
633
  },
634
634
  "object_type": {
635
635
  "type": "string",
@@ -667,7 +667,7 @@
667
667
  "TableItem_AddressMark",
668
668
  "TableItem_EntityRegistrar"
669
669
  ],
670
- "description": "Object type when value_type is Address and represents a specific object"
670
+ "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."
671
671
  }
672
672
  },
673
673
  "required": [
@@ -676,7 +676,7 @@
676
676
  "value_type"
677
677
  ],
678
678
  "additionalProperties": false,
679
- "description": "Guard table item"
679
+ "description": "Guard table item (QUERY/OUTPUT form — includes auto-derived object_type field)"
680
680
  },
681
681
  "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...'}]"
682
682
  }
@@ -688,7 +688,7 @@
688
688
  "additionalProperties": false,
689
689
  "description": "One Guard's submission data: the Guard to verify plus the user-provided data that satisfies its requirements."
690
690
  },
691
- "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."
691
+ "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:[...]}}"
692
692
  }
693
693
  },
694
694
  "required": [
@@ -961,7 +961,7 @@
961
961
  "number",
962
962
  "string"
963
963
  ],
964
- "description": "Balance type"
964
+ "description": "A coin/balance amount in the smallest on-chain unit (u64). Accepts a JS number OR a numeric string. PRECISION RULE: for values exceeding 2^53 (e.g. token amounts with 18 decimals), ALWAYS pass a numeric STRING (e.g. \"1000000000000000000\") to preserve precision — JS numbers lose precision above 2^53. UNIT: this is the smallest unit, NOT the display unit. For SUI: 1 SUI = 10^9 MIST, so 10 SUI = 10000000000. For custom tokens: use the token's native smallest unit (decimals from coin metadata). Examples: 10000000000 (10 SUI), \"1000000000000000000\" (1 token with 18 decimals), 500 (500 units of a token with 0 decimals). Used for: Service.sale.price, Service.compensation_fund_add balance, Treasury.deposit, Arbitration.fee, Reward.amount, stock quantities."
965
965
  },
966
966
  "token_type": {
967
967
  "type": "string",
@@ -1054,7 +1054,7 @@
1054
1054
  "testnet",
1055
1055
  "mainnet"
1056
1056
  ],
1057
- "description": "Network entrypoint: Specifies which network the operation occurs on"
1057
+ "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."
1058
1058
  },
1059
1059
  "referrer": {
1060
1060
  "$ref": "#/definitions/env/properties/account",
@@ -1434,7 +1434,7 @@
1434
1434
  "description": "vecvecu8"
1435
1435
  }
1436
1436
  ],
1437
- "description": "Type of the value"
1437
+ "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."
1438
1438
  },
1439
1439
  "value": {
1440
1440
  "anyOf": [
@@ -1527,12 +1527,12 @@
1527
1527
  }
1528
1528
  }
1529
1529
  ],
1530
- "description": "The actual value data"
1530
+ "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)."
1531
1531
  },
1532
1532
  "name": {
1533
1533
  "type": "string",
1534
1534
  "default": "",
1535
- "description": "Name or description of this data"
1535
+ "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."
1536
1536
  },
1537
1537
  "object_type": {
1538
1538
  "type": "string",
@@ -1570,7 +1570,7 @@
1570
1570
  "TableItem_AddressMark",
1571
1571
  "TableItem_EntityRegistrar"
1572
1572
  ],
1573
- "description": "Object type when value_type is Address and represents a specific object"
1573
+ "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."
1574
1574
  }
1575
1575
  },
1576
1576
  "required": [
@@ -1579,7 +1579,7 @@
1579
1579
  "value_type"
1580
1580
  ],
1581
1581
  "additionalProperties": false,
1582
- "description": "Guard table item"
1582
+ "description": "Guard table item (QUERY/OUTPUT form — includes auto-derived object_type field)"
1583
1583
  },
1584
1584
  "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...'}]"
1585
1585
  }
@@ -1591,7 +1591,7 @@
1591
1591
  "additionalProperties": false,
1592
1592
  "description": "One Guard's submission data: the Guard to verify plus the user-provided data that satisfies its requirements."
1593
1593
  },
1594
- "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."
1594
+ "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:[...]}}"
1595
1595
  }
1596
1596
  },
1597
1597
  "required": [