@agentlayer.tech/wallet 0.1.68 → 0.1.69

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.
@@ -984,6 +984,54 @@ const solanaToolDefinitions = [
984
984
  additionalProperties: false,
985
985
  },
986
986
  },
987
+ {
988
+ name: "get_kamino_portfolio",
989
+ description:
990
+ "Get the unified Kamino portfolio view for a Solana wallet on mainnet across lending, multiply, leverage, liquidity, earn, and staking.",
991
+ parameters: {
992
+ type: "object",
993
+ properties: {
994
+ user: {
995
+ type: "string",
996
+ description: "Optional Solana wallet address override.",
997
+ },
998
+ },
999
+ additionalProperties: false,
1000
+ },
1001
+ },
1002
+ {
1003
+ name: "get_kamino_vaults",
1004
+ description: "List Kamino Earn vaults currently available on Solana mainnet.",
1005
+ parameters: { type: "object", properties: {}, additionalProperties: false },
1006
+ },
1007
+ {
1008
+ name: "get_kamino_earn_positions",
1009
+ description: "Get Kamino Earn vault positions for a Solana wallet on mainnet.",
1010
+ parameters: {
1011
+ type: "object",
1012
+ properties: {
1013
+ user: {
1014
+ type: "string",
1015
+ description: "Optional Solana wallet address override.",
1016
+ },
1017
+ },
1018
+ additionalProperties: false,
1019
+ },
1020
+ },
1021
+ {
1022
+ name: "get_kamino_liquidity_positions",
1023
+ description: "Get Kamino Liquidity strategy positions for a Solana wallet on mainnet.",
1024
+ parameters: {
1025
+ type: "object",
1026
+ properties: {
1027
+ user: {
1028
+ type: "string",
1029
+ description: "Optional Solana wallet address override.",
1030
+ },
1031
+ },
1032
+ additionalProperties: false,
1033
+ },
1034
+ },
987
1035
  {
988
1036
  name: "get_kamino_lend_markets",
989
1037
  description: "List Kamino lending markets currently available on Solana mainnet.",
@@ -1277,6 +1325,40 @@ const solanaToolDefinitions = [
1277
1325
  additionalProperties: false,
1278
1326
  },
1279
1327
  },
