@wowok/agent-mcp 2.7.3 → 2.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/evaluation/builtins/arbitration-score.d.ts +1 -1
  2. package/dist/evaluation/builtins/arbitration-score.js +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/knowledge/arbitration-ledger.js +1 -1
  5. package/dist/knowledge/demand-confirm.js +1 -1
  6. package/dist/knowledge/demand-risk.js +1 -1
  7. package/dist/knowledge/demand-translation.js +1 -1
  8. package/dist/knowledge/guard-design-patterns.js +1 -1
  9. package/dist/knowledge/index.d.ts +2 -2
  10. package/dist/knowledge/index.js +1 -1
  11. package/dist/knowledge/onchain-constants.d.ts +2 -2
  12. package/dist/knowledge/onchain-constants.js +1 -1
  13. package/dist/knowledge/payment-risk.js +1 -1
  14. package/dist/knowledge/permission-context.d.ts +11 -0
  15. package/dist/knowledge/permission-context.js +1 -1
  16. package/dist/knowledge/personal-risk.js +1 -1
  17. package/dist/knowledge/progress-ledger.js +1 -1
  18. package/dist/knowledge/progress-risk.js +1 -1
  19. package/dist/knowledge/progress-templates.js +1 -1
  20. package/dist/knowledge/progress-translation.js +1 -1
  21. package/dist/knowledge/registrar-risk.js +1 -1
  22. package/dist/knowledge/registrar-translation.js +1 -1
  23. package/dist/knowledge/reward-ledger.js +1 -1
  24. package/dist/knowledge/reward-translation.js +1 -1
  25. package/dist/knowledge/tools-reference.js +1 -1
  26. package/dist/knowledge/treasury-context.d.ts +1 -1
  27. package/dist/knowledge/treasury-context.js +1 -1
  28. package/dist/knowledge/treasury-ledger.js +1 -1
  29. package/dist/knowledge/treasury-risk.js +1 -1
  30. package/dist/knowledge/util-confirm.js +1 -1
  31. package/dist/knowledge/util-risk.js +1 -1
  32. package/dist/knowledge/util-translation.d.ts +3 -2
  33. package/dist/knowledge/util-translation.js +1 -1
  34. package/dist/knowledge/workflow-guidance.d.ts +64 -0
  35. package/dist/knowledge/workflow-guidance.js +1 -1
  36. package/dist/project/evaluation.js +1 -1
  37. package/dist/project/graph-builder.d.ts +2 -2
  38. package/dist/project/graph-builder.js +1 -1
  39. package/dist/project/semantic-assembler.d.ts +2 -2
  40. package/dist/project/semantic-assembler.js +1 -1
  41. package/dist/schema/evaluation/index.d.ts +1 -1
  42. package/dist/schema/evaluation/index.js +1 -1
  43. package/dist/schema/index.d.ts +2 -0
  44. package/dist/schema/index.js +1 -1
  45. package/dist/schema/operations.d.ts +251 -2
  46. package/dist/schema/operations.js +1 -1
  47. package/dist/schema/permission/index.d.ts +121 -0
  48. package/dist/schema/permission/index.js +1 -0
  49. package/dist/schema/query/index.d.ts +223 -22
  50. package/dist/schema/query/index.js +1 -1
  51. package/dist/schema/schema-version.js +1 -1
  52. package/dist/schema/workflow/index.d.ts +161 -0
  53. package/dist/schema/workflow/index.js +1 -0
  54. package/dist/schema-query-impl/index.js +1 -1
  55. package/dist/schemas/evaluation_operation.schema.json +2 -2
  56. package/dist/schemas/index.json +13 -1
  57. package/dist/schemas/onchain_table_data.output.json +821 -5
  58. package/dist/schemas/onchain_table_data.schema.json +154 -1
  59. package/dist/schemas/permission_operation.output.json +173 -0
  60. package/dist/schemas/permission_operation.schema.json +39 -0
  61. package/dist/schemas/query_toolkit.output.json +15 -15
  62. package/dist/schemas/workflow_operation.output.json +164 -0
  63. package/dist/schemas/workflow_operation.schema.json +116 -0
  64. package/dist/tools/handlers/config.js +1 -1
  65. package/dist/tools/handlers/evaluation.js +1 -1
  66. package/dist/tools/handlers/onchain.js +1 -1
  67. package/dist/tools/handlers/permission.d.ts +2 -0
  68. package/dist/tools/handlers/permission.js +1 -0
  69. package/dist/tools/handlers/query.js +1 -1
  70. package/dist/tools/handlers/workflow.d.ts +2 -0
  71. package/dist/tools/handlers/workflow.js +1 -0
  72. package/dist/tools/handlers/workspace.d.ts +2 -0
  73. package/dist/tools/handlers/workspace.js +1 -1
  74. package/dist/tools/index.js +1 -1
  75. package/dist/tools/shared.js +1 -1
  76. package/package.json +2 -2
