xno-skills 1.5.15 → 2.0.2
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 +21 -22
- package/dist/cjs/base32.js +2 -6
- package/dist/cjs/base32.js.map +1 -1
- package/dist/cjs/blake2b.js +8 -13
- package/dist/cjs/blake2b.js.map +1 -1
- package/dist/cjs/cli.js +494 -372
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/convert.js +5 -12
- package/dist/cjs/convert.js.map +1 -1
- package/dist/cjs/ed25519-blake2b.js +19 -24
- package/dist/cjs/ed25519-blake2b.js.map +1 -1
- package/dist/cjs/index.js +10 -37
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/mcp.d.ts.map +1 -1
- package/dist/cjs/mcp.js +398 -672
- package/dist/cjs/mcp.js.map +1 -1
- package/dist/cjs/nano-actions.d.ts +152 -0
- package/dist/cjs/nano-actions.d.ts.map +1 -0
- package/dist/cjs/nano-actions.js +383 -0
- package/dist/cjs/nano-actions.js.map +1 -0
- package/dist/cjs/nano-address.js +8 -12
- package/dist/cjs/nano-address.js.map +1 -1
- package/dist/cjs/ows.d.ts +24 -0
- package/dist/cjs/ows.d.ts.map +1 -0
- package/dist/cjs/ows.js +33 -0
- package/dist/cjs/ows.js.map +1 -0
- package/dist/cjs/pow.js +7 -12
- package/dist/cjs/pow.js.map +1 -1
- package/dist/cjs/qr.js +6 -13
- package/dist/cjs/qr.js.map +1 -1
- package/dist/cjs/rpc.js +14 -24
- package/dist/cjs/rpc.js.map +1 -1
- package/dist/cjs/state-block.js +16 -21
- package/dist/cjs/state-block.js.map +1 -1
- package/dist/cjs/state-store.d.ts +47 -0
- package/dist/cjs/state-store.d.ts.map +1 -0
- package/dist/cjs/state-store.js +78 -0
- package/dist/cjs/state-store.js.map +1 -0
- package/dist/cjs/validate.js +3 -6
- package/dist/cjs/validate.js.map +1 -1
- package/dist/cjs/version.d.ts +2 -2
- package/dist/cjs/version.d.ts.map +1 -1
- package/dist/cjs/version.js +3 -6
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/.xno-mcp/requests.json +6 -6
- package/dist/esm/cli.js +461 -304
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/mcp.d.ts.map +1 -1
- package/dist/esm/mcp.js +390 -658
- package/dist/esm/mcp.js.map +1 -1
- package/dist/esm/nano-actions.d.ts +152 -0
- package/dist/esm/nano-actions.d.ts.map +1 -0
- package/dist/esm/nano-actions.js +383 -0
- package/dist/esm/nano-actions.js.map +1 -0
- package/dist/esm/ows.d.ts +24 -0
- package/dist/esm/ows.d.ts.map +1 -0
- package/dist/esm/ows.js +33 -0
- package/dist/esm/ows.js.map +1 -0
- package/dist/esm/state-store.d.ts +47 -0
- package/dist/esm/state-store.d.ts.map +1 -0
- package/dist/esm/state-store.js +78 -0
- package/dist/esm/state-store.js.map +1 -0
- package/dist/esm/version.d.ts +2 -2
- package/dist/esm/version.d.ts.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/package.json +1 -1
- package/skills/nano-block-lattice-expert/SKILL.md +16 -14
- package/skills/nano-check-balance/SKILL.md +15 -13
- package/skills/nano-convert-units/SKILL.md +10 -8
- package/skills/nano-create-wallet/SKILL.md +19 -17
- package/skills/nano-generate-qr/SKILL.md +11 -9
- package/skills/nano-mcp-wallet/SKILL.md +38 -36
- package/skills/nano-request-payment/SKILL.md +12 -10
- package/skills/nano-return-funds/SKILL.md +13 -11
- package/skills/nano-sign-message/SKILL.md +11 -9
- package/skills/nano-validate-address/SKILL.md +10 -8
- package/skills/nano-verify-message/SKILL.md +10 -8
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
[](https://www.typescriptlang.org/)
|
|
6
6
|
|
|
7
|
-
A TypeScript library,
|
|
7
|
+
A TypeScript library, CLI, and MCP server for Nano (XNO) actions. Pairs with Open Wallet Standard (OWS) for secure key custody — send, receive, change representatives, convert units, validate addresses, sign/verify messages, and more.
|
|
8
8
|
|
|
9
9
|

|
|
10
10
|
|
|
@@ -16,7 +16,7 @@ This repository includes built-in skills for AI agents (Claude Code, Cursor, etc
|
|
|
16
16
|
npx skills add CasualSecurityInc/xno-skills
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
Available skills (
|
|
19
|
+
Available skills (v2.0.0+):
|
|
20
20
|
- `nano-check-balance`: Check balance/pending via Nano node RPC.
|
|
21
21
|
- `nano-convert-units`: High-precision unit conversion reference.
|
|
22
22
|
- `nano-create-wallet`: Wallet creation/import guidance (BIP39/Legacy support).
|
|
@@ -59,18 +59,25 @@ To use it, add the following to your MCP client configuration:
|
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
Exposed tools:
|
|
62
|
-
- `
|
|
63
|
-
- `
|
|
64
|
-
- `
|
|
62
|
+
- `wallets`: List OWS wallets and their Nano addresses.
|
|
63
|
+
- `address`: Get the Nano address for a wallet account index.
|
|
64
|
+
- `balance`: Check confirmed balance and pending for a wallet account.
|
|
65
|
+
- `pending`: List pending receivable blocks.
|
|
66
|
+
- `receive`: Receive pending blocks (handles open/first-receive automatically).
|
|
67
|
+
- `send`: Send XNO from a wallet account to a destination address.
|
|
68
|
+
- `change`: Change the representative for a wallet account.
|
|
69
|
+
- `submit_block`: Broadcast a pre-signed block hex (advanced/manual path).
|
|
70
|
+
- `history`: Persistent transaction log.
|
|
65
71
|
- `payment_request_create` / `payment_request_status` / `payment_request_receive` / `payment_request_list` / `payment_request_refund`: Full payment request lifecycle.
|
|
66
|
-
- `
|
|
67
|
-
- `config_get` / `config_set`: Manage server settings (RPC URL, representative, etc.).
|
|
72
|
+
- `config_get` / `config_set`: Manage server settings (RPC URL, representative, spending cap, etc.).
|
|
68
73
|
- `convert_units`: High-precision unit conversion.
|
|
69
74
|
- `validate_address`: Offline address validation.
|
|
70
75
|
- `rpc_account_balance`: Direct RPC balance check for any address.
|
|
71
76
|
- `generate_qr`: Generate ASCII QR codes.
|
|
72
77
|
- `sign_message` / `verify_message`: Sign and verify off-chain messages (NOMS).
|
|
73
78
|
|
|
79
|
+
> **Compatibility aliases** (kept for one release): `wallet_list`, `wallet_balance`, `wallet_receive`, `wallet_send`, `wallet_history` map to the canonical tools above.
|
|
80
|
+
|
|
74
81
|
## Installation
|
|
75
82
|
|
|
76
83
|
```bash
|
|
@@ -163,26 +170,18 @@ npm install -g xno-skills
|
|
|
163
170
|
npx xno-skills --help
|
|
164
171
|
```
|
|
165
172
|
|
|
166
|
-
### Wallet
|
|
173
|
+
### Wallet Discovery
|
|
167
174
|
|
|
168
|
-
|
|
175
|
+
Wallet lifecycle (create, import, rename, delete) is managed by [Open Wallet Standard (OWS)](https://github.com/open-wallet-standard/core). Use the `nano-create-wallet` skill or the OWS skill for that.
|
|
169
176
|
|
|
170
|
-
|
|
177
|
+
Once you have an OWS wallet, use these commands to interact with it on Nano:
|
|
171
178
|
|
|
172
179
|
```bash
|
|
173
|
-
#
|
|
174
|
-
xno-skills
|
|
175
|
-
|
|
176
|
-
# Choose legacy derivation (24-word “seed phrase” style)
|
|
177
|
-
xno-skills wallet create --format legacy
|
|
180
|
+
# List OWS wallets and their Nano addresses
|
|
181
|
+
xno-skills wallets
|
|
178
182
|
|
|
179
|
-
#
|
|
180
|
-
xno-skills wallet
|
|
181
|
-
xno-skills wallet create --passphrase "optional passphrase"
|
|
182
|
-
xno-skills wallet create --index 0
|
|
183
|
-
|
|
184
|
-
# JSON output
|
|
185
|
-
xno-skills wallet create --json
|
|
183
|
+
# Get the Nano address for a specific wallet and account index
|
|
184
|
+
xno-skills address --wallet my-wallet --index 0
|
|
186
185
|
```
|
|
187
186
|
|
|
188
187
|
#### Restore from mnemonic
|
package/dist/cjs/base32.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Nano Base32 Encoding/Decoding
|
|
4
3
|
*
|
|
@@ -8,9 +7,6 @@
|
|
|
8
7
|
* Character set: 13456789abcdefghijkmnopqrstuwxyz (32 characters)
|
|
9
8
|
* Note: 'x' IS included in the Nano charset (despite some docs saying otherwise)
|
|
10
9
|
*/
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.base32Encode = base32Encode;
|
|
13
|
-
exports.base32Decode = base32Decode;
|
|
14
10
|
const CHARSET = '13456789abcdefghijkmnopqrstuwxyz';
|
|
15
11
|
/**
|
|
16
12
|
* Lookup table for decoding: character -> value (0-31)
|
|
@@ -36,7 +32,7 @@ for (let i = 0; i < CHARSET.length; i++) {
|
|
|
36
32
|
* base32Encode(new Uint8Array([0xff])) // returns 'z'
|
|
37
33
|
* ```
|
|
38
34
|
*/
|
|
39
|
-
function base32Encode(bytes) {
|
|
35
|
+
export function base32Encode(bytes) {
|
|
40
36
|
if (bytes.length === 0) {
|
|
41
37
|
return '';
|
|
42
38
|
}
|
|
@@ -77,7 +73,7 @@ function base32Encode(bytes) {
|
|
|
77
73
|
* base32Decode('z') // returns Uint8Array([0xff])
|
|
78
74
|
* ```
|
|
79
75
|
*/
|
|
80
|
-
function base32Decode(str) {
|
|
76
|
+
export function base32Decode(str) {
|
|
81
77
|
if (str.length === 0) {
|
|
82
78
|
return new Uint8Array(0);
|
|
83
79
|
}
|
package/dist/cjs/base32.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base32.js","sourceRoot":"","sources":["../../src/base32.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base32.js","sourceRoot":"","sources":["../../src/base32.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/blake2b.js
CHANGED
|
@@ -1,33 +1,28 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.blake2b256 = blake2b256;
|
|
4
|
-
exports.blake2b512 = blake2b512;
|
|
5
|
-
exports.blake2b256Hex = blake2b256Hex;
|
|
6
1
|
// Blake2b hash functions using @noble/hashes
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
import { blake2b } from '@noble/hashes/blake2b.js';
|
|
3
|
+
import { bytesToHex } from '@noble/hashes/utils.js';
|
|
9
4
|
/**
|
|
10
5
|
* Compute BLAKE2b-256 hash (32 bytes / 256 bits)
|
|
11
6
|
* @param data - Input data as Uint8Array
|
|
12
7
|
* @returns 32-byte hash
|
|
13
8
|
*/
|
|
14
|
-
function blake2b256(data) {
|
|
15
|
-
return
|
|
9
|
+
export function blake2b256(data) {
|
|
10
|
+
return blake2b(data, { dkLen: 32 });
|
|
16
11
|
}
|
|
17
12
|
/**
|
|
18
13
|
* Compute BLAKE2b-512 hash (64 bytes / 512 bits)
|
|
19
14
|
* @param data - Input data as Uint8Array
|
|
20
15
|
* @returns 64-byte hash
|
|
21
16
|
*/
|
|
22
|
-
function blake2b512(data) {
|
|
23
|
-
return
|
|
17
|
+
export function blake2b512(data) {
|
|
18
|
+
return blake2b(data, { dkLen: 64 });
|
|
24
19
|
}
|
|
25
20
|
/**
|
|
26
21
|
* Compute BLAKE2b-256 hash and return as hex string
|
|
27
22
|
* @param data - Input data as Uint8Array
|
|
28
23
|
* @returns Hex-encoded 32-byte hash (64 hex characters)
|
|
29
24
|
*/
|
|
30
|
-
function blake2b256Hex(data) {
|
|
31
|
-
return
|
|
25
|
+
export function blake2b256Hex(data) {
|
|
26
|
+
return bytesToHex(blake2b256(data));
|
|
32
27
|
}
|
|
33
28
|
//# sourceMappingURL=blake2b.js.map
|
package/dist/cjs/blake2b.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blake2b.js","sourceRoot":"","sources":["../../src/blake2b.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blake2b.js","sourceRoot":"","sources":["../../src/blake2b.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC"}
|