outlayer-cli 0.1.1

CLI for deploying, running, and managing OutLayer agents
[package]
name = "outlayer-cli"
version = "0.1.1"
edition = "2021"
# near-primitives 0.29 / cargo_metadata 0.21 pulled in by the
# near-jsonrpc-client 0.16 bump require rustc 1.86+. Cargo refuses
# the build with an older toolchain instead of emitting a confusing
# transitive error from one of the dependencies.
rust-version = "1.86"
description = "CLI for deploying, running, and managing OutLayer agents"
license = "MIT OR Apache-2.0"
repository = "https://github.com/out-layer/outlayer-cli"
homepage = "https://outlayer.ai"
keywords = ["near", "outlayer", "agents", "cli", "wasm"]
categories = ["command-line-utilities"]
readme = "README.md"
include = ["src/**/*", "templates/**/*", "res/**/*", "Cargo.toml", "README.md", "LICENSE*"]

[lib]
name = "outlayer_cli"
path = "src/lib.rs"

[[bin]]
name = "outlayer"
path = "src/main.rs"

[features]
default = []
test-runner = ["wasmtime", "wasmtime-wasi", "wasmtime-wasi-http", "reqwest/blocking"]

[package.metadata.docs.rs]
features = ["test-runner"]

[dependencies]
# CLI
clap = { version = "4", features = ["derive"] }

# Async runtime
tokio = { version = "1", features = ["full"] }

# HTTP client (0.11 to match near crates)
reqwest = { version = "0.11", features = ["json", "rustls-tls"], default-features = false }

# Self-update (`outlayer update`) — pulls the latest GitHub release asset for
# the current platform and swaps the running binary. 0.39 shares reqwest 0.11
# (no duplicate reqwest); rustls to match, tar/zip for the release archives.
self_update = { version = "0.39", default-features = false, features = ["rustls", "archive-tar", "compression-flate2", "archive-zip", "compression-zip-deflate"] }

# NEAR
# Bumped 0.26 → 0.29 to get the `UseGlobalContract` action variant
# (NEP-591). Vault deploy uses it instead of inline DeployContract so
# the tx payload is a hash, not 150 KB of WASM. jsonrpc-client 0.16
# is the matching pair (`>0.22,<0.30`).
near-jsonrpc-client = "0.16"
near-primitives = "0.29"
near-crypto = "0.29"
near-jsonrpc-primitives = "0.29"

# Crypto
chacha20poly1305 = "0.10"
rand = "0.8"
hex = "0.4"
sha2 = "0.10"
base64 = "0.22"
borsh = "1"
# ECIES v1 (X25519 ECDH + HKDF + ChaCha20-Poly1305) — matches the
# dashboard's `lib/ecies.ts` and is the format keystore-worker
# `decrypt_ecies` consumes via `derive_x25519_keypair`. Legacy
# ChaCha20-with-pubkey-as-symmetric-key path is broken for
# vault-bound secrets (keystore's `decrypt_legacy` derives Ed25519
# verifying_key, CLI used X25519 pubkey → different bytes), so we
# migrate the CLI to ECIES too.
x25519-dalek = { version = "2", features = ["static_secrets"] }
hkdf = "0.12"

# OS keychain
keyring = "3"

# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
toml = "0.8"

# TLS (vendored OpenSSL for cross-compilation)
openssl = { version = "0.10", features = ["vendored"] }

# Error handling
anyhow = "1"

# Utils
dirs = "5"
bs58 = "0.5.1"

# Test runner (optional, enabled by --features test-runner)
wasmtime = { version = "28", features = ["component-model", "async"], optional = true }
wasmtime-wasi = { version = "28", optional = true }
wasmtime-wasi-http = { version = "28", optional = true }

[dev-dependencies]
serial_test = "3"
tempfile = "3"
tokio = { version = "1", features = ["full", "test-util"] }