beepctl 0.1.0

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.
Files changed (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +186 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +34 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/accounts.d.ts +3 -0
  8. package/dist/commands/accounts.d.ts.map +1 -0
  9. package/dist/commands/accounts.js +27 -0
  10. package/dist/commands/accounts.js.map +1 -0
  11. package/dist/commands/alias.d.ts +3 -0
  12. package/dist/commands/alias.d.ts.map +1 -0
  13. package/dist/commands/alias.js +79 -0
  14. package/dist/commands/alias.js.map +1 -0
  15. package/dist/commands/archive.d.ts +3 -0
  16. package/dist/commands/archive.d.ts.map +1 -0
  17. package/dist/commands/archive.js +35 -0
  18. package/dist/commands/archive.js.map +1 -0
  19. package/dist/commands/auth.d.ts +3 -0
  20. package/dist/commands/auth.d.ts.map +1 -0
  21. package/dist/commands/auth.js +58 -0
  22. package/dist/commands/auth.js.map +1 -0
  23. package/dist/commands/chats.d.ts +3 -0
  24. package/dist/commands/chats.d.ts.map +1 -0
  25. package/dist/commands/chats.js +227 -0
  26. package/dist/commands/chats.js.map +1 -0
  27. package/dist/commands/contacts.d.ts +3 -0
  28. package/dist/commands/contacts.d.ts.map +1 -0
  29. package/dist/commands/contacts.js +46 -0
  30. package/dist/commands/contacts.js.map +1 -0
  31. package/dist/commands/download.d.ts +3 -0
  32. package/dist/commands/download.d.ts.map +1 -0
  33. package/dist/commands/download.js +39 -0
  34. package/dist/commands/download.js.map +1 -0
  35. package/dist/commands/focus.d.ts +3 -0
  36. package/dist/commands/focus.d.ts.map +1 -0
  37. package/dist/commands/focus.js +49 -0
  38. package/dist/commands/focus.js.map +1 -0
  39. package/dist/commands/messages.d.ts +3 -0
  40. package/dist/commands/messages.d.ts.map +1 -0
  41. package/dist/commands/messages.js +105 -0
  42. package/dist/commands/messages.js.map +1 -0
  43. package/dist/commands/reminders.d.ts +3 -0
  44. package/dist/commands/reminders.d.ts.map +1 -0
  45. package/dist/commands/reminders.js +58 -0
  46. package/dist/commands/reminders.js.map +1 -0
  47. package/dist/commands/search.d.ts +3 -0
  48. package/dist/commands/search.d.ts.map +1 -0
  49. package/dist/commands/search.js +211 -0
  50. package/dist/commands/search.js.map +1 -0
  51. package/dist/commands/send.d.ts +3 -0
  52. package/dist/commands/send.d.ts.map +1 -0
  53. package/dist/commands/send.js +58 -0
  54. package/dist/commands/send.js.map +1 -0
  55. package/dist/index.d.ts +4 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +3 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/lib/aliases.d.ts +8 -0
  60. package/dist/lib/aliases.d.ts.map +1 -0
  61. package/dist/lib/aliases.js +19 -0
  62. package/dist/lib/aliases.js.map +1 -0
  63. package/dist/lib/client.d.ts +6 -0
  64. package/dist/lib/client.d.ts.map +1 -0
  65. package/dist/lib/client.js +15 -0
  66. package/dist/lib/client.js.map +1 -0
  67. package/dist/lib/command-utils.d.ts +38 -0
  68. package/dist/lib/command-utils.d.ts.map +1 -0
  69. package/dist/lib/command-utils.js +98 -0
  70. package/dist/lib/command-utils.js.map +1 -0
  71. package/dist/lib/config.d.ts +9 -0
  72. package/dist/lib/config.d.ts.map +1 -0
  73. package/dist/lib/config.js +32 -0
  74. package/dist/lib/config.js.map +1 -0
  75. package/dist/lib/dates.d.ts +11 -0
  76. package/dist/lib/dates.d.ts.map +1 -0
  77. package/dist/lib/dates.js +74 -0
  78. package/dist/lib/dates.js.map +1 -0
  79. package/dist/lib/errors.d.ts +2 -0
  80. package/dist/lib/errors.d.ts.map +1 -0
  81. package/dist/lib/errors.js +40 -0
  82. package/dist/lib/errors.js.map +1 -0
  83. package/dist/lib/types.d.ts +58 -0
  84. package/dist/lib/types.d.ts.map +1 -0
  85. package/dist/lib/types.js +3 -0
  86. package/dist/lib/types.js.map +1 -0
  87. package/dist/tui/App.d.ts +2 -0
  88. package/dist/tui/App.d.ts.map +1 -0
  89. package/dist/tui/App.js +31 -0
  90. package/dist/tui/App.js.map +1 -0
  91. package/dist/tui/index.d.ts +2 -0
  92. package/dist/tui/index.d.ts.map +1 -0
  93. package/dist/tui/index.js +15 -0
  94. package/dist/tui/index.js.map +1 -0
  95. package/dist/tui/views/ChatList.d.ts +6 -0
  96. package/dist/tui/views/ChatList.d.ts.map +1 -0
  97. package/dist/tui/views/ChatList.js +54 -0
  98. package/dist/tui/views/ChatList.js.map +1 -0
  99. package/dist/tui/views/Messages.d.ts +8 -0
  100. package/dist/tui/views/Messages.d.ts.map +1 -0
  101. package/dist/tui/views/Messages.js +70 -0
  102. package/dist/tui/views/Messages.js.map +1 -0
  103. package/dist/version.d.ts +2 -0
  104. package/dist/version.d.ts.map +1 -0
  105. package/dist/version.js +2 -0
  106. package/dist/version.js.map +1 -0
  107. package/package.json +62 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 beepcli contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,186 @@
1
+ # beepcli 🐝
2
+
3
+ CLI for [Beeper Desktop API](https://developers.beeper.com/desktop-api) - unified messaging from your terminal. Give your AI agents the power to chat across all your messaging platforms.
4
+
5
+ > **Disclaimer:** This is an unofficial project. Not affiliated with, endorsed by, or sponsored by Beeper. The Beeper Desktop API is still in beta — expect breaking changes.
6
+
7
+ ## Requirements
8
+
9
+ - [Beeper Desktop](https://www.beeper.com/download) v4.1.169+
10
+ - Beeper Desktop API enabled (Settings → Developers → Enable)
11
+ - Node.js 20+ or Bun
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ # From source
17
+ pnpm install
18
+ pnpm build
19
+ pnpm link --global
20
+
21
+ # Or run directly
22
+ pnpm dev -- <command>
23
+ ```
24
+
25
+ ## Setup
26
+
27
+ 1. Open Beeper Desktop
28
+ 2. Go to **Settings → Developers**
29
+ 3. Enable **Beeper Desktop API**
30
+ 4. Click **"+"** next to "Approved connections" to create a token
31
+ 5. Configure the CLI:
32
+
33
+ ```bash
34
+ beep auth set <your-token>
35
+ # Or use environment variable
36
+ export BEEPER_TOKEN=<your-token>
37
+ ```
38
+
39
+ ## Configuration
40
+
41
+ Config stored at `~/.config/beepcli/config.json` with token, base URL, and aliases.
42
+
43
+ **Precedence:** Environment variables (`BEEPER_TOKEN`, `BEEPER_URL`) override config file.
44
+
45
+ ## Usage
46
+
47
+ ```bash
48
+ # Auth management
49
+ beep auth show # Check auth status
50
+ beep auth set <token> # Set API token
51
+ beep auth clear # Clear stored token
52
+
53
+ # List connected accounts
54
+ beep accounts
55
+
56
+ # List recent chats
57
+ beep chats
58
+ beep chats --limit 50
59
+ beep chats --search "John"
60
+
61
+ # Search messages and chats
62
+ beep search "meeting tomorrow"
63
+ beep search "deadline" --limit 10
64
+ beep search "deadline" --chat work --sender me --after "1d ago"
65
+ beep search "photo" --media image video
66
+ beep search "discussion" --chat-type group --before "yesterday"
67
+
68
+ # Send messages
69
+ beep send <chat-id> "Hello!"
70
+ beep send myself "Quick note" # Send to yourself
71
+ beep send <chat-id> "Thanks!" --reply-to <message-id> # Reply to message
72
+
73
+ # Archive/unarchive chats
74
+ beep archive <chat-id> # Archive a chat
75
+ beep archive <chat-id> --unarchive # Unarchive a chat
76
+ beep archive work # Use alias to archive
77
+
78
+ # Alias management (shortcuts for chat IDs)
79
+ beep alias list # List all aliases
80
+ beep alias add work <chat-id> # Create alias
81
+ beep alias show work # Show alias value
82
+ beep alias remove work # Remove alias
83
+ beep send work "Using alias!" # Use alias in commands
84
+ ```
85
+
86
+ ### Search Filters
87
+
88
+ Filter search results with multiple options:
89
+
90
+ ```bash
91
+ # Filter by chat (supports aliases, space or comma-separated)
92
+ beep search "hello" --chat work family
93
+ beep search "test" --chat id1,id2,id3
94
+
95
+ # Filter by time range (relative dates)
96
+ beep search "meeting" --after "1d ago" --before "1h ago"
97
+ beep search "report" --after "yesterday"
98
+
99
+ # Filter by sender
100
+ beep search "question" --sender me # Only my messages
101
+ beep search "update" --sender others # Messages from others
102
+
103
+ # Filter by media type
104
+ beep search "screenshot" --media image
105
+ beep search "files" --media file link
106
+
107
+ # Filter by chat type
108
+ beep search "announcement" --chat-type group
109
+ beep search "dm" --chat-type single
110
+
111
+ # Filter by account
112
+ beep search "slack message" --account <account-id>
113
+
114
+ # Combine filters
115
+ beep search "deploy" --chat work --sender others --after "1d ago" --media link
116
+
117
+ # Include/exclude options
118
+ beep search "todo" --include-low-priority
119
+ beep search "important" --exclude-muted
120
+ ```
121
+
122
+ **Time formats:** `1h ago`, `2d ago`, `3w ago`, `1mo ago`, `yesterday`, `today`
123
+
124
+ **Media types:** `any`, `video`, `image`, `link`, `file`
125
+
126
+ ## Development
127
+
128
+ ```bash
129
+ # Run in dev mode
130
+ pnpm dev -- accounts
131
+
132
+ # Run tests
133
+ pnpm test
134
+
135
+ # Lint
136
+ pnpm lint
137
+ pnpm lint:fix
138
+
139
+ # Build
140
+ pnpm build
141
+
142
+ # Create standalone binary
143
+ pnpm binary
144
+ ```
145
+
146
+ ## Project Structure
147
+
148
+ ```
149
+ src/
150
+ ├── cli.ts # Entry point - command registration
151
+ ├── index.ts # Library exports
152
+ ├── version.ts # Version info
153
+ ├── commands/ # CLI commands
154
+ │ ├── auth.ts # Token management
155
+ │ ├── accounts.ts # List accounts
156
+ │ ├── alias.ts # Alias management
157
+ │ ├── archive.ts # Archive/unarchive chats
158
+ │ ├── chats.ts # Browse chats
159
+ │ ├── search.ts # Search messages/chats
160
+ │ └── send.ts # Send messages
161
+ └── lib/ # Core logic
162
+ ├── client.ts # Beeper API client wrapper
163
+ ├── config.ts # Config file management (~/.config/beepcli/)
164
+ ├── aliases.ts # Alias resolution utilities
165
+ └── dates.ts # Relative date parsing
166
+ ```
167
+
168
+ ## Stack
169
+
170
+ - **TypeScript** with plain `tsc`
171
+ - **Commander** for CLI framework
172
+ - **Kleur** for colors/styling
173
+ - **Vitest** for testing
174
+ - **Biome** + **oxlint** for linting/formatting
175
+ - **Bun** for standalone binary compilation
176
+ - **@beeper/desktop-api** SDK
177
+
178
+ ## Acknowledgments
179
+
180
+ Inspired by [beeper-cli](https://github.com/krausefx/beeper-cli) by [@krausefx](https://github.com/krausefx).
181
+
182
+ The author uses beepcli alongside [clawdbot](https://github.com/blqke/clawdbot).
183
+
184
+ ## License
185
+
186
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ import { program } from "commander";
3
+ import kleur from "kleur";
4
+ import { accountsCommand } from "./commands/accounts.js";
5
+ import { aliasCommand } from "./commands/alias.js";
6
+ import { archiveCommand } from "./commands/archive.js";
7
+ import { authCommand } from "./commands/auth.js";
8
+ import { chatsCommand } from "./commands/chats.js";
9
+ import { contactsCommand } from "./commands/contacts.js";
10
+ import { downloadCommand } from "./commands/download.js";
11
+ import { focusCommand } from "./commands/focus.js";
12
+ import { messagesCommand } from "./commands/messages.js";
13
+ import { remindersCommand } from "./commands/reminders.js";
14
+ import { searchCommand } from "./commands/search.js";
15
+ import { sendCommand } from "./commands/send.js";
16
+ import { version } from "./version.js";
17
+ program
18
+ .name("beep")
19
+ .description(kleur.cyan("CLI for Beeper Desktop API - unified messaging from terminal"))
20
+ .version(version)
21
+ .addCommand(authCommand)
22
+ .addCommand(aliasCommand)
23
+ .addCommand(accountsCommand)
24
+ .addCommand(archiveCommand)
25
+ .addCommand(chatsCommand)
26
+ .addCommand(contactsCommand)
27
+ .addCommand(downloadCommand)
28
+ .addCommand(focusCommand)
29
+ .addCommand(messagesCommand)
30
+ .addCommand(remindersCommand)
31
+ .addCommand(sendCommand)
32
+ .addCommand(searchCommand)
33
+ .parse();
34
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO;KACL,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;KACvF,OAAO,CAAC,OAAO,CAAC;KAChB,UAAU,CAAC,WAAW,CAAC;KACvB,UAAU,CAAC,YAAY,CAAC;KACxB,UAAU,CAAC,eAAe,CAAC;KAC3B,UAAU,CAAC,cAAc,CAAC;KAC1B,UAAU,CAAC,YAAY,CAAC;KACxB,UAAU,CAAC,eAAe,CAAC;KAC3B,UAAU,CAAC,eAAe,CAAC;KAC3B,UAAU,CAAC,YAAY,CAAC;KACxB,UAAU,CAAC,eAAe,CAAC;KAC3B,UAAU,CAAC,gBAAgB,CAAC;KAC5B,UAAU,CAAC,WAAW,CAAC;KACvB,UAAU,CAAC,aAAa,CAAC;KACzB,KAAK,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const accountsCommand: Command;
3
+ //# sourceMappingURL=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/commands/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,eAAe,SAuBzB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { Command } from "commander";
2
+ import kleur from "kleur";
3
+ import { getClient } from "../lib/client.js";
4
+ import { handleError } from "../lib/errors.js";
5
+ export const accountsCommand = new Command("accounts")
6
+ .description("List connected accounts")
7
+ .action(async () => {
8
+ try {
9
+ const client = getClient();
10
+ const accounts = await client.accounts.list();
11
+ if (accounts.length === 0) {
12
+ console.log(kleur.yellow("No accounts connected."));
13
+ console.log(kleur.dim("Make sure Beeper Desktop is running with API enabled."));
14
+ return;
15
+ }
16
+ console.log(kleur.bold(`\nConnected Accounts (${accounts.length})\n`));
17
+ for (const account of accounts) {
18
+ const name = account.user?.fullName || account.user?.username || account.accountID;
19
+ console.log(` ${kleur.cyan(account.network)} ${kleur.bold(name)}`);
20
+ console.log(kleur.dim(` ID: ${account.accountID}\n`));
21
+ }
22
+ }
23
+ catch (error) {
24
+ handleError(error);
25
+ }
26
+ });
27
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/commands/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACpD,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,KAAK,IAAI,EAAE;IAClB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;YAChF,OAAO;QACR,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAEvE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC;YACnF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QAC1D,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,WAAW,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;AACF,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const aliasCommand: Command;
3
+ //# sourceMappingURL=alias.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias.d.ts","sourceRoot":"","sources":["../../src/commands/alias.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,YAAY,SAA0D,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { Command } from "commander";
2
+ import kleur from "kleur";
3
+ import { isValidAliasName, isValidChatId } from "../lib/aliases.js";
4
+ import { getConfig, saveConfig } from "../lib/config.js";
5
+ export const aliasCommand = new Command("alias").description("Manage chat aliases");
6
+ function getAliases() {
7
+ return getConfig().aliases || {};
8
+ }
9
+ function saveAliases(aliases) {
10
+ const config = getConfig();
11
+ config.aliases = aliases;
12
+ saveConfig(config);
13
+ }
14
+ aliasCommand.action(listAliases);
15
+ aliasCommand.command("list").description("List all aliases").action(listAliases);
16
+ aliasCommand
17
+ .command("add")
18
+ .description("Add or update an alias")
19
+ .argument("<name>", "Alias name")
20
+ .argument("<chat-id>", "Chat ID")
21
+ .action((name, chatId) => {
22
+ if (!isValidAliasName(name)) {
23
+ console.error(kleur.red("Alias name must be alphanumeric (underscores allowed, no spaces)"));
24
+ process.exit(1);
25
+ }
26
+ if (!isValidChatId(chatId)) {
27
+ console.error(kleur.red("Chat ID must start with '!' (e.g., !abc123:beeper.local)"));
28
+ process.exit(1);
29
+ }
30
+ const aliases = getAliases();
31
+ if (aliases[name]) {
32
+ console.log(kleur.yellow(`Alias '${name}' already exists (${aliases[name]}). Overwriting...`));
33
+ }
34
+ aliases[name] = chatId;
35
+ saveAliases(aliases);
36
+ console.log(kleur.green(`Alias '${name}' -> '${chatId}' saved`));
37
+ });
38
+ aliasCommand
39
+ .command("remove")
40
+ .description("Remove an alias")
41
+ .argument("<name>", "Alias name to remove")
42
+ .action((name) => {
43
+ const aliases = getAliases();
44
+ if (!aliases[name]) {
45
+ console.error(kleur.red(`Alias '${name}' not found`));
46
+ process.exit(1);
47
+ }
48
+ delete aliases[name];
49
+ saveAliases(aliases);
50
+ console.log(kleur.yellow(`Alias '${name}' removed`));
51
+ });
52
+ aliasCommand
53
+ .command("show")
54
+ .description("Show a specific alias")
55
+ .argument("<name>", "Alias name")
56
+ .action((name) => {
57
+ const aliases = getAliases();
58
+ if (!aliases[name]) {
59
+ console.error(kleur.red(`Alias '${name}' not found`));
60
+ process.exit(1);
61
+ }
62
+ console.log(kleur.bold(`\nAlias: ${name}\n`));
63
+ console.log(` Chat ID: ${kleur.cyan(aliases[name])}`);
64
+ });
65
+ function listAliases() {
66
+ const aliases = getAliases();
67
+ const entries = Object.entries(aliases);
68
+ if (entries.length === 0) {
69
+ console.log(kleur.dim("No aliases configured."));
70
+ console.log(kleur.dim("Add one with: beep alias add <name> <chatId>"));
71
+ return;
72
+ }
73
+ console.log(kleur.bold("\nConfigured Aliases\n"));
74
+ for (const [name, chatId] of entries) {
75
+ console.log(` ${kleur.green(name.padEnd(15))} -> ${kleur.cyan(chatId)}`);
76
+ }
77
+ console.log();
78
+ }
79
+ //# sourceMappingURL=alias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias.js","sourceRoot":"","sources":["../../src/commands/alias.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAEpF,SAAS,UAAU;IAClB,OAAO,SAAS,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,WAAW,CAAC,OAA+B;IACnD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,UAAU,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEjC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEjF,YAAY;KACV,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,wBAAwB,CAAC;KACrC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;KAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;KAChC,MAAM,CAAC,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;IACxC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,qBAAqB,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CACjF,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IACvB,WAAW,CAAC,OAAO,CAAC,CAAC;IAErB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,SAAS,MAAM,SAAS,CAAC,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEJ,YAAY;KACV,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iBAAiB,CAAC;KAC9B,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;KAC1C,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,aAAa,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,WAAW,CAAC,OAAO,CAAC,CAAC;IAErB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEJ,YAAY;KACV,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uBAAuB,CAAC;KACpC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;KAChC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,aAAa,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEJ,SAAS,WAAW;IACnB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAExC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACvE,OAAO;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAElD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const archiveCommand: Command;
3
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,cAAc,SA6BxB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { Command } from "commander";
2
+ import kleur from "kleur";
3
+ import { isValidChatId, resolveAlias } from "../lib/aliases.js";
4
+ import { getClient } from "../lib/client.js";
5
+ import { getConfig } from "../lib/config.js";
6
+ import { handleError } from "../lib/errors.js";
7
+ export const archiveCommand = new Command("archive")
8
+ .description("Archive or unarchive a chat")
9
+ .argument("<chat-id>", "Chat ID or alias to archive")
10
+ .option("-u, --unarchive", "Unarchive the chat instead of archiving")
11
+ .option("-q, --quiet", "Don't show confirmation message")
12
+ .action(async (chatIdOrAlias, options) => {
13
+ try {
14
+ const client = getClient();
15
+ const targetChatId = resolveAlias(chatIdOrAlias, getConfig());
16
+ if (!targetChatId && !isValidChatId(chatIdOrAlias)) {
17
+ console.error(kleur.red(`Invalid chat ID or alias: ${chatIdOrAlias}`));
18
+ console.error(kleur.dim(" Chat IDs should start with '!' (e.g., !abc123:beeper.local)"));
19
+ console.error(kleur.dim(` Or add an alias: beep alias add ${chatIdOrAlias} <chatId>`));
20
+ process.exit(1);
21
+ }
22
+ const chatId = targetChatId || chatIdOrAlias;
23
+ const archived = !options.unarchive;
24
+ await client.chats.archive(chatId, { archived });
25
+ if (!options.quiet) {
26
+ const action = archived ? "archived" : "unarchived";
27
+ console.log(kleur.green(`Chat ${action} successfully!`));
28
+ console.log(kleur.dim(` Chat: ${chatId}`));
29
+ }
30
+ }
31
+ catch (error) {
32
+ handleError(error);
33
+ }
34
+ });
35
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KAClD,WAAW,CAAC,6BAA6B,CAAC;KAC1C,QAAQ,CAAC,WAAW,EAAE,6BAA6B,CAAC;KACpD,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;KACpE,MAAM,CAAC,aAAa,EAAE,iCAAiC,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,aAAqB,EAAE,OAAO,EAAE,EAAE;IAChD,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,YAAY,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;QAE9D,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,aAAa,EAAE,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;YAC1F,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,aAAa,WAAW,CAAC,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,IAAI,aAAa,CAAC;QAC7C,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;QACpC,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,MAAM,gBAAgB,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,WAAW,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;AACF,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const authCommand: Command;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,WAAW,SAA8D,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { Command } from "commander";
2
+ import kleur from "kleur";
3
+ import { getConfig, getConfigPath, saveConfig } from "../lib/config.js";
4
+ export const authCommand = new Command("auth").description("Configure authentication");
5
+ authCommand
6
+ .command("set")
7
+ .description("Set your Beeper API token")
8
+ .argument("<token>", "Your Beeper API token")
9
+ .action((token) => {
10
+ const config = getConfig();
11
+ config.token = token;
12
+ saveConfig(config);
13
+ console.log(kleur.green("✅ Token saved!"));
14
+ console.log(kleur.dim(` Config: ${getConfigPath()}`));
15
+ });
16
+ authCommand
17
+ .command("show")
18
+ .description("Show current configuration")
19
+ .action(() => {
20
+ const config = getConfig();
21
+ console.log(kleur.bold("\n Beeper CLI Configuration\n"));
22
+ // Display token status
23
+ if (process.env.BEEPER_TOKEN) {
24
+ console.log(` Token: ${kleur.green("set")} ${kleur.dim("(from BEEPER_TOKEN env)")}`);
25
+ }
26
+ else if (config.token) {
27
+ const masked = `${config.token.slice(0, 8)}...${config.token.slice(-4)}`;
28
+ console.log(` Token: ${kleur.green(masked)}`);
29
+ }
30
+ else {
31
+ console.log(` Token: ${kleur.red("not set")}`);
32
+ }
33
+ // Display URL with source indication
34
+ let url;
35
+ let urlSource;
36
+ if (process.env.BEEPER_URL) {
37
+ url = process.env.BEEPER_URL;
38
+ urlSource = "(from BEEPER_URL env)";
39
+ }
40
+ else if (config.baseUrl) {
41
+ url = config.baseUrl;
42
+ urlSource = "";
43
+ }
44
+ else {
45
+ url = "http://localhost:23373";
46
+ urlSource = "(default)";
47
+ }
48
+ console.log(` URL: ${kleur.cyan(url)} ${kleur.dim(urlSource)}`);
49
+ console.log(kleur.dim(`\n Config file: ${getConfigPath()}`));
50
+ });
51
+ authCommand
52
+ .command("clear")
53
+ .description("Clear saved token")
54
+ .action(() => {
55
+ saveConfig({});
56
+ console.log(kleur.yellow("🗑️ Token cleared"));
57
+ });
58
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const chatsCommand: Command;
3
+ //# sourceMappingURL=chats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,YAAY,SAAmD,CAAC"}