badgerclaw 0.1.3 → 0.1.5

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,7 @@ 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");
16
17
  const POLL_INTERVAL_MS = 2000;
17
18
  const POLL_TIMEOUT_MS = 120000;
18
19
  exports.loginCommand = new commander_1.Command('login')
@@ -58,6 +59,12 @@ exports.loginCommand = new commander_1.Command('login')
58
59
  // Non-fatal: registration may fail but login succeeded
59
60
  }
60
61
  spinner.succeed(chalk_1.default.green(`Logged in as ${(0, auth_1.extractUsername)(user_id)}`));
62
+ // Auto-pair any pending bots silently
63
+ const paired = await (0, autopair_1.runAutoPair)(true);
64
+ if (paired > 0) {
65
+ console.log(chalk_1.default.green(`✅ ${paired} bot(s) automatically paired to OpenClaw.`));
66
+ console.log(chalk_1.default.yellow('Run: openclaw gateway restart'));
67
+ }
61
68
  return;
62
69
  }
63
70
  }
@@ -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 logoutCommand: Command;
@@ -0,0 +1,36 @@
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.logoutCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const auth_1 = require("../lib/auth");
10
+ const api_1 = require("../lib/api");
11
+ exports.logoutCommand = new commander_1.Command('logout')
12
+ .description('Disconnect this machine and log out of BadgerClaw')
13
+ .action(async () => {
14
+ const auth = (0, auth_1.readAuth)();
15
+ if (!auth) {
16
+ console.log(chalk_1.default.yellow('Not logged in.'));
17
+ return;
18
+ }
19
+ // Mark instance offline on backend
20
+ try {
21
+ const client = (0, api_1.getAuthenticatedClient)(auth.access_token);
22
+ const { version } = require('../../package.json');
23
+ await client.post('/api/v1/openclaw/register', {
24
+ instance_id: auth.instance_id,
25
+ label: require('os').hostname(),
26
+ version,
27
+ online: false,
28
+ });
29
+ }
30
+ catch {
31
+ // Non-fatal
32
+ }
33
+ (0, auth_1.clearAuth)();
34
+ console.log(chalk_1.default.green(`Logged out — this machine is now disconnected.`));
35
+ });
36
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,sCAAmE;AACnE,oCAAoD;AAEvC,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,mDAAmD,CAAC;KAChE,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,gBAAgB,CAAC,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,4BAAsB,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;YAC7C,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;YAC/B,OAAO;YACP,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IAED,IAAA,gBAAS,GAAE,CAAC;IACZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC"}
package/dist/index.js CHANGED
@@ -3,15 +3,19 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const commander_1 = require("commander");
5
5
  const login_1 = require("./commands/login");
6
+ const logout_1 = require("./commands/logout");
6
7
  const status_1 = require("./commands/status");
7
8
  const bot_1 = require("./commands/bot");
9
+ const autopair_1 = require("./commands/autopair");
8
10
  const program = new commander_1.Command();
9
11
  program
10
12
  .name('badgerclaw')
11
13
  .description('BadgerClaw CLI — one-click bot provisioning')
12
14
  .version(require('../package.json').version);
13
15
  program.addCommand(login_1.loginCommand);
16
+ program.addCommand(logout_1.logoutCommand);
14
17
  program.addCommand(status_1.statusCommand);
15
18
  program.addCommand(bot_1.botCommand);
19
+ program.addCommand(autopair_1.autopairCommand);
16
20
  program.parse(process.argv);
17
21
  //# 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,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,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;AAEtD,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;AAEpC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/dist/lib/api.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  import { AxiosInstance } from 'axios';
2
2
  export declare function getClient(): AxiosInstance;
3
3
  export declare function getUnauthenticatedClient(): AxiosInstance;
4
+ export declare function getAuthenticatedClient(token: string): AxiosInstance;
package/dist/lib/api.js CHANGED
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getClient = getClient;
7
7
  exports.getUnauthenticatedClient = getUnauthenticatedClient;
8
+ exports.getAuthenticatedClient = getAuthenticatedClient;
8
9
  const axios_1 = __importDefault(require("axios"));
9
10
  const auth_1 = require("./auth");
10
11
  const BASE_URL = 'https://api.badgerclaw.ai';
@@ -24,4 +25,13 @@ function getUnauthenticatedClient() {
24
25
  headers: { 'Content-Type': 'application/json' },
25
26
  });
26
27
  }
28
+ function getAuthenticatedClient(token) {
29
+ return axios_1.default.create({
30
+ baseURL: BASE_URL,
31
+ headers: {
32
+ 'Content-Type': 'application/json',
33
+ Authorization: `Bearer ${token}`,
34
+ },
35
+ });
36
+ }
27
37
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":";;;;;AAKA,8BASC;AAED,4DAKC;AArBD,kDAA6C;AAC7C,iCAAkC;AAElC,MAAM,QAAQ,GAAG,2BAA2B,CAAC;AAE7C,SAAgB,SAAS;IACvB,MAAM,IAAI,GAAG,IAAA,eAAQ,GAAE,CAAC;IACxB,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,eAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,SAAgB,wBAAwB;IACtC,OAAO,eAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":";;;;;AAKA,8BASC;AAED,4DAKC;AAED,wDAQC;AA/BD,kDAA6C;AAC7C,iCAAkC;AAElC,MAAM,QAAQ,GAAG,2BAA2B,CAAC;AAE7C,SAAgB,SAAS;IACvB,MAAM,IAAI,GAAG,IAAA,eAAQ,GAAE,CAAC;IACxB,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,eAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,SAAgB,wBAAwB;IACtC,OAAO,eAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAAa;IAClD,OAAO,eAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,KAAK,EAAE;SACjC;KACF,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "badgerclaw",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "BadgerClaw CLI \u2014 one-click bot provisioning",
5
5
  "main": "dist/index.js",
6
6
  "bin": {