@wowok/skills 2.2.3 → 3.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.
@@ -314,10 +314,10 @@ clock > progress.current_time + 10000
314
314
 
315
315
  **Guard Table**:
316
316
 
317
- | identifier | b_submission | value_type | value | Purpose |
318
- |------------|-------------|-----------|-------|---------|
319
- | 0 | **true** | Address | (submitted at runtime) | Order ID submitted at runtime, converted to Progress via convert_witness |
320
- | 1 | false | U64 | 10000 | Time-lock duration in ms (10 seconds for testing) |
317
+ | identifier | b_submission | value_type | value | name | Purpose |
318
+ |------------|-------------|-----------|-------|------|---------|
319
+ | 0 | **true** | Address | (submitted at runtime) | Order ID (submitted at runtime) | Order ID submitted at runtime, converted to Progress via convert_witness |
320
+ | 1 | false | U64 | 10000 | lock_duration_ms | Time-lock duration in ms (10 seconds for testing) |
321
321
 
322
322
  > **Important**: `10000` ms (10 seconds) is for testing only. In production, set to a reasonable duration (e.g., 8 hours = 28800000 ms).
323
323
 
@@ -1107,7 +1107,78 @@ Fill in the `value` field with the Order ID (or Order name) and resubmit. The `s
1107
1107
  > - Replace `0xfb8bed2f...` with the actual `insurance_withdraw_guard_treasury_v1` address from your Phase 1 response.
1108
1108
  > - The `value` field accepts either an on-chain object ID or a named object reference (e.g., `"test_insurance_order_v1"`).
1109
1109
  > - The `sharing` configuration (`{"Entity": "insurance_treasury_v1"}` at 100% Rate) determines where funds flow. Funds go to the fixed Treasury address regardless of who calls the allocation — this is the safe Entity-sharing pattern that prevents fund theft.
1110
- > - After a successful withdrawal, the Allocation `balance` becomes `0` and a Payment object is created as an immutable record.
1110
+ > - After a successful withdrawal, the Allocation `balance` becomes `0`, a Payment object is created as an immutable record, and the recipient receives the funds as a **CoinWrapper** object (owned but NOT yet spendable). Complete Step 12 to unwrap it into spendable balance.
1111
+
1112
+ ---
1113
+
1114
+ ## Step 12: Receive Funds (Unwrap CoinWrapper — Single Action)
1115
+
1116
+ After `alloc_by_guard` distributes funds, each recipient receives a `CoinWrapper<T>` object — owned but not spendable. **The tool auto-unwraps in ONE action**: no need to query CoinWrapper IDs first, and no need to specify the coin type — received CoinWrappers are auto-enumerated and their inner token type (`CoinWrapper<T>`) is auto-derived on-chain.
1117
+
1118
+ Choose the variant matching the recipient (Treasury approach → 12.1; personal approach → 12.2).
1119
+
1120
+ ### 12.1 Treasury Recipient (Approach 1)
1121
+
1122
+ **Prompt**: Receive recently arrived funds into "insurance_treasury_v1".
1123
+
1124
+ ```json
1125
+ {
1126
+ "tool": "onchain_operations",
1127
+ "data": {
1128
+ "operation_type": "treasury",
1129
+ "data": {
1130
+ "object": "insurance_treasury_v1",
1131
+ "receive": "recently"
1132
+ },
1133
+ "env": {
1134
+ "account": "insurance_provider_v1",
1135
+ "network": "testnet"
1136
+ }
1137
+ }
1138
+ }
1139
+ ```
1140
+
1141
+ > **How it works**: `receive: "recently"` auto-queries every `CoinWrapper` received by the Treasury and deposits them into the Treasury balance in a single transaction. The Treasury's token type (`0x2::wow::WOW`) must match the CoinWrapper's inner type (validated automatically).
1142
+
1143
+ ### 12.2 Personal Recipient (Approach 2)
1144
+
1145
+ **Prompt**: Unwrap all CoinWrappers owned by "insurance_provider_v1" into spendable balance.
1146
+
1147
+ ```json
1148
+ {
1149
+ "tool": "onchain_operations",
1150
+ "data": {
1151
+ "operation_type": "payment",
1152
+ "data": {
1153
+ "receive": true
1154
+ },
1155
+ "env": {
1156
+ "account": "insurance_provider_v1",
1157
+ "network": "testnet"
1158
+ }
1159
+ }
1160
+ }
1161
+ ```
1162
+
1163
+ > **How it works (AUTO-RECEIVE)**: with `receive: true` and `object` omitted, the tool unwraps **every** CoinWrapper currently owned by the caller via `payment::unwrap_to_myself` in a single transaction, deleting the wrappers and transferring the underlying coins to the caller. The coin type is auto-derived from each wrapper's own on-chain type — `type_parameter` is only needed if auto-derivation fails.
1164
+ >
1165
+ > **Optional — unwrap a specific wrapper only**: pass `"object": "<coinwrapper_id_or_name>"` instead of omitting it.
1166
+
1167
+ ### Verify Funds Received
1168
+
1169
+ ```json
1170
+ {
1171
+ "tool": "query_toolkit",
1172
+ "data": {
1173
+ "query_type": "account_balance",
1174
+ "name_or_address": "insurance_treasury_v1",
1175
+ "network": "testnet",
1176
+ "no_cache": true
1177
+ }
1178
+ }
1179
+ ```
1180
+
1181
+ The Treasury (or personal) balance should now include the withdrawn `100000000` MIST (0.1 WOW). For the personal approach, query `"insurance_provider_v1"` instead.
1111
1182
 
1112
1183
  ---
1113
1184
 
@@ -1171,3 +1242,4 @@ Published Machine nodes are immutable (`MoveAbort code: 3`). Create a new Machin
1171
1242
  - [ ] Step 10.2: Advance progress Initial -> Start
1172
1243
  - [ ] Step 10.3: Advance progress Start -> Complete with submission (wait 10s after Step 10.2)
1173
1244
  - [ ] Step 11: Withdraw funds via Allocation (alloc_by_guard with Treasury or personal withdraw guard)
1245
+ - [ ] Step 12: Receive funds (Treasury: `receive: "recently"` / Personal: `payment {receive: true}`) and verify balance
@@ -426,6 +426,8 @@ Create a Contact object to enable encrypted communication between customers and
426
426
  }
427
427
  ```