@@ -277,7 +277,160 @@
277
277
  "address"
278
278
  ],
279
279
  "additionalProperties": false,
280
- "description": "Query community votes/endorsements for an entity from the global EntityLinker — shows how others have voted on this entity. Use to check reputation and community trust. Returns: TableItem_EntityLinker | undefined"
280
+ "description": "Query community votes/endorsements (likes/dislikes/favor) for an entity from the global EntityLinker — shows how others have voted on this entity. Use to check reputation and community trust. Returns: TableItem_EntityLinker | undefined"
281
+ },
282
+ {
283
+ "type": "object",
284
+ "properties": {
285
+ "query_type": {
286
+ "type": "string",
287
+ "const": "onchain_table_item_entity_contact"
288
+ },
289
+ "address": {
290
+ "anyOf": [
291
+ {
292
+ "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"
293
+ },
294
+ {
295
+ "type": "object",
296
+ "properties": {
297
+ "name_or_address": {
298
+ "type": "string",
299
+ "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)."
300
+ },
301
+ "local_mark_first": {
302
+ "description": "Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks",
303
+ "type": "boolean"
304
+ }
305
+ },
306
+ "additionalProperties": false,
307
+ "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."
308
+ }
309
+ ],
310
+ "description": "Entity address whose contact memberships to query. Supports string (name/address) or object form. LocalMark names are resolved automatically."
311
+ },
312
+ "no_cache": {
313
+ "description": "Set to true to bypass cache and fetch fresh on-chain data",
314
+ "type": "boolean"
315
+ },
316
+ "network": {
317
+ "type": "string",
318
+ "enum": [
319
+ "localnet",
320
+ "testnet",
321
+ "mainnet"
322
+ ],
323
+ "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."
324
+ }
325
+ },
326
+ "required": [
327
+ "query_type",
328
+ "address"
329
+ ],
330
+ "additionalProperties": false,
331
+ "description": "Query which customer-service Contacts an entity is a member of, from the global EntityContact reverse index (0xaa9). Use to check an address's Contact memberships. Returns: TableItem_EntityContact | undefined"
332
+ },
333
+ {
334
+ "type": "object",
335
+ "properties": {
336
+ "query_type": {
337
+ "type": "string",
338
+ "const": "onchain_table_item_object_linker_core"
339
+ },
340
+ "address": {
341
+ "anyOf": [
342
+ {
343
+ "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"
344
+ },
345
+ {
346
+ "type": "object",
347
+ "properties": {
348
+ "name_or_address": {
349
+ "type": "string",
350
+ "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)."
351
+ },
352
+ "local_mark_first": {
353
+ "description": "Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks",
354
+ "type": "boolean"
355
+ }
356
+ },
357
+ "additionalProperties": false,
358
+ "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."
359
+ }
360
+ ],
361
+ "description": "Target object address whose core-object bindings to query. Supports string (name/address) or object form. LocalMark names are resolved automatically."
362
+ },
363
+ "no_cache": {
364
+ "description": "Set to true to bypass cache and fetch fresh on-chain data",
365
+ "type": "boolean"
366
+ },
367
+ "network": {
368
+ "type": "string",
369
+ "enum": [
370
+ "localnet",
371
+ "testnet",
372
+ "mainnet"
373
+ ],
374
+ "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."
375
+ }
376
+ },
377
+ "required": [
378
+ "query_type",
379
+ "address"
380
+ ],
381
+ "additionalProperties": false,
382
+ "description": "Query which bounded core objects (Service/Machine/Treasury/Reward/Demand/Arbitration/Arb/Contact) bind to a target, from the ObjectLinkerCore reverse index (0xaae). Lossless fixed. Use for default reverse lookups. Returns: TableItem_ObjectLinkerCore | undefined"
383
+ },
384
+ {
385
+ "type": "object",
386
+ "properties": {
387
+ "query_type": {
388
+ "type": "string",
389
+ "const": "onchain_table_item_object_linker_tx"
390
+ },
391
+ "address": {
392
+ "anyOf": [
393
+ {
394
+ "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"
395
+ },
396
+ {
397
+ "type": "object",
398
+ "properties": {
399
+ "name_or_address": {
400
+ "type": "string",
401
+ "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)."
402
+ },
403
+ "local_mark_first": {
404
+ "description": "Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks",
405
+ "type": "boolean"
406
+ }
407
+ },
408
+ "additionalProperties": false,
409
+ "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."
410
+ }
411
+ ],
412
+ "description": "Target object address whose tx-object bindings to query. Supports string (name/address) or object form. LocalMark names are resolved automatically."
413
+ },
414
+ "no_cache": {
415
+ "description": "Set to true to bypass cache and fetch fresh on-chain data",
416
+ "type": "boolean"
417
+ },
418
+ "network": {
419
+ "type": "string",
420
+ "enum": [
421
+ "localnet",
422
+ "testnet",
423
+ "mainnet"
424
+ ],
425
+ "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."
426
+ }
427
+ },
428
+ "required": [
429
+ "query_type",
430
+ "address"
431
+ ],
432
+ "additionalProperties": false,
433
+ "description": "Query which operational objects (Order/Progress/Payment/Allocation/Guard/Permission) bind to a target, from the ObjectLinkerTx reverse index (0xaaf). Lossy FIFO (recent only). Use for order/progress/operational reverse lookups. Returns: TableItem_ObjectLinkerTx | undefined"
281
434
  },
