clawntenna 0.12.2 → 0.12.3
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/dist/cli/{chunk-XGIPK7SQ.js → chunk-6VM633OH.js} +42 -10
- package/dist/cli/{chunk-O76XQ2A7.js → chunk-KDFBD47K.js} +1 -1
- package/dist/cli/{chunk-VGRQJ7ZA.js → chunk-VMA7BES6.js} +2 -2
- package/dist/cli/index.js +5 -4
- package/dist/cli/{skill-JW4NXJ2O.js → skill-NOMAG55P.js} +2 -2
- package/dist/cli/{state-RKJRK6ZY.js → state-AIF4NWKT.js} +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/heartbeat.md +2 -2
- package/package.json +1 -1
- package/skill.json +1 -1
- package/skill.md +2 -1
|
@@ -22,7 +22,7 @@ var CHAINS = {
|
|
|
22
22
|
chainId: 8453,
|
|
23
23
|
name: "Base",
|
|
24
24
|
shortName: "Base",
|
|
25
|
-
rpc: "https://
|
|
25
|
+
rpc: "https://base.publicnode.com",
|
|
26
26
|
explorer: "https://basescan.org",
|
|
27
27
|
registry: "0x5fF6BF04F1B5A78ae884D977a3C80A0D8E2072bF",
|
|
28
28
|
keyManager: "0xdc302ff43a34F6aEa19426D60C9D150e0661E4f4",
|
|
@@ -4842,12 +4842,13 @@ var Clawntenna = class _Clawntenna {
|
|
|
4842
4842
|
};
|
|
4843
4843
|
|
|
4844
4844
|
// src/cli/init.ts
|
|
4845
|
-
import { existsSync, mkdirSync, writeFileSync, readFileSync } from "fs";
|
|
4845
|
+
import { existsSync, mkdirSync, writeFileSync, readFileSync, copyFileSync } from "fs";
|
|
4846
4846
|
import { homedir } from "os";
|
|
4847
4847
|
import { join } from "path";
|
|
4848
4848
|
import { ethers as ethers2 } from "ethers";
|
|
4849
4849
|
var CONFIG_DIR = join(homedir(), ".config", "clawntenna");
|
|
4850
4850
|
var CREDS_PATH = join(CONFIG_DIR, "credentials.json");
|
|
4851
|
+
var CREDS_BACKUP_PATH = CREDS_PATH + ".bak";
|
|
4851
4852
|
var LEGACY_DIR = join(homedir(), ".clawntenna");
|
|
4852
4853
|
var LEGACY_CREDS_PATH = join(LEGACY_DIR, "credentials.json");
|
|
4853
4854
|
function migrateV1ToV2(v1) {
|
|
@@ -4882,9 +4883,31 @@ function migrateV1ToV2(v1) {
|
|
|
4882
4883
|
}
|
|
4883
4884
|
return v2;
|
|
4884
4885
|
}
|
|
4886
|
+
function backupCredentials() {
|
|
4887
|
+
if (existsSync(CREDS_PATH)) {
|
|
4888
|
+
copyFileSync(CREDS_PATH, CREDS_BACKUP_PATH);
|
|
4889
|
+
}
|
|
4890
|
+
}
|
|
4891
|
+
function validateKeyAddress(creds) {
|
|
4892
|
+
const { address, privateKey } = creds.wallet;
|
|
4893
|
+
if (!privateKey || !address) return;
|
|
4894
|
+
try {
|
|
4895
|
+
const derived = ethers2.computeAddress(privateKey);
|
|
4896
|
+
if (derived.toLowerCase() !== address.toLowerCase()) {
|
|
4897
|
+
throw new Error(
|
|
4898
|
+
`Key mismatch in credentials.json: private key derives to ${derived} but stored address is ${address}. The file may have been corrupted. A backup was saved to ${CREDS_BACKUP_PATH}.`
|
|
4899
|
+
);
|
|
4900
|
+
}
|
|
4901
|
+
} catch (err) {
|
|
4902
|
+
if (err instanceof Error && err.message.startsWith("Key mismatch")) throw err;
|
|
4903
|
+
throw new Error(
|
|
4904
|
+
`Invalid private key in credentials.json. The key could not be parsed. A backup was saved to ${CREDS_BACKUP_PATH}.`
|
|
4905
|
+
);
|
|
4906
|
+
}
|
|
4907
|
+
}
|
|
4885
4908
|
async function runPostInit(address) {
|
|
4886
|
-
const { initState } = await import("./state-
|
|
4887
|
-
const { copySkillFiles } = await import("./skill-
|
|
4909
|
+
const { initState } = await import("./state-AIF4NWKT.js");
|
|
4910
|
+
const { copySkillFiles } = await import("./skill-NOMAG55P.js");
|
|
4888
4911
|
const stateResult = initState(address);
|
|
4889
4912
|
const skillResult = copySkillFiles();
|
|
4890
4913
|
return { stateResult, skillResult };
|
|
@@ -4894,6 +4917,7 @@ async function init(json = false) {
|
|
|
4894
4917
|
const raw = JSON.parse(readFileSync(CREDS_PATH, "utf-8"));
|
|
4895
4918
|
if (!raw.version) {
|
|
4896
4919
|
const migrated = migrateV1ToV2(raw);
|
|
4920
|
+
backupCredentials();
|
|
4897
4921
|
writeFileSync(CREDS_PATH, JSON.stringify(migrated, null, 2), { mode: 384 });
|
|
4898
4922
|
const { stateResult: stateResult3, skillResult: skillResult3 } = await runPostInit(migrated.wallet.address);
|
|
4899
4923
|
if (json) {
|
|
@@ -4935,6 +4959,7 @@ async function init(json = false) {
|
|
|
4935
4959
|
const raw = JSON.parse(readFileSync(LEGACY_CREDS_PATH, "utf-8"));
|
|
4936
4960
|
const migrated = raw.version ? raw : migrateV1ToV2(raw);
|
|
4937
4961
|
mkdirSync(CONFIG_DIR, { recursive: true, mode: 448 });
|
|
4962
|
+
backupCredentials();
|
|
4938
4963
|
writeFileSync(CREDS_PATH, JSON.stringify(migrated, null, 2), { mode: 384 });
|
|
4939
4964
|
const { stateResult: stateResult2, skillResult: skillResult2 } = await runPostInit(migrated.wallet.address);
|
|
4940
4965
|
if (json) {
|
|
@@ -5012,13 +5037,15 @@ function formatPostInit(stateResult, skillResult) {
|
|
|
5012
5037
|
function loadCredentials() {
|
|
5013
5038
|
if (existsSync(CREDS_PATH)) {
|
|
5014
5039
|
const raw = JSON.parse(readFileSync(CREDS_PATH, "utf-8"));
|
|
5015
|
-
|
|
5016
|
-
|
|
5040
|
+
const creds = !raw.version ? migrateV1ToV2(raw) : raw;
|
|
5041
|
+
validateKeyAddress(creds);
|
|
5042
|
+
return creds;
|
|
5017
5043
|
}
|
|
5018
5044
|
if (existsSync(LEGACY_CREDS_PATH)) {
|
|
5019
5045
|
const raw = JSON.parse(readFileSync(LEGACY_CREDS_PATH, "utf-8"));
|
|
5020
|
-
|
|
5021
|
-
|
|
5046
|
+
const creds = !raw.version ? migrateV1ToV2(raw) : raw;
|
|
5047
|
+
validateKeyAddress(creds);
|
|
5048
|
+
return creds;
|
|
5022
5049
|
}
|
|
5023
5050
|
return null;
|
|
5024
5051
|
}
|
|
@@ -5028,15 +5055,20 @@ function parseCommonFlags(flags) {
|
|
|
5028
5055
|
return {
|
|
5029
5056
|
chain: flags.chain ?? "base",
|
|
5030
5057
|
key: flags.key,
|
|
5058
|
+
rpc: flags.rpc,
|
|
5031
5059
|
json: flags.json === "true"
|
|
5032
5060
|
};
|
|
5033
5061
|
}
|
|
5034
5062
|
function loadClient(flags, requireWallet = true) {
|
|
5035
|
-
const
|
|
5063
|
+
const creds = loadCredentials();
|
|
5064
|
+
const privateKey = flags.key ?? creds?.wallet.privateKey;
|
|
5036
5065
|
if (requireWallet && !privateKey) {
|
|
5037
5066
|
outputError("No wallet found. Run `npx clawntenna init` first or pass --key.", flags.json ?? false);
|
|
5038
5067
|
}
|
|
5039
|
-
|
|
5068
|
+
const chainId = chainIdForCredentials(flags.chain);
|
|
5069
|
+
const credsRpc = creds?.chains[chainId]?.rpc;
|
|
5070
|
+
const rpcUrl = flags.rpc ?? process.env.CLAWNTENNA_RPC_URL ?? credsRpc;
|
|
5071
|
+
return new Clawntenna({ chain: flags.chain, privateKey: privateKey ?? void 0, rpcUrl });
|
|
5040
5072
|
}
|
|
5041
5073
|
function output(data, json) {
|
|
5042
5074
|
if (json) {
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
CONFIG_DIR,
|
|
4
4
|
loadCredentials,
|
|
5
5
|
output
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-6VM633OH.js";
|
|
7
7
|
|
|
8
8
|
// src/cli/state.ts
|
|
9
9
|
import { existsSync, mkdirSync, writeFileSync } from "fs";
|
|
@@ -21,7 +21,7 @@ function initState(address) {
|
|
|
21
21
|
startedAt: now,
|
|
22
22
|
lastScanAt: now,
|
|
23
23
|
mode: "active",
|
|
24
|
-
skillVersion: "0.12.
|
|
24
|
+
skillVersion: "0.12.3",
|
|
25
25
|
lastSkillCheck: now
|
|
26
26
|
},
|
|
27
27
|
chains: {
|
package/dist/cli/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
stateInit
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-VMA7BES6.js";
|
|
5
5
|
import {
|
|
6
6
|
showHeartbeat,
|
|
7
7
|
showSkill,
|
|
8
8
|
showSkillJson
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-KDFBD47K.js";
|
|
10
10
|
import {
|
|
11
11
|
REGISTRY_ABI,
|
|
12
12
|
chainIdForCredentials,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
output,
|
|
17
17
|
outputError,
|
|
18
18
|
parseCommonFlags
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-6VM633OH.js";
|
|
20
20
|
|
|
21
21
|
// src/cli/send.ts
|
|
22
22
|
async function send(topicId, message, flags) {
|
|
@@ -1299,7 +1299,7 @@ function decodeContractError(err) {
|
|
|
1299
1299
|
}
|
|
1300
1300
|
|
|
1301
1301
|
// src/cli/index.ts
|
|
1302
|
-
var VERSION = "0.12.
|
|
1302
|
+
var VERSION = "0.12.3";
|
|
1303
1303
|
var HELP = `
|
|
1304
1304
|
clawntenna v${VERSION}
|
|
1305
1305
|
On-chain encrypted messaging for AI agents
|
|
@@ -1401,6 +1401,7 @@ var HELP = `
|
|
|
1401
1401
|
|
|
1402
1402
|
Options:
|
|
1403
1403
|
--chain <base|avalanche|baseSepolia> Chain to use (default: base)
|
|
1404
|
+
--rpc <url> Custom RPC endpoint (or set CLAWNTENNA_RPC_URL)
|
|
1404
1405
|
--key <privateKey> Private key (overrides credentials)
|
|
1405
1406
|
--limit <N> Number of messages to read (default: 20)
|
|
1406
1407
|
--json Output as JSON
|
package/dist/index.cjs
CHANGED
|
@@ -99,7 +99,7 @@ var CHAINS = {
|
|
|
99
99
|
chainId: 8453,
|
|
100
100
|
name: "Base",
|
|
101
101
|
shortName: "Base",
|
|
102
|
-
rpc: "https://
|
|
102
|
+
rpc: "https://base.publicnode.com",
|
|
103
103
|
explorer: "https://basescan.org",
|
|
104
104
|
registry: "0x5fF6BF04F1B5A78ae884D977a3C80A0D8E2072bF",
|
|
105
105
|
keyManager: "0xdc302ff43a34F6aEa19426D60C9D150e0661E4f4",
|