428
428
 
429
+ > **Note**: Enabling messenger now registers the account on the messenger server **immediately and synchronously** — each account registers itself (its own identity, its own keys). The result includes `registered: true` on success, or `registered: false` with `registerError` if the server is unreachable (the background refresh retries automatically every 60s). If the operation result shows `registered: false`, retry the enable operation before proceeding — otherwise the counterpart's first message will fail with "Recipient not registered".
430
+
429
431
  #### 4.2 Create After-Sales Contact Object
430
432
 
431
433
  **Prompt**: Create a Contact object named "myshop_aftersales_contact_v2" with permission "myshop_permission_v2" for after-sales support.
@@ -1086,6 +1088,8 @@ After creating the order, the customer sends their shipping address and contact
1086
1088
  }
1087
1089
  ```
1088
1090
 
1091
+ > **Note**: Same as merchant enable (Step 4.1): registration on the messenger server happens synchronously with the enable. Each party must enable messenger **in its own environment with its own account** — one side can never register the other.
1092
+
1089
1093
  #### 2.1.2 Customer Sends Shipping Information
1090
1094
 
1091
1095
  **Prompt**: Customer "myshop_customer" sends shipping address and contact information to merchant "myshop_merchant" via encrypted messenger.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wowok/skills",
3
- "version": "2.2.3",
3
+ "version": "3.0.0",
4
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",
@@ -42,7 +42,7 @@ These four principles govern every arbitration build/handle step. They mirror th
42
42
 
43
43
  1. **Review-first**: State (a) what the AI understood about the arbitration, (b) the dependency order to build, and (c) the interaction contract — before the first choice.
44
44
  2. **User-driven**: Every step is an explicit user decision; the AI provides a `recommend` but never auto-advances.
45
- 3. **Reuse / Customize / Discover (三选一)**: For every component (Permission, Voting/Usage Guards, Contact), surface all three avenues — reuse an existing object, customize a new one, or discover from other projects / the system.
45
+ 3. **Reuse / Customize / Discover (choose one of three)**: For every component (Permission, Voting/Usage Guards, Contact), surface all three avenues — reuse an existing object, customize a new one, or discover from other projects / the system.
46
46
  4. **Default-config disclosure**: Disclose a new object's default config + important info + caveats BEFORE the user decides. No silent defaults.
47
47
 
48
48
  ---
@@ -53,7 +53,7 @@ These four principles govern EVERY round. They are non-negotiable and replace th
53
53
 
54
54
  1. **Review-first**: Before the first user choice, the AI MUST output a review that states (a) its understanding of the user's task, (b) the dependency-chain overview, and (c) the interaction contract. Only AFTER this review is the first choice presented.
55
55
  2. **User-driven**: Every round is driven by an explicit user decision. The AI provides a `recommend` option but NEVER auto-advances. The user may pause at any important round to ask questions.
56
- 3. **Reuse / Customize / Discover (三选一)**: For every component (Permission, Machine, Guard, Contact, Treasury, Arbitration, etc.), the AI MUST present three avenues — **reuse an existing object** (with its benefit), **customize a new object** (with its sub-task ability), or **discover an object** from other projects / the system. All three are mandatory to surface.
56
+ 3. **Reuse / Customize / Discover (choose one of three)**: For every component (Permission, Machine, Guard, Contact, Treasury, Arbitration, etc.), the AI MUST present three avenues — **reuse an existing object** (with its benefit), **customize a new object** (with its sub-task ability), or **discover an object** from other projects / the system. All three are mandatory to surface.
57
57
  4. **Default-config disclosure**: Before creating any new object, the AI MUST disclose the default configuration and important information (purpose, key settings, caveats), then let the user decide. No silent defaults.
58
58
 
59
59
  ---
@@ -230,8 +230,8 @@ Each round below lists: **Semantic meaning**, **Core elements to confirm**, **De
230
230
  - **Core elements to confirm**:
231
231
  - **Test account**: which account places the order — default is the **service-creation account**, but the user may choose another account to simulate a buyer.
232
232
  - **Advance path**: at each node, the user chooses which next node to advance to.
233
- - **Per-node disclosure (before each advance)**: the MCP injects `semantic.workflow_guidance` (on query_toolkit Progress results: `_workflow_guidance` / `_workflow_guidance_text`) listing **ALL** reachable next nodes with their operator (`namedOperator=""` → order holder / `permissionIndex` → role / named operator), forward, weight, guard, business meaning, and a K3-framed recommendation (gains/risks/consistency). Relay this full list to the user (who can act, with which permission/account), then let the user choose — **AI 推荐、人决策** (K3 P3).
234
- - **After each advance**: relay `semantic.workflow_receipt` — which account did what, whether the node migrated; if it did NOT migrate and threshold > 0, report threshold / accumulated weight / remaining / who must act next (K3 G4 阈值配合).
233
+ - **Per-node disclosure (before each advance)**: the MCP injects `semantic.workflow_guidance` (on query_toolkit Progress results: `_workflow_guidance` / `_workflow_guidance_text`) listing **ALL** reachable next nodes with their operator (`namedOperator=""` → order holder / `permissionIndex` → role / named operator), forward, weight, guard, business meaning, and a K3-framed recommendation (gains/risks/consistency). Relay this full list to the user (who can act, with which permission/account), then let the user choose — **AI recommends, human decides** (K3 P3).
234
+ - **After each advance**: relay `semantic.workflow_receipt` — which account did what, whether the node migrated; if it did NOT migrate and threshold > 0, report threshold / accumulated weight / remaining / who must act next (K3 G4 threshold coordination).
235
235
  - **Default config**: test account = service-creation account.
236
236
  - **Reuse / Customize / Discover**: n/a (verification).
237
237
  - **Dependencies**: Service published (R11) — `order_new` requires `bPublished=true`.
@@ -3,9 +3,9 @@ name: wowok-order
3
3
  description: |
4
4
  WoWok Buyer Guide — TWO lifecycles in one skill:
5
5
 
6
- 1. PROSPECT (潜在用户尽调, pre-purchase): E1-E11 due diligence + consensus
6
+ 1. PROSPECT (prospect due diligence, pre-purchase): E1-E11 due diligence + consensus
7
7
  building + trust-score synthesis, ending in a buy/no-buy decision.
8
- 2. CUSTOMER (已下单履约, post-order): order creation, progress advancement,
8
+ 2. CUSTOMER (in-order fulfillment, post-order): order creation, progress advancement,
9
9
  fund management, and arbitration.
10
10
 
11
11
  For suppliers presenting to Demands, see wowok-supplier. For process
@@ -32,8 +32,8 @@ when_to_use:
32
32
 
33
33
  | Lifecycle | Role | Phases | Ends with |
34
34
  |-----------|------|--------|-----------|
35
- | **Prospect** (潜在用户尽调) | You have NOT ordered yet | Phase 1 (E1-E11) + Phase 2 | buy / no-buy decision |
36
- | **Customer** (已下单履约) | You are the Order `builder` | Phase 3-6 + Fund Management | funds withdrawn / dispute resolved |
35
+ | **Prospect** (prospect due diligence) | You have NOT ordered yet | Phase 1 (E1-E11) + Phase 2 | buy / no-buy decision |
36
+ | **Customer** (in-order fulfillment) | You are the Order `builder` | Phase 3-6 + Fund Management | funds withdrawn / dispute resolved |
37
37
 
38
38
  The prospect lifecycle is served primarily by MCP `trust_score` (`depth: "preorder"`) and the plug-in `evaluation_operation` — this skill keeps the dialogue flow. The customer lifecycle is on-chain (Order/Progress/Allocation/Arb).
39
39
 
@@ -14,23 +14,55 @@ always: true
14
14
 
15
15
  # Address Display Rules
16
16
 
17
- ## Override Condition
17
+ ## Environment split (read first)
18
18
 
19
- If user explicitly requests full/long addresses (e.g., "show full addresses", "do not abbreviate"),
20
- this skill's shortening rules are DISABLED — display complete 66-character addresses.
19
+ Address rendering differs by environment — pick the correct mode:
21
20
 
22
- ## Client Rendering (authoritative)
21
+ | Environment | Default display | Full address |
22
+ |---|---|---|
23
+ | **WoWok client** (rich renderer available) | Full address — the client converts it into an address chip (name, DEFAULT badge, type icon, popup) | Always |
24
+ | **Other AI clients** (plain MCP clients, markdown only) | Name when resolved, otherwise SHORTID; DEFAULT marker on the default account | ONLY when the user explicitly asks |
25
+
26
+ Rules that hold in BOTH environments:
27
+ - **NEVER truncate with `…`** (e.g. `0x00f6…a5839` is FORBIDDEN). It is neither a valid full address nor a valid SHORTID — it cannot be resolved, copied, or acted on. The only compact form allowed is the SHORTID transform defined below.
28
+ - The full 66-character address is ALWAYS present in the tool results injected into your context — nothing is lost when you display a name/SHORTID; you can produce the full address on request.
29
+
30
+ ## Inside the WoWok client (rich rendering — authoritative)
31
+
32
+ The client renders EVERY complete `0x`-prefixed address in your reply
33
+ automatically as the canonical address chip — local name, DEFAULT badge,
34
+ first-byte object-type icon, and hover popup (Explorer / Analyze / AI / copy).
35
+
36
+ Therefore:
37
+ - Write the full address in prose OR in inline code — both become chips.
38
+ - Do NOT attach names, labels, short ids, or parentheses to an address (no `(default)`, no `Name 0x<full-address>`); the client resolves and renders name/type/DEFAULT state itself.
23
39
 
24
- Inside the WoWok client, AI replies render every `0x…` address AUTOMATICALLY as
25
- the canonical address pill — local name (if any), system short id, auto-resolved
26
- object-type icon, and hover actions (copy / message / AI / on-chain query).
27
- Therefore: **write full `0x`-prefixed addresses in replies**; the client does the
28
- display formatting. The text rules below apply only to plain-text contexts
29
- where the client renderer is unavailable (CLI, raw logs).
40
+ ## Other AI clients (generic MCP clients — plain markdown, no custom renderer)
30
41
 
31
- ## Short Address Format
42
+ External clients render standard markdown only (no popup, no chips). Default to
43
+ a CONCISE display — full 66-char addresses are noisy and are not shown unless
44
+ asked:
32
45
 
33
- **MUST APPLY TO ALL ADDRESSES AND OBJECT IDs** (0x prefix + up to 64 hex chars).
46
+ - **Named** (account name or local_mark resolved via `local_names` / tool
47
+ results): show the NAME ONLY, e.g. `alice_wallet`. Never append an id.
48
+ - **Unnamed**: show the SHORTID (format below), e.g. `10EF-A11`.
49
+ - **Default account** (the on-chain default account, which has an empty name):
50
+ mark it as `(default)`, e.g. `(default) 10EF-A11`.
51
+ - In tables: name or SHORTID in the cell; the full address is omitted by default.
52
+ - **Full address on request**: when the user explicitly asks to see full /
53
+ detailed / complete addresses ("show the full address", "give me the complete
54
+ address", "copyable address"), output the COMPLETE `0x` + 64 hex chars
55
+ wrapped in inline code so it is one-click copyable in any markdown client.
56
+ When a name is known, put name + full address together:
57
+ **alice_wallet** `0xFULLADDRESS`.
58
+
59
+ ## User override
60
+
61
+ - Other clients, "show full / long / complete addresses" → output the full inline-code address for that reply.
62
+ - Other clients, "use short / compact" → SHORTID (already the default for unnamed addresses).
63
+ - WoWok client: always full addresses regardless — the chip renderer handles display.
64
+
65
+ ## SHORTID format
34
66
 
35
67
  System-wide rule (identical to the client's `formatAddress`):
36
68
  1. Remove the `0x` prefix → hex string
@@ -40,28 +72,25 @@ System-wide rule (identical to the client's `formatAddress`):
40
72
  5. Empty / missing → `--`
41
73
 
42
74
  **Examples**:
43
- | Full Address | Short ID | Rule |
75
+ | Full Address | SHORTID | Rule |
44
76
  |---|---|---|
45
77
  | `0xa1d421902a3e5f2e4da7590e8f243712b3b3479d1a07c48c2de543184fc97a33` | `A1D4-A33` | first 4 + `-` + last 3 |
46
78
  | `0x10ef0000000000000000000000000000000000000000000000000000000cda11` | `10EF-A11` | first 4 + `-` + last 3 |
47
79
  | `0x2` | `2` | ≤7 chars, as-is |
48
80
 
49
- ## Resolution Priority & Display Format
81
+ ## Resolution priority
50
82
 
51
83
  **Query Tool**: `query_toolkit` with `query_type: "local_names"`
52
84
 
53
85
  Returns: `{ account?: string, local_mark?: string, address: string }`
54
86
 
55
- ### Display Format Rules (STRICT — mirrors the client's `displayLabelOf`)
56
-
57
- | Condition | Display Format | Example |
58
- |-----------|----------------|---------|
59
- | **Named** (account or local_mark resolved) | `{name}` only — NEVER append the short id | `alice_wallet` |
60
- | **Unnamed** | `{SHORTID}` | `10EF-A11` |
61
-
62
- - A named object shows ONLY its name — no parentheses, no short id after it.
63
- - When both an account name and a local_mark exist, prefer the local_mark
64
- (object names) for objects and the account name for user addresses.
87
+ - Named (account or local_mark resolved): display the name ONLY (WoWok client
88
+ renders the name chip itself; other clients show the name).
89
+ - Unnamed: WoWok client → full address (chip); other clients → SHORTID.
90
+ - The account with an empty name that is the on-chain default → other clients
91
+ tag it `(default)`; the WoWok client adds its DEFAULT badge automatically.
92
+ - When both an account name and a local_mark exist, prefer local_mark (object
93
+ names) for objects and the account name for user addresses.
65
94
 
66
95
  ---
67
96
 
@@ -107,11 +136,12 @@ Supported query types with `_money_display`:
107
136
  ```
