Skip to content
Open
Show file tree
Hide file tree
Changes from 42 commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
3903edf
feat(wallet-cli): carry structured command output through the console
nullPointerEnjoyer Oct 19, 2026
3dc86f5
fix(wallet-cli): route payloads through the console abstraction
nullPointerEnjoyer Oct 19, 2026
c35d260
fix(wallet-cli): render structured output in every console consumer
nullPointerEnjoyer Oct 19, 2026
537941f
refactor(wallet-cli): drop the unused payload rendering hook
nullPointerEnjoyer Oct 19, 2026
06e5bd4
feat(wallet-cli): render node and chain data in human-readable form
nullPointerEnjoyer Oct 19, 2026
133a31c
fix(wallet-cli): keep the pending transaction list machine parseable
nullPointerEnjoyer Oct 19, 2026
842d2c6
feat(wallet-cli): add nested command groups for wallet data
nullPointerEnjoyer Oct 19, 2026
aede778
test(wallet-cli): pin the nested command translation
nullPointerEnjoyer Oct 19, 2026
028ed6d
refactor(wallet-cli): share the nested command guard
nullPointerEnjoyer Oct 19, 2026
254238e
refactor(wallet-cli): keep the nested command guard private
nullPointerEnjoyer Oct 19, 2026
08edc7f
fix(wallet-cli): gate the wallet group by wallet mutability
nullPointerEnjoyer Oct 19, 2026
5245565
feat(wallet-cli): group staking and exchange commands
nullPointerEnjoyer Oct 19, 2026
3a3ad5d
test(wallet-cli): exercise optional grouped command arguments
nullPointerEnjoyer Oct 19, 2026
d2e0332
feat(wallet-cli): group vrf key commands under staking
nullPointerEnjoyer Oct 19, 2026
84a994d
docs(wallet-cli): polish grouped command help texts
nullPointerEnjoyer Oct 19, 2026
f210439
feat(wallet-cli): group node and peer commands
nullPointerEnjoyer Oct 19, 2026
6daee14
feat(wallet-cli): group cold wallet commands with file based secrets
nullPointerEnjoyer Oct 20, 2026
6ec9e2f
feat(wallet-cli): complete nested commands with a grammar walker
nullPointerEnjoyer Oct 20, 2026
349f732
feat(wallet-cli): generate shell completion scripts
nullPointerEnjoyer Oct 20, 2026
1da6d15
feat(wallet-cli): prompt for passwords on a terminal
nullPointerEnjoyer Oct 20, 2026
9c67bc8
feat(wallet-cli): collect complex command arguments interactively
nullPointerEnjoyer Oct 20, 2026
6de0e88
feat(wallet-cli): run single commands with exec mode
nullPointerEnjoyer Oct 20, 2026
6c29741
feat(wallet-cli): confirm state-changing commands before running them
nullPointerEnjoyer Oct 20, 2026
967932b
fix(wallet-cli): wire confirmations into the wallet entry points
nullPointerEnjoyer Oct 20, 2026
bc38893
fix(wallet-cli): gate every non-interactive path behind confirmations
nullPointerEnjoyer Oct 20, 2026
25c9e1a
refactor(wallet-cli): share the confirmation gate across repl modes
nullPointerEnjoyer Oct 20, 2026
744e60a
feat(wallet): add a read-only MCP server for the wallet rpc daemon
nullPointerEnjoyer Oct 20, 2026
5fab96f
fix(wallet-cli): gate wizard commands and validate mcp tool arguments
nullPointerEnjoyer Oct 20, 2026
7cdbb03
fix(wallet-cli): normalize grammar before confirmation checks
nullPointerEnjoyer Oct 20, 2026
8bbd467
fix(wallet-cli): keep exec json output faithful to the command payload
nullPointerEnjoyer Oct 20, 2026
ae4a810
test(wallet-cli): run the functional harness with confirmations skipped
nullPointerEnjoyer Oct 20, 2026
82e05f5
fix(wallet): reject invalid mcp tool calls at the protocol level
nullPointerEnjoyer Oct 20, 2026
0059b56
ci(wasm): resolve tsc through npx
nullPointerEnjoyer Oct 20, 2026
c9d4b81
fix(wallet-cli): classify every command for the confirmation gate
nullPointerEnjoyer Oct 20, 2026
883da53
fix(wallet): validate the mcp protocol envelope and input strings
nullPointerEnjoyer Oct 20, 2026
d1cc022
fix(wallet-cli): report event loop shutdown instead of panicking
nullPointerEnjoyer Oct 20, 2026
07d9c6d
fix(wallet): resync the mcp stream after an oversized message
nullPointerEnjoyer Oct 20, 2026
29164e9
fix(wallet): bound the mcp resync and pin it with tests
nullPointerEnjoyer Oct 20, 2026
1cbad73
chore(deps): refresh advisory exemptions for updated certificate crates
nullPointerEnjoyer Oct 20, 2026
066840f
fix(wallet): pin the null-id behavior and warn on password files
nullPointerEnjoyer Oct 21, 2026
e9b103b
fix(wallet): fail safe on shutdown and bad password files
nullPointerEnjoyer Oct 21, 2026
00aa45b
fix(wallet): read multi-flag best block from one snapshot
nullPointerEnjoyer Oct 21, 2026
f2454ae
fix(wallet): hoist the password file size cap above its use
nullPointerEnjoyer Oct 21, 2026
ebe5b98
refactor(wallet): resume the grammar thread panic unchanged
nullPointerEnjoyer Oct 21, 2026
2758abb
fix(wallet): fail closed when a password file races its size check
nullPointerEnjoyer Oct 21, 2026
fe60d67
refactor(wallet): share the password size error text
nullPointerEnjoyer Oct 21, 2026
5db1d81
fix(wallet): prompt before generating blocks
nullPointerEnjoyer Oct 21, 2026
831e2ef
fix(wallet): close the password file size race and wizard cancel paths
nullPointerEnjoyer Oct 21, 2026
69c88fc
fix(wallet): gate wizards on a terminal and soften failure paths
nullPointerEnjoyer Oct 21, 2026
e1e019a
fix(wallet): bound mcp wallet requests with a timeout
nullPointerEnjoyer Oct 21, 2026
34668fb
fix(wallet): fail closed on unverifiable password sources
nullPointerEnjoyer Oct 21, 2026
2f0e9fa
fix(wallet): enforce the mcp resync contract in the type system
nullPointerEnjoyer Oct 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .github/workflows/wasm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,18 @@ jobs:

