@totalreclaw/totalreclaw 3.3.12-rc.22 → 3.3.12-rc.23

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/SKILL.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: totalreclaw
3
3
  description: "End-to-end encrypted, decentralized memory for OpenClaw. A native kind:memory provider — recall is automatic via memory_search/memory_get, and facts are captured in the background. Trigger on 'install TotalReclaw', 'set up TotalReclaw', 'restore my recovery phrase', any recall request ('what do you remember about me', 'what's my X'), AND any explicit remember request ('remember X', 'save X')."
4
- version: 3.3.12-rc.22
4
+ version: 3.3.12-rc.23
5
5
  author: TotalReclaw Team
6
6
  license: MIT
7
7
  homepage: https://totalreclaw.xyz
@@ -359,8 +359,17 @@ async function submitFactOnChainLocked(protobufPayload, config, eoa, sender) {
359
359
  return rpcWithRetry({ url: bundlerUrl, headers, method, params });
360
360
  }
361
361
  const entryPoint = config.entryPointAddress || getWasm().getEntryPointAddress();
362
- // 2. Encode calldata (SimpleAccount.execute → DataEdge fallback)
363
- const calldataBytes = getWasm().encodeSingleCall(protobufPayload);
362
+ // 2. Encode calldata (SimpleAccount.execute → DataEdge).
363
+ // Target the resolved DataEdge address (env → relay billing → WASM default,
364
+ // per getSubgraphConfig / #462) so writes land on the SAME contract the
365
+ // relay reads from. The legacy `encodeSingleCall` bakes the PROD DataEdge,
366
+ // which stranded staging writes on prod (#460). Guard: an empty address
367
+ // (config built without getSubgraphConfig) falls back to the legacy encoder
368
+ // — behavior-identical to before, and avoids `encodeSingleCallTo` throwing
369
+ // on a bad address.
370
+ const calldataBytes = config.dataEdgeAddress
371
+ ? getWasm().encodeSingleCallTo(protobufPayload, config.dataEdgeAddress)
372
+ : getWasm().encodeSingleCall(protobufPayload);
364
373
  const callData = `0x${Buffer.from(calldataBytes).toString('hex')}`;
365
374
  // 3. Get gas prices from Pimlico
366
375
  const gasPrices = await rpc('pimlico_getUserOperationGasPrice', []);
@@ -541,10 +550,18 @@ async function submitFactBatchOnChainLocked(protobufPayloads, config, eoa, sende
541
550
  return rpcWithRetry({ url: bundlerUrl, headers, method, params });
542
551
  }
543
552
  const entryPoint = config.entryPointAddress || getWasm().getEntryPointAddress();
544
- // Encode batch calldata (SimpleAccount.executeBatch)
545
- // encodeBatchCall expects a JSON array of hex-encoded payload strings
553
+ // Encode batch calldata (SimpleAccount.executeBatch).
554
+ // encodeBatchCall{,To} expect a JSON array of hex-encoded payload strings.
555
+ // Target the resolved DataEdge address (env → relay billing → WASM default,
556
+ // per getSubgraphConfig / #462) so writes land on the SAME contract the
557
+ // relay reads from — the legacy `encodeBatchCall` bakes the PROD DataEdge and
558
+ // stranded staging writes on prod (#460). Guard: empty address → legacy
559
+ // encoder (behavior-identical; avoids `encodeBatchCallTo` throwing).
546
560
  const payloadsHex = protobufPayloads.map(p => p.toString('hex'));
547
- const calldataBytes = getWasm().encodeBatchCall(JSON.stringify(payloadsHex));
561
+ const payloadsJson = JSON.stringify(payloadsHex);
562
+ const calldataBytes = config.dataEdgeAddress
563
+ ? getWasm().encodeBatchCallTo(payloadsJson, config.dataEdgeAddress)
564
+ : getWasm().encodeBatchCall(payloadsJson);
548
565
  const callData = `0x${Buffer.from(calldataBytes).toString('hex')}`;
549
566
  // Get gas prices
550
567
  const gasPrices = await rpc('pimlico_getUserOperationGasPrice', []);
package/dist/tr-cli.js CHANGED
@@ -51,7 +51,7 @@ const STATE_PATH = CONFIG.onboardingStatePath;
51
51
  // Auto-synced by skill/scripts/sync-version.mjs from skill/plugin/package.json::version.
52
52
  // Do not edit by hand — running tests will catch drift but the publish workflow
53
53
  // rewrites this constant at the start of every npm/ClawHub publish.