282
435
  {
283
436
  "type": "object",
@@ -0,0 +1,173 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://wowok.net/schemas/permission_operation.output.json",
4
+ "title": "Permissions - Local-Account Overview",
5
+ "description": "permission_operation output envelope",
6
+ "type": "object",
7
+ "properties": {
8
+ "result": {
9
+ "type": "object",
10
+ "properties": {
11
+ "action": {
12
+ "type": "string",
13
+ "const": "list"
14
+ },
15
+ "permissions": {
16
+ "type": "array",
17
+ "items": {
18
+ "type": "object",
19
+ "properties": {
20
+ "permission": {
21
+ "type": "string",
22
+ "description": "Permission object address"
23
+ },
24
+ "description": {
25
+ "type": "string",
26
+ "description": "Permission description"
27
+ },
28
+ "owner": {
29
+ "type": "string",
30
+ "description": "Owner address"
31
+ },
32
+ "updated_timestamp_ms": {
33
+ "description": "Unix ms of the latest transaction touching this Permission (via previousTransaction)",
34
+ "type": "string"
35
+ },
36
+ "accounts": {
37
+ "type": "array",
38
+ "items": {
39
+ "type": "object",
40
+ "properties": {
41
+ "account": {
42
+ "type": "string",
43
+ "description": "Local account address"
44
+ },
45
+ "name": {
46
+ "description": "Local account name (if any)",
47
+ "type": "string"
48
+ },
49
+ "role": {
50
+ "type": "number",
51
+ "description": "Role bitmask: 1=owner, 2=admin, 4=entity"
52
+ },
53
+ "time": {
54
+ "type": "number",
55
+ "description": "Unix ms when the account's role in this permission was last modified (entity_permission clock)"
56
+ },
57
+ "is_owner": {
58
+ "type": "boolean",
59
+ "description": "Account holds the owner role"
60
+ },
61
+ "is_admin": {
62
+ "type": "boolean",
63
+ "description": "Account holds the admin role"
64
+ },
65
+ "is_entity": {
66
+ "type": "boolean",
67
+ "description": "Account holds the entity (member) role"
68
+ }
69
+ },
70
+ "required": [
71
+ "account",
72
+ "role",
73
+ "time",
74
+ "is_owner",
75
+ "is_admin",
76
+ "is_entity"
77
+ ],
78
+ "additionalProperties": false,
79
+ "description": "A local account and its role(s) in the permission"
80
+ },
81
+ "description": "LOCAL accounts related to this permission + their roles"
82
+ },
83
+ "related_accounts": {
84
+ "type": "object",
85
+ "properties": {
86
+ "owner": {
87
+ "type": "number",
88
+ "description": "Number of owner accounts (0 or 1)"
89
+ },
90
+ "admin": {
91
+ "type": "number",
92
+ "description": "Number of admin accounts"
93
+ },
94
+ "entity": {
95
+ "type": "number",
96
+ "description": "Number of entity (member) accounts"
97
+ }
98
+ },
99
+ "required": [
100
+ "owner",
101
+ "admin",
102
+ "entity"
103
+ ],
104
+ "additionalProperties": false,
105
+ "description": "Total related accounts by role"
106
+ },
107
+ "related_objects": {
108
+ "type": "array",
109
+ "items": {
110
+ "type": "object",
111
+ "properties": {
112
+ "type": {
113
+ "type": "string",
114
+ "description": "Object type name (from address first-byte tag)"
115
+ },
116
+ "count": {
117
+ "type": "number",
118
+ "description": "Number of objects of this type"
119
+ },
120
+ "objects": {
121
+ "type": "array",
122
+ "items": {
123
+ "type": "string"
124
+ },
125
+ "description": "Object addresses of this type"
126
+ }
127
+ },
128
+ "required": [
129
+ "type",
130
+ "count",
131
+ "objects"
132
+ ],
133
+ "additionalProperties": false,
134
+ "description": "A group of related objects of the same type"
135
+ },
136
+ "description": "Related objects grouped by type (via object linker core/tx)"
137
+ },
138
+ "related_object_count": {
139
+ "type": "number",
140
+ "description": "Total related object count"
141
+ }
142
+ },
143
+ "required": [
144
+ "permission",
145
+ "description",
146
+ "owner",
147
+ "accounts",
148
+ "related_accounts",
149
+ "related_objects",
150
+ "related_object_count"
151
+ ],
152
+ "additionalProperties": false,
153
+ "description": "A Permission object with metadata + related accounts + related objects"
154
+ },
155
+ "description": "Deduplicated permissions related to local accounts"
156
+ },
157
+ "note": {
158
+ "type": "string"
159
+ }
160
+ },
161
+ "required": [
162
+ "action",
163
+ "permissions"
164
+ ],
165
+ "additionalProperties": false,
166
+ "description": "permission_operation result"
167
+ }
168
+ },
169
+ "required": [
170
+ "result"
171
+ ],
172
+ "additionalProperties": false
173
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://wowok.net/schemas/permission_operation.json",
4
+ "title": "Permissions - Local-Account Overview",
5
+ "description": "permission_operation input. action='list' enumerates Permissions related to local accounts.",
6
+ "oneOf": [
7
+ {
8
+ "type": "object",
9
+ "properties": {
10
+ "action": {
11
+ "type": "string",
12
+ "const": "list"
13
+ },
14
+ "limit": {
15
+ "description": "Max number of permissions to return (default 100)",
16
+ "type": "integer",
17
+ "minimum": 1,
18
+ "maximum": 200
19
+ },
20
+ "network": {
21
+ "type": "string",
22
+ "enum": [
23
+ "localnet",
24
+ "testnet",
25
+ "mainnet"
26
+ ],
27
+ "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."
28
+ },
29
+ "no_cache": {
30
+ "type": "boolean"
31
+ }
32
+ },
33
+ "required": [
34
+ "action"
35
+ ],
36
+ "additionalProperties": false
37
+ }
38
+ ]
39
+ }
@@ -1110,9 +1110,9 @@
1110
1110
  "items": {
1111
1111
  "type": "object",
1112
1112
  "properties": {
1113
- "address": {
1113
+ "who": {
1114
1114
  "type": "string",
1115
- "description": "Account or object ID"
1115
+ "description": "Voter address"
1116
1116
  },
1117
1117
  "like": {
1118
1118
  "description": "Whether liked",
@@ -1122,8 +1122,8 @@
1122
1122
  "description": "Whether disliked",
1123
1123
  "type": "boolean"
1124
1124
  },
1125
- "affiliation": {
1126
- "description": "Whether affiliated",
1125
+ "favor": {
1126
+ "description": "Whether favorited (收藏)",
1127
1127
  "type": "boolean"
1128
1128
  },
1129
1129
  "time": {
@@ -1139,7 +1139,7 @@
1139
1139
  }
1140
1140
  },
1141
1141
  "required": [
1142
- "address",
1142
+ "who",
1143
1143
  "time"
1144
1144
  ],
1145
1145
  "additionalProperties": false,
@@ -10302,9 +10302,9 @@
10302
10302
  "items": {
10303
10303
  "type": "object",
10304
10304
  "properties": {
10305
- "address": {
10305
+ "who": {
10306
10306
  "type": "string",
10307
- "description": "Account or object ID"
10307
+ "description": "Voter address"
10308
10308
  },
10309
10309
  "like": {
10310
10310
  "description": "Whether liked",
@@ -10314,8 +10314,8 @@
10314
10314
  "description": "Whether disliked",
10315
10315
  "type": "boolean"
10316
10316
  },
10317
- "affiliation": {
10318
- "description": "Whether affiliated",
10317
+ "favor": {
10318
+ "description": "Whether favorited (收藏)",
10319
10319
  "type": "boolean"
10320
10320
  },
10321
10321
  "time": {
@@ -10331,7 +10331,7 @@
10331
10331
  }
10332
10332
  },
10333
10333
  "required": [
10334
- "address",
10334
+ "who",
10335
10335
  "time"
10336
10336
  ],
10337
10337
  "additionalProperties": false,
@@ -12949,9 +12949,9 @@
12949
12949
  "items": {
12950
12950
  "type": "object",
12951
12951
  "properties": {
12952
- "address": {
12952
+ "who": {
12953
12953
  "type": "string",
12954
- "description": "Account or object ID"
12954
+ "description": "Voter address"
12955
12955
  },
12956
12956
  "like": {
12957
12957
  "description": "Whether liked",
@@ -12961,8 +12961,8 @@
12961
12961
  "description": "Whether disliked",
12962
12962
  "type": "boolean"
12963
12963
  },
12964
- "affiliation": {
12965
- "description": "Whether affiliated",
12964
+ "favor": {
12965
+ "description": "Whether favorited (收藏)",
12966
12966
  "type": "boolean"
12967
12967
  },
12968
12968
  "time": {
@@ -12978,7 +12978,7 @@
12978
12978
  }
12979
12979
  },
12980
12980
  "required": [
12981
- "address",
12981
+ "who",
12982
12982
  "time"
12983
12983
  ],
12984
12984
  "additionalProperties": false,
@@ -0,0 +1,164 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://wowok.net/schemas/workflow_operation.output.json",
4
+ "title": "Workflow - Local-Account Progress Tasks",
5
+ "description": "workflow_operation output envelope",
6
+ "type": "object",
7
+ "properties": {
8
+ "result": {
9
+ "type": "object",
10
+ "properties": {
11
+ "action": {
12
+ "type": "string",
13
+ "enum": [
14
+ "list",
15
+ "operate"
16
+ ]
17
+ },
18
+ "tasks": {
19
+ "description": "Present for action='list'",
20
+ "type": "array",
21
+ "items": {
22
+ "type": "object",
23
+ "properties": {
24
+ "progress": {
25
+ "type": "string",
26
+ "description": "Progress object address"
27
+ },
28
+ "current": {
29
+ "type": "string",
30
+ "description": "Current node of the Progress ('' = initial)"
31
+ },
32
+ "machine": {
33
+ "type": "string",
34
+ "description": "Machine object address"
35
+ },
36
+ "task": {
37
+ "anyOf": [
38
+ {
39
+ "type": "string"
40
+ },
41
+ {
42
+ "type": "null"
43
+ }
44
+ ],
45
+ "description": "Bound task (Order) address, or null"
46
+ },
47
+ "service": {
48
+ "description": "Service address (resolved via the bound Order, if any)",
49
+ "type": "string"
50
+ },
51
+ "options": {
52
+ "type": "array",
53
+ "items": {
54
+ "type": "object",
55
+ "properties": {
56
+ "next_node": {
57
+ "type": "string",
58
+ "description": "Target node this forward advances INTO"
59
+ },
60
+ "forward": {
61
+ "type": "string",
62
+ "description": "Forward (operation) name"
63
+ },
64
+ "weight": {
65
+ "type": "number",
66
+ "description": "Forward weight contributed toward the pair threshold"
67
+ },
68
+ "threshold": {
69
+ "type": "number",
70
+ "description": "Pair threshold the forward contributes to"
71
+ },
72
+ "guard": {
73
+ "description": "Guard bound to this forward — must be verified (passport) before the transition",
74
+ "type": "string"
75
+ },
76
+ "operator_kind": {
77
+ "type": "string",
78
+ "enum": [
79
+ "order_holder",
80
+ "named_operator",
81
+ "permission_index"
82
+ ],
83
+ "description": "How this forward's operator is resolved"
84
+ },
85
+ "permission_index": {
86
+ "description": "Permission index when operator_kind is 'permission_index'",
87
+ "type": "number"
88
+ },
89
+ "named_operator": {
90
+ "description": "NamedOperator namespace when operator_kind is 'named_operator'",
91
+ "type": "string"
92
+ },
93
+ "executable_accounts": {
94
+ "type": "array",
95
+ "items": {
96
+ "type": "object",
97
+ "properties": {
98
+ "address": {
99
+ "type": "string",
100
+ "description": "Local account address"
101
+ },
102
+ "name": {
103
+ "description": "Local account name (if any)",
104
+ "type": "string"
105
+ }
106
+ },
107
+ "required": [
108
+ "address"
109
+ ],
110
+ "additionalProperties": false,
111
+ "description": "A local account that can execute a forward"
112
+ },
113
+ "description": "LOCAL accounts that can execute this forward (may be empty — then no local account is authorized)"
114
+ }
115
+ },
116
+ "required": [
117
+ "next_node",
118
+ "forward",
119
+ "weight",
120
+ "threshold",
121
+ "operator_kind",
122
+ "executable_accounts"
123
+ ],
124
+ "additionalProperties": false,
125
+ "description": "A reachable forward with its permission + guard + executable local accounts"
126
+ },
127
+ "description": "ALL reachable next-node forwards with permission + guard + executable accounts"
128
+ },
129
+ "terminal": {
130
+ "type": "boolean",
131
+ "description": "True when the current node has no outgoing forwards (workflow is stuck or finished)"
132
+ }
133
+ },
134
+ "required": [
135
+ "progress",
136
+ "current",
137
+ "machine",
138
+ "task",
139
+ "options",
140
+ "terminal"
141
+ ],
142
+ "additionalProperties": false,
143
+ "description": "An active progress object that at least one local account can act on"
144
+ }
145
+ },
146
+ "operate": {
147
+ "description": "Present for action='operate' (the underlying progress operation result)"
148
+ },
149
+ "note": {
150
+ "type": "string"
151
+ }
152
+ },
153
+ "required": [
154
+ "action"
155
+ ],
156
+ "additionalProperties": false,
157
+ "description": "workflow_operation result"
158
+ }
159
+ },
160
+ "required": [
161
+ "result"
162
+ ],
163
+ "additionalProperties": false
164
+ }