@vultisig/cli 2.19.18 → 2.20.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/CHANGELOG.md +31 -0
- package/README.md +136 -58
- package/dist/index.js +625 -623
- package/package.json +7 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# @vultisig/cli
|
|
2
2
|
|
|
3
|
+
## 2.20.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#1284](https://github.com/vultisig/vultisig-sdk/pull/1284) [`1c4fc80`](https://github.com/vultisig/vultisig-sdk/commit/1c4fc80be959af4b650e32b4db30859f449dfa60) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Expose generic CosmWasm Amino and protobuf execute builders from the root SDK and reuse the canonical Amino envelope in the CLI.
|
|
8
|
+
|
|
9
|
+
- [#1128](https://github.com/vultisig/vultisig-sdk/pull/1128) [`f885e91`](https://github.com/vultisig/vultisig-sdk/commit/f885e91da06674dbef2ca1495291ca7d201e4c58) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Add first-class XRP DestinationTag support alongside transaction memos.
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#1234](https://github.com/vultisig/vultisig-sdk/pull/1234) [`3f4ead5`](https://github.com/vultisig/vultisig-sdk/commit/3f4ead52fe5722a9c22ebf0aa517fba41c1c86a9) Thanks [@neavra](https://github.com/neavra)! - Support JSON-formatted per-vault passwords for names with spaces and document the complete headless credential setup flow.
|
|
14
|
+
|
|
15
|
+
- [#1259](https://github.com/vultisig/vultisig-sdk/pull/1259) [`955486c`](https://github.com/vultisig/vultisig-sdk/commit/955486cd3c749888ce9d37a0b8a0b59eabc8ac0d) Thanks [@neavra](https://github.com/neavra)! - Persist direct transaction confirmation and failure resolutions in the shared broadcast journal.
|
|
16
|
+
|
|
17
|
+
- [#1304](https://github.com/vultisig/vultisig-sdk/pull/1304) [`63f7b6c`](https://github.com/vultisig/vultisig-sdk/commit/63f7b6c4d01b5bec5552c7002ee936b9486908fa) Thanks [@neavra](https://github.com/neavra)! - Report failed or declined agent signing, non-success turn outcomes, stale sessions, invalid command input, and permanent raw-broadcast validation errors with truthful non-success envelopes and typed exit codes.
|
|
18
|
+
|
|
19
|
+
Exit codes change for previously-mis-reported paths, so callers branching on `$?` should re-check: a declined/failed agent sign now exits non-zero (`CONFIRMATION_REQUIRED`/12 for a decline) instead of 0; a failure that follows an on-chain broadcast exits `BROADCAST_COMMITTED`/13 (never a retryable code); `send` to a malformed address now exits `INVALID_ADDRESS`/4 instead of `USAGE_ERROR`/1, matching the documented table and `address-book`.
|
|
20
|
+
|
|
21
|
+
- [#1280](https://github.com/vultisig/vultisig-sdk/pull/1280) [`5b99730`](https://github.com/vultisig/vultisig-sdk/commit/5b99730019a462bb8489dd32d154483f705b2a23) Thanks [@neavra](https://github.com/neavra)! - Give `tx-status` a dedicated `INVALID_HASH` error before vault access and expose consistent CLI-facing statuses: `pending`, `not_found`, `confirmed`, and `failed`.
|
|
22
|
+
|
|
23
|
+
- [#1233](https://github.com/vultisig/vultisig-sdk/pull/1233) [`88f0ee6`](https://github.com/vultisig/vultisig-sdk/commit/88f0ee617627fa85b0ff5057c4adcd7f1927e81d) Thanks [@neavra](https://github.com/neavra)! - Classify agent errors that occur after a transaction broadcast as a non-retryable partial success, preserving transaction hashes and original diagnostics while warning callers not to blindly retry.
|
|
24
|
+
|
|
25
|
+
- [#1259](https://github.com/vultisig/vultisig-sdk/pull/1259) [`955486c`](https://github.com/vultisig/vultisig-sdk/commit/955486cd3c749888ce9d37a0b8a0b59eabc8ac0d) Thanks [@neavra](https://github.com/neavra)! - Scope the broadcast-journal empty-calldata canonicalization (`"0x"` → `""`) to EVM calldata only. `intent.data` also carries non-EVM memos, so canonicalizing it for every intent made a real memo of `"0x"` collide with an empty memo and falsely dedupe two different memo-chain sends inside the double-spend guard window. The fingerprint now folds `"0x"` only when the intent marks its data as EVM calldata, and every intent builder derives that mark from the chain kind (`getChainKind(chain) === 'evm'`): an EVM `"0x"` memo is empty calldata and still folds (so cross-path dedup is preserved), while a `"0x"` memo on a memo-routed chain stays distinct from an empty memo.
|
|
26
|
+
|
|
27
|
+
- [#1308](https://github.com/vultisig/vultisig-sdk/pull/1308) [`48ad7a2`](https://github.com/vultisig/vultisig-sdk/commit/48ad7a269186965b2b7a20d4b9d52ccd3b77fcbd) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Expose one SDK chain-reference resolver and use it for CLI and MCP chain names, aliases, and IDs.
|
|
28
|
+
|
|
29
|
+
- Updated dependencies [[`747b6c6`](https://github.com/vultisig/vultisig-sdk/commit/747b6c68a81e14f3242003f39a4b58499ef44a21), [`b6fbbe3`](https://github.com/vultisig/vultisig-sdk/commit/b6fbbe3705d6aae02b483de0b7dd1b8a097acd6b), [`a08a52b`](https://github.com/vultisig/vultisig-sdk/commit/a08a52bb0933fd5470ea849613e147baa29286ad), [`9e366db`](https://github.com/vultisig/vultisig-sdk/commit/9e366db273e87e62d260867ea6702466b325d7fc), [`c3168e2`](https://github.com/vultisig/vultisig-sdk/commit/c3168e24a32d733da85b2f6038e7e55c4dbe8d72), [`7bb79ba`](https://github.com/vultisig/vultisig-sdk/commit/7bb79ba9ef968bc20ba88e1bdd189ca8864b0221), [`a8e873e`](https://github.com/vultisig/vultisig-sdk/commit/a8e873e41a41693dcdee575c5271422fe6c6b6e3), [`1c4fc80`](https://github.com/vultisig/vultisig-sdk/commit/1c4fc80be959af4b650e32b4db30859f449dfa60), [`30b76c6`](https://github.com/vultisig/vultisig-sdk/commit/30b76c6d0fbe7f0ad3015fee9bc77b5ee9fa7927), [`421e8da`](https://github.com/vultisig/vultisig-sdk/commit/421e8da0b11a35bcc95351e7b644318fe171c5ec), [`846d6c2`](https://github.com/vultisig/vultisig-sdk/commit/846d6c24e96ba4f8133721f1030dd9d023376570), [`6de79ab`](https://github.com/vultisig/vultisig-sdk/commit/6de79ab1ec6e3566ea8511a0a6c7afde87752c48), [`21ca074`](https://github.com/vultisig/vultisig-sdk/commit/21ca07454d5ac462882317da4f49d5f80ef32837), [`72da781`](https://github.com/vultisig/vultisig-sdk/commit/72da781743fad0664edfc5ffcd72720ac7f0d0bd), [`32aaf40`](https://github.com/vultisig/vultisig-sdk/commit/32aaf40edb28ea46f8275341ce4205411197a652), [`48ad7a2`](https://github.com/vultisig/vultisig-sdk/commit/48ad7a269186965b2b7a20d4b9d52ccd3b77fcbd), [`dda2e90`](https://github.com/vultisig/vultisig-sdk/commit/dda2e9084859eae02dd16149ac3ab2240a7d37e5), [`eb11e50`](https://github.com/vultisig/vultisig-sdk/commit/eb11e50b2f478fbb21db2970f8616d5f296b49f5), [`4815346`](https://github.com/vultisig/vultisig-sdk/commit/4815346d794f4a198e84a562c503b3bdd5ae10b8), [`f885e91`](https://github.com/vultisig/vultisig-sdk/commit/f885e91da06674dbef2ca1495291ca7d201e4c58)]:
|
|
30
|
+
- @vultisig/core-chain@2.26.0
|
|
31
|
+
- @vultisig/sdk@2.20.0
|
|
32
|
+
- @vultisig/rujira@53.0.0
|
|
33
|
+
|
|
3
34
|
## 2.19.18
|
|
4
35
|
|
|
5
36
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -370,24 +370,24 @@ Swap quotes and previews show your VULT discount tier when affiliate fees are ap
|
|
|
370
370
|
|
|
371
371
|
#### Transaction Status
|
|
372
372
|
|
|
373
|
-
Check whether a transaction has confirmed on-chain.
|
|
373
|
+
Check whether a transaction has confirmed on-chain. The CLI reports `pending`, `not_found`, `confirmed`, or `failed`. A recently broadcast hash may briefly be `not_found`, so the default mode polls every 5 seconds for up to 120 seconds. Use `--no-wait` for one read:
|
|
374
374
|
|
|
375
375
|
```bash
|
|
376
376
|
# Poll until confirmed (default)
|
|
377
|
-
vultisig tx-status
|
|
377
|
+
vultisig tx-status --chain Ethereum --tx-hash 0x9f8e7d6c...
|
|
378
378
|
|
|
379
379
|
# Check current status without polling
|
|
380
|
-
vultisig tx-status
|
|
380
|
+
vultisig tx-status --chain Ethereum --tx-hash 0x9f8e7d6c... --no-wait
|
|
381
381
|
|
|
382
382
|
# JSON output
|
|
383
|
-
vultisig tx-status
|
|
383
|
+
vultisig --output json tx-status --chain Ethereum --tx-hash 0x9f8e7d6c... --no-wait
|
|
384
384
|
```
|
|
385
385
|
|
|
386
386
|
**Output:**
|
|
387
387
|
|
|
388
388
|
```
|
|
389
|
-
✓ Transaction status:
|
|
390
|
-
Status:
|
|
389
|
+
✓ Transaction status: confirmed
|
|
390
|
+
Status: confirmed
|
|
391
391
|
Fee: 0.00042 ETH
|
|
392
392
|
Explorer: https://etherscan.io/tx/0x9f8e7d6c...
|
|
393
393
|
```
|
|
@@ -396,18 +396,26 @@ Explorer: https://etherscan.io/tx/0x9f8e7d6c...
|
|
|
396
396
|
|
|
397
397
|
```json
|
|
398
398
|
{
|
|
399
|
-
"
|
|
400
|
-
"
|
|
401
|
-
"
|
|
402
|
-
|
|
403
|
-
"
|
|
404
|
-
"
|
|
405
|
-
"
|
|
406
|
-
|
|
407
|
-
|
|
399
|
+
"success": true,
|
|
400
|
+
"v": 1,
|
|
401
|
+
"data": {
|
|
402
|
+
"chain": "Ethereum",
|
|
403
|
+
"txHash": "0x9f8e7d6c...",
|
|
404
|
+
"status": "confirmed",
|
|
405
|
+
"receipt": {
|
|
406
|
+
"feeAmount": "420000000000000",
|
|
407
|
+
"feeDecimals": 18,
|
|
408
|
+
"feeTicker": "ETH"
|
|
409
|
+
},
|
|
410
|
+
"explorerUrl": "https://etherscan.io/tx/0x9f8e7d6c..."
|
|
411
|
+
}
|
|
408
412
|
}
|
|
409
413
|
```
|
|
410
414
|
|
|
415
|
+
A malformed hash fails before vault access or RPC with exit code `4`. JSON output uses error code `INVALID_HASH` and includes `error.context.status: "invalid_hash"`. A well-formed hash unknown to the node reports `not_found` in `--no-wait` mode; default polling exits `5` with `TX_NOT_FOUND` if it remains unseen for the wait budget. A known, unconfirmed transaction remains `pending`; if it is still `pending` when the wait budget is exhausted, default polling exits `3` with `TX_STATUS_TIMEOUT` (retryable) rather than reporting a false terminal status.
|
|
416
|
+
|
|
417
|
+
EVM RPCs can distinguish a missing receipt from a hash the node does not know, so they report `not_found` explicitly. Some non-EVM providers do not distinguish an absent transaction from a failed lookup; those chains conservatively remain `pending` with an unknown-presence signal, and default CLI polling is still bounded by `--timeout`.
|
|
418
|
+
|
|
411
419
|
#### Signing Arbitrary Bytes
|
|
412
420
|
|
|
413
421
|
Sign pre-hashed data for externally constructed transactions:
|
|
@@ -647,18 +655,61 @@ JSON output for two-step create:
|
|
|
647
655
|
|
|
648
656
|
Send a single natural-language message and get a structured response. Designed for AI-to-AI communication.
|
|
649
657
|
|
|
650
|
-
|
|
658
|
+
#### Headless Password and Credential Chain
|
|
659
|
+
|
|
660
|
+
`agent ask` resolves the vault password before prompting, so automation does not need to put a secret on argv. The lookup order is:
|
|
661
|
+
|
|
662
|
+
1. In-memory cache (an explicit `--password` or a password already resolved in this process)
|
|
663
|
+
2. Stored credentials from `vsig auth setup` (OS keyring, or the encrypted-file backend)
|
|
664
|
+
3. `VAULT_PASSWORDS` by vault name, then by vault ID
|
|
665
|
+
4. `VAULT_PASSWORD`, then its namespaced alias `VULTISIG_PASSWORD`
|
|
666
|
+
5. Interactive prompt, or an error in non-interactive mode
|
|
667
|
+
|
|
668
|
+
The five password-related environment variables have distinct roles:
|
|
669
|
+
|
|
670
|
+
| Variable | Purpose |
|
|
671
|
+
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
672
|
+
| `VAULT_PASSWORD` | Single fallback vault/server-signing password. It is also the server password required by `auth setup --non-interactive`. |
|
|
673
|
+
| `VULTISIG_PASSWORD` | Namespaced alias for the single-password fallback during normal vault unlock. `auth setup` still requires `VAULT_PASSWORD`. |
|
|
674
|
+
| `VAULT_PASSWORDS` | Per-vault passwords keyed by vault name or ID. Use the JSON form for names containing spaces. |
|
|
675
|
+
| `VAULT_DECRYPT_PASSWORD` | Password for decrypting an encrypted `.vult` backup during `auth setup`; it is not part of the normal signing-password lookup chain. |
|
|
676
|
+
| `VULTISIG_CREDENTIALS_PASSPHRASE` | Passphrase for the AES-256-GCM `credentials.enc` backend used instead of an OS keyring in Docker/CI. It must be set again when later commands read that file. |
|
|
677
|
+
|
|
678
|
+
`VAULT_PASSWORDS` accepts a JSON object (recommended) or the legacy whitespace-separated form:
|
|
651
679
|
|
|
652
680
|
```bash
|
|
653
|
-
#
|
|
654
|
-
|
|
655
|
-
# or: export VAULT_PASSWORD="..."
|
|
681
|
+
# Unambiguous: supports spaces and other punctuation in vault names
|
|
682
|
+
export VAULT_PASSWORDS='{"Vultisig Cluster #1":"pw","vault-id":"other-pw"}'
|
|
656
683
|
|
|
657
|
-
#
|
|
658
|
-
|
|
684
|
+
# Backward-compatible for space-free keys; passwords may contain colons
|
|
685
|
+
export VAULT_PASSWORDS='MyVault:pw vault-id:other:pw'
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
Vault-ID keys are the most deterministic choice. If a JSON-looking value is malformed, the CLI warns on stderr and falls back to legacy parsing.
|
|
659
689
|
|
|
660
|
-
|
|
661
|
-
|
|
690
|
+
For a keychain-less container, provide all setup secrets once, persist the config directory, then remove the vault passwords from the environment. Keep the credentials-file passphrase available to later CLI processes:
|
|
691
|
+
|
|
692
|
+
```bash
|
|
693
|
+
export VULTISIG_CONFIG_DIR=/var/lib/vultisig
|
|
694
|
+
export VAULT_DECRYPT_PASSWORD='backup-file-password'
|
|
695
|
+
export VAULT_PASSWORD='server-signing-password'
|
|
696
|
+
export VULTISIG_CREDENTIALS_PASSPHRASE='credentials-file-passphrase'
|
|
697
|
+
|
|
698
|
+
vsig auth setup --non-interactive --vault-file /run/secrets/vault.vult
|
|
699
|
+
|
|
700
|
+
# Setup stored both passwords in $VULTISIG_CONFIG_DIR/credentials.enc (mode 0600).
|
|
701
|
+
unset VAULT_DECRYPT_PASSWORD VAULT_PASSWORD
|
|
702
|
+
vsig auth status
|
|
703
|
+
|
|
704
|
+
# No vault password on argv or in the environment. --yes authorizes signing/broadcast.
|
|
705
|
+
vsig agent ask 'Send 0.01 ETH to 0x742d...' --yes
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
Omit `VAULT_DECRYPT_PASSWORD` when the `.vult` file is not encrypted. Mount `VULTISIG_CONFIG_DIR` persistently and provide the same `VULTISIG_CREDENTIALS_PASSPHRASE` to each new container. The `--password` flag remains available as a fallback, but it exposes the secret to `ps` and shell history and emits a stderr warning.
|
|
709
|
+
|
|
710
|
+
```bash
|
|
711
|
+
# Simple query (password resolved from stored credentials or environment)
|
|
712
|
+
vultisig agent ask "What is my ETH balance?"
|
|
662
713
|
|
|
663
714
|
# Continue a conversation (multi-turn)
|
|
664
715
|
vultisig agent ask "Now swap it to USDC" --session abc123
|
|
@@ -685,41 +736,61 @@ explorer:https://etherscan.io/tx/0x9f8e7d6c...
|
|
|
685
736
|
|
|
686
737
|
```json
|
|
687
738
|
{
|
|
688
|
-
"
|
|
689
|
-
"
|
|
690
|
-
"
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
"decimals": 18,
|
|
701
|
-
"raw_amount": "1500000000000000000"
|
|
702
|
-
}
|
|
703
|
-
]
|
|
739
|
+
"success": true,
|
|
740
|
+
"v": 1,
|
|
741
|
+
"data": {
|
|
742
|
+
"conversation_id": "abc123-def456",
|
|
743
|
+
"session_id": "abc123-def456",
|
|
744
|
+
"response": "Your ETH balance is 1.5 ETH ($3,750.00 USD).",
|
|
745
|
+
"tool_calls": [
|
|
746
|
+
{
|
|
747
|
+
"id": "tool-call-1",
|
|
748
|
+
"action": "get_balances",
|
|
749
|
+
"success": true,
|
|
750
|
+
"data": { "balances": [] }
|
|
704
751
|
}
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
"hash": "0x9f8e7d6c...",
|
|
710
|
-
"chain": "ethereum",
|
|
711
|
-
"explorerUrl": "https://etherscan.io/tx/0x9f8e7d6c..."
|
|
712
|
-
}
|
|
713
|
-
]
|
|
752
|
+
],
|
|
753
|
+
"transactions": [],
|
|
754
|
+
"outcome": { "kind": "success" }
|
|
755
|
+
}
|
|
714
756
|
}
|
|
715
757
|
```
|
|
716
758
|
|
|
717
|
-
|
|
759
|
+
Failures use the same v1 envelope with `success:false` and a stable `error.code`. This includes
|
|
760
|
+
failed/declined signing and typed blocked/refusal/error turn endings; their partial turn data remains under `data`.
|
|
761
|
+
If `--session` cannot be resumed, ask mode exits `5` before sending the message and does not fall back to a fresh
|
|
762
|
+
conversation.
|
|
763
|
+
If a transaction hash has already been submitted and a later backend outcome/error prevents the overall request
|
|
764
|
+
from completing, the CLI exits `13` with `BROADCAST_COMMITTED`. This is deliberately **not** overall success:
|
|
765
|
+
an approval or other first leg may have landed while a swap or follow-up step did not. Inspect every hash and do
|
|
766
|
+
not blindly retry the original request.
|
|
718
767
|
|
|
719
768
|
```json
|
|
720
769
|
{
|
|
721
|
-
"
|
|
722
|
-
"
|
|
770
|
+
"success": false,
|
|
771
|
+
"v": 1,
|
|
772
|
+
"error": {
|
|
773
|
+
"message": "A transaction was broadcast, but the overall agent request may be incomplete. Inspect the transaction status before continuing.",
|
|
774
|
+
"code": "BROADCAST_COMMITTED",
|
|
775
|
+
"conversation_id": "abc123-def456"
|
|
776
|
+
},
|
|
777
|
+
"data": {
|
|
778
|
+
"transactions": [
|
|
779
|
+
{
|
|
780
|
+
"hash": "0x9f8e7d6c...",
|
|
781
|
+
"chain": "ethereum",
|
|
782
|
+
"status": "broadcast",
|
|
783
|
+
"explorerUrl": "https://etherscan.io/tx/0x9f8e7d6c..."
|
|
784
|
+
}
|
|
785
|
+
],
|
|
786
|
+
"tool_calls": [],
|
|
787
|
+
"response": "",
|
|
788
|
+
"outcome": { "kind": "error", "code": "follow_up_failed" },
|
|
789
|
+
"original_error": {
|
|
790
|
+
"message": "Confirmation indexer failed after broadcast",
|
|
791
|
+
"code": "TRANSACTION_FAILED"
|
|
792
|
+
}
|
|
793
|
+
}
|
|
723
794
|
}
|
|
724
795
|
```
|
|
725
796
|
|
|
@@ -735,13 +806,18 @@ Orchestrators should branch on `code`. The message in `error` / `message` stays
|
|
|
735
806
|
| `AUTH_FAILED` | Auth/token failure, HTTP 401/403, or wrong vault password |
|
|
736
807
|
| `VAULT_LOCKED` | Encrypted vault needs unlock (password) |
|
|
737
808
|
| `PASSWORD_REQUIRED` | Password was not supplied when required (e.g. pipe mode or signing) |
|
|
738
|
-
| `CONFIRMATION_REQUIRED` | User confirmation needed (pipe mode; message prefix `CONFIRMATION_REQUIRED:`)
|
|
809
|
+
| `CONFIRMATION_REQUIRED` | User confirmation needed (pipe mode; message prefix `CONFIRMATION_REQUIRED:`); also returned by `agent ask` on a declined sign (no `--yes`), exit 12 |
|
|
739
810
|
| `ACTION_NOT_IMPLEMENTED` | Local executor does not implement this action type |
|
|
740
811
|
| `INVALID_INPUT` | Bad parameters, unknown chain, malformed NDJSON input, etc. |
|
|
741
812
|
| `NETWORK_ERROR` | RPC/fetch connectivity (includes many SDK `VaultError` network cases) |
|
|
742
813
|
| `TIMEOUT` | Deadline exceeded, or abort where the message indicates a timeout |
|
|
743
814
|
| `TRANSACTION_FAILED` | Build/broadcast/gas errors mapped from the SDK |
|
|
744
815
|
| `SIGNING_FAILED` | MPC/signing failed |
|
|
816
|
+
| `ACK_FAILED` | Transaction broadcast, but its immediate acknowledgement/report failed; hash is valid and must be inspected before retrying |
|
|
817
|
+
| `BROADCAST_COMMITTED` | At least one transaction broadcast, but the overall agent request may be incomplete; do not blindly retry |
|
|
818
|
+
| `AGENT_TURN_BLOCKED` | A fund-safety guardrail blocked the requested action (exit 10) |
|
|
819
|
+
| `AGENT_TURN_REFUSAL` | The model refused or requested clarification without completing the action (exit 11) |
|
|
820
|
+
| `AGENT_TURN_ERROR` | The typed turn ending reported a failure without a more specific stream error |
|
|
745
821
|
| `SESSION_NOT_INITIALIZED` | Internal session state error |
|
|
746
822
|
| `UNKNOWN_ERROR` | Unclassified failure (default for opaque SSE `error` events). Plain `AbortError` without “timeout” in the message maps here. |
|
|
747
823
|
|
|
@@ -749,7 +825,7 @@ SSE `error` events may optionally include a `code` field from the backend; if it
|
|
|
749
825
|
|
|
750
826
|
**Agent ask options:**
|
|
751
827
|
|
|
752
|
-
- `--session <id>` - Continue an existing conversation
|
|
828
|
+
- `--session <id>` - Continue an existing conversation; a stale ID fails closed before the message is sent
|
|
753
829
|
- `--backend-url <url>` - Agent backend URL (default: https://abe.vultisig.com)
|
|
754
830
|
- `--password <password>` - Vault password (fallback only; prefer the keyring/`VAULT_PASSWORD` env — see **Password resolution** above)
|
|
755
831
|
- `--verbose` - Show tool calls and debug info on stderr
|
|
@@ -855,7 +931,7 @@ VULTISIG_VAULT=MyWallet
|
|
|
855
931
|
VAULT_PASSWORD=mypassword
|
|
856
932
|
|
|
857
933
|
# Multiple vault passwords
|
|
858
|
-
VAULT_PASSWORDS="
|
|
934
|
+
VAULT_PASSWORDS='{"Vault 1":"pass1","vault-id-2":"pass2"}'
|
|
859
935
|
|
|
860
936
|
# Suppress spinners and info messages
|
|
861
937
|
VULTISIG_SILENT=1
|
|
@@ -1100,7 +1176,7 @@ VULTISIG_NO_UPDATE_CHECK=1
|
|
|
1100
1176
|
VAULT_PASSWORD=mypassword
|
|
1101
1177
|
|
|
1102
1178
|
# Multiple vault passwords
|
|
1103
|
-
VAULT_PASSWORDS="
|
|
1179
|
+
VAULT_PASSWORDS='{"Vault 1":"pass1","vault-id-2":"pass2"}'
|
|
1104
1180
|
```
|
|
1105
1181
|
|
|
1106
1182
|
### Config Directory
|
|
@@ -1109,9 +1185,10 @@ Configuration is stored in `~/.vultisig/`:
|
|
|
1109
1185
|
|
|
1110
1186
|
```
|
|
1111
1187
|
~/.vultisig/
|
|
1112
|
-
├── config.json
|
|
1113
|
-
├──
|
|
1114
|
-
├──
|
|
1188
|
+
├── config.json # User preferences and registered vaults
|
|
1189
|
+
├── credentials.enc # Optional encrypted-file credential backend
|
|
1190
|
+
├── vaults/ # Vault data
|
|
1191
|
+
├── cache/ # Version checks, etc.
|
|
1115
1192
|
└── address-book.json
|
|
1116
1193
|
```
|
|
1117
1194
|
|
|
@@ -1149,6 +1226,7 @@ Configuration is stored in `~/.vultisig/`:
|
|
|
1149
1226
|
| 10 | agent ask: a fund-safety guardrail blocked the requested action |
|
|
1150
1227
|
| 11 | agent ask: the model refused or asked a clarifying question (no action taken) |
|
|
1151
1228
|
| 12 | Interactive confirmation/input required but the session is non-interactive — pass --yes/--confirm or the required flag |
|
|
1229
|
+
| 13 | agent ask: transaction broadcast but the overall request may be incomplete — inspect the hash, do NOT blindly retry |
|
|
1152
1230
|
|
|
1153
1231
|
> These are generated from the `ExitCode` enum in `src/core/errors.ts` (the single source of
|
|
1154
1232
|
> truth) and are covered by a doc-lint test that fails if this table drifts from the code. Run
|