54
- const PLUGIN_VERSION = '3.3.12-rc.22';
54
+ const PLUGIN_VERSION = '3.3.12-rc.23';
55
55
  function die(msg, code = 1) {
56
56
  process.stderr.write(`tr: ${msg}\n`);
57
57
  process.exit(code);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@totalreclaw/totalreclaw",
3
- "version": "3.3.12-rc.22",
3
+ "version": "3.3.12-rc.23",
4
4
  "description": "End-to-end encrypted, agent-portable memory for OpenClaw and any LLM-agent runtime. XChaCha20-Poly1305 with protobuf v4 + on-chain Memory Taxonomy v1 (claim / preference / directive / commitment / episode / summary).",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -68,7 +68,7 @@
68
68
  "scripts": {
69
69
  "build": "rm -rf dist && tsc -p tsconfig.json --noCheck",
70
70
  "verify-tarball": "node ../scripts/verify-tarball.mjs",
71
- "test": "npx tsx batch-gate.test.ts && npx tsx manifest-shape.test.ts && npx tsx config-schema.test.ts && npx tsx config.test.ts && npx tsx relay-headers.test.ts && npx tsx scope-address-visible.test.ts && npx tsx llm-profile-reader.test.ts && npx tsx llm-client.test.ts && npx tsx llm-client-retry.test.ts && npx tsx llm-client-json-mode.test.ts && npx tsx gateway-url.test.ts && npx tsx retype-setscope.test.ts && npx tsx tool-gating.test.ts && npx tsx onboarding-noninteractive.test.ts && npx tsx pair-cli-json.test.ts && npx tsx pair-qr.test.ts && npx tsx pair-remote-client.test.ts && npx tsx pair-http.test.ts && npx tsx pair-http-route-registration.test.ts && npx tsx pair-http-init.test.ts && npx tsx qa-bug-report.test.ts && npx tsx nonce-serialization.test.ts && npx tsx initcode-lifecycle.test.ts && npx tsx phrase-safety-registry.test.ts && npx tsx test_issue_92_onnx_download_ux.test.ts && npx tsx onboard-pair-only.test.ts && npx tsx import-state.test.ts && npx tsx import-time-smoke.test.ts && npx tsx install-staging-cleanup.test.ts && npx tsx partial-install-detection.test.ts && npx tsx install-reload-idempotency.test.ts && npx tsx skill-register.test.ts && npx tsx json-stdout-cleanliness.test.ts && npx tsx url-binding.test.ts && npx tsx fs-helpers.test.ts && npx tsx pair-cli-default-mode.test.ts && npx tsx embedding-fallback-tag.test.ts && npx tsx staging-banner-gate.test.ts && npx tsx restart-auth.test.ts && npx tsx inbound-user-tracker.test.ts && npx tsx register-command-name.test.ts && npx tsx skill-md-native.test.ts &&npx tsx tr-cli-json-output.test.ts && npx tsx import-upgrade-cli.test.ts && npx tsx cli-registercli-scope.test.ts && npx tsx postinstall-validate.test.ts && npx tsx credential-provider.test.ts && npx tsx memory-runtime.test.ts && npx tsx tools.test.ts && npx tsx register-native.test.ts && npx tsx relay.test.ts && npx tsx vault-crypto.test.ts && npx tsx entry-env.test.ts && npx tsx trajectory-poller.test.ts && npx tsx billing-cache.test.ts",
71
+ "test": "npx tsx batch-gate.test.ts && npx tsx manifest-shape.test.ts && npx tsx config-schema.test.ts && npx tsx config.test.ts && npx tsx relay-headers.test.ts && npx tsx scope-address-visible.test.ts && npx tsx llm-profile-reader.test.ts && npx tsx llm-client.test.ts && npx tsx llm-client-retry.test.ts && npx tsx llm-client-json-mode.test.ts && npx tsx gateway-url.test.ts && npx tsx retype-setscope.test.ts && npx tsx tool-gating.test.ts && npx tsx onboarding-noninteractive.test.ts && npx tsx pair-cli-json.test.ts && npx tsx pair-qr.test.ts && npx tsx pair-remote-client.test.ts && npx tsx pair-http.test.ts && npx tsx pair-http-route-registration.test.ts && npx tsx pair-http-init.test.ts && npx tsx qa-bug-report.test.ts && npx tsx nonce-serialization.test.ts && npx tsx initcode-lifecycle.test.ts && npx tsx phrase-safety-registry.test.ts && npx tsx test_issue_92_onnx_download_ux.test.ts && npx tsx onboard-pair-only.test.ts && npx tsx import-state.test.ts && npx tsx import-time-smoke.test.ts && npx tsx install-staging-cleanup.test.ts && npx tsx partial-install-detection.test.ts && npx tsx install-reload-idempotency.test.ts && npx tsx skill-register.test.ts && npx tsx json-stdout-cleanliness.test.ts && npx tsx url-binding.test.ts && npx tsx fs-helpers.test.ts && npx tsx pair-cli-default-mode.test.ts && npx tsx embedding-fallback-tag.test.ts && npx tsx staging-banner-gate.test.ts && npx tsx restart-auth.test.ts && npx tsx inbound-user-tracker.test.ts && npx tsx register-command-name.test.ts && npx tsx skill-md-native.test.ts &&npx tsx tr-cli-json-output.test.ts && npx tsx import-upgrade-cli.test.ts && npx tsx cli-registercli-scope.test.ts && npx tsx postinstall-validate.test.ts && npx tsx credential-provider.test.ts && npx tsx memory-runtime.test.ts && npx tsx tools.test.ts && npx tsx register-native.test.ts && npx tsx relay.test.ts && npx tsx vault-crypto.test.ts && npx tsx entry-env.test.ts && npx tsx trajectory-poller.test.ts && npx tsx billing-cache.test.ts && npx tsx dataedge-write-target.test.ts",
72
72
  "smoke:dist": "npx tsx dist-esm-smoke.test.ts",
73
73
  "check-scanner": "node ../scripts/check-scanner.mjs",
74
74
  "check-version-drift": "node ../scripts/check-version-drift.mjs",
package/skill.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "totalreclaw",
3
- "version": "3.3.12-rc.22",
3
+ "version": "3.3.12-rc.23",
4
4
  "description": "End-to-end encrypted memory for AI agents — portable, yours forever. XChaCha20-Poly1305 E2EE: server never sees plaintext.",
5
5
  "author": "TotalReclaw Team",
6
6
  "license": "MIT",
package/subgraph-store.ts CHANGED
@@ -447,8 +447,17 @@ async function submitFactOnChainLocked(
447
447
 
448
448
  const entryPoint = config.entryPointAddress || getWasm().getEntryPointAddress();
449
449
 
450
- // 2. Encode calldata (SimpleAccount.execute → DataEdge fallback)
451
- const calldataBytes = getWasm().encodeSingleCall(protobufPayload);
450
+ // 2. Encode calldata (SimpleAccount.execute → DataEdge).
451
+ // Target the resolved DataEdge address (env → relay billing → WASM default,
452
+ // per getSubgraphConfig / #462) so writes land on the SAME contract the
453
+ // relay reads from. The legacy `encodeSingleCall` bakes the PROD DataEdge,
454
+ // which stranded staging writes on prod (#460). Guard: an empty address
455
+ // (config built without getSubgraphConfig) falls back to the legacy encoder
456
+ // — behavior-identical to before, and avoids `encodeSingleCallTo` throwing
457
+ // on a bad address.
458
+ const calldataBytes = config.dataEdgeAddress
459
+ ? getWasm().encodeSingleCallTo(protobufPayload, config.dataEdgeAddress)
460
+ : getWasm().encodeSingleCall(protobufPayload);
452
461
  const callData = `0x${Buffer.from(calldataBytes).toString('hex')}`;
453
462
 
454
463
  // 3. Get gas prices from Pimlico
@@ -659,10 +668,18 @@ async function submitFactBatchOnChainLocked(
659
668
  }
660
669
  const entryPoint = config.entryPointAddress || getWasm().getEntryPointAddress();
661
670
 
662
- // Encode batch calldata (SimpleAccount.executeBatch)
663
- // encodeBatchCall expects a JSON array of hex-encoded payload strings
671
+ // Encode batch calldata (SimpleAccount.executeBatch).
672
+ // encodeBatchCall{,To} expect a JSON array of hex-encoded payload strings.
673
+ // Target the resolved DataEdge address (env → relay billing → WASM default,
674
+ // per getSubgraphConfig / #462) so writes land on the SAME contract the
675
+ // relay reads from — the legacy `encodeBatchCall` bakes the PROD DataEdge and
676
+ // stranded staging writes on prod (#460). Guard: empty address → legacy
677
+ // encoder (behavior-identical; avoids `encodeBatchCallTo` throwing).
664
678
  const payloadsHex = protobufPayloads.map(p => p.toString('hex'));
665
- const calldataBytes = getWasm().encodeBatchCall(JSON.stringify(payloadsHex));
679
+ const payloadsJson = JSON.stringify(payloadsHex);
680
+ const calldataBytes = config.dataEdgeAddress
681
+ ? getWasm().encodeBatchCallTo(payloadsJson, config.dataEdgeAddress)
682
+ : getWasm().encodeBatchCall(payloadsJson);
666
683
  const callData = `0x${Buffer.from(calldataBytes).toString('hex')}`;
667
684
 
668
685
  // Get gas prices
package/tr-cli.ts CHANGED
@@ -68,7 +68,7 @@ const STATE_PATH = CONFIG.onboardingStatePath;
68
68
  // Auto-synced by skill/scripts/sync-version.mjs from skill/plugin/package.json::version.
69
69
  // Do not edit by hand — running tests will catch drift but the publish workflow
70
70
  // rewrites this constant at the start of every npm/ClawHub publish.
71
- const PLUGIN_VERSION = '3.3.12-rc.22';
71
+ const PLUGIN_VERSION = '3.3.12-rc.23';
72
72
 
73
73
  function die(msg: string, code = 1): never {
74
74
  process.stderr.write(`tr: ${msg}\n`);