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 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-7INHORT5.js");
3453
- const { copySkillFiles } = await import("./skill-GVPUH647.js");
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 init(json = false, force = false) {
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);
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CONFIG_DIR
4
- } from "./chunk-7ARMWPVN.js";
4
+ } from "./chunk-C2ZNNAIH.js";
5
5
 
6
6
  // src/cli/skill.ts
7
7
  import { readFileSync, existsSync, copyFileSync, mkdirSync } from "fs";
@@ -22,7 +22,7 @@ import {
22
22
  randomBytes,
23
23
  resolveWalletPrivateKey,
24
24
  sha256
25
- } from "./chunk-7ARMWPVN.js";
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.0",
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-GYYIXABP.js";
11
+ } from "./chunk-J7GXJJDW.js";
12
12
  import {
13
13
  showHeartbeat,
14
14
  showSkill,
15
15
  showSkillJson
16
- } from "./chunk-CWP33H54.js";
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-7ARMWPVN.js";
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.0";
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 --force to create a fresh profile after backing up existing credentials, secrets, and state.",
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) {
@@ -4,8 +4,8 @@ import {
4
4
  showHeartbeat,
5
5
  showSkill,
6
6
  showSkillJson
7
- } from "./chunk-CWP33H54.js";
8
- import "./chunk-7ARMWPVN.js";
7
+ } from "./chunk-EDZF5QX7.js";
8
+ import "./chunk-C2ZNNAIH.js";
9
9
  export {
10
10
  copySkillFiles,
11
11
  showHeartbeat,
@@ -3,8 +3,8 @@ import {
3
3
  STATE_PATH,
4
4
  initState,
5
5
  stateInit
6
- } from "./chunk-GYYIXABP.js";
7
- import "./chunk-7ARMWPVN.js";
6
+ } from "./chunk-J7GXJJDW.js";
7
+ import "./chunk-C2ZNNAIH.js";
8
8
  export {
9
9
  STATE_PATH,
10
10
  initState,
package/heartbeat.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: clawntenna-heartbeat
3
- version: 0.13.0
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.0",
145
+ "skillVersion": "0.13.1",
146
146
  "lastSkillCheck": "2026-02-21T00:00:00Z"
147
147
  },
148
148
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawntenna",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
4
4
  "description": "Encrypted on-chain coordination SDK for wallets, applications, services, and agents.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
package/skill.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawntenna",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
4
4
  "contractVersion": "12.0.0",
5
5
  "escrowVersion": "5.0.0",
6
6
  "schemaRegistryVersion": "2.0.0",
package/skill.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: clawntenna
3
- version: 0.13.0
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