badgerclaw 0.1.4 → 0.1.6

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.
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function runAutoPair(silent?: boolean): Promise<number>;
3
+ export declare const autopairCommand: Command;
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.autopairCommand = void 0;
7
+ exports.runAutoPair = runAutoPair;
8
+ const commander_1 = require("commander");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const ora_1 = __importDefault(require("ora"));
11
+ const os_1 = __importDefault(require("os"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const fs_1 = __importDefault(require("fs"));
14
+ const auth_1 = require("../lib/auth");
15
+ const api_1 = require("../lib/api");
16
+ const OPENCLAW_CONFIG = path_1.default.join(os_1.default.homedir(), '.openclaw', 'openclaw.json');
17
+ const API_BASE = 'https://api.badgerclaw.ai';
18
+ async function runAutoPair(silent = false) {
19
+ const auth = (0, auth_1.readAuth)();
20
+ if (!auth)
21
+ return 0;
22
+ const client = (0, api_1.getAuthenticatedClient)(auth.access_token);
23
+ try {
24
+ const { data: pending } = await client.get('/api/v1/openclaw/pending-pairs');
25
+ if (!pending || pending.length === 0)
26
+ return 0;
27
+ let paired = 0;
28
+ for (const pair of pending) {
29
+ const spinner = silent ? null : (0, ora_1.default)(`Pairing bot: ${pair.bot_name} (${pair.bot_user_id})`).start();
30
+ try {
31
+ // Redeem the pair code
32
+ const redeemResp = await fetch(`${API_BASE}/api/v1/pairing/redeem`, {
33
+ method: 'POST',
34
+ headers: { 'Content-Type': 'application/json' },
35
+ body: JSON.stringify({ code: pair.pair_code }),
36
+ });
37
+ if (!redeemResp.ok) {
38
+ const err = await redeemResp.json().catch(() => ({ detail: redeemResp.statusText }));
39
+ spinner?.fail(chalk_1.default.red(`Failed to redeem ${pair.bot_name}: ${err.detail}`));
40
+ continue;
41
+ }
42
+ const bot = await redeemResp.json();
43
+ // Write to OpenClaw config
44
+ writeToOpenClawConfig(bot);
45
+ // Mark as claimed so it won't be returned again
46
+ await client.post(`/api/v1/openclaw/pending-pairs/${pair.pair_code}/claim`);
47
+ spinner?.succeed(chalk_1.default.green(`✅ Paired ${bot.bot_name} (${bot.user_id})`));
48
+ paired++;
49
+ }
50
+ catch (e) {
51
+ spinner?.fail(chalk_1.default.red(`Error pairing ${pair.bot_name}: ${e}`));
52
+ }
53
+ }
54
+ if (paired > 0 && !silent) {
55
+ console.log(chalk_1.default.yellow(`\n⚡ ${paired} bot(s) paired. Run: openclaw gateway restart`));
56
+ }
57
+ return paired;
58
+ }
59
+ catch {
60
+ return 0;
61
+ }
62
+ }
63
+ function writeToOpenClawConfig(bot) {
64
+ let config = {};
65
+ try {
66
+ config = JSON.parse(fs_1.default.readFileSync(OPENCLAW_CONFIG, 'utf-8'));
67
+ }
68
+ catch {
69
+ // config doesn't exist yet — that's fine
70
+ }
71
+ const channels = config.channels ?? {};
72
+ const badgerclaw = channels.badgerclaw ?? {};
73
+ const accounts = badgerclaw.accounts ?? {};
74
+ // Derive key from localpart: @think_bot:... → "think"
75
+ const localpart = bot.user_id.split(':')[0].replace('@', '').replace(/_bot$/, '');
76
+ accounts[localpart] = {
77
+ userId: bot.user_id,
78
+ accessToken: bot.access_token,
79
+ homeserver: bot.homeserver,
80
+ encryption: true,
81
+ deviceId: bot.device_id,
82
+ };
83
+ badgerclaw.accounts = accounts;
84
+ channels.badgerclaw = badgerclaw;
85
+ config.channels = channels;
86
+ fs_1.default.writeFileSync(OPENCLAW_CONFIG, JSON.stringify(config, null, 2));
87
+ }
88
+ exports.autopairCommand = new commander_1.Command('autopair')
89
+ .description('Check for pending bot pairs and connect them to OpenClaw automatically')
90
+ .action(async () => {
91
+ const auth = (0, auth_1.readAuth)();
92
+ if (!auth) {
93
+ console.log(chalk_1.default.yellow('Not logged in. Run `badgerclaw login` first.'));
94
+ return;
95
+ }
96
+ console.log(chalk_1.default.dim('Checking for pending bot pairs...'));
97
+ const count = await runAutoPair(false);
98
+ if (count === 0) {
99
+ console.log(chalk_1.default.dim('No pending pairs found.'));
100
+ }
101
+ });
102
+ //# sourceMappingURL=autopair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autopair.js","sourceRoot":"","sources":["../../src/commands/autopair.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,8 @@ const crypto_1 = __importDefault(require("crypto"));
13
13
  const pkce_1 = require("../lib/pkce");
14
14
  const auth_1 = require("../lib/auth");
15
15
  const api_1 = require("../lib/api");
16
+ const autopair_1 = require("./autopair");
17
+ const child_process_1 = require("child_process");
16
18
  const POLL_INTERVAL_MS = 2000;
17
19
  const POLL_TIMEOUT_MS = 120000;
18
20
  exports.loginCommand = new commander_1.Command('login')
@@ -58,6 +60,20 @@ exports.loginCommand = new commander_1.Command('login')
58
60
  // Non-fatal: registration may fail but login succeeded
59
61
  }
60
62
  spinner.succeed(chalk_1.default.green(`Logged in as ${(0, auth_1.extractUsername)(user_id)}`));
63
+ // Auto-pair any bots pending right now
64
+ const paired = await (0, autopair_1.runAutoPair)(true);
65
+ if (paired > 0) {
66
+ console.log(chalk_1.default.green(`✅ ${paired} bot(s) automatically paired to OpenClaw.`));
67
+ console.log(chalk_1.default.yellow('Run: openclaw gateway restart to activate.'));
68
+ }
69
+ // Start background watch daemon so future pairs from the app are picked up automatically
70
+ const self = process.argv[1];
71
+ const watcher = (0, child_process_1.spawn)(process.execPath, [self, 'watch'], {
72
+ detached: true,
73
+ stdio: 'ignore',
74
+ });
75
+ watcher.unref();
76
+ console.log(chalk_1.default.dim('Background pair-watcher started (picks up new pairs from the iOS app automatically).'));
61
77
  return;
62
78
  }
