@attocash/cli 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +225 -184
  2. package/dist/cli/main.js +0 -0
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,183 +1,121 @@
1
1
  # Atto CLI
2
2
 
3
- `@attocash/cli` provides the `atto` terminal wallet and the shared wallet engine
4
- used by [`@attocash/mcp`](https://github.com/attocash/integrations/tree/main/atto-mcp).
5
- Protocol signing and publication use [Atto Commons](https://github.com/attocash/commons).
6
- The CLI and MCP use the same password-store entry, public state, and spending
7
- budgets when run with the same data directory.
3
+ **An Atto wallet for your terminal.**
4
+
5
+ **Beta** · [Install from npm](https://www.npmjs.com/package/@attocash/cli)
6
+
7
+ Create a wallet, name your addresses, and send payments from the command line.
8
+ Check what arrived, follow activity live, or use JSON output in your own scripts.
9
+ Available as an initial beta for macOS, Linux, and Windows.
10
+
11
+ [Install](#install) · [Set up a wallet](#set-up-the-wallet) ·
12
+ [Everyday examples](#everyday-examples) · [Command reference](#use-the-cli) ·
13
+ [Recovery](#profiles-and-recovery)
14
+
15
+ - **Readable destinations.** Send to personal names such as “Savings”.
16
+ - **Live activity.** Watch incoming payments and keep automatic receiving running.
17
+ - **Scriptable results.** Use `--json` for structured output and durable request IDs for retries.
18
+ - **An optional agent companion.** Connect [Atto MCP](https://www.npmjs.com/package/@attocash/mcp)
19
+ to a separate wallet or share this one with approved spending limits.
8
20
 
9
21
  ## Install
10
22
 
11
- Requires **Node.js 24.15 or newer**. From the repository root:
23
+ Requires **Node.js 24**. Use the latest 24.x release. Install from npm:
12
24
 
13
25
  ```sh
14
- npm ci
15
- npm run pack
16
- npm install --global ./attocash-cli-0.1.0.tgz
26
+ npm install --global @attocash/cli
17
27
  atto --help
18
28
  ```
19
29
 
20
- The CLI can be installed on its own. To install MCP as well before these package
21
- versions are published, install both local artifacts in one command:
30
+ Omitting a package version installs the latest compatible release. You can
31
+ also run commands without a global installation; `@latest` explicitly selects
32
+ the current published release:
22
33
 
23
34
  ```sh
24
- npm install --global ./attocash-cli-0.1.0.tgz ./attocash-mcp-0.1.0.tgz
35
+ npx --yes @attocash/cli@latest --help
25
36
  ```
26
37
 
27
- Use `npm run pack` from the repository root to create the supported artifacts.
28
- See the [repository packaging notes](https://github.com/attocash/integrations#packaging)
29
- for dependency locking and installed-package verification.
38
+ To install both the CLI and MCP server globally:
39
+
40
+ ```sh
41
+ npm install --global @attocash/cli @attocash/mcp
42
+ ```
30
43
 
31
44
  Linux also requires `secret-tool` (usually the `libsecret-tools` package), an
32
45
  unlocked Secret Service provider such as GNOME Keyring or KWallet, and access to
33
46
  your desktop D-Bus session. macOS uses Keychain; Windows uses Credential Manager.
34
47
  An unavailable password store is an error; there is no plaintext file fallback.
35
48
 
36
- ## Update notices
37
-
38
- Interactive CLI commands can show a notice on stderr when a newer stable CLI
39
- version is available. The notice includes the exact installation command;
40
- updates are always manual. Version checks run in the background, with each
41
- attempt cached for 24 hours, including failed attempts. Their results appear
42
- on a later command. Network and cache failures are silent.
43
-
44
- Use `--no-update-notifier` or set `NO_UPDATE_NOTIFIER` to disable notices and
45
- checks. They are also disabled with `--json`, redirected stdout or stderr,
46
- CI, or `NODE_ENV=test`. MCP and the `@attocash/cli/core` library do not check
47
- for updates or display notices.
48
-
49
- Checks request public package metadata from the npm registry and send no wallet
50
- data. The cache contains only public version information and timestamps,
51
- separately from wallet state:
52
-
53
- | OS | Update cache |
54
- | --- | --- |
55
- | Linux | `$XDG_CACHE_HOME/atto-cli/update.json`, or `~/.cache/atto-cli/update.json` |
56
- | macOS | `~/Library/Caches/atto-cli/update.json` |
57
- | Windows | `%LOCALAPPDATA%/atto-cli/Cache/update.json`, or `~/AppData/Local/atto-cli/Cache/update.json` |
58
-
59
- Once a version is published, replace `VERSION` below with that version to
60
- update a global CLI installation:
61
-
62
- ```sh
63
- npm install --global @attocash/cli@VERSION
64
- ```
49
+ ## Set up the wallet
65
50
 
66
- If MCP is installed too, update the matching pair and restart the MCP process:
51
+ Create a wallet in your own interactive terminal:
67
52
 
68
53
  ```sh
69
- npm install --global @attocash/cli@VERSION @attocash/mcp@VERSION
54
+ atto wallet create
70
55
  ```
71
56
 
72
- ## Set up the wallet
57
+ Setup stores the recovery phrase in your OS password store and displays it in
58
+ the terminal. Keep a private offline copy. If you already have a recovery
59
+ phrase, run `atto wallet import` instead; it asks for the phrase through a
60
+ hidden prompt.
73
61
 
74
- Run either command in an interactive terminal:
62
+ Find your address and check your balance:
75
63
 
76
64
  ```sh
77
- atto wallet create
78
- # Or import an existing recovery phrase through a hidden prompt:
79
- atto wallet import
65
+ atto address list
66
+ atto balances
80
67
  ```
81
68
 
82
- Creation stores the mnemonic successfully before displaying the recovery phrase.
83
- Keep a private offline copy. `atto wallet backup` displays it again in the
84
- terminal and adds a JSON confirmation only when `--json` is requested.
85
- Wallet creation, import, and backup require terminal input and terminal
86
- stderr; they are unavailable as MCP tools or through redirected pipes. Mnemonics
87
- are never accepted in command arguments, JSON, configuration, or environment variables.
88
-
89
- Import refuses an initialized wallet before asking for the recovery phrase. To
90
- replace it, back up its phrase and public profile, stop any CLI or MCP sessions
91
- using that profile, then run:
69
+ The default network is LIVE. To receive incoming payments, leave this command
70
+ running in a terminal:
92
71
 
93
72
  ```sh
94
- atto wallet reset
95
- atto wallet import
73
+ atto wallet receive
96
74
  ```
97
75
 
98
- For a custom profile, pass the same `--data-dir` to both commands. Reset requires
99
- an interactive terminal and typing `reset` after reviewing the selected wallet.
100
- It removes that profile's password-store credential and clears local addresses,
101
- personal labels, pinned destinations, payment history, settings, spending limits, and access permissions. You need the saved
102
- recovery phrase and account indexes to access its funds again. Profile metadata
103
- and database lock files stay in place so the credential namespace and coordination
104
- remain stable.
105
- Other open sessions and unresolved payments prevent reset. If reset is interrupted,
106
- run it again to finish before creating or importing a wallet. After upgrading from
107
- a version without reset support, restart existing CLI/MCP processes before using
108
- this command.
76
+ It reports incoming payments and confirmed receives as they happen. Stop it
77
+ with Ctrl+C. Use `atto doctor` if you need help checking your environment.
109
78
 
110
- New standard CLI profiles use the **Atto CLI** password-store service. Existing
111
- legacy and custom profiles retain **Atto MCP** and their existing credential
112
- accounts; no keys are moved. Neither service reads or overwrites the desktop
113
- Atto wallet. See [profiles and recovery](#profiles-and-recovery) for directories
114
- and compatibility. Index `0` starts active. Deriving another
115
- index saves its public address; activating it includes it in default balance
116
- queries and automatic receiving. The network account opens on its first receive.
117
- At most 100 addresses can be active at once; deactivate one before activating
118
- another when that limit is reached.
79
+ ## Everyday examples
80
+
81
+ ### Put names next to your addresses
119
82
 
120
83
  ```sh
121
- atto wallet status
122
- atto address add
123
- atto address list
84
+ atto labels set 0 "Main"
85
+ atto labels list
124
86
  atto balances
125
- atto balances --all
126
87
  ```
127
88
 
128
- `address add` saves and activates the next index after the highest saved index.
129
- Use `address derive N` to save a specific inactive address, or `address activate N`
130
- to derive and activate one. Balances include active accounts by default;
131
- `--all` includes every saved address and `--index N` selects one. Saved accounts
132
- show their index and activation state alongside their balance.
89
+ Labels appear beside full addresses in wallet output. They belong to your
90
+ profile and network, and can also name external recipients.
133
91
 
134
- Defaults use the Atto wallet's LIVE endpoints and twelve-representative pool.
135
- Automatic receiving is enabled with a minimum of `1 RAW`. It runs while
136
- `atto wallet receive` is running. MCP also runs it when that profile
137
- has locally approved spending access; read-only MCP does not receive funds or
138
- make other wallet changes. Finite CLI commands do their requested operation and
139
- exit. Stop a persistent command with Ctrl+C.
92
+ ### Move funds to “Savings”
140
93
 
141
- `wallet receive` reports pending payments, processing, confirmed receives, and
142
- retries as they happen, including the account index, amount, and transaction hashes.
143
- Connection errors are shown with their retry delay. `--json` emits the initial
144
- wallet status followed by one `result` object per progress event; its `event`
145
- field is `pending`, `receiving`, `received`, `retry`, `skipped`, or `reconnecting`.
146
- Subscriptions use Commons' streaming APIs. The CLI does not impose a deadline
147
- for the first payment or response headers. Finite list commands still stop at
148
- their requested collection deadline.
94
+ With a funded wallet, this example activates address 1, gives it a personal
95
+ name, and sends 1 ATTO there from address 0:
149
96
 
150
97
  ```sh
151
- atto wallet receive
152
- atto wallet configure --no-auto-receive
153
- atto wallet configure --auto-receive
154
- atto wallet configure --representative <atto-address>
98
+ atto address activate 1
99
+ atto labels set 1 "Savings"
100
+ atto send --to-label "Savings" --amount 1
155
101
  ```
156
102
 
157
- Configuration updates preserve omitted settings. Supply at least one option.
158
- `--representative` changes the default used to open accounts; use
159
- `atto representative change <address>` to change an existing account's representative.
160
- `wallet status` shows the profile directory and whether receiving runs in that
161
- process; it does not report receiving sessions in other terminals.
103
+ The CLI shows the resolved address and request ID. Keep that ID if the payment
104
+ is interrupted; it identifies the same payment when you retry.
105
+ [Personal names and retry behavior](#address-labels-and-personal-name-payments).
162
106
 
163
- To use another network, configure its node, work server, and representative
164
- explicitly. A network name alone does not replace the other settings:
165
-
166
- ```sh
167
- atto wallet configure --network LOCAL \
168
- --node-url http://127.0.0.1:8080 --worker-url http://127.0.0.1:8081 \
169
- --representative <atto-address>
170
- ```
107
+ ### Follow activity or use it in a script
171
108
 
172
- Endpoint URLs accept HTTP(S) without embedded credentials, query strings, or
173
- fragments. Pending uncertain sends must be resolved before changing the network
174
- or node endpoint.
109
+ | Task | Command |
110
+ | --- | --- |
111
+ | Recent payments | `atto history --limit 10` |
112
+ | Incoming payment events | `atto watch receivable` |
113
+ | Balances as JSON | `atto --json balances` |
114
+ | Saved payment attempts | `atto journal list --limit 10` |
115
+ | Environment diagnostics | `atto doctor` |
175
116
 
176
- Settings are saved in `state.sqlite` inside the selected profile directory
177
- (normally `~/.local/share/atto-cli` on Linux), in the `settings` table's
178
- `settings` row. Its JSON contains `nodeUrl`, `workerUrl`, and the other wallet
179
- settings. Use `atto wallet status` to view them and `atto wallet configure`
180
- to change them.
117
+ Watching incoming payments only observes them. Run `atto wallet receive` when
118
+ you want the wallet to receive them automatically.
181
119
 
182
120
  ## Use the CLI
183
121
 
@@ -393,8 +331,8 @@ atto doctor
393
331
  atto --json doctor
394
332
  atto --data-dir /absolute/path/to/profile doctor
395
333
  atto-mcp --data-dir /absolute/path/to/profile doctor
396
- # After publication, no global installation is needed:
397
- npx --yes @attocash/mcp@VERSION --data-dir /absolute/path/to/profile doctor
334
+ # Run MCP diagnostics without a global installation:
335
+ npx --yes @attocash/mcp@latest --data-dir /absolute/path/to/profile doctor
398
336
  ```
399
337
 
400
338
  Both commands run full checks by default. Allow up to 60 seconds. The OS password
@@ -589,11 +527,121 @@ and watches provide the data for agent-created visualizations. There is no
589
527
  flow-tracing engine. `atto doctor --global-directory` optionally probes directory
590
528
  availability without updating the cache.
591
529
 
530
+ ## Wallet details and configuration
531
+
532
+ Run either command in an interactive terminal:
533
+
534
+ ```sh
535
+ atto wallet create
536
+ # Or import an existing recovery phrase through a hidden prompt:
537
+ atto wallet import
538
+ ```
539
+
540
+ Creation stores the mnemonic successfully before displaying the recovery phrase.
541
+ Keep a private offline copy. `atto wallet backup` displays it again in the
542
+ terminal and adds a JSON confirmation only when `--json` is requested.
543
+ Wallet creation, import, and backup require terminal input and terminal
544
+ stderr; they are unavailable as MCP tools or through redirected pipes. Mnemonics
545
+ are never accepted in command arguments, JSON, configuration, or environment variables.
546
+
547
+ Import refuses an initialized wallet before asking for the recovery phrase. To
548
+ replace it, back up its phrase and public profile, stop any CLI or MCP sessions
549
+ using that profile, then run:
550
+
551
+ ```sh
552
+ atto wallet reset
553
+ atto wallet import
554
+ ```
555
+
556
+ For a custom profile, pass the same `--data-dir` to both commands. Reset requires
557
+ an interactive terminal and typing `reset` after reviewing the selected wallet.
558
+ It removes that profile's password-store credential and clears local addresses,
559
+ personal labels, pinned destinations, payment history, settings, spending limits, and access permissions. You need the saved
560
+ recovery phrase and account indexes to access its funds again. Profile metadata
561
+ and database lock files stay in place so the credential namespace and coordination
562
+ remain stable.
563
+ Other open sessions and unresolved payments prevent reset. If reset is interrupted,
564
+ run it again to finish before creating or importing a wallet. After upgrading from
565
+ a version without reset support, restart existing CLI/MCP processes before using
566
+ this command.
567
+
568
+ New standard CLI profiles use the **Atto CLI** password-store service. Existing
569
+ legacy and custom profiles retain **Atto MCP** and their existing credential
570
+ accounts; no keys are moved. Neither service reads or overwrites the desktop
571
+ Atto wallet. See [profiles and recovery](#profiles-and-recovery) for directories
572
+ and compatibility. Index `0` starts active. Deriving another
573
+ index saves its public address; activating it includes it in default balance
574
+ queries and automatic receiving. The network account opens on its first receive.
575
+ At most 100 addresses can be active at once; deactivate one before activating
576
+ another when that limit is reached.
577
+
578
+ ```sh
579
+ atto wallet status
580
+ atto address add
581
+ atto address list
582
+ atto balances
583
+ atto balances --all
584
+ ```
585
+
586
+ `address add` saves and activates the next index after the highest saved index.
587
+ Use `address derive N` to save a specific inactive address, or `address activate N`
588
+ to derive and activate one. Balances include active accounts by default;
589
+ `--all` includes every saved address and `--index N` selects one. Saved accounts
590
+ show their index and activation state alongside their balance.
591
+
592
+ Defaults use the Atto wallet's LIVE endpoints and twelve-representative pool.
593
+ Automatic receiving is enabled with a minimum of `1 RAW`. It runs while
594
+ `atto wallet receive` is running. MCP also runs it when that profile
595
+ has locally approved spending access; read-only MCP does not receive funds or
596
+ make other wallet changes. Finite CLI commands do their requested operation and
597
+ exit. Stop a persistent command with Ctrl+C.
598
+
599
+ `wallet receive` reports pending payments, processing, confirmed receives, and
600
+ retries as they happen, including the account index, amount, and transaction hashes.
601
+ Connection errors are shown with their retry delay. `--json` emits the initial
602
+ wallet status followed by one `result` object per progress event; its `event`
603
+ field is `pending`, `receiving`, `received`, `retry`, `skipped`, or `reconnecting`.
604
+ Subscriptions use Commons' streaming APIs. The CLI does not impose a deadline
605
+ for the first payment or response headers. Finite list commands still stop at
606
+ their requested collection deadline.
607
+
608
+ ```sh
609
+ atto wallet receive
610
+ atto wallet configure --no-auto-receive
611
+ atto wallet configure --auto-receive
612
+ atto wallet configure --representative <atto-address>
613
+ ```
614
+
615
+ Configuration updates preserve omitted settings. Supply at least one option.
616
+ `--representative` changes the default used to open accounts; use
617
+ `atto representative change <address>` to change an existing account's representative.
618
+ `wallet status` shows the profile directory and whether receiving runs in that
619
+ process; it does not report receiving sessions in other terminals.
620
+
621
+ To use another network, configure its node, work server, and representative
622
+ explicitly. A network name alone does not replace the other settings:
623
+
624
+ ```sh
625
+ atto wallet configure --network LOCAL \
626
+ --node-url http://127.0.0.1:8080 --worker-url http://127.0.0.1:8081 \
627
+ --representative <atto-address>
628
+ ```
629
+
630
+ Endpoint URLs accept HTTP(S) without embedded credentials, query strings, or
631
+ fragments. Pending uncertain sends must be resolved before changing the network
632
+ or node endpoint.
633
+
634
+ Settings are saved in `state.sqlite` inside the selected profile directory
635
+ (normally `~/.local/share/atto-cli` on Linux), in the `settings` table's
636
+ `settings` row. Its JSON contains `nodeUrl`, `workerUrl`, and the other wallet
637
+ settings. Use `atto wallet status` to view them and `atto wallet configure`
638
+ to change them.
639
+
592
640
  ## Profiles and recovery
593
641
 
594
642
  MCP setup defaults to a dedicated wallet; choose the existing CLI wallet option
595
- to share one. Run `atto-mcp setup`, or follow the
596
- [npx and source-checkout setup guide](https://github.com/attocash/integrations/tree/main/atto-mcp#install-and-connect).
643
+ to share one. Run `npx --yes @attocash/mcp@latest setup`, or follow the
644
+ [MCP setup guide](https://github.com/attocash/integrations/tree/main/atto-mcp#install-and-connect).
597
645
  The generated client configuration saves your selection as an explicit
598
646
  `--data-dir`, independently of package installation or npm cache locations.
599
647
 
@@ -641,67 +689,60 @@ mnemonic is lost from the password store, recover it from your private backup
641
689
  using `atto wallet import` in an uninitialized profile. Preserve the old public
642
690
  state and pending-send records for reconciliation before resuming payments.
643
691
 
644
- ## Library API
692
+ ## Update notices
693
+
694
+ Interactive CLI commands can show a notice on stderr when a newer stable CLI
695
+ version is available. The notice includes the exact installation command;
696
+ updates are always manual. Version checks run in the background, with each
697
+ attempt cached for 24 hours, including failed attempts. Their results appear
698
+ on a later command. Network and cache failures are silent.
699
+
700
+ Use `--no-update-notifier` or set `NO_UPDATE_NOTIFIER` to disable notices and
701
+ checks. They are also disabled with `--json`, redirected stdout or stderr,
702
+ CI, or `NODE_ENV=test`. MCP and the `@attocash/cli/core` library do not check
703
+ for updates or display notices.
704
+
705
+ Checks request public package metadata from the npm registry and send no wallet
706
+ data. The cache contains only public version information and timestamps,
707
+ separately from wallet state:
645
708
 
646
- Other local adapters can import the supported engine interface:
709
+ | OS | Update cache |
710
+ | --- | --- |
711
+ | Linux | `$XDG_CACHE_HOME/atto-cli/update.json`, or `~/.cache/atto-cli/update.json` |
712
+ | macOS | `~/Library/Caches/atto-cli/update.json` |
713
+ | Windows | `%LOCALAPPDATA%/atto-cli/Cache/update.json`, or `~/AppData/Local/atto-cli/Cache/update.json` |
647
714
 
648
- ```js
649
- import { createApplication, operations } from '@attocash/cli/core';
715
+ Replace `VERSION` below with the version shown in the update notice to
716
+ update a global CLI installation:
650
717
 
651
- const application = createApplication({ directory: '/absolute/path/to/profile' });
652
- try {
653
- const balances = await application.call('balances_get');
654
- console.log(balances);
655
- console.log(operations.map(operation => operation.name));
656
- } finally {
657
- await application.close();
658
- }
718
+ ```sh
719
+ npm install --global @attocash/cli@VERSION
659
720
  ```
660
721
 
661
- Omit `directory` to use the CLI default wallet. The exported `ApplicationSession`
662
- interface provides `call(name, input?)`, `start()`, and `close()`. Call `start()`
663
- for a persistent session that should run automatic receiving, and always call
664
- `close()` when the session ends. Watches belong to that application session.
665
- The library's `send` operation selects from the approved pool when `index` is
666
- omitted, matching MCP. The `atto send` command supplies index `0` by default and
667
- uses that automatic selection only with `--pool`.
722
+ If MCP is installed too, update the matching pair and restart the MCP process:
668
723
 
669
- Adapters requiring the MCP permission policy pass `access: 'mcp'`; that session
670
- rechecks the profile's approved access before wallet mutations. Automatic
671
- receiving follows that access mode too. Generic `limits_propose` only creates a
672
- proposal in either mode.
724
+ ```sh
725
+ npm install --global @attocash/cli@VERSION @attocash/mcp@VERSION
726
+ ```
673
727
 
674
- The entry point also exports `operations`, `errorResult`, and the `Operation`,
675
- `ApplicationOptions`, and `ApplicationSession` types. It does not expose recovery
676
- methods. Wallet creation, import, backup, and reset remain terminal commands. The MCP
677
- package calls this API directly and keeps one application session for its stdio
678
- connection. `@attocash/cli/profiles` provides shared directory resolution;
679
- `@attocash/cli/terminal` provides interactive setup and proposal review for the
680
- terminal executables.
728
+ To use the wallet engine in another application, see the [library API guide](https://github.com/attocash/integrations/blob/main/docs/library-api.md).
681
729
 
682
- ## Development and verification
730
+ ## Install from source
683
731
 
684
- Run workspace commands from the repository root:
732
+ Clone the repository and build the local packages:
685
733
 
686
734
  ```sh
735
+ git clone https://github.com/attocash/integrations.git
736
+ cd integrations
687
737
  npm ci
688
- npm run check
689
- npm test
690
- npm run test:integration
691
- ATTO_TEST_KEYCHAIN=1 npm run test:keychain
692
738
  npm run pack
693
- npm run test:package
739
+ npm install --global ./attocash-cli-0.1.1.tgz
740
+ ```
741
+
742
+ To test MCP with the same local CLI build, install both artifacts together:
743
+
744
+ ```sh
745
+ npm install --global ./attocash-cli-0.1.1.tgz ./attocash-mcp-0.1.1.tgz
694
746
  ```
695
747
 
696
- For CLI development alone, use `npm run build --workspace @attocash/cli`,
697
- `npm run check --workspace @attocash/cli`, and
698
- `npm test --workspace @attocash/cli` after building. Run the source checkout with
699
- `node atto-cli/dist/cli/main.js --help`.
700
-
701
- Tests use temporary state, synthetic recovery material, and mock nodes/workers.
702
- Platform credential-store tests run when `ATTO_TEST_KEYCHAIN=1`, use isolated
703
- entries, and remove them afterward. Linux native credential persistence has
704
- been verified in an isolated Secret Service session. macOS Keychain and Windows
705
- Credential Manager verification is configured in CI and requires those
706
- platforms. Container integration tests run on Linux. Tests never place live-fund
707
- transactions or publish the package.
748
+ For development and testing, see the [contributor guide](https://github.com/attocash/integrations/blob/main/docs/contributing.md).
package/dist/cli/main.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@attocash/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Atto wallet CLI and reusable wallet engine with local key custody and shared spending limits",
5
5
  "license": "BSD-3-Clause",
6
6
  "type": "module",