@ask-thane/thane-cli 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.
package/dist/index.js ADDED
@@ -0,0 +1,581 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { basename } from "node:path";
4
+ import { runChat } from "./chat.js";
5
+ import { cliCommands, renderCliCommands } from "./commands.js";
6
+ import { renderChannels, renderDms, renderInbox, renderMembers, renderMessages, printJson, renderUsers, renderWorkspaces } from "./render.js";
7
+ import { parseSlackExportZip } from "./slack-import.js";
8
+ import { ThaneStore } from "./store.js";
9
+ import { parseSince } from "./time.js";
10
+ function parseArgs(argv) {
11
+ const positionals = [];
12
+ const flags = new Map();
13
+ for (let index = 0; index < argv.length; index += 1) {
14
+ const arg = argv[index];
15
+ if (!arg) {
16
+ continue;
17
+ }
18
+ if (arg.startsWith("--")) {
19
+ const key = arg.slice(2);
20
+ const next = argv[index + 1];
21
+ if (!next || next.startsWith("--")) {
22
+ flags.set(key, true);
23
+ }
24
+ else {
25
+ flags.set(key, next);
26
+ index += 1;
27
+ }
28
+ }
29
+ else {
30
+ positionals.push(arg);
31
+ }
32
+ }
33
+ return { positionals, flags };
34
+ }
35
+ function flagString(args, key) {
36
+ const value = args.flags.get(key);
37
+ return typeof value === "string" ? value : undefined;
38
+ }
39
+ function flagNumber(args, key, fallback) {
40
+ const value = flagString(args, key);
41
+ if (!value) {
42
+ return fallback;
43
+ }
44
+ const parsed = Number(value);
45
+ if (!Number.isFinite(parsed) || parsed <= 0) {
46
+ throw new Error(`--${key} must be a positive number.`);
47
+ }
48
+ return parsed;
49
+ }
50
+ function wantsJson(args) {
51
+ return args.flags.has("json");
52
+ }
53
+ function flagRole(args, fallback) {
54
+ const value = flagString(args, "role") ?? fallback;
55
+ if (value !== "owner" && value !== "admin" && value !== "member") {
56
+ throw new Error("--role must be owner, admin, or member.");
57
+ }
58
+ return value;
59
+ }
60
+ function parsePingLocation(value) {
61
+ if (value === "origin" || value === "thane_cli" || value === "slack" || value === "both") {
62
+ return value;
63
+ }
64
+ throw new Error("Ping location must be origin, thane_cli, slack, or both.");
65
+ }
66
+ function readMessageText(args, startAt) {
67
+ if (args.flags.has("stdin")) {
68
+ return readFileSync(0, "utf8").trim();
69
+ }
70
+ return args.positionals.slice(startAt).join(" ").trim();
71
+ }
72
+ function slugFromSlackExportPath(path) {
73
+ const base = basename(path).replace(/\.zip$/i, "").replace(/slack[-_ ]?export/gi, "slack").replace(/[^a-z0-9._-]+/gi, "-");
74
+ return base.toLowerCase().replace(/^-+|-+$/g, "") || "slack-import";
75
+ }
76
+ function renderSlackImportSummary(summary, mode) {
77
+ const lines = [
78
+ mode === "preview" ? "Slack export preview" : "Slack export imported",
79
+ `users: ${summary.users}`,
80
+ `accounts with email: ${summary.accountsWithEmail}`,
81
+ `public channels: ${summary.publicChannels}`,
82
+ `private channels: ${summary.privateChannels}`,
83
+ `DMs/group DMs: ${summary.dms}`,
84
+ `messages: ${summary.messages}`,
85
+ `threaded replies: ${summary.threadedReplies}`,
86
+ `reactions: ${summary.reactions}`,
87
+ `file links: ${summary.files}`
88
+ ];
89
+ if ("importedMessages" in summary) {
90
+ lines.push(`new users: ${summary.importedUsers}`, `new conversations: ${summary.importedChannels}`, `new messages: ${summary.importedMessages}`, `duplicate messages skipped: ${summary.skippedDuplicateMessages}`);
91
+ }
92
+ else {
93
+ lines.push(summary.requiresTeamPlan ? "requires: Thane Chat Team for apply" : "requires: free tier is enough");
94
+ lines.push("apply with: thane import slack-export <zip> --apply");
95
+ }
96
+ return `${lines.join("\n")}\n`;
97
+ }
98
+ function help() {
99
+ return `Thane CLI MVP
100
+
101
+ Command discovery:
102
+ thane commands [--json]
103
+ thane help
104
+
105
+ Interactive:
106
+ thane chat [channel]
107
+ thane dm <handle>
108
+
109
+ Accounts:
110
+ thane signup <email> [--name "..."]
111
+ thane login <email>
112
+ thane verify <email> <code>
113
+ thane whoami [--json]
114
+ thane logout
115
+
116
+ Ask Thane:
117
+ thane ask-thane status [--json]
118
+ thane ask-thane enable [--json]
119
+ thane ask-thane disable
120
+
121
+ Notifications:
122
+ thane notify location [--json]
123
+ thane notify location <origin|thane_cli|slack|both> [--json]
124
+
125
+ Billing:
126
+ thane billing status [--json]
127
+ thane billing checkout
128
+ thane billing activate-team-dev
129
+
130
+ Imports:
131
+ thane import slack-export <export.zip> [--preview] [--json]
132
+ thane import slack-export <export.zip> --apply [--json]
133
+
134
+ Channels:
135
+ thane channels [--json]
136
+ thane channel create <name> [--topic "..."] [--private]
137
+ thane channel join <channel>
138
+ thane channel leave <channel>
139
+ thane channel invite <channel> <handle-or-email>
140
+ thane channel members <channel> [--json]
141
+
142
+ Members, users, and DMs:
143
+ thane members [--json]
144
+ thane invite <email> [--role admin|member] [--handle "..."]
145
+ thane member role <handle-or-email> <admin|member>
146
+ thane users [--json]
147
+ thane user add <handle> [--name "..."]
148
+ thane dms [--json]
149
+ thane dm <handle>
150
+ thane dm-recent <handle> [--limit 20] [--json]
151
+ thane dm-send <handle> <message>
152
+ thane dm-send <handle> --stdin
153
+
154
+ Workspaces:
155
+ thane workspaces [--json]
156
+ thane workspace current [--json]
157
+ thane workspace create <slug> [--name "..."]
158
+ thane workspace use <slug>
159
+ thane workspace create-from-slack <export.zip> [--slug "..."] [--name "..."] [--apply] [--json]
160
+
161
+ Messages:
162
+ thane inbox [--all-workspaces] [--json]
163
+ thane send <channel> <message>
164
+ thane send <channel> --stdin
165
+ thane recent [channel] [--limit 20] [--since today] [--json]
166
+ thane see-recent [channel] [--since "2 days ago"] [--json]
167
+ thane unread [--json]
168
+ thane mentions [--limit 20] [--since yesterday] [--json]
169
+ thane search <query> [--json]
170
+ thane thread <message-id> [--json]
171
+ thane reply <message-id> <message>
172
+ thane reply <message-id> --stdin
173
+ thane react <message-id> <emoji>
174
+ thane mark-read <channel>
175
+
176
+ Environment:
177
+ THANE_STORE_PATH=/path/to/store.json
178
+
179
+ All channels, messages, mentions, unread state, and search results are scoped to the active workspace.`;
180
+ }
181
+ async function main() {
182
+ const args = parseArgs(process.argv.slice(2));
183
+ const [command, second] = args.positionals;
184
+ if (command === "dm" && second && !wantsJson(args)) {
185
+ await runChat(`@${second}`);
186
+ return;
187
+ }
188
+ if (!command || command === "chat") {
189
+ await runChat(command === "chat" ? second : command);
190
+ return;
191
+ }
192
+ if (command === "help" || command === "--help" || command === "-h") {
193
+ process.stdout.write(`${help()}\n`);
194
+ return;
195
+ }
196
+ if (command === "commands") {
197
+ wantsJson(args) ? printJson({ commands: cliCommands }) : process.stdout.write(`${renderCliCommands()}\n`);
198
+ return;
199
+ }
200
+ const store = await ThaneStore.open();
201
+ if (command === "signup") {
202
+ const email = second;
203
+ if (!email) {
204
+ throw new Error("Usage: thane signup <email>");
205
+ }
206
+ const { account, code } = await store.signup(email, flagString(args, "name"));
207
+ wantsJson(args)
208
+ ? printJson({ account, verificationCode: code })
209
+ : process.stdout.write(`created account ${account.email}\nverification code: ${code}\n`);
210
+ return;
211
+ }
212
+ if (command === "login") {
213
+ const email = second;
214
+ if (!email) {
215
+ throw new Error("Usage: thane login <email>");
216
+ }
217
+ const { account, code } = await store.login(email);
218
+ wantsJson(args)
219
+ ? printJson({ account, verificationCode: code })
220
+ : process.stdout.write(`${account ? `login code for ${account.email}` : `account will be created for ${email}`}\nverification code: ${code}\n`);
221
+ return;
222
+ }
223
+ if (command === "verify") {
224
+ const email = second;
225
+ const code = args.positionals[2];
226
+ if (!email || !code) {
227
+ throw new Error("Usage: thane verify <email> <code>");
228
+ }
229
+ const account = await store.verify(email, code);
230
+ wantsJson(args) ? printJson({ account }) : process.stdout.write(`signed in as ${account.email}\n`);
231
+ return;
232
+ }
233
+ if (command === "whoami") {
234
+ const account = store.currentAccount;
235
+ const user = store.currentUser;
236
+ const member = store.currentMember();
237
+ wantsJson(args)
238
+ ? printJson({ account, user, workspace: store.activeWorkspace, member })
239
+ : process.stdout.write(`${account?.email ?? "not signed in"} as @${user.handle} (${member?.role ?? "member"}) in ${store.activeWorkspace.slug}\n`);
240
+ return;
241
+ }
242
+ if (command === "logout") {
243
+ await store.logout();
244
+ process.stdout.write("signed out\n");
245
+ return;
246
+ }
247
+ if (command === "ask-thane" && second === "status") {
248
+ const integration = store.askThaneStatus();
249
+ wantsJson(args)
250
+ ? printJson({ integration })
251
+ : process.stdout.write(integration?.enabled
252
+ ? `Ask Thane enabled for ${store.activeWorkspace.slug} as ${integration.linkedAccountEmail}\n`
253
+ : `Ask Thane disabled for ${store.activeWorkspace.slug}\n`);
254
+ return;
255
+ }
256
+ if (command === "ask-thane" && second === "enable") {
257
+ const integration = await store.enableAskThane();
258
+ wantsJson(args)
259
+ ? printJson({ integration })
260
+ : process.stdout.write(`Ask Thane enabled. Mention @thane in any joined/readable conversation.\n`);
261
+ return;
262
+ }
263
+ if (command === "ask-thane" && second === "disable") {
264
+ await store.disableAskThane();
265
+ process.stdout.write("Ask Thane disabled\n");
266
+ return;
267
+ }
268
+ if (command === "notify" && second === "location") {
269
+ const location = args.positionals[2];
270
+ if (!location) {
271
+ const preference = store.notificationPreference();
272
+ wantsJson(args)
273
+ ? printJson({ preference })
274
+ : process.stdout.write(`ping location: ${preference.preferredPingLocation}\n`);
275
+ return;
276
+ }
277
+ const preference = await store.setPingLocation(parsePingLocation(location));
278
+ wantsJson(args)
279
+ ? printJson({ preference })
280
+ : process.stdout.write(`ping location set to ${preference.preferredPingLocation}\n`);
281
+ return;
282
+ }
283
+ if (command === "billing" && second === "status") {
284
+ const billing = store.billingSummary();
285
+ wantsJson(args)
286
+ ? printJson(billing)
287
+ : process.stdout.write(`plan: ${billing.plan.planTier}\nstatus: ${billing.plan.status}\nmembers: ${billing.usage.members}/${billing.plan.planTier === "free" ? billing.limits.members : "unlimited"}\nprivate channels: ${billing.usage.privateChannels}/${billing.plan.planTier === "free" ? billing.limits.privateChannels : "unlimited"}\n`);
288
+ return;
289
+ }
290
+ if (command === "billing" && second === "checkout") {
291
+ const checkoutOptions = {};
292
+ if (process.env.THANE_PAYMENTS_BASE_URL) {
293
+ checkoutOptions.paymentsBaseUrl = process.env.THANE_PAYMENTS_BASE_URL;
294
+ }
295
+ if (process.env.THANE_BILLING_LINK_SIGNING_SECRET) {
296
+ checkoutOptions.signingSecret = process.env.THANE_BILLING_LINK_SIGNING_SECRET;
297
+ }
298
+ if (store.currentAccount?.email) {
299
+ checkoutOptions.email = store.currentAccount.email;
300
+ }
301
+ const checkoutUrl = store.createBillingCheckoutUrl(checkoutOptions);
302
+ process.stdout.write(`${checkoutUrl}\n`);
303
+ return;
304
+ }
305
+ if (command === "billing" && second === "activate-team-dev") {
306
+ if (process.env.THANE_ALLOW_DEV_BILLING_ACTIVATION !== "1") {
307
+ throw new Error("Set THANE_ALLOW_DEV_BILLING_ACTIVATION=1 to use local billing activation.");
308
+ }
309
+ const plan = await store.setBillingPlan("cli_team", "active");
310
+ wantsJson(args) ? printJson({ plan }) : process.stdout.write("activated local CLI Team plan\n");
311
+ return;
312
+ }
313
+ if (command === "import" && second === "slack-export") {
314
+ const zipPath = args.positionals[2];
315
+ if (!zipPath) {
316
+ throw new Error("Usage: thane import slack-export <export.zip> [--preview|--apply]");
317
+ }
318
+ const exportData = await parseSlackExportZip(zipPath);
319
+ if (args.flags.has("apply")) {
320
+ const result = await store.importSlackExport(exportData);
321
+ wantsJson(args) ? printJson({ result }) : process.stdout.write(renderSlackImportSummary(result, "apply"));
322
+ return;
323
+ }
324
+ const preview = store.previewSlackImport(exportData);
325
+ wantsJson(args) ? printJson({ preview }) : process.stdout.write(renderSlackImportSummary(preview, "preview"));
326
+ return;
327
+ }
328
+ if (command === "workspaces") {
329
+ const workspaces = store.listWorkspaces();
330
+ wantsJson(args)
331
+ ? printJson({ activeWorkspace: store.activeWorkspace, workspaces })
332
+ : process.stdout.write(`${renderWorkspaces(workspaces, store.activeWorkspace.id)}\n`);
333
+ return;
334
+ }
335
+ if (command === "workspace" && second === "current") {
336
+ wantsJson(args)
337
+ ? printJson({ activeWorkspace: store.activeWorkspace })
338
+ : process.stdout.write(`${store.activeWorkspace.slug} - ${store.activeWorkspace.name}\n`);
339
+ return;
340
+ }
341
+ if (command === "workspace" && second === "create") {
342
+ const slug = args.positionals[2];
343
+ if (!slug) {
344
+ throw new Error("Usage: thane workspace create <slug>");
345
+ }
346
+ const workspace = await store.createWorkspace(slug, flagString(args, "name"));
347
+ wantsJson(args) ? printJson({ workspace }) : process.stdout.write(`created workspace ${workspace.slug}\n`);
348
+ return;
349
+ }
350
+ if (command === "workspace" && second === "use") {
351
+ const slug = args.positionals[2];
352
+ if (!slug) {
353
+ throw new Error("Usage: thane workspace use <slug>");
354
+ }
355
+ const workspace = await store.useWorkspace(slug);
356
+ wantsJson(args) ? printJson({ activeWorkspace: workspace }) : process.stdout.write(`using workspace ${workspace.slug}\n`);
357
+ return;
358
+ }
359
+ if (command === "workspace" && second === "create-from-slack") {
360
+ const zipPath = args.positionals[2];
361
+ if (!zipPath) {
362
+ throw new Error("Usage: thane workspace create-from-slack <export.zip> [--slug <slug>] [--name \"...\"] [--apply]");
363
+ }
364
+ const exportData = await parseSlackExportZip(zipPath);
365
+ const slug = flagString(args, "slug") ?? slugFromSlackExportPath(zipPath);
366
+ const name = flagString(args, "name") ?? slug.replace(/[-_]+/g, " ");
367
+ if (!args.flags.has("apply")) {
368
+ const preview = store.previewSlackImport(exportData);
369
+ const response = { proposedWorkspace: { slug, name }, preview };
370
+ wantsJson(args)
371
+ ? printJson(response)
372
+ : process.stdout.write(`Proposed workspace: ${slug} - ${name}\n${renderSlackImportSummary(preview, "preview")}`);
373
+ return;
374
+ }
375
+ const workspace = await store.createWorkspace(slug, name);
376
+ await store.useWorkspace(workspace.slug);
377
+ const result = await store.importSlackExport(exportData);
378
+ wantsJson(args)
379
+ ? printJson({ workspace, result })
380
+ : process.stdout.write(`created workspace ${workspace.slug}\n${renderSlackImportSummary(result, "apply")}`);
381
+ return;
382
+ }
383
+ if (command === "channels") {
384
+ const channels = store.listChannels();
385
+ wantsJson(args) ? printJson({ channels }) : process.stdout.write(`${renderChannels(channels)}\n`);
386
+ return;
387
+ }
388
+ if (command === "users") {
389
+ const users = store.listUsers();
390
+ wantsJson(args) ? printJson({ users }) : process.stdout.write(`${renderUsers(users)}\n`);
391
+ return;
392
+ }
393
+ if (command === "members") {
394
+ const members = store.listMembers();
395
+ wantsJson(args) ? printJson({ members }) : process.stdout.write(`${renderMembers(members)}\n`);
396
+ return;
397
+ }
398
+ if (command === "invite") {
399
+ const email = second;
400
+ if (!email) {
401
+ throw new Error("Usage: thane invite <email>");
402
+ }
403
+ const member = await store.invite(email, flagRole(args, "member"), flagString(args, "handle"));
404
+ wantsJson(args) ? printJson({ member }) : process.stdout.write(`invited ${email} as ${member.role}\n`);
405
+ return;
406
+ }
407
+ if (command === "member" && second === "role") {
408
+ const target = args.positionals[2];
409
+ const role = args.positionals[3];
410
+ if (!target || !role) {
411
+ throw new Error("Usage: thane member role <handle-or-email> <admin|member>");
412
+ }
413
+ if (role !== "admin" && role !== "member") {
414
+ throw new Error("Role must be admin or member.");
415
+ }
416
+ const member = await store.setMemberRole(target, role);
417
+ wantsJson(args) ? printJson({ member }) : process.stdout.write(`updated ${target} to ${role}\n`);
418
+ return;
419
+ }
420
+ if (command === "user" && second === "add") {
421
+ const handle = args.positionals[2];
422
+ if (!handle) {
423
+ throw new Error("Usage: thane user add <handle>");
424
+ }
425
+ const user = await store.addUser(handle, flagString(args, "name"));
426
+ wantsJson(args) ? printJson({ user }) : process.stdout.write(`added @${user.handle}\n`);
427
+ return;
428
+ }
429
+ if (command === "dms") {
430
+ const dms = store.listDms();
431
+ wantsJson(args) ? printJson({ dms }) : process.stdout.write(`${renderDms(dms)}\n`);
432
+ return;
433
+ }
434
+ if (command === "inbox") {
435
+ const conversations = store.inbox({
436
+ allWorkspaces: args.flags.has("all-workspaces"),
437
+ onlyUnread: !args.flags.has("include-quiet"),
438
+ includeQuiet: args.flags.has("include-quiet")
439
+ });
440
+ wantsJson(args) ? printJson({ conversations }) : process.stdout.write(`${renderInbox(conversations)}\n`);
441
+ return;
442
+ }
443
+ if (command === "channel" && second === "create") {
444
+ const name = args.positionals[2];
445
+ if (!name) {
446
+ throw new Error("Usage: thane channel create <name>");
447
+ }
448
+ const channel = await store.createChannel(name, flagString(args, "topic"), args.flags.has("private") ? "private" : "public");
449
+ wantsJson(args) ? printJson({ channel }) : process.stdout.write(`created #${channel.name}\n`);
450
+ return;
451
+ }
452
+ if (command === "channel" && second === "invite") {
453
+ const channelName = args.positionals[2];
454
+ const target = args.positionals[3];
455
+ if (!channelName || !target) {
456
+ throw new Error("Usage: thane channel invite <channel> <handle-or-email>");
457
+ }
458
+ const channel = await store.inviteToChannel(channelName, target);
459
+ wantsJson(args) ? printJson({ channel }) : process.stdout.write(`added ${target} to #${channel.name}\n`);
460
+ return;
461
+ }
462
+ if (command === "channel" && second === "join") {
463
+ const channelName = args.positionals[2];
464
+ if (!channelName) {
465
+ throw new Error("Usage: thane channel join <channel>");
466
+ }
467
+ const channel = await store.joinChannel(channelName);
468
+ wantsJson(args) ? printJson({ channel }) : process.stdout.write(`joined #${channel.name}\n`);
469
+ return;
470
+ }
471
+ if (command === "channel" && second === "leave") {
472
+ const channelName = args.positionals[2];
473
+ if (!channelName) {
474
+ throw new Error("Usage: thane channel leave <channel>");
475
+ }
476
+ const channel = await store.leaveChannel(channelName);
477
+ wantsJson(args) ? printJson({ channel }) : process.stdout.write(`left #${channel.name}\n`);
478
+ return;
479
+ }
480
+ if (command === "channel" && second === "members") {
481
+ const channelName = args.positionals[2];
482
+ if (!channelName) {
483
+ throw new Error("Usage: thane channel members <channel>");
484
+ }
485
+ const users = store.channelMembers(channelName);
486
+ wantsJson(args) ? printJson({ users }) : process.stdout.write(`${renderUsers(users)}\n`);
487
+ return;
488
+ }
489
+ if (command === "send") {
490
+ const channel = second;
491
+ const text = readMessageText(args, 2);
492
+ if (!channel || !text) {
493
+ throw new Error("Usage: thane send <channel> <message>");
494
+ }
495
+ const message = await store.sendMessage(channel, text);
496
+ wantsJson(args) ? printJson({ message }) : process.stdout.write(`sent ${message.id} to #${store.findChannel(channel)?.name ?? channel}\n`);
497
+ return;
498
+ }
499
+ if (command === "dm-send") {
500
+ const handle = second;
501
+ const text = readMessageText(args, 2);
502
+ if (!handle || !text) {
503
+ throw new Error("Usage: thane dm-send <handle> <message>");
504
+ }
505
+ const message = await store.sendDm(handle, text);
506
+ wantsJson(args) ? printJson({ message }) : process.stdout.write(`sent ${message.id} to @${handle.replace(/^@/, "")}\n`);
507
+ return;
508
+ }
509
+ if ((command === "dm-recent" || command === "dm") && second) {
510
+ const messages = store.recentDm(second, flagNumber(args, "limit", 20), parseSince(flagString(args, "since")));
511
+ wantsJson(args) ? printJson({ messages }) : process.stdout.write(`${renderMessages(messages)}\n`);
512
+ return;
513
+ }
514
+ if (command === "recent" || command === "see-recent") {
515
+ const limit = flagNumber(args, "limit", command === "see-recent" ? 50 : 20);
516
+ const since = parseSince(flagString(args, "since"));
517
+ const channel = second && !second.startsWith("--") ? second : undefined;
518
+ const messages = store.recent(channel, limit, since);
519
+ wantsJson(args) ? printJson({ messages }) : process.stdout.write(`${renderMessages(messages)}\n`);
520
+ return;
521
+ }
522
+ if (command === "unread") {
523
+ const messages = store.unread(flagNumber(args, "limit", 50));
524
+ wantsJson(args) ? printJson({ messages }) : process.stdout.write(`${renderMessages(messages)}\n`);
525
+ return;
526
+ }
527
+ if (command === "mentions") {
528
+ const messages = store.mentions(flagNumber(args, "limit", 20), parseSince(flagString(args, "since")));
529
+ wantsJson(args) ? printJson({ messages }) : process.stdout.write(`${renderMessages(messages)}\n`);
530
+ return;
531
+ }
532
+ if (command === "search") {
533
+ const query = args.positionals.slice(1).join(" ").trim();
534
+ if (!query) {
535
+ throw new Error("Usage: thane search <query>");
536
+ }
537
+ const messages = store.search(query, flagNumber(args, "limit", 20));
538
+ wantsJson(args) ? printJson({ messages }) : process.stdout.write(`${renderMessages(messages)}\n`);
539
+ return;
540
+ }
541
+ if (command === "thread") {
542
+ if (!second) {
543
+ throw new Error("Usage: thane thread <message-id>");
544
+ }
545
+ const messages = store.thread(second);
546
+ wantsJson(args) ? printJson({ messages }) : process.stdout.write(`${renderMessages(messages)}\n`);
547
+ return;
548
+ }
549
+ if (command === "reply") {
550
+ const text = readMessageText(args, 2);
551
+ if (!second || !text) {
552
+ throw new Error("Usage: thane reply <message-id> <message>");
553
+ }
554
+ const message = await store.reply(second, text);
555
+ wantsJson(args) ? printJson({ message }) : process.stdout.write(`sent ${message.id} in thread ${message.threadRootId}\n`);
556
+ return;
557
+ }
558
+ if (command === "react") {
559
+ const emoji = args.positionals[2];
560
+ if (!second || !emoji) {
561
+ throw new Error("Usage: thane react <message-id> <emoji>");
562
+ }
563
+ const message = await store.react(second, emoji);
564
+ wantsJson(args) ? printJson({ message }) : process.stdout.write(`reacted to ${second}\n`);
565
+ return;
566
+ }
567
+ if (command === "mark-read") {
568
+ if (!second) {
569
+ throw new Error("Usage: thane mark-read <channel>");
570
+ }
571
+ const state = await store.markRead(second);
572
+ wantsJson(args) ? printJson({ readState: state }) : process.stdout.write(`marked #${second} read\n`);
573
+ return;
574
+ }
575
+ throw new Error(`Unknown command "${command}". Run "thane help".`);
576
+ }
577
+ main().catch((error) => {
578
+ process.stderr.write(`${error.message}\n`);
579
+ process.exitCode = 1;
580
+ });
581
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/menu.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import type { SlashCommand } from "./slash-commands.js";
2
+ export declare function runSlashMenu(commands: SlashCommand[]): Promise<SlashCommand | undefined>;
3
+ //# sourceMappingURL=menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAmBxD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAgD9F"}