108
137
  | # | Time | Sender | Service | Amount | Order |
109
138
  |---|------|--------|---------|--------|-------|
110
- | 1 | {time} | {name-or-SHORTID} | {name-or-SHORTID} | {amount} | SHORTID |
139
+ | 1 | {time} | {addr-cell} | {addr-cell} | {amount} | {addr-cell} |
111
140
  ```
112
141
 
113
- **Note**: `{name-or-SHORTID}` follows Display Format Rules above — name ONLY when
114
- resolved, otherwise the short id (no parentheses in either case).
142
+ **Address cells follow the environment split above**:
143
+ - WoWok client → the cell contains the full address (rendered as an address chip automatically).
144
+ - Other clients → the cell contains the resolved name or the SHORTID (default account tagged `(default)`); full addresses only when the user explicitly asked for them.
115
145
 
116
146
  ## Event Type Fields
117
147
 
@@ -134,7 +164,7 @@ When user asks about field meanings:
134
164
  - **Sender**: Account that initiated the transaction
135
165
  - **Service**: Service object being ordered/interacted with
136
166
  - **Order Object**: Unique on-chain identifier for this order
137
- - **Short Address**: System-wide shortened id for quick visual identification — first 4 + `-` + last 3 hex chars, uppercase (see Short Address Format rules)
167
+ - **Short Address (SHORTID)**: Compact display form (first 4 + `-` + last 3 hex chars, uppercase). Default for unnamed addresses in other AI clients; the WoWok client applies it automatically inside its address chips. Never hand-truncate with `…`.
138
168
 
139
169
  ## Amounts
140
170
  - **Raw**: Actual U64 integer stored on-chain
@@ -154,7 +184,10 @@ When user asks about field meanings:
154
184
  - [ ] Query `local_names` for resolution
155
185
  - [ ] Check for `_money_display` annotations in query results (primary amount source)
156
186
  - [ ] If `_money_display` absent, query `token_list` for manual amount formatting
157
- - [ ] Apply address format rules
187
+ - [ ] Address display: WoWok client → full `0x`+64 hex addresses (auto chips);
188
+ other clients → resolved name, or SHORTID for unnamed / `(default)` for the
189
+ default account; full inline-code address only when the user asks
190
+ - [ ] Never hand-truncate addresses with `…` — SHORTID is the only compact form
158
191
  - [ ] Apply amount format rules (use `_money_display` first; fallback to conservative)
159
192
  - [ ] Render final output
160
193
 
@@ -48,7 +48,7 @@ These four principles govern every service build/modify step. They mirror the wo
48
48
 
49
49
  1. **Review-first**: State (a) what the AI understood about the service, (b) the dependency order to build/modify, and (c) the interaction contract — before the first choice.
50
50
  2. **User-driven**: Every step is an explicit user decision; the AI provides a `recommend` but never auto-advances. The user may pause at any important step.
51
- 3. **Reuse / Customize / Discover (三选一)**: For every component (Permission, Machine, Guard, Treasury, Contact, Arbitration, etc.), surface all three avenues — reuse an existing object (benefit), customize a new one (sub-task ability), or discover from other projects / the system.
51
+ 3. **Reuse / Customize / Discover (choose one of three)**: For every component (Permission, Machine, Guard, Treasury, Contact, Arbitration, etc.), surface all three avenues — reuse an existing object (benefit), customize a new one (sub-task ability), or discover from other projects / the system.
52
52
  4. **Default-config disclosure**: Disclose a new object's default config + important info + caveats BEFORE the user decides. No silent defaults.
53
53
 
54
54
  ---
@@ -55,7 +55,7 @@ Your payment is a two-hop waterfall: main order escrow → allocation → your s
55
55
 
56
56
  1. **Review-first**: State (a) what the AI understood, (b) the decision order, and (c) the interaction contract — before the first choice.
57
57
  2. **User-driven**: Every step is an explicit user decision; the AI provides a `recommend` but never auto-advances.
58
- 3. **Reuse / Customize / Discover (三选一)**: For every component (service, passport, guard), surface reuse / customize / discover.
58
+ 3. **Reuse / Customize / Discover (choose one of three)**: For every component (service, passport, guard), surface reuse / customize / discover.
59
59
  4. **Default-config disclosure**: Disclose defaults + caveats BEFORE the user decides.
60
60
 
61
61
  ---