slack-term 1.44.0 → 1.46.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/README.md +14 -7
- package/SKILL.md +28 -10
- package/dist/cli.js +201 -199
- package/package.json +1 -1
- package/ts/ask.ts +79 -24
- package/ts/botIntent.ts +1 -0
- package/ts/cli.ts +280 -37
- package/ts/slack.ts +32 -0
- package/ts/slackTodos.ts +4 -3
package/README.md
CHANGED
|
@@ -123,9 +123,10 @@ slack react "<permalink>" eyes --remove # take a reaction back
|
|
|
123
123
|
|
|
124
124
|
# Ask a question with its choices pre-seeded as 1️⃣..🔟 reactions — answering is
|
|
125
125
|
# one tap on an existing pill, no emoji picker. Same two-step confirm gate as send.
|
|
126
|
-
# A
|
|
127
|
-
# these" and the answer comes as a reply (exit 5), not as the
|
|
128
|
-
#
|
|
126
|
+
# A ➕ "その他 (other)" pill always follows the choices: pressing it means "none of
|
|
127
|
+
# these" and the answer comes as a reply (exit 5), not as the ➕ itself. (Pills posted
|
|
128
|
+
# before ➕ carry ❓ there; they are still read, collected and voided the same way.)
|
|
129
|
+
# --explain (or SLACK_TERM_ASK_EXPLAIN=1) adds an ℹ️ "説明して (explain)" pill after ➕:
|
|
129
130
|
# pressing it asks YOU to explain in the thread and is never an answer — the question
|
|
130
131
|
# stays open. --wait/--waitFor say so on stderr and may post ONE thread note (once per
|
|
131
132
|
# question) saying an explanation is coming; --explain-exit makes that exit 7.
|
|
@@ -151,7 +152,7 @@ slack ask "#eng" "@here 誰か見れる?" "見る" "あとで" # anyo
|
|
|
151
152
|
# With no choices the question asks for a free-text reply and the reply is the answer.
|
|
152
153
|
# In a DM a plain reply counts; in a channel only reactions and thread replies do.
|
|
153
154
|
# Once answered, the question is edited to "✅ …回答済み > <answer>" — the body/background
|
|
154
|
-
# and the CHOSEN option line stay; the other options,
|
|
155
|
+
# and the CHOSEN option line stay; the other options, ➕ line and instructions go. The
|
|
155
156
|
# unpressed seeds are removed, leaving the chosen pill visible.
|
|
156
157
|
#
|
|
157
158
|
# Thread notes (audience replies that are not the answer, even after ✅) go to
|
|
@@ -362,9 +363,15 @@ into a second board.
|
|
|
362
363
|
|
|
363
364
|
### tail — real-time message stream
|
|
364
365
|
|
|
365
|
-
`slack tail`
|
|
366
|
-
|
|
367
|
-
|
|
366
|
+
`slack tail` prints new messages in a channel as they arrive, in the same
|
|
367
|
+
`[ts] @handle: text` format as the `read` command.
|
|
368
|
+
|
|
369
|
+
- **Transport: RTM WebSocket** (default) when the token is a desktop session
|
|
370
|
+
(`xoxc-` + cookie) and none of `--since`, `--timeout`, `--exit-on-message` is
|
|
371
|
+
given. If RTM can't connect it says `RTM unavailable — switching to polling.`
|
|
372
|
+
- **Fallback: polling** every `--interval` ms (default `60000` = 60 s; e.g.
|
|
373
|
+
`--interval=3000` for near-real-time at the cost of more API calls). Used for
|
|
374
|
+
other tokens, with any of the three flags above, or with `--no-rtm`.
|
|
368
375
|
|
|
369
376
|
```sh
|
|
370
377
|
slack tail "#general" # follow new messages from now
|
package/SKILL.md
CHANGED
|
@@ -174,13 +174,16 @@ without losing clicks. A reaction is durable state anyone can read back later.
|
|
|
174
174
|
destination resolve with the bot token (so the bot needs `users:read`).
|
|
175
175
|
- **Answer paths**: a pill, or free text. In a DM a plain reply counts; in a channel only
|
|
176
176
|
reactions and thread replies do (a channel carries unrelated traffic).
|
|
177
|
-
-
|
|
178
|
-
(`1️⃣ … 2️⃣ … 3️⃣ …
|
|
177
|
+
- **➕ is the standing "other" choice.** Every question with choices lists it last
|
|
178
|
+
(`1️⃣ … 2️⃣ … 3️⃣ … ➕ その他 — スレッドで返信`) and seeds it after the keycaps. Pressing it
|
|
179
179
|
is not an answer — `--wait` notes it on stderr and keeps waiting for the reply, which
|
|
180
|
-
arrives as free text (exit `5`).
|
|
180
|
+
arrives as free text (exit `5`). Questions posted before 2026-10-14 carry ❓ as this
|
|
181
|
+
pill (line and seed); they keep working, and a ❓ press counts as "other" on either kind.
|
|
182
|
+
The head marker stays `:question:` — only the pill moved. A free-text question has no
|
|
183
|
+
other choice and still seeds ❓.
|
|
181
184
|
- **ℹ️ is the "explain first" pill** — offered with `--explain` (or
|
|
182
|
-
`SLACK_TERM_ASK_EXPLAIN=1`; `--no-explain` overrides), listed under
|
|
183
|
-
it.
|
|
185
|
+
`SLACK_TERM_ASK_EXPLAIN=1`; `--no-explain` overrides), listed under ➕ and seeded after
|
|
186
|
+
it. ➕ means "none fit, my answer follows"; ℹ️ means "I can't answer yet — explain".
|
|
184
187
|
It **never answers or closes** the question: no ✅, the pills stay. `--wait`/`--waitFor`
|
|
185
188
|
print who pressed it on stderr (`--json`: `explain: [user ids]`) and may post ONE thread
|
|
186
189
|
note per question saying an explanation is coming (the thread is the record — re-presses
|
|
@@ -218,7 +221,7 @@ never get the same note twice. Only the question's audience counts; the asker, b
|
|
|
218
221
|
bystanders are never notes.
|
|
219
222
|
|
|
220
223
|
**Answering keeps the context.** The ✅ rewrite keeps the question's body (its background)
|
|
221
|
-
and the chosen option; only the options not chosen, the ❓ line and the instructions go.
|
|
224
|
+
and the chosen option; only the options not chosen, the ➕ (or ❓) line and the instructions go.
|
|
222
225
|
The head is unchanged (`:white_check_mark:` prefix, question, stamp, quoted answer), so
|
|
223
226
|
anything that keys on the prefix or re-reads the answer works on old and new ✅ bodies alike.
|
|
224
227
|
|
|
@@ -228,7 +231,11 @@ anything that keys on the prefix or re-reads the answer works on old and new ✅
|
|
|
228
231
|
(repeatable `--void=`; alias `slack ask void <link…>`; same `--code` gate; own questions
|
|
229
232
|
only, `--as-bot` for the bot's). The text becomes `:no_entry_sign:` + reason with the body
|
|
230
233
|
kept, our pills come off, and a 🚫 reaction is added. Three states, three prefixes:
|
|
231
|
-
`:question:` open, `:white_check_mark:` answered, `:no_entry_sign:` void
|
|
234
|
+
`:question:` open, `:white_check_mark:` answered, `:no_entry_sign:` void (the text prefix;
|
|
235
|
+
the open question's marker REACTION is ➕ on a question with choices, ❓ on free text and
|
|
236
|
+
on questions posted before ➕ — search `has::question: OR has::heavy_plus_sign:`; ➕ is a common
|
|
237
|
+
emoji, so that can match unrelated messages — `slack ask --ls` reads the local sent-log
|
|
238
|
+
and is unaffected). `--wait` /
|
|
232
239
|
`--waitFor` on a void question **exit 6** (`--json` → `status: "void"`): stop waiting.
|
|
233
240
|
Answered questions cannot be voided.
|
|
234
241
|
|
|
@@ -355,7 +362,7 @@ Reason flags stack independently of progress and of each other: ❗ `exclamation
|
|
|
355
362
|
`slack thread`/`slack read` before replying to avoid duplicates; consolidate multiple
|
|
356
363
|
points into one message.
|
|
357
364
|
|
|
358
|
-
### todos — Slack's To-dos tab
|
|
365
|
+
### todos — Slack's To-dos tab
|
|
359
366
|
|
|
360
367
|
Not `slack todo`: that tracks tasks as reactions. `slack todos` reads Slack's own
|
|
361
368
|
**personal** To-dos tab (the successor of "Later"), the list in the sidebar.
|
|
@@ -364,12 +371,23 @@ Not `slack todo`: that tracks tasks as reactions. `slack todos` reads Slack's ow
|
|
|
364
371
|
slack todos # open to-dos, soonest due first (OVERDUE marked)
|
|
365
372
|
slack todos --filter completed # also: saved (everything saved), archived
|
|
366
373
|
slack todos --json -n 20 # one object per item: due, done, permalink, text
|
|
374
|
+
|
|
375
|
+
# Writes — gated like send: the first run previews and prints a code, rerun with --code=<code>
|
|
376
|
+
slack todos add "<permalink>" --due 2026-11-01T18:00 # --saved: no checkbox
|
|
377
|
+
slack todos done "<permalink>" # --undo reopens it
|
|
378
|
+
slack todos edit "<permalink>" --due none # or --due <time>, --todo / --saved
|
|
379
|
+
slack todos rm "<permalink>" # removes the to-do; the message stays
|
|
367
380
|
```
|
|
368
381
|
|
|
382
|
+
A To-do always points at a message, so the target is a message permalink or
|
|
383
|
+
`#chan:<ts>`. `add` refuses a message that is already saved; `done`/`edit`/`rm`
|
|
384
|
+
refuse one that isn't (Slack's delete answers ok even when there is nothing to
|
|
385
|
+
delete, so the CLI checks first).
|
|
386
|
+
|
|
369
387
|
There is no public API: it uses the desktop client's internal `saved.list`, so
|
|
370
388
|
it needs the **xoxc session** (`slack auth login`) and shows only your own
|
|
371
|
-
to-dos. Bots can't see them.
|
|
372
|
-
|
|
389
|
+
to-dos. Bots can't see them. Writes use the internal `saved.add` /
|
|
390
|
+
`saved.update` / `saved.delete`. Slack can change these endpoints without notice.
|
|
373
391
|
|
|
374
392
|
## Output formatting
|
|
375
393
|
|