1328
+ {
1329
+ name: "kamino_earn_deposit",
1330
+ description: "Preview, prepare, or execute a Kamino Earn vault deposit using a decimal token amount. Preview or prepare first. After the user explicitly confirms the shown summary in chat, call execute; the OpenClaw plugin handles the internal execution authorization automatically.",
1331
+ optional: true,
1332
+ parameters: {
1333
+ type: "object",
1334
+ properties: {
1335
+ kvault: { type: "string" },
1336
+ amount_ui: { type: "string" },
1337
+ mode: { type: "string", enum: ["preview", "prepare", "execute"] },
1338
+ purpose: { type: "string" },
1339
+ user_intent: { type: "boolean" },
1340
+ },
1341
+ required: ["kvault", "amount_ui", "mode", "purpose"],
1342
+ additionalProperties: false,
1343
+ },
1344
+ },
1345
+ {
1346
+ name: "kamino_earn_withdraw",
1347
+ description: "Preview, prepare, or execute a Kamino Earn vault withdraw using a decimal token amount. Preview or prepare first. After the user explicitly confirms the shown summary in chat, call execute; the OpenClaw plugin handles the internal execution authorization automatically.",
1348
+ optional: true,
1349
+ parameters: {
1350
+ type: "object",
1351
+ properties: {
1352
+ kvault: { type: "string" },
1353
+ amount_ui: { type: "string" },
1354
+ mode: { type: "string", enum: ["preview", "prepare", "execute"] },
1355
+ purpose: { type: "string" },
1356
+ user_intent: { type: "boolean" },
1357
+ },
1358
+ required: ["kvault", "amount_ui", "mode", "purpose"],
1359
+ additionalProperties: false,
1360
+ },
1361
+ },
1280
1362
  {
1281
1363
  name: "flash_trade_open_position",
1282
1364
  description: "Preview, prepare, or execute a Flash Trade perpetual open on Solana mainnet using a supported Flash collateral.",
@@ -2,7 +2,7 @@
2
2
  "id": "agent-wallet",
3
3
  "name": "Agent Wallet",
4
4
  "description": "Official OpenClaw plugin bridge for the agent-wallet backends, including Solana, local BTC, and local EVM.",
5
- "version": "0.1.68",
5
+ "version": "0.1.69",
6
6
  "contracts": {
7
7
  "tools": [
8
8
  "agentlayer_autonomous_approve",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentlayertech/agent-wallet-plugin",
3
- "version": "0.1.68",
3
+ "version": "0.1.69",
4
4
  "description": "OpenClaw plugin bridge for the AgentLayer wallet runtime.",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN ../../../LICENSE",
package/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - Fixed local EVM autostart incorrectly trusting any healthy same-version
6
+ `wdk-evm-wallet` already listening on the shared localhost port. If a temp or
7
+ alternate `OPENCLAW_HOME` had left a daemon running, host runtimes could hit
8
+ `Unauthorized` because the daemon served a different `dataDir` and bearer
9
+ token than the current install expected. Local EVM startup now also validates
10
+ the reported `dataDir` from `/health` and restarts mismatched daemons before
11
+ issuing authenticated requests.
12
+ - `agent-wallet/agent_wallet/evm_user_wallets.py`
13
+ - `agent-wallet/scripts/bootstrap_openclaw_evm.py`
14
+ - `agent-wallet/tests/smoke_openclaw_evm_runtime_restart_wrong_home.py`
15
+
5
16
  ## v0.1.62 - 2026-07-04
6
17
 
7
18
  - Made default boot-key storage prompt-free on macOS. The automatic keystore
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.68
1
+ 0.1.69
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Keep in sync with package.json, pyproject.toml, and the npm installer version.
4
4
  # scripts/check_release_version.mjs enforces this on release.
5
- __version__ = "0.1.68"
5
+ __version__ = "0.1.69"
6
6
 
7
7
  __all__ = [
8
8
  "config",
@@ -86,6 +86,43 @@ def _read_on_disk_service_version(wallet_root: Path) -> str | None:
86
86
  return version or None
87
87
 
88
88
 
89
+ def _expected_local_service_data_dir() -> Path:
90
+ configured = os.getenv("WDK_EVM_DATA_DIR", "").strip()
91
+ if configured:
92
+ return Path(configured).expanduser().resolve()
93
+ return (resolve_openclaw_home() / "wdk-evm-wallet").resolve()
94
+
95
+
96
+ def _same_path(left: str | Path | None, right: str | Path | None) -> bool:
97
+ if left is None or right is None:
98
+ return False
99
+ try:
100
+ left_path = Path(str(left)).expanduser().resolve()
101
+ right_path = Path(str(right)).expanduser().resolve()
102
+ except OSError:
103
+ return False
104
+ return left_path == right_path
105
+
106
+
107
+ def _should_restart_local_service(
108
+ health: dict[str, Any] | None,
109
+ *,
110
+ wallet_root: Path | None,
111
+ ) -> bool:
112
+ if health is None:
113
+ return False
114
+ expected_version = _read_on_disk_service_version(wallet_root) if wallet_root is not None else None
115
+ running_version = str(health.get("version") or "").strip()
116
+ if expected_version and running_version and running_version != expected_version:
117
+ return True
118
+
119
+ reported_data_dir = str(health.get("dataDir") or "").strip()
120
+ if reported_data_dir and not _same_path(reported_data_dir, _expected_local_service_data_dir()):
121
+ return True
122
+
123
+ return False
124
+
125
+
89
126
  def _listening_pids(port: int) -> list[int]:
90
127
  """PIDs LISTENing on a local TCP port (via lsof), excluding our own."""
91
128
  lsof = shutil.which("lsof")
@@ -177,18 +214,14 @@ def _auto_start_local_service(service_url: str, network: str) -> None:
177
214
  health = _service_health(service_url)
178
215
  if health is not None:
179
216
  # Already running. The daemon loads code once at boot (no hot-reload), so a
180
- # long-running process keeps serving stale code after a release. Restart it
181
- # only when its reported version differs from the on-disk launcher version
182
- # comparing against the version the restarted daemon will itself report keeps
183
- # this idempotent (steady state = no-op) and free of restart loops. Remote
217
+ # long-running process keeps serving stale code after a release. It can also
218
+ # keep serving the wrong local vault after a temp/smoke install left another
219
+ # daemon on the shared localhost port. Restart only when the local daemon no
220
+ # longer matches the expected launcher version or expected dataDir. Remote
184
221
  # (non-local) healthy services we don't manage are left untouched.
185
222
  if not _is_local_service_url(service_url):
186
223
  return
187
- expected_version = (
188
- _read_on_disk_service_version(wallet_root) if wallet_root is not None else None
189
- )
190
- running_version = str(health.get("version") or "").strip()
191
- if expected_version is None or running_version == expected_version:
224
+ if not _should_restart_local_service(health, wallet_root=wallet_root):
192
225
  return
193
226
  _stop_local_service(service_url)
194
227
  if not _is_local_service_url(service_url):
@@ -2,7 +2,7 @@
2
2
  "id": "agent-wallet",
3
3
  "name": "Agent Wallet",
4
4
  "description": "Plugin-friendly wallet backend for OpenClaw agents with safe wallet tools and runtime instructions across Solana, local BTC, and local EVM.",
5
- "version": "0.1.68",
5
+ "version": "0.1.69",
6
6
  "skills": ["skills/wallet-operator"],
7
7
  "configSchema": {
8
8
  "type": "object",
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "openclaw-agent-wallet"
7
- version = "0.1.68"
7
+ version = "0.1.69"
8
8
  description = "Plugin-friendly wallet backend for OpenClaw agents"
9
9
  requires-python = ">=3.10"
10
10
  dependencies = [
@@ -142,17 +142,15 @@ def _auto_start_local_service(
142
142
  # steady state is a no-op. See agent_wallet.evm_user_wallets for the shared
143
143
  # health/version/stop helpers.
144
144
  from agent_wallet.evm_user_wallets import (
145
- _read_on_disk_service_version,
146
145
  _service_health,
146
+ _should_restart_local_service,
147
147
  _stop_local_service,
148
148
  )
149
149
 
150
150
  restarted = False
151
151
  health = _service_health(service_url)
152
152
  if health is not None:
153
- expected_version = _read_on_disk_service_version(wdk_wallet_root)
154
- running_version = str(health.get("version") or "").strip()
155
- if expected_version is None or running_version == expected_version:
153
+ if not _should_restart_local_service(health, wallet_root=wdk_wallet_root):
156
154
  return {"started": False, "already_healthy": True}
157
155
  _stop_local_service(service_url)
158
156
  restarted = True
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agent-wallet",
3
3
  "displayName": "Agent Wallet",
4
- "version": "0.1.68",
4
+ "version": "0.1.69",
5
5
  "description": "Claude Code bridge for the existing AgentLayer wallet runtime. Connects to Solana, Bitcoin, and EVM wallets without creating a new one.",
6
6
  "author": {
7
7
  "name": "AgentLayer"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-wallet",
3
- "version": "0.1.68",
3
+ "version": "0.1.69",
4
4
  "description": "Codex plugin bridge for the AgentLayer wallet runtime.",
5
5
  "author": {
6
6
  "name": "AgentLayer"
@@ -1,5 +1,5 @@
1
1
  name: agent-wallet
2
- version: 0.1.68
2
+ version: 0.1.69
3
3
  description: Thin Hermes Agent bridge to the existing AgentLayer/OpenClaw wallet backend
4
4
  provides_tools:
5
5
  - agent_wallet_tools
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentlayer.tech/wallet",
3
- "version": "0.1.68",
3
+ "version": "0.1.69",
4
4
  "description": "NPM installer for the OpenClaw Agent Wallet local runtime.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wdk-btc-wallet",
3
- "version": "0.1.68",
3
+ "version": "0.1.69",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Separate BTC-only wallet service built on Tether WDK.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wdk-evm-wallet",
3
- "version": "0.1.68",
3
+ "version": "0.1.69",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Separate EVM wallet service built on Tether WDK.",