@wowok/skills 1.3.4 → 2.0.0
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.
- package/README.md +18 -11
- package/dist/cli.js +20 -7
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/skills.d.ts +52 -5
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +104 -63
- package/dist/skills.js.map +1 -1
- package/examples/Insurance/Insurance.md +224 -197
- package/examples/MyShop/MyShop.md +133 -35
- package/examples/MyShop_Advanced/MyShop_Advanced.md +368 -300
- package/examples/ThreeBody_Signature/ThreeBody_Signature.md +272 -25
- package/examples/Travel/Travel.md +104 -17
- package/package.json +2 -6
- package/scripts/install.js +52 -6
- package/wowok-arbitrator/SKILL.md +1 -1
- package/wowok-machine/SKILL.md +2 -2
- package/wowok-messenger/SKILL.md +5 -3
- package/wowok-onboard/SKILL.md +7 -5
- package/wowok-order/SKILL.md +22 -7
- package/wowok-output/SKILL.md +4 -4
- package/wowok-planner/SKILL.md +2 -1
- package/wowok-provider/SKILL.md +12 -2
- package/wowok-guard/SKILL.md +0 -359
- package/wowok-safety/SKILL.md +0 -275
- package/wowok-scenario/SKILL.md +0 -371
- package/wowok-tools/SKILL.md +0 -389
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Iceland Travel Service Example
|
|
2
2
|
|
|
3
|
-
A complete example demonstrating how to create an Iceland travel service using WoWok protocol. This service integrates weather-dependent activities
|
|
3
|
+
A complete example demonstrating how to create an Iceland travel service using WoWok protocol. This service integrates weather-dependent activities and multi-node workflow management. (Note: "Buy Insurance" is just the name of the first workflow node in this example — there is no real insurance sub-order mechanism.)
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -320,13 +320,46 @@ Create a Permission object to manage access control for the travel service. Add
|
|
|
320
320
|
}
|
|
321
321
|
```
|
|
322
322
|
|
|
323
|
-
> **Note**: Permission indices 1000-1009 are used for different workflow forwards. Index 306 is
|
|
323
|
+
> **Note**: Permission indices 1000-1009 are used for different workflow forwards. Index 306 is the built-in `SERVICE_MACHINE` permission — it governs binding or changing a Service's Machine (`service::machine_set`), and is required in Step 5 when the Service binds `travel_machine`. The travel_provider account is granted all these permissions.
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Step 1.5: Create Arbitration Permission
|
|
328
|
+
|
|
329
|
+
Create a dedicated Permission object for the Arbitration. No special permission indices are needed — the creator (`travel_provider`) automatically becomes the admin of the new Permission.
|
|
330
|
+
|
|
331
|
+
> **Why a separate Permission?** When a Service binds an Arbitration, the contract asserts `arbitration.permission != service.permission` (error `E_ARBITRATION_PERMISSION_CONFLICT`). If the Arbitration shared the Service's permission, the Service owner would control dispute resolution, breaking fairness. The Arbitration must therefore use an independent Permission object.
|
|
332
|
+
|
|
333
|
+
**Prompt**: Create a Permission object named "travel_arbitration_permission" for the arbitration.
|
|
334
|
+
|
|
335
|
+
```json
|
|
336
|
+
{
|
|
337
|
+
"tool": "onchain_operations",
|
|
338
|
+
"data": {
|
|
339
|
+
"operation_type": "permission",
|
|
340
|
+
"data": {
|
|
341
|
+
"object": {
|
|
342
|
+
"name": "travel_arbitration_permission",
|
|
343
|
+
"tags": ["travel", "arbitration"],
|
|
344
|
+
"replaceExistName": true
|
|
345
|
+
},
|
|
346
|
+
"description": "Independent permission for travel arbitration (must differ from the Service permission)"
|
|
347
|
+
},
|
|
348
|
+
"env": {
|
|
349
|
+
"account": "travel_provider",
|
|
350
|
+
"network": "testnet",
|
|
351
|
+
"no_cache": true,
|
|
352
|
+
"confirmed": true
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
```
|
|
324
357
|
|
|
325
358
|
---
|
|
326
359
|
|
|
327
360
|
## Step 2: Create Arbitration Object
|
|
328
361
|
|
|
329
|
-
Create an Arbitration object for dispute resolution.
|
|
362
|
+
Create an Arbitration object for dispute resolution. It uses the independent `travel_arbitration_permission` created in Step 1.5.
|
|
330
363
|
|
|
331
364
|
**Prompt**: Create an Arbitration named "travel_arbitration".
|
|
332
365
|
|
|
@@ -338,7 +371,7 @@ Create an Arbitration object for dispute resolution.
|
|
|
338
371
|
"data": {
|
|
339
372
|
"object": {
|
|
340
373
|
"name": "travel_arbitration",
|
|
341
|
-
"permission": "
|
|
374
|
+
"permission": "travel_arbitration_permission",
|
|
342
375
|
"replaceExistName": true
|
|
343
376
|
},
|
|
344
377
|
"description": "Arbitration for Iceland travel service disputes"
|
|
@@ -1063,7 +1096,7 @@ Create a Machine to define the travel service workflow with all nodes and forwar
|
|
|
1063
1096
|
| Complete | Ice Scooting | complete_trip | 1002 | travel_complete_guard |
|
|
1064
1097
|
| Cancel | Ice Scooting | cancel_trip | 1003 | travel_cancel_guard |
|
|
1065
1098
|
|
|
1066
|
-
> **Note**: The `prev_node` field uses an empty string `""` to denote the entry point. Each node defines how to enter it from a previous node. The `threshold` field (
|
|
1099
|
+
> **Note**: The `prev_node` field uses an empty string `""` to denote the entry point. Each node defines how to enter it from a previous node. The `threshold` field (optional, defaults to `0`) specifies the minimum forward weight needed to trigger node advancement.
|
|
1067
1100
|
|
|
1068
1101
|
---
|
|
1069
1102
|
|
|
@@ -1114,7 +1147,6 @@ Configure the travel service (created unpublished in Step 2.5) with all bindings
|
|
|
1114
1147
|
"allocators": [
|
|
1115
1148
|
{
|
|
1116
1149
|
"guard": "merchant_victory_guard",
|
|
1117
|
-
"fix": "0",
|
|
1118
1150
|
"sharing": [
|
|
1119
1151
|
{
|
|
1120
1152
|
"who": {"Entity": {"name_or_address": "travel_treasury"}},
|
|
@@ -1125,7 +1157,6 @@ Configure the travel service (created unpublished in Step 2.5) with all bindings
|
|
|
1125
1157
|
},
|
|
1126
1158
|
{
|
|
1127
1159
|
"guard": "no_ice_scooting_guard",
|
|
1128
|
-
"fix": "0",
|
|
1129
1160
|
"sharing": [
|
|
1130
1161
|
{
|
|
1131
1162
|
"who": {"Entity": {"name_or_address": "travel_treasury"}},
|
|
@@ -1141,7 +1172,6 @@ Configure the travel service (created unpublished in Step 2.5) with all bindings
|
|
|
1141
1172
|
},
|
|
1142
1173
|
{
|
|
1143
1174
|
"guard": "no_spa_guard",
|
|
1144
|
-
"fix": "0",
|
|
1145
1175
|
"sharing": [
|
|
1146
1176
|
{
|
|
1147
1177
|
"who": {"Entity": {"name_or_address": "travel_treasury"}},
|
|
@@ -1281,7 +1311,8 @@ Move from initial node ("") to "Buy Insurance" node.
|
|
|
1281
1311
|
"operation": {
|
|
1282
1312
|
"next_node_name": "Buy Insurance",
|
|
1283
1313
|
"forward": "buy_insurance"
|
|
1284
|
-
}
|
|
1314
|
+
},
|
|
1315
|
+
"op": "next"
|
|
1285
1316
|
}
|
|
1286
1317
|
},
|
|
1287
1318
|
"env": {
|
|
@@ -1310,7 +1341,8 @@ Move from "Buy Insurance" to "SPA" node.
|
|
|
1310
1341
|
"operation": {
|
|
1311
1342
|
"next_node_name": "SPA",
|
|
1312
1343
|
"forward": "go_spa"
|
|
1313
|
-
}
|
|
1344
|
+
},
|
|
1345
|
+
"op": "next"
|
|
1314
1346
|
}
|
|
1315
1347
|
},
|
|
1316
1348
|
"env": {
|
|
@@ -1339,7 +1371,8 @@ Move from "SPA" to "Ice Scooting" node. This forward has a Guard (`weather_check
|
|
|
1339
1371
|
"operation": {
|
|
1340
1372
|
"next_node_name": "Ice Scooting",
|
|
1341
1373
|
"forward": "go_ice_scooting"
|
|
1342
|
-
}
|
|
1374
|
+
},
|
|
1375
|
+
"op": "next"
|
|
1343
1376
|
}
|
|
1344
1377
|
},
|
|
1345
1378
|
"submission": {
|
|
@@ -1395,7 +1428,8 @@ Move from "Ice Scooting" to "Complete" node. This forward has a Guard (`travel_c
|
|
|
1395
1428
|
"operation": {
|
|
1396
1429
|
"next_node_name": "Complete",
|
|
1397
1430
|
"forward": "complete_trip"
|
|
1398
|
-
}
|
|
1431
|
+
},
|
|
1432
|
+
"op": "next"
|
|
1399
1433
|
}
|
|
1400
1434
|
},
|
|
1401
1435
|
"submission": {
|
|
@@ -1430,7 +1464,7 @@ Move from "Ice Scooting" to "Complete" node. This forward has a Guard (`travel_c
|
|
|
1430
1464
|
}
|
|
1431
1465
|
```
|
|
1432
1466
|
|
|
1433
|
-
> **Note**: Replace `<ORDER_OBJECT_ID>` with the actual Order object ID (
|
|
1467
|
+
> **Note**: Replace `<ORDER_OBJECT_ID>` with the actual Order object ID (a 64-hex-character string starting with `0x`). You can query the Progress object to find the `task` field which contains the Order ID.
|
|
1434
1468
|
>
|
|
1435
1469
|
> **Key**: The `submission` field is at the **top level** of the input (alongside `data` and `env`), NOT inside `data`. The `impack: true` means the Guard verification result affects the final outcome.
|
|
1436
1470
|
|
|
@@ -1451,7 +1485,8 @@ Move from "Ice Scooting" to "Complete" node. This forward has a Guard (`travel_c
|
|
|
1451
1485
|
"operation": {
|
|
1452
1486
|
"next_node_name": "Cancel",
|
|
1453
1487
|
"forward": "cancel_trip"
|
|
1454
|
-
}
|
|
1488
|
+
},
|
|
1489
|
+
"op": "next"
|
|
1455
1490
|
}
|
|
1456
1491
|
},
|
|
1457
1492
|
"submission": {
|
|
@@ -1487,6 +1522,7 @@ Move from "Ice Scooting" to "Complete" node. This forward has a Guard (`travel_c
|
|
|
1487
1522
|
| `data.object` | string | Progress object name/ID |
|
|
1488
1523
|
| `data.operate.operation.next_node_name` | string | Target node name to move to |
|
|
1489
1524
|
| `data.operate.operation.forward` | string | Forward name defined in Machine |
|
|
1525
|
+
| `data.operate.op` | string | **Required.** Operation type: `"next"` (advance the forward), `"hold"`, `"unhold"`, or `"adminUnhold"` |
|
|
1490
1526
|
| `submission` | object | Guard verification data (top-level, required when forward has Guard) |
|
|
1491
1527
|
| `env.no_cache` | boolean | Set to `true` to avoid stale cache issues |
|
|
1492
1528
|
|
|
@@ -1524,7 +1560,7 @@ The allocation Guard requires the Order ID as a submission (identifier: 0). Quer
|
|
|
1524
1560
|
|
|
1525
1561
|
### 8.2 Execute Allocation (Merchant Victory Path)
|
|
1526
1562
|
|
|
1527
|
-
When the Progress is "Complete", the `merchant_victory_guard` passes, and 100% of funds go to the
|
|
1563
|
+
When the Progress is "Complete", the `merchant_victory_guard` passes, and 100% of funds go to the Treasury (`travel_treasury`).
|
|
1528
1564
|
|
|
1529
1565
|
**Prompt**: Execute fund allocation with the merchant_victory_guard, submitting the Order ID.
|
|
1530
1566
|
|
|
@@ -1577,7 +1613,7 @@ When the Progress is "Complete", the `merchant_victory_guard` passes, and 100% o
|
|
|
1577
1613
|
|
|
1578
1614
|
For refund scenarios (Cancel or SPA), use the corresponding Guard. The same submission structure applies — the Order ID is submitted to identifier 0.
|
|
1579
1615
|
|
|
1580
|
-
**Cancel/Ice Scooting path** (80%
|
|
1616
|
+
**Cancel/Ice Scooting path** (80% Treasury, 20% Order (escrow, claimable by the order owner)):
|
|
1581
1617
|
|
|
1582
1618
|
```json
|
|
1583
1619
|
{
|
|
@@ -1601,7 +1637,7 @@ For refund scenarios (Cancel or SPA), use the corresponding Guard. The same subm
|
|
|
1601
1637
|
}
|
|
1602
1638
|
```
|
|
1603
1639
|
|
|
1604
|
-
**SPA path** (5%
|
|
1640
|
+
**SPA path** (5% Treasury, 95% Order (escrow, claimable by the order owner)):
|
|
1605
1641
|
|
|
1606
1642
|
```json
|
|
1607
1643
|
{
|
|
@@ -1660,6 +1696,57 @@ After allocation, query the Allocation and Payment objects to verify the fund di
|
|
|
1660
1696
|
|
|
1661
1697
|
> **Important**: `alloc_by_guard` accepts Guard names (e.g., `"merchant_victory_guard"`) or Guard object IDs. The Guard must exist in the Allocation's `allocators` list. Only the first Guard that passes (first-Guard-wins) triggers fund distribution.
|
|
1662
1698
|
|
|
1699
|
+
### 8.5 Claim Allocated Funds (Unwrap CoinWrapper)
|
|
1700
|
+
|
|
1701
|
+
Allocation does not deposit spendable coins directly. `alloc_by_guard` distributes **CoinWrapper objects** to each recipient address — these must be claimed/unwrapped before the funds are spendable:
|
|
1702
|
+
|
|
1703
|
+
- **Treasury share** (`Entity` → `travel_treasury`): the CoinWrapper is sent to the Treasury object address. The travel provider deposits it into the Treasury balance via the Treasury `receive` operation.
|
|
1704
|
+
- **Customer share** (`GuardIdentifier: 0` → the Order object address submitted at runtime, i.e. escrow): the CoinWrapper is sent to the Order object address. The order owner (Alice) claims it via the Order `receive` operation, which unwraps it and transfers the coins to her wallet.
|
|
1705
|
+
|
|
1706
|
+
**Prompt**: Alice claims the customer share escrowed to the Order (refund paths only).
|
|
1707
|
+
|
|
1708
|
+
```json
|
|
1709
|
+
{
|
|
1710
|
+
"tool": "onchain_operations",
|
|
1711
|
+
"data": {
|
|
1712
|
+
"operation_type": "order",
|
|
1713
|
+
"data": {
|
|
1714
|
+
"object": "alice_travel_order",
|
|
1715
|
+
"receive": "recently"
|
|
1716
|
+
},
|
|
1717
|
+
"env": {
|
|
1718
|
+
"account": "alice",
|
|
1719
|
+
"network": "testnet",
|
|
1720
|
+
"no_cache": true,
|
|
1721
|
+
"confirmed": true
|
|
1722
|
+
}
|
|
1723
|
+
}
|
|
1724
|
+
}
|
|
1725
|
+
```
|
|
1726
|
+
|
|
1727
|
+
**Prompt**: The travel provider deposits the Treasury's share into the Treasury balance.
|
|
1728
|
+
|
|
1729
|
+
```json
|
|
1730
|
+
{
|
|
1731
|
+
"tool": "onchain_operations",
|
|
1732
|
+
"data": {
|
|
1733
|
+
"operation_type": "treasury",
|
|
1734
|
+
"data": {
|
|
1735
|
+
"object": "travel_treasury",
|
|
1736
|
+
"receive": "recently"
|
|
1737
|
+
},
|
|
1738
|
+
"env": {
|
|
1739
|
+
"account": "travel_provider",
|
|
1740
|
+
"network": "testnet",
|
|
1741
|
+
"no_cache": true,
|
|
1742
|
+
"confirmed": true
|
|
1743
|
+
}
|
|
1744
|
+
}
|
|
1745
|
+
}
|
|
1746
|
+
```
|
|
1747
|
+
|
|
1748
|
+
> **Note**: `"receive": "recently"` auto-queries and claims all recently received CoinWrapper objects. For the Order, `receive` unwraps them and transfers the coins to the order owner (Alice); for the Treasury, `receive` deposits the unwrapped coins into the Treasury's balance. In the merchant-victory path (100% to Treasury) only the Treasury claim is needed; the Order claim applies only to refund paths (8.3) where the customer has a share.
|
|
1749
|
+
|
|
1663
1750
|
---
|
|
1664
1751
|
|
|
1665
1752
|
## Best Practices
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wowok/skills",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "WoWok AI Skills for Claude and other AI assistants -
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "WoWok AI Skills for Claude and other AI assistants - Dialogue orchestration layer on top of the WoWok MCP server (rules/reference knowledge is served by MCP directly since v2.0.0)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"bin": {
|
|
@@ -11,15 +11,11 @@
|
|
|
11
11
|
"dist/",
|
|
12
12
|
"wowok-provider/",
|
|
13
13
|
"wowok-arbitrator/",
|
|
14
|
-
"wowok-guard/",
|
|
15
|
-
"wowok-tools/",
|
|
16
|
-
"wowok-safety/",
|
|
17
14
|
"wowok-machine/",
|
|
18
15
|
"wowok-order/",
|
|
19
16
|
"wowok-messenger/",
|
|
20
17
|
"wowok-output/",
|
|
21
18
|
"wowok-onboard/",
|
|
22
|
-
"wowok-scenario/",
|
|
23
19
|
"wowok-planner/",
|
|
24
20
|
"wowok-auditor/",
|
|
25
21
|
"examples/",
|
package/scripts/install.js
CHANGED
|
@@ -16,22 +16,47 @@ const path = require('path');
|
|
|
16
16
|
const os = require('os');
|
|
17
17
|
const { execSync } = require('child_process');
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Retained skills (post GLM5-31 sink refactor) — only these are installed.
|
|
21
|
+
* The 4 rule-reference skills (wowok-safety/tools/scenario/guard) were sunk
|
|
22
|
+
* into the MCP knowledge layer and are served by the MCP server directly:
|
|
23
|
+
* - wowok-safety → schema_query action='get_safety_rules'
|
|
24
|
+
* - wowok-tools → schema_query action='get_tool_reference'
|
|
25
|
+
* - wowok-scenario → project_operation recommend_industry / create_project
|
|
26
|
+
* - wowok-guard → schema_query action='get_guard_design_patterns'
|
|
27
|
+
*/
|
|
19
28
|
const SKILL_DIRS = [
|
|
20
29
|
'wowok-provider',
|
|
21
30
|
'wowok-arbitrator',
|
|
22
31
|
'wowok-order',
|
|
23
32
|
'wowok-messenger',
|
|
24
|
-
'wowok-guard',
|
|
25
33
|
'wowok-machine',
|
|
26
34
|
'wowok-output',
|
|
27
|
-
'wowok-tools',
|
|
28
|
-
'wowok-safety',
|
|
29
35
|
'wowok-onboard',
|
|
30
|
-
'wowok-scenario',
|
|
31
36
|
'wowok-planner',
|
|
32
37
|
'wowok-auditor',
|
|
33
38
|
];
|
|
34
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Deprecated skills removed in the GLM5-31 sink refactor. They are NEVER
|
|
42
|
+
* installed, but preuninstall/init still clean them up from legacy installs
|
|
43
|
+
* and warn the user where the content now lives.
|
|
44
|
+
*/
|
|
45
|
+
const LEGACY_SKILL_DIRS = [
|
|
46
|
+
'wowok-guard',
|
|
47
|
+
'wowok-tools',
|
|
48
|
+
'wowok-safety',
|
|
49
|
+
'wowok-scenario',
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
/** Where each deprecated skill's content now lives (migration message). */
|
|
53
|
+
const SKILL_MIGRATION_MAP = {
|
|
54
|
+
'wowok-safety': "MCP schema_query action='get_safety_rules'",
|
|
55
|
+
'wowok-tools': "MCP schema_query action='get_tool_reference'",
|
|
56
|
+
'wowok-scenario': "MCP project_operation action='recommend_industry' / 'create_project'",
|
|
57
|
+
'wowok-guard': "MCP schema_query action='get_guard_design_patterns'",
|
|
58
|
+
};
|
|
59
|
+
|
|
35
60
|
const CLIENT_DIRS = {
|
|
36
61
|
claude: path.join(os.homedir(), '.claude', 'skills'),
|
|
37
62
|
cursor: path.join(os.homedir(), '.cursor', 'rules'),
|
|
@@ -172,7 +197,9 @@ function installSkills(targetDir, target) {
|
|
|
172
197
|
function uninstallSkills(targetDir) {
|
|
173
198
|
let count = 0;
|
|
174
199
|
|
|
175
|
-
|
|
200
|
+
// Remove both retained and legacy (deprecated) skills — legacy dirs may
|
|
201
|
+
// still exist from pre-refactor installs and must be cleaned up.
|
|
202
|
+
for (const dir of [...SKILL_DIRS, ...LEGACY_SKILL_DIRS]) {
|
|
176
203
|
const dirPath = path.join(targetDir, dir);
|
|
177
204
|
if (fs.existsSync(dirPath)) {
|
|
178
205
|
removeDir(dirPath);
|
|
@@ -184,6 +211,23 @@ function uninstallSkills(targetDir) {
|
|
|
184
211
|
return count;
|
|
185
212
|
}
|
|
186
213
|
|
|
214
|
+
/**
|
|
215
|
+
* Detect deprecated skills still present in a target dir and print a
|
|
216
|
+
* migration hint (GLM5-31 §3.2). Returns the list of legacy dirs found.
|
|
217
|
+
*/
|
|
218
|
+
function warnLegacySkills(targetDir) {
|
|
219
|
+
const found = LEGACY_SKILL_DIRS.filter((dir) => fs.existsSync(path.join(targetDir, dir)));
|
|
220
|
+
if (found.length > 0) {
|
|
221
|
+
console.warn(`[wowok-skills] ⚠ MIGRATION: deprecated skills detected in ${targetDir}:`);
|
|
222
|
+
for (const dir of found) {
|
|
223
|
+
console.warn(`[wowok-skills] - ${dir} → content now served by ${SKILL_MIGRATION_MAP[dir]}`);
|
|
224
|
+
}
|
|
225
|
+
console.warn('[wowok-skills] These skills are stale (MCP knowledge layer is the source of truth).');
|
|
226
|
+
console.warn('[wowok-skills] Remove them with: wowok-skills uninit (or delete the folders above)');
|
|
227
|
+
}
|
|
228
|
+
return found;
|
|
229
|
+
}
|
|
230
|
+
|
|
187
231
|
function getTargets() {
|
|
188
232
|
const envTargets = process.env.WOWOK_SKILLS_TARGETS;
|
|
189
233
|
if (!envTargets) {
|
|
@@ -206,6 +250,8 @@ function main() {
|
|
|
206
250
|
console.log(`[wowok-skills] → ${dir}`);
|
|
207
251
|
const count = installSkills(dir, target);
|
|
208
252
|
total += count;
|
|
253
|
+
// GLM5-31 §3.2: warn about stale pre-refactor skills still present.
|
|
254
|
+
warnLegacySkills(dir);
|
|
209
255
|
}
|
|
210
256
|
|
|
211
257
|
console.log(`[wowok-skills] Done — ${total} skills installed across ${targets.length} client(s).`);
|
|
@@ -256,7 +302,7 @@ function main() {
|
|
|
256
302
|
|
|
257
303
|
function countExisting(targetDir) {
|
|
258
304
|
let count = 0;
|
|
259
|
-
for (const dir of SKILL_DIRS) {
|
|
305
|
+
for (const dir of [...SKILL_DIRS, ...LEGACY_SKILL_DIRS]) {
|
|
260
306
|
if (fs.existsSync(path.join(targetDir, dir))) {
|
|
261
307
|
count++;
|
|
262
308
|
}
|
|
@@ -30,7 +30,7 @@ The following content has been pushed down to the MCP knowledge layer and is app
|
|
|
30
30
|
|---------|---------------------|-------------|
|
|
31
31
|
| Guard design rules (structural layers, data source classification, voting_guard table design) | `knowledge/guard-design-patterns.ts` (`GUARD_DESIGN_PATTERNS`) | `project_operation.evaluate_project` (via `assessGuardRisks`) |
|
|
32
32
|
| Safety rules (confirmation levels, immutability, object reuse) | `knowledge/safety-rules.ts` (`CONFIRMATION_RULES`) | Pre-publish checks + `project_operation.evaluate_project` |
|
|
33
|
-
| Arbitration-specific risks | `knowledge/
|
|
33
|
+
| Arbitration-specific risks | `knowledge/arbitration-risk.ts` (`assessArbitrationRisks`) | `project_operation.evaluate_project` |
|
|
34
34
|
|
|
35
35
|
This Skill keeps the arbitration **conversation flow**, **evidence collection** scripts, and **dispute resolution** guidance — the MCP layer handles the rule evaluation.
|
|
36
36
|
|
package/wowok-machine/SKILL.md
CHANGED
|
@@ -234,7 +234,7 @@ All stem from the same root: **every on-chain object has a publish/create freeze
|
|
|
234
234
|
| `refunded` (terminal) | `refund_routing` (routing) → Allocator fires |
|
|
235
235
|
| N/A (dispute) | `arbiter_rule` (routing) → Arbitration off-Machine (no Allocator) |
|
|
236
236
|
|
|
237
|
-
|
|
237
|
+
A complete R-M1-11-compliant rental topology is auto-generated by `project_operation.create_project` with `project_industry='rental'` (MCP `knowledge/scenario-modes.ts`).
|
|
238
238
|
|
|
239
239
|
### Pre-Publish Validation Checklist
|
|
240
240
|
|
|
@@ -245,7 +245,7 @@ Before `publish: true`, verify:
|
|
|
245
245
|
- [ ] **Every node has outgoing Forwards** (except terminals): no dead-end nodes
|
|
246
246
|
- [ ] **Every node has incoming Pair** (except entry): no orphaned nodes
|
|
247
247
|
- [ ] **All thresholds independently achievable**: no dead branches (competing Pair always wins first)
|
|
248
|
-
- [ ] **⚠ R-M1-11 Compliance** (CRITICAL for deposit/refund scenarios): NO terminal nodes named `deposit_refunded`, `deposit_deducted`, `refunded`, or any name implying Machine-internal refund/deduction. Refund/deduction MUST flow through an **Allocator** triggered by a routing node (e.g., `return_approved`, `damage_confirmed`, `arbiter_rule`). Violating this causes funds to lock in the Machine with no Allocator path.
|
|
248
|
+
- [ ] **⚠ R-M1-11 Compliance** (CRITICAL for deposit/refund scenarios): NO terminal nodes named `deposit_refunded`, `deposit_deducted`, `refunded`, or any name implying Machine-internal refund/deduction. Refund/deduction MUST flow through an **Allocator** triggered by a routing node (e.g., `return_approved`, `damage_confirmed`, `arbiter_rule`). Violating this causes funds to lock in the Machine with no Allocator path. Auto-enforced by MCP pre-publish checks and `project_operation.evaluate_project`.
|
|
249
249
|
- [ ] All Guards exist on-chain and tested (use `gen_passport`)
|
|
250
250
|
- [ ] `namedOperator` vs `permissionIndex` correct per Forward
|
|
251
251
|
- [ ] Every Forward has at least one of `namedOperator` or `permissionIndex`
|
package/wowok-messenger/SKILL.md
CHANGED
|
@@ -25,8 +25,9 @@ always: false
|
|
|
25
25
|
End-to-end encrypted messaging with tamper-proof audit trails.
|
|
26
26
|
|
|
27
27
|
> **Role**: Any WoWok participant
|
|
28
|
-
> All
|
|
29
|
-
> **Related Skills**: [wowok-
|
|
28
|
+
> All 17 operations with full parameter types and constraints are in the MCP schema (`messenger_operation`). This document focuses on **design decisions and strategy** not captured by the schema.
|
|
29
|
+
> **Related Skills**: [wowok-arbitrator](../wowok-arbitrator/SKILL.md) (WTS evidence in disputes), [wowok-order](../wowok-order/SKILL.md) (customer perspective), [wowok-provider](../wowok-provider/SKILL.md) (service provider perspective)
|
|
30
|
+
> Guard design patterns and safety rules now live in the MCP knowledge layer — query via `schema_query` actions `get_guard_design_patterns` / `get_safety_rules`.
|
|
30
31
|
|
|
31
32
|
---
|
|
32
33
|
|
|
@@ -71,7 +72,7 @@ The on-chain **Contact** object (`operation_type: "contact"`) is the bridge betw
|
|
|
71
72
|
|
|
72
73
|
**When to create**: Before Service publish, when `customer_required` is set (Service.um must point to a Contact). Reuse an existing Contact if you serve multiple Services with the same support channel.
|
|
73
74
|
|
|
74
|
-
**Lifecycle**: Contact is mutable (unlike Proof/Guard). `im_add`/`im_remove` require permission index 453 (CONTACT_IM). No events emitted on IM mutations — poll `ims[]` field. If Contact is bound to `Permission.um` via `permission_um_set`, clear that binding BEFORE deleting the Contact (else dangling pointer). Full
|
|
75
|
+
**Lifecycle**: Contact is mutable (unlike Proof/Guard). `im_add`/`im_remove` require permission index 453 (CONTACT_IM). No events emitted on IM mutations — poll `ims[]` field. If Contact is bound to `Permission.um` via `permission_um_set`, clear that binding BEFORE deleting the Contact (else dangling pointer). Full field constraints: MCP `schema_query` action='get' name='contact'.
|
|
75
76
|
|
|
76
77
|
---
|
|
77
78
|
|
|
@@ -85,6 +86,7 @@ Two approaches, depending on need:
|
|
|
85
86
|
|
|
86
87
|
- **Quick glance** — `watch_conversations` with `unreadOnly: true` lists all conversations with unread messages, sorted by activity. Each conversation shows a preview of the last messages.
|
|
87
88
|
- **Deep dive** — `watch_messages` with a specific `peerAddress` to view the full conversation with a particular counterparty. Supports keyword search, time-range filtering, direction filter, and status filter.
|
|
89
|
+
- **Server sync** — `pull_messages` fetches the latest messages from the server into local storage (optional `limit` caps batch size). Use this first when the local view looks stale (e.g. after downtime or on a new device session), then read via `watch_conversations` / `watch_messages`.
|
|
88
90
|
|
|
89
91
|
**Design note**: By default, retrieving messages auto-marks them as viewed (`viewedAt` timestamp). Set `skipAutoMarkViewed: true` if you want to peek without marking read.
|
|
90
92
|
|
package/wowok-onboard/SKILL.md
CHANGED
|
@@ -78,6 +78,8 @@ The onboarding flow is backed by the MCP SQLite-based project pipeline. Each ste
|
|
|
78
78
|
| 3. Build Graph | After R8 | `build_graph` → object dependency graph from added objects | — |
|
|
79
79
|
| 4. Evaluate | After graph built | `evaluate_project` (evaluation_type='risk') → risk assessment | CRITICAL risks block R9 |
|
|
80
80
|
|
|
81
|
+
> **Async mode**: `build_graph` / `evaluate_project` accept `async_mode: true` for large projects — the call returns immediately with a `task_id`. Poll `query_task_status` with that `task_id` until `status: "completed"` before reading results / proceeding to the next step. Default is synchronous (`async_mode` omitted) — fine for the ≤10-object onboarding scale.
|
|
82
|
+
|
|
81
83
|
## R1-R10 Build Order
|
|
82
84
|
|
|
83
85
|
| Round | Object | MCP Operation | Key Decision |
|
|
@@ -104,13 +106,13 @@ When the user describes their business (R2), match to one of the supported indus
|
|
|
104
106
|
| `general` | `general` | Free-form / hybrid — no presets, full manual control |
|
|
105
107
|
| `retail` | `general` (retail profile) | Physical goods sales with stock + WIP product listings |
|
|
106
108
|
| `service` | `general` (service profile) | Intangible services (consulting, design) — milestone delivery |
|
|
107
|
-
| `rental` | `rental` | Equipment / vehicle / property rental with deposit escrow + return inspection (R-M1-11 compliant — uses `return_approved`/`damage_confirmed`/`arbiter_rule` routing nodes, NO `deposit_refunded`/`deposit_deducted`/`refunded` terminal nodes;
|
|
109
|
+
| `rental` | `rental` | Equipment / vehicle / property rental with deposit escrow + return inspection (R-M1-11 compliant — uses `return_approved`/`damage_confirmed`/`arbiter_rule` routing nodes, NO `deposit_refunded`/`deposit_deducted`/`refunded` terminal nodes; topology auto-applied by `project_operation.create_project` with `project_industry='rental'` from MCP `knowledge/scenario-modes.ts`) |
|
|
108
110
|
| `freelance` | `freelance` | Design / dev / consulting — milestone allocation + acceptance gate |
|
|
109
111
|
| `education` | `education` | Courses / training / tutoring — periodic release per session attendance |
|
|
110
112
|
| `travel` | `travel` | Custom tours / multi-segment trips — multi-tier allocation per segment |
|
|
111
113
|
| `subscription` | `subscription` | SaaS / content membership / periodic service — periodic charge + cancel guard |
|
|
112
114
|
|
|
113
|
-
> If unsure which fits,
|
|
115
|
+
> If unsure which fits, call `project_operation` action='recommend_industry' with the user's business description — it returns top-3 industry matches with reference examples. To iterate a mode mid-onboarding, use action='derive_user_mode' / 'evolve_user_mode' (user mode registry in MCP).
|
|
114
116
|
|
|
115
117
|
---
|
|
116
118
|
|
|
@@ -138,9 +140,9 @@ Before declaring onboarding complete, verify ALL items. Each is a hard gate —
|
|
|
138
140
|
| Error | Cause | Fix |
|
|
139
141
|
|-------|-------|-----|
|
|
140
142
|
| `dynamicFieldNotFound` | SDK cannot resolve a dynamic field reference | Set `env.account` (account not configured) — pass account in the tool call wrapper |
|
|
141
|
-
| `Circular dependency` (Guard ↔ Service creation) | Guard needs Service address; Service needs Guard address | Use **LocalMark NAME** (not address) in Guard query table —
|
|
143
|
+
| `Circular dependency` (Guard ↔ Service creation) | Guard needs Service address; Service needs Guard address | Use **LocalMark NAME** (not address) in Guard query table — pattern documented in MCP `schema_query` action='get_guard_design_patterns' |
|
|
142
144
|
| `order.balance invalid` | Used wrong field for order amount | Use `order.amount` (not `order.balance` — `balance` is residual escrow, `amount` is original payment) |
|
|
143
145
|
| Allocator `rate sum != 10000` | Rate-mode Allocator sharing percentages don't sum to 100% | Ensure all `sharing[].sharing` values in Rate mode sum to exactly **10000** basis points (e.g., 80% = 8000) |
|
|
144
|
-
| `IMPACK_GUARD_NOT_FOUND` (gen_passport) | Repository query with `quote_guard = Some(addr)` | `impack_list` is empty during verify phase — only `quote_guard = None` passes; see
|
|
146
|
+
| `IMPACK_GUARD_NOT_FOUND` (gen_passport) | Repository query with `quote_guard = Some(addr)` | `impack_list` is empty during verify phase — only `quote_guard = None` passes; see MCP `schema_query` action='get_guard_design_patterns' |
|
|
145
147
|
| `Permission denied` (Progress advance, abort code 5) | Wrong operation path for forward's `namedOperator` | Empty `namedOperator` → use `order.progress`; non-empty → use `progress.operate`; `permissionIndex` → use `progress.operate` |
|
|
146
|
-
| Allocator never fires (refund stuck) — R-M1-11 violation | Machine has a node like `deposit_refunded` instead of routing node `return_approved`; or Allocator's `trigger_node` is missing/mispelled | Rename node to `return_approved` / `damage_confirmed`; bind Allocator to that node;
|
|
148
|
+
| Allocator never fires (refund stuck) — R-M1-11 violation | Machine has a node like `deposit_refunded` instead of routing node `return_approved`; or Allocator's `trigger_node` is missing/mispelled | Rename node to `return_approved` / `damage_confirmed`; bind Allocator to that node; R-M1-11 is auto-enforced by MCP pre-publish checks and `project_operation.evaluate_project` |
|
package/wowok-order/SKILL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: wowok-order
|
|
3
3
|
description: |
|
|
4
4
|
WoWok Customer Guide — complete buyer order lifecycle: pre-purchase due diligence
|
|
5
|
-
(E1-
|
|
5
|
+
(E1-E11), consensus building, order creation, progress advancement, and arbitration.
|
|
6
6
|
when_to_use:
|
|
7
7
|
- User is a customer/buyer placing or managing orders
|
|
8
8
|
- User wants to evaluate services before purchasing
|
|
@@ -15,7 +15,8 @@ when_to_use:
|
|
|
15
15
|
# WoWok Customer Guide
|
|
16
16
|
|
|
17
17
|
> **Role**: Customer (Buyer/Order Holder)
|
|
18
|
-
> **Provider Guide**: [wowok-provider](../wowok-provider/SKILL.md) | **Arbitration Guide**: [wowok-arbitrator](../wowok-arbitrator/SKILL.md) | **
|
|
18
|
+
> **Provider Guide**: [wowok-provider](../wowok-provider/SKILL.md) | **Arbitration Guide**: [wowok-arbitrator](../wowok-arbitrator/SKILL.md) | **Machine**: [wowok-machine](../wowok-machine/SKILL.md) | **Messenger**: [wowok-messenger](../wowok-messenger/SKILL.md)
|
|
19
|
+
> Guard design patterns, safety rules, and tool references now live in the MCP knowledge layer — query via `schema_query` actions `get_guard_design_patterns`, `get_safety_rules`, `get_tool_reference`.
|
|
19
20
|
|
|
20
21
|
---
|
|
21
22
|
|
|
@@ -41,7 +42,7 @@ Allocation evaluates when Progress reaches **any** configured node (not just exi
|
|
|
41
42
|
|
|
42
43
|
## Phase 1: Pre-Purchase Due Diligence (MANDATORY GATE)
|
|
43
44
|
|
|
44
|
-
> **⛔ Complete E1-
|
|
45
|
+
> **⛔ Complete E1-E11 in order. User must explicitly confirm every item.**
|
|
45
46
|
> **⚠️ = explain risk, wait for decision. 🔴 = strongly advise against purchase.**
|
|
46
47
|
|
|
47
48
|
---
|
|
@@ -62,7 +63,7 @@ From E1 `sales[]`. Skip `suspension === true` items.
|
|
|
62
63
|
|
|
63
64
|
**WIP Verification** (mandatory when `wip_hash` non-empty):
|
|
64
65
|
|
|
65
|
-
Use `wip_file` → `
|
|
66
|
+
Use `wip_file` → `type: "verify"`, `wipFilePath: "<wip_url>"`, `hash_equal: "<wip_hash>"`.
|
|
66
67
|
|
|
67
68
|
- `wip_hash` empty → no on-chain commitment (auto-verified, weaker evidence)
|
|
68
69
|
- Verification fails → 🔴 **WIP tampered after publish**
|
|
@@ -112,7 +113,7 @@ Use `wip_file` → `op: "verify"`, `wipFilePath: "<wip_url>"`, `hash_equal: "<wi
|
|
|
112
113
|
|
|
113
114
|
### E4 — Guards Analysis
|
|
114
115
|
|
|
115
|
-
Guard structure and instruction reference:
|
|
116
|
+
Guard structure and instruction reference: MCP `schema_query` action='get_guard_design_patterns' (design patterns) and action='get_guard_templates' (ready-made templates).
|
|
116
117
|
|
|
117
118
|
**Step 1**: Collect unique Guard IDs from E3 Machine JSON (`forward.guard.guard`), E1 `order_allocators`, E1 `buy_guard`. Deduplicate.
|
|
118
119
|
|
|
@@ -200,9 +201,23 @@ For matched: present value, ask "correct?" and "OK to send?". For missing: ask u
|
|
|
200
201
|
|
|
201
202
|
---
|
|
202
203
|
|
|
204
|
+
### E11 — Trust Score Synthesis (Preorder Advice)
|
|
205
|
+
|
|
206
|
+
Aggregate E1–E10 into a decision-grade assessment via `trust_score`:
|
|
207
|
+
|
|
208
|
+
`wowok({ tool: "trust_score", data: { service: "<service_id>", depth: "preorder", order_amount: "<planned_amount>" } })`
|
|
209
|
+
|
|
210
|
+
- Returns trust score + per-dimension risks + preorder advice (order confidence, game strategies, preference match, industry risks, `blocking_reminders`); non-empty `blocking_reminders` → ⛔ resolve with user BEFORE Phase 2.
|
|
211
|
+
- Comparing multiple candidates → add `compare_with: ["<id2>", ...]` (1–9, same `depth: "preorder"`): output gains a `comparison` block with per-metric bests — **NO overall ranking**; present trade-offs, the buyer decides.
|
|
212
|
+
- Optional `preferences` / `user_metrics` reflect the buyer's own priorities.
|
|
213
|
+
|
|
214
|
+
> Fast pre-screen: at E1 you may call `depth: "evaluate"` (default) for a quick score; 🔴 `risk_score` (<50) → advise early abort, skip E2–E10.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
203
218
|
### Pre-Purchase GATE
|
|
204
219
|
|
|
205
|
-
**Abort conditions**: E1 `bPublished=false`/`bPaused=true` → ABORT; E8 `um=null` → ABORT; E3 no-refund + E6 no-arb → strongly advise ABORT; E4 ambiguous Guards → user MUST manually review.
|
|
220
|
+
**Abort conditions**: E1 `bPublished=false`/`bPaused=true` → ABORT; E8 `um=null` → ABORT; E3 no-refund + E6 no-arb → strongly advise ABORT; E4 ambiguous Guards → user MUST manually review; E11 `blocking_reminders` → resolve with user BEFORE proceeding.
|
|
206
221
|
|
|
207
222
|
**Any ⚠️** → explain risk, wait for user decision. **All OK** → Phase 2.
|
|
208
223
|
|
|
@@ -369,7 +384,7 @@ For precise control, pass an explicit array of `{id, type}` objects, or pass the
|
|
|
369
384
|
|
|
370
385
|
### Phase Dependency
|
|
371
386
|
|
|
372
|
-
E1 (Service) → E2 (Products/WIP), E8 (Contact), E10 (Privacy), E7 (Compensation), E6 (Arbitrations) run in parallel after E1. E3 (Machine) → E4 (Guards) → E5 (Allocators) is a strict chain. E9 (Reputation) follows E3.
|
|
387
|
+
E1 (Service) → E2 (Products/WIP), E8 (Contact), E10 (Privacy), E7 (Compensation), E6 (Arbitrations) run in parallel after E1. E3 (Machine) → E4 (Guards) → E5 (Allocators) is a strict chain. E9 (Reputation) follows E3. E11 (Trust Score) runs LAST — it aggregates all prior findings.
|
|
373
388
|
|
|
374
389
|
### ⚠️ Critical Attention Items
|
|
375
390
|
|
package/wowok-output/SKILL.md
CHANGED
|
@@ -134,11 +134,11 @@ When user asks about field meanings:
|
|
|
134
134
|
|
|
135
135
|
# Related Skills
|
|
136
136
|
|
|
137
|
-
| Skill | Purpose |
|
|
137
|
+
| Skill / MCP Knowledge | Purpose |
|
|
138
138
|
|-------|---------|
|
|
139
|
-
|
|
|
140
|
-
|
|
|
141
|
-
|
|
|
139
|
+
| MCP `schema_query` action='get_safety_rules' | Pre-operation safety checks (sunk from wowok-safety) |
|
|
140
|
+
| MCP `schema_query` action='get_guard_design_patterns' | Guard design & validation (sunk from wowok-guard) |
|
|
141
|
+
| MCP `schema_query` action='get_tool_reference' | Tool selection patterns (sunk from wowok-tools) |
|
|
142
142
|
| [wowok-order](../wowok-order/SKILL.md) | Order lifecycle (buyer) |
|
|
143
143
|
| [wowok-provider](../wowok-provider/SKILL.md) | Service management (merchant) |
|
|
144
144
|
| [wowok-arbitrator](../wowok-arbitrator/SKILL.md) | Dispute resolution |
|
package/wowok-planner/SKILL.md
CHANGED
|
@@ -26,7 +26,8 @@ when_to_use:
|
|
|
26
26
|
Converts natural-language intent into an executable Object Dependency Graph (ODG) and phased execution plan. Deterministic-first: rules and scenario templates decide the shape; the LLM only clarifies ambiguity and translates free text into typed fields.
|
|
27
27
|
|
|
28
28
|
> **Layer**: L3 Skill, primary planner for L4 Harness Plan Loop
|
|
29
|
-
> **Related Skills**: [wowok-onboard](../wowok-onboard/SKILL.md) (guided execution), [wowok-
|
|
29
|
+
> **Related Skills**: [wowok-onboard](../wowok-onboard/SKILL.md) (guided execution), [wowok-machine](../wowok-machine/SKILL.md) (workflow design), [wowok-provider](../wowok-provider/SKILL.md) (post-plan operations)
|
|
30
|
+
> Industry modes, Guard design patterns, safety rules, and tool references now live in the MCP knowledge layer — query via `project_operation` (`recommend_industry` / `list_modes`) and `schema_query` (`get_guard_design_patterns` / `get_safety_rules` / `get_tool_reference`).
|
|
30
31
|
|
|
31
32
|
---
|
|
32
33
|
|
package/wowok-provider/SKILL.md
CHANGED
|
@@ -244,7 +244,7 @@ Order (per purchase, runtime-created)
|
|
|
244
244
|
└── allocation → Allocation (optional, created at runtime; triggered via Progress.forward)
|
|
245
245
|
|
|
246
246
|
Cross-object references:
|
|
247
|
-
- Guard is referenced by 9 object types via diverse nested paths (
|
|
247
|
+
- Guard is referenced by 9 object types via diverse nested paths (full schema via MCP `schema_query` action='get_guard_design_patterns'):
|
|
248
248
|
- Service.buy_guard (top-level Option<address>)
|
|
249
249
|
- Machine.forward.guard (per-node dynamic table; SDK does not expose — requires query_table)
|
|
250
250
|
- Allocation.allocators[].guard (array element — graph-builder edge fieldName: allocator_guard)
|
|
@@ -314,7 +314,7 @@ Required submission: Order ID (matching the Guard's b_submission identifier)
|
|
|
314
314
|
Immutable product commitment for arbitration evidence.
|
|
315
315
|
|
|
316
316
|
```
|
|
317
|
-
Create: wowok({ tool: "wip_file", data: {
|
|
317
|
+
Create: wowok({ tool: "wip_file", data: { type: "generate", ... } }) → markdown_text + images → outputPath
|
|
318
318
|
Attach: wowok({ tool: "onchain_operations", data: { operation_type: "service", ... } }) → sales.sales[{
|
|
319
319
|
name, price, stock, wip: "<URL>", wip_hash: "" (auto)
|
|
320
320
|
}]
|
|
@@ -325,6 +325,16 @@ Attach: wowok({ tool: "onchain_operations", data: { operation_type: "service", .
|
|
|
325
325
|
- Add: `compensation_fund_add` | Lock: `setting_lock_duration_add` (default 30 days = 2592000000ms, configurable via `setting_lock_duration_add`)
|
|
326
326
|
- **Withdraw**: Pause Service → Wait lock duration → `compensation_fund_receive`
|
|
327
327
|
|
|
328
|
+
### Payment Tokens & Stablecoin Bridging (Mainnet Only)
|
|
329
|
+
|
|
330
|
+
WOW is the default settlement token. For stablecoin-denominated revenue (fiat-pegged pricing, large cross-period escrow), mainnet funds move via `bridge_operation`:
|
|
331
|
+
|
|
332
|
+
- `query_supported_tokens` / `query_supported_evm_chains` — discover supported Bridge tokens (ETH/WETH/WBTC/USDC/USDT) and chains
|
|
333
|
+
- `cross_chain_wow_to_evm` / `cross_chain_evm_to_wow` — WOW↔EVM transfer (mainnet env required; assets route through the auto-managed activeEvmAccount)
|
|
334
|
+
- `query_transfer_status` / `query_transfer_list` — track transfers; `manage_evm_rpc` — handle EVM RPC rate limits (429)
|
|
335
|
+
|
|
336
|
+
> Supported token addresses per network: `wowok_buildin_info` → 'mainnet bridge tokens'. Bridge is mainnet-only — testnet has no cross-chain path.
|
|
337
|
+
|
|
328
338
|
---
|
|
329
339
|
|
|
330
340
|
## Project Iteration: Fork vs In-Place
|