63
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const watchCommand: Command;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.watchCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const auth_1 = require("../lib/auth");
10
+ const autopair_1 = require("./autopair");
11
+ const POLL_INTERVAL_MS = 10000;
12
+ exports.watchCommand = new commander_1.Command('watch')
13
+ .description('Watch for pending bot pairs and connect them automatically (runs until stopped)')
14
+ .action(async () => {
15
+ const auth = (0, auth_1.readAuth)();
16
+ if (!auth) {
17
+ console.log(chalk_1.default.yellow('Not logged in. Run `badgerclaw login` first.'));
18
+ process.exit(1);
19
+ }
20
+ console.log(chalk_1.default.green('👀 Watching for pending bot pairs... (Ctrl+C to stop)'));
21
+ console.log(chalk_1.default.dim(`Polling every ${POLL_INTERVAL_MS / 1000}s`));
22
+ // Run once immediately
23
+ await (0, autopair_1.runAutoPair)(false);
24
+ // Then poll on interval
25
+ setInterval(async () => {
26
+ await (0, autopair_1.runAutoPair)(false);
27
+ }, POLL_INTERVAL_MS);
28
+ });
29
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,sCAAuC;AACvC,yCAAyC;AAEzC,MAAM,gBAAgB,GAAG,KAAM,CAAC;AAEnB,QAAA,YAAY,GAAG,IAAI,mBAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,iFAAiF,CAAC;KAC9F,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAI,GAAG,IAAA,eAAQ,GAAE,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iBAAiB,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IAEpE,uBAAuB;IACvB,MAAM,IAAA,sBAAW,EAAC,KAAK,CAAC,CAAC;IAEzB,wBAAwB;IACxB,WAAW,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,IAAA,sBAAW,EAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,8 @@ const login_1 = require("./commands/login");
6
6
  const logout_1 = require("./commands/logout");
7
7
  const status_1 = require("./commands/status");
8
8
  const bot_1 = require("./commands/bot");
9
+ const autopair_1 = require("./commands/autopair");
10
+ const watch_1 = require("./commands/watch");
9
11
  const program = new commander_1.Command();
10
12
  program
11
13
  .name('badgerclaw')
@@ -15,5 +17,7 @@ program.addCommand(login_1.loginCommand);
15
17
  program.addCommand(logout_1.logoutCommand);
16
18
  program.addCommand(status_1.statusCommand);
17
19
  program.addCommand(bot_1.botCommand);
20
+ program.addCommand(autopair_1.autopairCommand);
21
+ program.addCommand(watch_1.watchCommand);
18
22
  program.parse(process.argv);
19
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,wCAA4C;AAE5C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAE/C,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAU,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,wCAA4C;AAC5C,kDAAsD;AACtD,4CAAgD;AAEhD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAE/C,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,0BAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AAEjC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "badgerclaw",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "BadgerClaw CLI \u2014 one-click bot provisioning",
5
5
  "main": "dist/index.js",
6
6
  "bin": {