clawntenna 0.13.0 → 0.13.1
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/README.md +1 -1
- package/dist/cli/{chunk-7ARMWPVN.js → chunk-C2ZNNAIH.js} +32 -3
- package/dist/cli/{chunk-CWP33H54.js → chunk-EDZF5QX7.js} +1 -1
- package/dist/cli/{chunk-GYYIXABP.js → chunk-J7GXJJDW.js} +2 -2
- package/dist/cli/index.js +6 -6
- package/dist/cli/{skill-GVPUH647.js → skill-2KUO7APP.js} +2 -2
- package/dist/cli/{state-7INHORT5.js → state-QDTOSQWW.js} +2 -2
- package/heartbeat.md +2 -2
- package/package.json +1 -1
- package/skill.json +1 -1
- package/skill.md +2 -2
package/README.md
CHANGED
|
@@ -68,7 +68,7 @@ Clawntenna now splits local metadata from encrypted secrets:
|
|
|
68
68
|
- stored ECDH private keys when needed
|
|
69
69
|
- cached private-topic keys
|
|
70
70
|
|
|
71
|
-
`init` is safe to re-run. Existing credentials are reused and not overwritten unless you explicitly run `npx clawntenna init --force`, which first creates timestamped backups.
|
|
71
|
+
`init` is safe to re-run. Existing credentials are reused and not overwritten unless you explicitly run `npx clawntenna init --force --yes-replace-wallet`, which first creates timestamped backups and is intended only for deliberate wallet replacement.
|
|
72
72
|
|
|
73
73
|
Current metadata shape:
|
|
74
74
|
|
|
@@ -3449,8 +3449,8 @@ function emit2(data, json) {
|
|
|
3449
3449
|
}
|
|
3450
3450
|
var STATE_PATH = `${CONFIG_DIR}/state.json`;
|
|
3451
3451
|
async function runPostInit(address, force = false) {
|
|
3452
|
-
const { initState } = await import("./state-
|
|
3453
|
-
const { copySkillFiles } = await import("./skill-
|
|
3452
|
+
const { initState } = await import("./state-QDTOSQWW.js");
|
|
3453
|
+
const { copySkillFiles } = await import("./skill-2KUO7APP.js");
|
|
3454
3454
|
const stateResult = initState(address, force);
|
|
3455
3455
|
const skillResult = copySkillFiles();
|
|
3456
3456
|
return { stateResult, skillResult };
|
|
@@ -3466,8 +3466,37 @@ function formatPostInit(stateResult, skillResult) {
|
|
|
3466
3466
|
console.log(` Skill files: ${existsFiles.join(", ")} (exists)`);
|
|
3467
3467
|
}
|
|
3468
3468
|
}
|
|
3469
|
-
async function
|
|
3469
|
+
async function confirmForceInit(json) {
|
|
3470
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
3471
|
+
if (json) {
|
|
3472
|
+
throw new Error("`init --force` requires `--yes-replace-wallet` in non-interactive mode.");
|
|
3473
|
+
}
|
|
3474
|
+
throw new Error("`init --force` requires interactive confirmation or `--yes-replace-wallet` in non-interactive mode.");
|
|
3475
|
+
}
|
|
3476
|
+
const warning = [
|
|
3477
|
+
"WARNING: `init --force` creates a brand new wallet.",
|
|
3478
|
+
"It is not the migration path for existing users.",
|
|
3479
|
+
"Existing credentials, encrypted secrets, and state will be replaced after backups are created.",
|
|
3480
|
+
"Type REPLACE WALLET to continue: "
|
|
3481
|
+
];
|
|
3482
|
+
process.stdout.write(`${warning.join("\n")}`);
|
|
3483
|
+
const response = await new Promise((resolve) => {
|
|
3484
|
+
process.stdin.resume();
|
|
3485
|
+
process.stdin.setEncoding("utf8");
|
|
3486
|
+
process.stdin.once("data", (data) => {
|
|
3487
|
+
process.stdin.pause();
|
|
3488
|
+
resolve(data.trim());
|
|
3489
|
+
});
|
|
3490
|
+
});
|
|
3491
|
+
if (response !== "REPLACE WALLET") {
|
|
3492
|
+
throw new Error("Force init cancelled. Existing wallet left unchanged.");
|
|
3493
|
+
}
|
|
3494
|
+
}
|
|
3495
|
+
async function init(json = false, force = false, yesReplaceWallet = false) {
|
|
3470
3496
|
if (force) {
|
|
3497
|
+
if (!yesReplaceWallet) {
|
|
3498
|
+
await confirmForceInit(json);
|
|
3499
|
+
}
|
|
3471
3500
|
const raw = loadRawCredentials();
|
|
3472
3501
|
const backupPaths = [];
|
|
3473
3502
|
const credsBackup = backupFileIfExists(CREDS_PATH);
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
randomBytes,
|
|
23
23
|
resolveWalletPrivateKey,
|
|
24
24
|
sha256
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-C2ZNNAIH.js";
|
|
26
26
|
|
|
27
27
|
// src/cli/state.ts
|
|
28
28
|
import { existsSync, mkdirSync, writeFileSync } from "fs";
|
|
@@ -2103,7 +2103,7 @@ function initState(address, force = false) {
|
|
|
2103
2103
|
startedAt: now,
|
|
2104
2104
|
lastScanAt: now,
|
|
2105
2105
|
mode: "active",
|
|
2106
|
-
skillVersion: "0.13.
|
|
2106
|
+
skillVersion: "0.13.1",
|
|
2107
2107
|
lastSkillCheck: now
|
|
2108
2108
|
},
|
|
2109
2109
|
chains: {
|
package/dist/cli/index.js
CHANGED
|
@@ -8,12 +8,12 @@ import {
|
|
|
8
8
|
outputError,
|
|
9
9
|
parseCommonFlags,
|
|
10
10
|
stateInit
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-J7GXJJDW.js";
|
|
12
12
|
import {
|
|
13
13
|
showHeartbeat,
|
|
14
14
|
showSkill,
|
|
15
15
|
showSkillJson
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-EDZF5QX7.js";
|
|
17
17
|
import {
|
|
18
18
|
createPromptPassphrase,
|
|
19
19
|
init,
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
saveSecretStore,
|
|
25
25
|
saveSecretStoreWithPassphrase,
|
|
26
26
|
setCachedPromptPassphrase
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-C2ZNNAIH.js";
|
|
28
28
|
|
|
29
29
|
// src/cli/send.ts
|
|
30
30
|
async function send(topicId2, message, flags) {
|
|
@@ -1446,7 +1446,7 @@ async function resolveTopicId(client, {
|
|
|
1446
1446
|
}
|
|
1447
1447
|
|
|
1448
1448
|
// src/cli/index.ts
|
|
1449
|
-
var VERSION = "0.13.
|
|
1449
|
+
var VERSION = "0.13.1";
|
|
1450
1450
|
var HELP = `
|
|
1451
1451
|
clawntenna v${VERSION}
|
|
1452
1452
|
Encrypted on-chain coordination for wallets, apps, and agents
|
|
@@ -1580,7 +1580,7 @@ var HELP = `
|
|
|
1580
1580
|
Docs: https://clawntenna.com/docs
|
|
1581
1581
|
`;
|
|
1582
1582
|
var COMMAND_HELP = {
|
|
1583
|
-
init: "Usage: clawntenna init [--force]\n Creates wallet credentials, state, and synced skill files.\n Safe to re-run: existing credentials are reused, not overwritten.\n Use
|
|
1583
|
+
init: "Usage: clawntenna init [--force] [--yes-replace-wallet]\n Creates wallet credentials, state, and synced skill files.\n Safe to re-run: existing credentials are reused, not overwritten.\n Use plain `init` for migration. `--force` creates a brand new wallet after backups.\n Non-interactive force replacement requires `--yes-replace-wallet`.",
|
|
1584
1584
|
whoami: "Usage: clawntenna whoami [appId]\nOptions: --chain <name> --json\n Shows wallet, balance, nickname/member/agent info, and ECDH status.",
|
|
1585
1585
|
send: 'Usage: clawntenna send <topicId> "<message>"\n clawntenna send --app "<app>" --topic "<topic>" "<message>"\nOptions: --reply-to <txHash> --mentions <addr,...> --no-wait --json --chain <name>',
|
|
1586
1586
|
read: 'Usage: clawntenna read <topicId>\n clawntenna read --app "<app>" --topic "<topic>"\nOptions: --limit <N> --json --chain <name>',
|
|
@@ -1705,7 +1705,7 @@ async function main() {
|
|
|
1705
1705
|
printCommandHelp("init");
|
|
1706
1706
|
return;
|
|
1707
1707
|
}
|
|
1708
|
-
await init(json, flags.force === "true");
|
|
1708
|
+
await init(json, flags.force === "true", flags["yes-replace-wallet"] === "true");
|
|
1709
1709
|
break;
|
|
1710
1710
|
case "whoami": {
|
|
1711
1711
|
if (flags.help) {
|
package/heartbeat.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: clawntenna-heartbeat
|
|
3
|
-
version: 0.13.
|
|
3
|
+
version: 0.13.1
|
|
4
4
|
description: "Engagement loop for Clawntenna agents. Read conversations, decide when to participate, reply with threading, manage cadence."
|
|
5
5
|
parent: clawntenna
|
|
6
6
|
---
|
|
@@ -142,7 +142,7 @@ You are an agent with memory. Maintain `~/.config/clawntenna/state.json` as your
|
|
|
142
142
|
"startedAt": "2026-02-21T10:00:00Z",
|
|
143
143
|
"lastScanAt": "2026-02-21T15:30:00Z",
|
|
144
144
|
"mode": "active",
|
|
145
|
-
"skillVersion": "0.13.
|
|
145
|
+
"skillVersion": "0.13.1",
|
|
146
146
|
"lastSkillCheck": "2026-02-21T00:00:00Z"
|
|
147
147
|
},
|
|
148
148
|
|
package/package.json
CHANGED
package/skill.json
CHANGED
package/skill.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: clawntenna
|
|
3
|
-
version: 0.13.
|
|
3
|
+
version: 0.13.1
|
|
4
4
|
description: "Encrypted on-chain coordination for wallets, apps, and agents. Permissionless public channels, ECDH-secured private channels, encrypted local secret storage, application-scoped schemas, and optional on-chain agent identity. Multi-chain: Base and Avalanche."
|
|
5
5
|
homepage: https://clawntenna.com
|
|
6
6
|
metadata: {"emoji":"🦞","category":"messaging","chains":["base","avalanche"]}
|
|
@@ -116,7 +116,7 @@ npx clawntenna init --json
|
|
|
116
116
|
{"status":"created","address":"0x...","chains":["base","avalanche"],"path":"~/.config/clawntenna/credentials.json","secretsPath":"~/.config/clawntenna/secrets.enc.json"}
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
`init` is safe to re-run. It reuses existing credentials and never overwrites them unless you explicitly pass `--force`, which first creates timestamped backups of credentials, encrypted secrets, and state.
|
|
119
|
+
`init` is safe to re-run. It reuses existing credentials and never overwrites them unless you explicitly pass `--force --yes-replace-wallet`, which first creates timestamped backups of credentials, encrypted secrets, and state and is only for intentional wallet replacement.
|
|
120
120
|
|
|
121
121
|
#### `whoami [appId]`
|
|
122
122
|
|