- name: Compile the tests
working-directory: ./wasm-wrappers
run: tsc --project js-bindings-test/tsconfig.json
# Invoke the binary installed at the repository root directly: this
# does not depend on how runner images compose PATH and fails with a
# clear "not found" error instead of resolving through the registry.
run: '"$GITHUB_WORKSPACE/node_modules/.bin/tsc" --project js-bindings-test/tsconfig.json'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bug · high
The comment and path assume npm installs typescript/knip into the repository root's node_modules, but the "Install TypeScript & Knip" step runs with working-directory ./wasm-wrappers, which has no package.json (neither does the repo root — only wasm-wrappers/js-bindings-test/package.json exists). npm install <pkg> without a package.json installs into the current working directory, so node_modules will most likely be created at ./wasm-wrappers/node_modules, not $GITHUB_WORKSPACE/node_modules. These steps will then fail with "not found". Either install at the root explicitly (cd to $GITHUB_WORKSPACE or use npm install --prefix "$GITHUB_WORKSPACE"), or reference "$GITHUB_WORKSPACE/wasm-wrappers/node_modules/.bin/tsc".

Suggestion:

Suggested change
run: '"$GITHUB_WORKSPACE/node_modules/.bin/tsc" --project js-bindings-test/tsconfig.json'
run: npm install --prefix "$GITHUB_WORKSPACE" typescript knip

@nullPointerEnjoyer nullPointerEnjoyer Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The install step runs at the repository root without a working-directory override, so typescript and knip land in the root node_modules. The steps now invoke both binaries through the root node_modules/.bin path explicitly, which no longer depends on the runner image putting that directory on PATH.


- name: Run the tests
working-directory: ./wasm-wrappers
run: node --enable-source-maps js-bindings-test/node-entry.js

- name: Run Knip
working-directory: ./wasm-wrappers/js-bindings-test
run: npx knip
run: '"$GITHUB_WORKSPACE/node_modules/.bin/knip"'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bug · high
Same root-level node_modules assumption as the tsc step: since the install step runs in ./wasm-wrappers (which has no package.json), the knip binary will not be at $GITHUB_WORKSPACE/node_modules/.bin/knip. Point to the directory where the install actually lands, or make the install step root-prefixed.

Suggestion:

Suggested change
run: '"$GITHUB_WORKSPACE/node_modules/.bin/knip"'
run: '"$GITHUB_WORKSPACE/wasm-wrappers/node_modules/.bin/knip"'

@nullPointerEnjoyer nullPointerEnjoyer Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as the tsc step: the invocation now goes through $GITHUB_WORKSPACE/node_modules/.bin/knip, resolving the root install without relying on PATH.


wasm_artifacts:
runs-on: ubuntu-latest
Expand Down
125 changes: 105 additions & 20 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ members = [
"wallet/wallet-address-generator", # Wallet address generator binary.
"wallet/wallet-address-generator-lib", # Wallet address generator lib.
"wallet/wallet-rpc-client", # Wallet RPC communication.
"wallet/mcp-server", # Read-only MCP server on top of the wallet RPC daemon.
"wallet/wallet-rpc-daemon", # Wallet RPC daemon binary.
"wallet/wallet-rpc-lib", # Wallet RPC definitions library.
"wallet/wallet-test-node", # Node for wallet testing as a library.
Expand Down Expand Up @@ -152,12 +153,14 @@ cfg-if = "1.0"
chacha20poly1305 = "0.10"
chrono = "0.4"
clap = "4.5"
clap_complete = "4.5"
console-subscriber = "0.5"
criterion = "0.5"
crossterm = "0.28"
csv = "1.3"
ctor = "0.10"
derive_more = { version = "1.0", features = ["full"] }
dialoguer = "0.11"
directories = "5.0"
humantime = "2.1"
dyn-clone = "1.0"
Expand Down Expand Up @@ -232,6 +235,7 @@ reqwest = "0.12"
rfd = { version = "0.15", default-features = false }
ripemd = "0.1"
rlimit = "0.10"
rpassword = "7.2"
rstest = "0.24"
rstest_reuse = "0.7"
rusqlite = "0.34"
Expand Down
Loading
Loading