[package]
edition = "2024"
rust-version = "1.85"
name = "localharness"
version = "0.65.0"
build = false
exclude = [
"RELEASING.md",
"CHANGELOG.md",
"scripts/**",
".github/**",
"web/**",
"contracts/**",
"design/**",
"proxy/**",
"docs/SOP-QA-001-autonomous-feedback.md",
"docs/TESTING-0.24.0.md",
"docs/feedback-resolved*.txt",
"vercel.json",
".vercelignore",
".env",
".env.*",
".env.example",
"CLAUDE.md",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Agents that own themselves: one Rust crate that's both an agent SDK (streaming, tools, hooks, policies, triggers, MCP) and a wallet-owning, self-sovereign agent that runs in the browser."
documentation = "https://docs.rs/localharness"
readme = "README.md"
keywords = [
"agent",
"ai",
"gemini",
"llm",
"sdk",
]
categories = [
"api-bindings",
"asynchronous",
]
license = "Apache-2.0"
repository = "https://github.com/compusophy/localharness"
[package.metadata.wasm-pack.profile.release]
wasm-opt = false
[package.metadata.docs.rs]
features = [
"wallet",
"anthropic",
"openai",
]
[package.metadata.cargo-machete]
ignored = ["getrandom_v04"]
[features]
anthropic = []
browser-app = [
"dep:maud",
"dep:console_error_panic_hook",
"dep:pulldown-cmark",
"dep:qrcode",
"wallet",
"anthropic",
"openai",
]
browser-app-local = [
"browser-app",
"local",
]
default = ["native"]
local = [
"dep:burn",
"dep:burn-store",
"dep:tokenizers",
"dep:getrandom_v04",
]
mainnet = []
native = [
"dep:walkdir",
"dep:tempfile",
"tokio/rt-multi-thread",
"tokio/process",
"tokio/fs",
"tokio/io-util",
"tokio/io-std",
]
openai = []
wallet = [
"dep:k256",
"dep:sha3",
"dep:rand_core",
"dep:bip39",
"dep:zeroize",
]
[lib]
name = "localharness"
crate-type = [
"lib",
"cdylib",
]
path = "src/lib.rs"
[[bin]]
name = "gen-docs"
path = "src/bin/gen-docs.rs"
required-features = ["wallet"]
[[bin]]
name = "localharness"
path = "src/bin/localharness/main.rs"
required-features = [
"wallet",
"native",
]
[[example]]
name = "agent_with_tool"
path = "examples/agent_with_tool.rs"
[[example]]
name = "autonomous_company"
path = "examples/autonomous_company.rs"
[[example]]
name = "basic_agent"
path = "examples/basic_agent.rs"
[[example]]
name = "child_diamond_genesis"
path = "examples/child_diamond_genesis.rs"
required-features = ["wallet"]
[[example]]
name = "create_subagent_live"
path = "examples/create_subagent_live.rs"
required-features = ["wallet"]
[[example]]
name = "diamond_cut_e2e"
path = "examples/diamond_cut_e2e.rs"
required-features = ["wallet"]
[[example]]
name = "hooks_and_policies"
path = "examples/hooks_and_policies.rs"
[[example]]
name = "minimal_agent"
path = "examples/minimal_agent.rs"
[[example]]
name = "push_sub_live"
path = "examples/push_sub_live.rs"
required-features = ["wallet"]
[[example]]
name = "soliditylite_array_e2e"
path = "examples/soliditylite_array_e2e.rs"
required-features = ["wallet"]
[[example]]
name = "soliditylite_counter_e2e"
path = "examples/soliditylite_counter_e2e.rs"
required-features = ["wallet"]
[[example]]
name = "soliditylite_counterfacet_e2e"
path = "examples/soliditylite_counterfacet_e2e.rs"
required-features = ["wallet"]
[[example]]
name = "soliditylite_facet_e2e"
path = "examples/soliditylite_facet_e2e.rs"
required-features = ["wallet"]
[[example]]
name = "soliditylite_getter_live"
path = "examples/soliditylite_getter_live.rs"
required-features = ["wallet"]
[[example]]
name = "soliditylite_mapping_e2e"
path = "examples/soliditylite_mapping_e2e.rs"
required-features = ["wallet"]
[[example]]
name = "soliditylite_mvp_capstone"
path = "examples/soliditylite_mvp_capstone.rs"
required-features = ["wallet"]
[[example]]
name = "tempo_create_probe"
path = "examples/tempo_create_probe.rs"
required-features = ["wallet"]
[[example]]
name = "tempo_tx_live"
path = "examples/tempo_tx_live.rs"
required-features = ["wallet"]
[[example]]
name = "thought_signature_live"
path = "examples/thought_signature_live.rs"
required-features = ["wallet"]
[[test]]
name = "agents_claude_in_sync"
path = "tests/agents_claude_in_sync.rs"
[[test]]
name = "bashlite_sh"
path = "tests/bashlite_sh.rs"
[[test]]
name = "chat_toolset_single_source"
path = "tests/chat_toolset_single_source.rs"
[[test]]
name = "data_action_dispatch"
path = "tests/data_action_dispatch.rs"
[[test]]
name = "host_agent_cartridge"
path = "tests/host_agent_cartridge.rs"
[[test]]
name = "host_compose_cartridge"
path = "tests/host_compose_cartridge.rs"
[[test]]
name = "readme_skill_in_sync"
path = "tests/readme_skill_in_sync.rs"
[[test]]
name = "tool_hook_policy"
path = "tests/tool_hook_policy.rs"
[[test]]
name = "turn_hooks"
path = "tests/turn_hooks.rs"
[[test]]
name = "variable_resolution_cartridge"
path = "tests/variable_resolution_cartridge.rs"
[dependencies.aes-gcm]
version = "0.10"
features = [
"aes",
"alloc",
"getrandom",
]
default-features = false
[dependencies.arc-swap]
version = "1"
[dependencies.async-trait]
version = "0.1"
[dependencies.base64]
version = "0.22"
[dependencies.bip39]
version = "2"
features = [
"std",
"rand",
]
optional = true
default-features = false
[dependencies.burn]
version = "0.21"
features = [
"std",
"wgpu",
]
optional = true
default-features = false
[dependencies.burn-store]
version = "0.21"
features = ["safetensors"]
optional = true
default-features = false
[dependencies.bytes]
version = "1"
[dependencies.console_error_panic_hook]
version = "0.1"
optional = true
[dependencies.dunce]
version = "1.0"
[dependencies.futures-core]
version = "0.3"
[dependencies.futures-util]
version = "0.3"
features = [
"std",
"sink",
]
default-features = false
[dependencies.getrandom_v04]
version = "0.4"
features = ["wasm_js"]
optional = true
package = "getrandom"
[dependencies.globset]
version = "0.4"
[dependencies.k256]
version = "0.13"
features = [
"ecdsa",
"arithmetic",
"ecdh",
"std",
]
optional = true
default-features = false
[dependencies.maud]
version = "0.26"
optional = true
[dependencies.parking_lot]
version = "0.12"
[dependencies.pulldown-cmark]
version = "0.10"
features = ["html"]
optional = true
default-features = false
[dependencies.qrcode]
version = "0.14"
features = ["svg"]
optional = true
default-features = false
[dependencies.rand_core]
version = "0.6"
features = ["getrandom"]
optional = true
default-features = false
[dependencies.regex]
version = "1"
[dependencies.reqwest]
version = "0.12"
features = [
"rustls-tls",
"json",
"stream",
]
default-features = false
[dependencies.serde]
version = "1.0"
features = ["derive"]
[dependencies.serde_json]
version = "1.0"
[dependencies.sha3]
version = "0.10"
optional = true
default-features = false
[dependencies.tempfile]
version = "3"
optional = true
[dependencies.thiserror]
version = "1"
[dependencies.tokenizers]
version = "0.22"
features = ["unstable_wasm"]
optional = true
default-features = false
[dependencies.tokio]
version = "1.42"
features = [
"macros",
"sync",
"time",
"rt",
]
default-features = false
[dependencies.tokio-stream]
version = "0.1"
features = ["sync"]
[dependencies.tracing]
version = "0.1"
[dependencies.url]
version = "2"
[dependencies.uuid]
version = "1"
features = ["v4"]
[dependencies.walkdir]
version = "2"
optional = true
[dependencies.zeroize]
version = "1"
optional = true
[dev-dependencies.async-trait]
version = "0.1"
[dev-dependencies.serde_json]
version = "1.0"
[dev-dependencies.tokio]
version = "1.42"
features = [
"macros",
"rt-multi-thread",
"test-util",
]
[target.'cfg(target_arch = "wasm32")'.dependencies.getrandom]
version = "0.2"
features = ["js"]
[target.'cfg(target_arch = "wasm32")'.dependencies.js-sys]
version = "0.3"
[target.'cfg(target_arch = "wasm32")'.dependencies.uuid]
version = "1"
features = ["js"]
[target.'cfg(target_arch = "wasm32")'.dependencies.wasm-bindgen]
version = "0.2"
[target.'cfg(target_arch = "wasm32")'.dependencies.wasm-bindgen-futures]
version = "0.4"
[target.'cfg(target_arch = "wasm32")'.dependencies.web-sys]
version = "0.3"
features = [
"Navigator",
"StorageManager",
"FileSystemDirectoryHandle",
"FileSystemFileHandle",
"FileSystemHandle",
"FileSystemHandleKind",
"FileSystemGetDirectoryOptions",
"FileSystemGetFileOptions",
"FileSystemRemoveOptions",
"FileSystemWritableFileStream",
"File",
"Blob",
"Window",
"WorkerGlobalScope",
"Document",
"Element",
"HtmlElement",
"CssStyleDeclaration",
"VisualViewport",
"DomTokenList",
"HtmlInputElement",
"HtmlTextAreaElement",
"HtmlDetailsElement",
"HtmlCanvasElement",
"CanvasRenderingContext2d",
"ImageData",
"DomRect",
"Event",
"EventTarget",
"MouseEvent",
"TouchEvent",
"TouchList",
"Touch",
"KeyboardEvent",
"InputEvent",
"MessageEvent",
"Worker",
"WorkerOptions",
"WorkerType",
"Blob",
"BlobPropertyBag",
"Url",
"WebSocket",
"BinaryType",
"AudioContext",
"BaseAudioContext",
"AudioNode",
"AudioParam",
"AudioDestinationNode",
"OscillatorNode",
"OscillatorType",
"GainNode",
"AudioBuffer",
"AudioBufferSourceNode",
"AudioScheduledSourceNode",
"RtcPeerConnection",
"RtcConfiguration",
"RtcIceServer",
"RtcDataChannel",
"RtcDataChannelEvent",
"RtcDataChannelInit",
"RtcDataChannelType",
"RtcDataChannelState",
"RtcSessionDescription",
"RtcSessionDescriptionInit",
"RtcSdpType",
"RtcIceGatheringState",
"RtcPeerConnectionIceEvent",
"Clipboard",
"History",
"Location",
"Storage",
"HtmlIFrameElement",
"NodeList",
"Crypto",
"SubtleCrypto",
"CryptoKey",
"AesGcmParams",
"Notification",
"NotificationOptions",
"NotificationPermission",
"ServiceWorker",
"ServiceWorkerContainer",
"ServiceWorkerRegistration",
"PushManager",
"PushSubscription",
"PushSubscriptionOptionsInit",
"console",
]
[profile.release]
opt-level = 3
lto = "thin"
codegen-units = 1
panic = "abort"
strip = true