pm-slack-standup 2026.5.31 → 2026.6.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.6.2 - 2026-06-02
4
+
5
+ ### Added
6
+
7
+ - Block Kit standup + standup export exporter + grouping/window/mention flags ([pm-slack-standup-ddta](https://github.com/unbraind/pm-slack-standup/blob/main/.agents/pm/features/pm-slack-standup-ddta.toon))
8
+
9
+ ## 2026.06.01 - 2026-06-01
10
+
11
+ ### Fixed
12
+
13
+ - standup threw plain Error \(no exitCode\) → runtime double-invocation ([pm-slack-standup-uyr9](https://github.com/unbraind/pm-slack-standup/blob/main/.agents/pm/issues/pm-slack-standup-uyr9.toon))
14
+
3
15
  ## 2026.05.29 - 2026-05-29
4
16
 
5
17
  ### Fixed
package/README.md CHANGED
@@ -4,12 +4,13 @@ A [pm-cli](https://github.com/unbraind/pm-cli) extension that posts your current
4
4
 
5
5
  ## Features
6
6
 
7
- - Posts WIP, Blocked, and Up Next items to a Slack channel via incoming webhook
8
- - Optional Done Today section (`--include-done`)
9
- - Dry-run mode to preview the message without posting
10
- - Slack mrkdwn formatting or plain text output
11
- - Channel prefix support
12
- - Webhook URL configurable via flag or environment variable
7
+ - Posts WIP, Blocked, Up Next (and optional Done) items to Slack as a rich **Block Kit** message (header, one section per bucket, context footer) with an automatic plain-text fallback
8
+ - `pm standup export` write the standup to a file as Markdown or JSON (the JSON form includes the full Block Kit payload for archiving or re-posting)
9
+ - Group section items by `status` (default) or `assignee` (`--group-by`)
10
+ - Map pm authors to Slack handles so they get mentioned (`--mention-map`)
11
+ - Restrict the Done section to a recent window (`--since <iso>`, with `--include-done`)
12
+ - Dry-run mode to preview both the rendered message and the Block Kit JSON
13
+ - Webhook URL configurable via flag or environment variable; missing webhook is a graceful no-op (never blocks a workflow)
13
14
 
14
15
  ## Installation
15
16
 
@@ -56,10 +57,30 @@ pm standup [flags]
56
57
  | Flag | Type | Default | Description |
57
58
  |------|------|---------|-------------|
58
59
  | `--webhook <url>` | string | — | Slack incoming webhook URL (overrides `PM_SLACK_WEBHOOK`) |
59
- | `--channel <name>` | string | — | Channel name to prepend to the message (e.g. `#team-eng`) |
60
- | `--dry-run` | boolean | `false` | Print the message without posting to Slack |
61
- | `--include-done` | boolean | `false` | Include items with `done` status in a Done Today section |
62
- | `--format <slack\|text>` | string | `slack` | Output format: `slack` uses mrkdwn, `text` is plain |
60
+ | `--channel <name>` | string | — | Channel name shown in the message (e.g. `#team-eng`) |
61
+ | `--dry-run` | boolean | `false` | Print the rendered message and the Block Kit JSON without posting |
62
+ | `--include-done` | boolean | `false` | Include recently-closed items in a Done section |
63
+ | `--since <iso>` | string | | ISO date/time window; filters the Done section to items updated since then |
64
+ | `--group-by <status\|assignee>` | string | `status` | Group section items by status (default) or assignee |
65
+ | `--mention-map <map>` | string | — | Map pm authors to Slack handles, e.g. `alice=@alice,bob=@bob` |
66
+ | `--format <slack\|text>` | string | `slack` | Plain-text rendering used for the fallback / preview |
67
+
68
+ ## Export
69
+
70
+ `pm standup export` writes the standup to a file (or stdout) instead of posting it to Slack:
71
+
72
+ ```bash
73
+ pm standup export --format md --output standup.md --include-done
74
+ pm standup export --format json --output standup.json --group-by assignee
75
+ pm standup export # Markdown to stdout
76
+ ```
77
+
78
+ | Flag | Default | Description |
79
+ |------|---------|-------------|
80
+ | `--format <md\|json>` | `md` | File format. `json` includes the full Block Kit payload under `slack.blocks` |
81
+ | `--output <file>` | stdout | Output file path |
82
+
83
+ The `--since`, `--group-by`, `--include-done`, `--channel` and `--mention-map` flags above also apply to the export.
63
84
 
64
85
  ### Examples
65
86
 
@@ -152,10 +173,10 @@ npm run dev # watch mode
152
173
 
153
174
  ## How It Works
154
175
 
155
- 1. Fetches items from pm-cli with statuses `wip`, `blocked`, `todo`, and optionally `done`.
156
- 2. Sorts `todo` items by priority (ascending) and takes the top 3 as "Up Next".
157
- 3. Formats a message using either Slack mrkdwn or plain text.
158
- 4. Posts the message to the configured Slack webhook using Node.js native `https`.
176
+ 1. Reads every item once via `pm --path <root> list-all --json --include-body` and buckets them locally into In Progress, Blocked, open (Up Next) and optionally Done.
177
+ 2. Sorts open items by priority (ascending) and takes the top 3 as "Up Next".
178
+ 3. Builds a Slack Block Kit `blocks` array (header + a section per bucket + context footer) plus a plain-text `fallback`, optionally grouped by assignee and annotated with Slack mentions.
179
+ 4. Posts `{ text, blocks }` to the configured Slack webhook using Node.js native `https`. A missing webhook or a network failure is a non-blocking no-op (warns and exits 0).
159
180
 
160
181
  ## License
161
182
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;AAiOA,wBA8GG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;AA2aA,wBAuJG"}
package/dist/index.js CHANGED
@@ -1,7 +1,32 @@
1
1
  import https from "node:https";
2
2
  import { spawnSync } from "node:child_process";
3
+ import { writeFileSync } from "node:fs";
4
+ import { resolve } from "node:path";
3
5
  const defineExtension = ((extension) => extension);
4
6
  // ---------------------------------------------------------------------------
7
+ // Error contract
8
+ // ---------------------------------------------------------------------------
9
+ // pm's extension command runtime only treats a thrown error as a cleanly
10
+ // handled non-zero exit when the error carries a numeric `exitCode` property
11
+ // (see @unbrained/pm-cli runCommandHandler). A plain `Error` makes the runtime
12
+ // fall through to its "unhandled" path, which RE-INVOKES the command handler a
13
+ // second time and exits with a generic code. We mirror the SDK's EXIT_CODE
14
+ // contract here rather than importing it: standalone-installed extensions load
15
+ // only their own `dist/`, so `@unbrained/pm-cli` is not resolvable at runtime.
16
+ const EXIT_CODE = {
17
+ GENERIC_FAILURE: 1,
18
+ USAGE: 2,
19
+ NOT_FOUND: 3,
20
+ };
21
+ class CommandError extends Error {
22
+ exitCode;
23
+ constructor(message, exitCode = EXIT_CODE.GENERIC_FAILURE) {
24
+ super(message);
25
+ this.name = "CommandError";
26
+ this.exitCode = exitCode;
27
+ }
28
+ }
29
+ // ---------------------------------------------------------------------------
5
30
  // Option helpers
6
31
  // ---------------------------------------------------------------------------
7
32
  /**
@@ -36,110 +61,230 @@ function readStrOption(options, key) {
36
61
  }
37
62
  return undefined;
38
63
  }
64
+ /**
65
+ * Parse a `--mention-map` spec mapping pm authors to Slack handles.
66
+ * Accepts `author=@handle,other=@h2` (commas) or semicolon separators.
67
+ * A leading `@` on the handle is optional and normalized on.
68
+ */
69
+ function parseMentionMap(spec) {
70
+ const map = {};
71
+ if (!spec)
72
+ return map;
73
+ for (const pair of spec.split(/[,;]/)) {
74
+ const eq = pair.indexOf("=");
75
+ if (eq < 0)
76
+ continue;
77
+ const author = pair.slice(0, eq).trim();
78
+ let handle = pair.slice(eq + 1).trim();
79
+ if (!author || !handle)
80
+ continue;
81
+ if (!handle.startsWith("@"))
82
+ handle = `@${handle}`;
83
+ map[author] = handle;
84
+ }
85
+ return map;
86
+ }
39
87
  // ---------------------------------------------------------------------------
40
- // Helpers
88
+ // Data fetch
41
89
  // ---------------------------------------------------------------------------
42
- function fetchItemsByStatus(pmRoot, subcommand) {
43
- const result = spawnSync("pm", ["--path", pmRoot, subcommand, "--json"], { encoding: "utf-8" });
90
+ /**
91
+ * Read every item once via `list-all --json --include-body`, then bucket by
92
+ * status locally. This is a single pm invocation (vs. four list-by-status
93
+ * calls) and gives us bodies + assignee + timestamps for grouping/windowing.
94
+ */
95
+ function fetchAllItems(pmRoot) {
96
+ const result = spawnSync("pm", ["--path", pmRoot, "list-all", "--json", "--include-body"], { encoding: "utf-8" });
44
97
  if (result.error || result.status !== 0) {
45
- console.error(`pm ${subcommand} failed: ${result.stderr}`);
98
+ console.error(`pm list-all failed: ${result.stderr ?? result.error?.message ?? ""}`);
46
99
  return [];
47
100
  }
48
- return (JSON.parse(result.stdout).items ?? []);
101
+ try {
102
+ return (JSON.parse(result.stdout).items ?? []);
103
+ }
104
+ catch (err) {
105
+ console.error(`pm list-all returned unparseable JSON: ${err instanceof Error ? err.message : String(err)}`);
106
+ return [];
107
+ }
108
+ }
109
+ const WIP_STATUSES = new Set(["in_progress", "wip", "doing"]);
110
+ const BLOCKED_STATUSES = new Set(["blocked", "on_hold"]);
111
+ const OPEN_STATUSES = new Set(["open", "todo", "new", "draft"]);
112
+ const DONE_STATUSES = new Set(["closed", "done", "complete", "completed"]);
113
+ function statusOf(item) {
114
+ return (item.status ?? "").trim().toLowerCase();
49
115
  }
116
+ /**
117
+ * Bucket items into standup sections.
118
+ * `since` (ISO date/time) filters the Done section to items updated within the
119
+ * window; WIP/blocked/up-next always reflect current state.
120
+ */
121
+ function buildStandupData(items, opts) {
122
+ const sinceMs = opts.since ? Date.parse(opts.since) : NaN;
123
+ const withinWindow = (item) => {
124
+ if (isNaN(sinceMs))
125
+ return true;
126
+ const ts = Date.parse(item.updated_at ?? item.created_at ?? "");
127
+ return isNaN(ts) ? false : ts >= sinceMs;
128
+ };
129
+ const wip = items.filter((i) => WIP_STATUSES.has(statusOf(i)));
130
+ const blocked = items.filter((i) => BLOCKED_STATUSES.has(statusOf(i)));
131
+ const open = items.filter((i) => OPEN_STATUSES.has(statusOf(i)));
132
+ const done = opts.includeDone
133
+ ? items.filter((i) => DONE_STATUSES.has(statusOf(i)) && withinWindow(i))
134
+ : [];
135
+ const upNext = [...open]
136
+ .sort((a, b) => (a.priority ?? 9999) - (b.priority ?? 9999))
137
+ .slice(0, 3);
138
+ return { wip, blocked, done, upNext, total: items.length };
139
+ }
140
+ // ---------------------------------------------------------------------------
141
+ // Rendering helpers
142
+ // ---------------------------------------------------------------------------
50
143
  function typeLabel(item) {
51
144
  if (!item.type)
52
145
  return "";
53
146
  const label = item.type.charAt(0).toUpperCase() + item.type.slice(1);
54
147
  return `[${label}]`;
55
148
  }
56
- function itemLine(item, format) {
149
+ function mentionFor(item, mentionMap) {
150
+ const author = item.assignee;
151
+ if (author && mentionMap[author])
152
+ return ` (${mentionMap[author]})`;
153
+ return "";
154
+ }
155
+ function itemText(item, mentionMap, withPriority = false) {
57
156
  const label = typeLabel(item);
58
157
  const title = label ? `${label} ${item.title}` : item.title;
59
- return format === "slack" ? `• ${title}` : `• ${title}`;
158
+ const prio = withPriority && item.priority != null ? ` (priority ${item.priority})` : "";
159
+ return `${title}${prio}${mentionFor(item, mentionMap)}`;
60
160
  }
61
161
  function todayISO() {
62
162
  return new Date().toISOString().slice(0, 10);
63
163
  }
64
- function buildMessage(wip, blocked, done, upNext, opts) {
65
- const { format } = opts;
66
- const lines = [];
67
- // Header
68
- const dateStr = todayISO();
69
- if (format === "slack") {
70
- lines.push(`📊 *pm standup* ${dateStr}`);
71
- }
72
- else {
73
- lines.push(`📊 pm standup — ${dateStr}`);
74
- }
75
- // Channel prefix (prepended at the very top when posting to Slack)
76
- // It's added to the message body so dry-run also shows it.
77
- if (opts.channel) {
78
- lines.unshift(`> Channel: ${opts.channel}`);
79
- }
80
- lines.push("");
81
- // In Progress
82
- if (format === "slack") {
83
- lines.push(`🏃 *In Progress* (${wip.length})`);
164
+ /**
165
+ * Group a list of items by assignee. Items with no assignee bucket under
166
+ * "_unassigned". Returns entries sorted by assignee name for stable output.
167
+ */
168
+ function groupByAssignee(items) {
169
+ const groups = new Map();
170
+ for (const item of items) {
171
+ const key = item.assignee ?? "_unassigned";
172
+ (groups.get(key) ?? groups.set(key, []).get(key)).push(item);
84
173
  }
85
- else {
86
- lines.push(`🏃 In Progress (${wip.length})`);
174
+ return [...groups.entries()].sort((a, b) => a[0].localeCompare(b[0]));
175
+ }
176
+ // ---------------------------------------------------------------------------
177
+ // Plain-text / mrkdwn message (fallback + dry-run preview)
178
+ // ---------------------------------------------------------------------------
179
+ function renderSection(lines, emoji, title, items, emptyNote, opts, withPriority = false) {
180
+ const heading = opts.format === "slack" ? `${emoji} *${title}* (${items.length})` : `${emoji} ${title} (${items.length})`;
181
+ lines.push(heading);
182
+ if (items.length === 0) {
183
+ if (emptyNote)
184
+ lines.push(opts.format === "slack" ? `• _${emptyNote}_` : `• ${emptyNote}`);
185
+ return;
87
186
  }
88
- if (wip.length === 0) {
89
- lines.push("• _nothing in progress_");
187
+ if (opts.groupBy === "assignee") {
188
+ for (const [assignee, group] of groupByAssignee(items)) {
189
+ const name = assignee === "_unassigned" ? "Unassigned" : assignee;
190
+ lines.push(opts.format === "slack" ? ` *${name}*` : ` ${name}`);
191
+ for (const item of group)
192
+ lines.push(` • ${itemText(item, opts.mentionMap, withPriority)}`);
193
+ }
90
194
  }
91
195
  else {
92
- for (const item of wip)
93
- lines.push(itemLine(item, format));
196
+ for (const item of items)
197
+ lines.push(`• ${itemText(item, opts.mentionMap, withPriority)}`);
94
198
  }
199
+ }
200
+ function buildTextMessage(data, opts) {
201
+ const lines = [];
202
+ const dateStr = todayISO();
203
+ if (opts.channel)
204
+ lines.push(`> Channel: ${opts.channel}`);
205
+ lines.push(opts.format === "slack" ? `📊 *pm standup* — ${dateStr}` : `📊 pm standup — ${dateStr}`);
95
206
  lines.push("");
96
- // Blocked
97
- if (format === "slack") {
98
- lines.push(`🚫 *Blocked* (${blocked.length})`);
99
- }
100
- else {
101
- lines.push(`🚫 Blocked (${blocked.length})`);
102
- }
103
- if (blocked.length === 0) {
104
- lines.push("• _nothing blocked_");
105
- }
106
- else {
107
- for (const item of blocked)
108
- lines.push(itemLine(item, format));
109
- }
110
- // Done Today (optional)
111
- if (done.length > 0) {
207
+ renderSection(lines, "🏃", "In Progress", data.wip, "nothing in progress", opts);
208
+ lines.push("");
209
+ renderSection(lines, "🚫", "Blocked", data.blocked, "nothing blocked", opts);
210
+ if (data.done.length > 0) {
112
211
  lines.push("");
113
- if (format === "slack") {
114
- lines.push(`✅ *Done Today* (${done.length})`);
115
- }
116
- else {
117
- lines.push(`✅ Done Today (${done.length})`);
118
- }
119
- for (const item of done)
120
- lines.push(itemLine(item, format));
212
+ renderSection(lines, "✅", "Done", data.done, null, opts);
121
213
  }
122
- // Up Next
123
- if (upNext.length > 0) {
214
+ if (data.upNext.length > 0) {
124
215
  lines.push("");
125
- if (format === "slack") {
126
- lines.push(`📋 *Up Next* (${upNext.length})`);
127
- }
128
- else {
129
- lines.push(`📋 Up Next (${upNext.length})`);
216
+ renderSection(lines, "📋", "Up Next", data.upNext, null, opts, true);
217
+ }
218
+ return lines.join("\n");
219
+ }
220
+ function mrkdwnList(items, opts, withPriority = false) {
221
+ if (items.length === 0)
222
+ return "_none_";
223
+ if (opts.groupBy === "assignee") {
224
+ const parts = [];
225
+ for (const [assignee, group] of groupByAssignee(items)) {
226
+ const name = assignee === "_unassigned" ? "Unassigned" : assignee;
227
+ parts.push(`*${name}*`);
228
+ for (const item of group)
229
+ parts.push(`• ${itemText(item, opts.mentionMap, withPriority)}`);
130
230
  }
131
- upNext.forEach((item) => {
132
- const label = typeLabel(item);
133
- const title = label ? `${label} ${item.title}` : item.title;
134
- const prio = item.priority != null ? ` (priority ${item.priority})` : "";
135
- lines.push(`• ${title}${prio}`);
231
+ return parts.join("\n");
232
+ }
233
+ return items.map((item) => `• ${itemText(item, opts.mentionMap, withPriority)}`).join("\n");
234
+ }
235
+ /**
236
+ * Build a Slack Block Kit `blocks` array: a header, a section per standup
237
+ * bucket (In Progress / Blocked / Up Next / optional Done) and a context
238
+ * footer. Returns the blocks plus a plain-text `fallback` Slack renders in
239
+ * notifications and old clients.
240
+ */
241
+ function buildBlockKit(data, opts) {
242
+ const blocks = [];
243
+ const dateStr = todayISO();
244
+ blocks.push({
245
+ type: "header",
246
+ text: { type: "plain_text", text: `📊 pm standup — ${dateStr}`, emoji: true },
247
+ });
248
+ if (opts.channel) {
249
+ blocks.push({
250
+ type: "context",
251
+ elements: [{ type: "mrkdwn", text: `Channel: ${opts.channel}` }],
136
252
  });
137
253
  }
138
- return lines.join("\n");
254
+ const section = (emoji, title, items, withPriority = false) => {
255
+ blocks.push({
256
+ type: "section",
257
+ text: {
258
+ type: "mrkdwn",
259
+ text: `${emoji} *${title}* (${items.length})\n${mrkdwnList(items, opts, withPriority)}`,
260
+ },
261
+ });
262
+ };
263
+ section("🏃", "In Progress", data.wip);
264
+ section("🚫", "Blocked", data.blocked);
265
+ section("📋", "Up Next", data.upNext, true);
266
+ if (data.done.length > 0)
267
+ section("✅", "Done", data.done);
268
+ blocks.push({ type: "divider" });
269
+ const footerBits = [
270
+ `${data.total} item(s) total`,
271
+ opts.since ? `since ${opts.since}` : null,
272
+ opts.groupBy === "assignee" ? "grouped by assignee" : null,
273
+ ].filter(Boolean);
274
+ blocks.push({
275
+ type: "context",
276
+ elements: [{ type: "mrkdwn", text: `🤖 pm-slack-standup · ${footerBits.join(" · ")}` }],
277
+ });
278
+ // Plain-text fallback mirrors the text message (slack mrkdwn variant).
279
+ const fallback = buildTextMessage(data, { ...opts, format: "slack" });
280
+ return { blocks, fallback };
139
281
  }
140
- function postToSlack(webhookUrl, text) {
282
+ // ---------------------------------------------------------------------------
283
+ // Slack transport
284
+ // ---------------------------------------------------------------------------
285
+ function postToSlack(webhookUrl, payload) {
141
286
  return new Promise((resolve, reject) => {
142
- const payload = JSON.stringify({ text, mrkdwn: true });
287
+ const body = JSON.stringify(payload);
143
288
  const url = new URL(webhookUrl);
144
289
  const options = {
145
290
  hostname: url.hostname,
@@ -147,124 +292,176 @@ function postToSlack(webhookUrl, text) {
147
292
  method: "POST",
148
293
  headers: {
149
294
  "Content-Type": "application/json",
150
- "Content-Length": Buffer.byteLength(payload),
295
+ "Content-Length": Buffer.byteLength(body),
151
296
  },
152
297
  };
153
298
  const req = https.request(options, (res) => {
154
- let body = "";
155
- res.on("data", (chunk) => (body += chunk.toString()));
299
+ let respBody = "";
300
+ res.on("data", (chunk) => (respBody += chunk.toString()));
156
301
  res.on("end", () => {
157
302
  if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
158
303
  resolve();
159
304
  }
160
305
  else {
161
- reject(new Error(`Slack webhook returned HTTP ${res.statusCode ?? "unknown"}: ${body}`));
306
+ reject(new Error(`Slack webhook returned HTTP ${res.statusCode ?? "unknown"}: ${respBody}`));
162
307
  }
163
308
  });
164
309
  });
165
- req.on("error", (err) => {
166
- reject(new Error(`Slack webhook request failed: ${err.message}`));
167
- });
168
- req.setTimeout(10_000, () => {
169
- req.destroy(new Error("Slack webhook request timed out after 10s"));
170
- });
171
- req.write(payload);
310
+ req.on("error", (err) => reject(new Error(`Slack webhook request failed: ${err.message}`)));
311
+ req.setTimeout(10_000, () => req.destroy(new Error("Slack webhook request timed out after 10s")));
312
+ req.write(body);
172
313
  req.end();
173
314
  });
174
315
  }
175
316
  // ---------------------------------------------------------------------------
317
+ // Shared option resolution
318
+ // ---------------------------------------------------------------------------
319
+ function resolveStandupOptions(options) {
320
+ const rawFormat = readStrOption(options, "format");
321
+ const rawGroup = readStrOption(options, "group-by");
322
+ return {
323
+ channel: readStrOption(options, "channel"),
324
+ format: rawFormat === "text" ? "text" : "slack",
325
+ includeDone: readBoolOption(options, "include-done"),
326
+ since: readStrOption(options, "since"),
327
+ groupBy: rawGroup === "assignee" ? "assignee" : "status",
328
+ mentionMap: parseMentionMap(readStrOption(options, "mention-map")),
329
+ };
330
+ }
331
+ // ---------------------------------------------------------------------------
176
332
  // Extension
177
333
  // ---------------------------------------------------------------------------
178
334
  export default defineExtension({
179
335
  name: "pm-slack-standup",
180
- version: "2026.5.31",
336
+ version: "2026.6.2",
181
337
  activate(api) {
182
338
  api.registerCommand({
183
339
  name: "standup",
184
- description: "Post pm context as a Slack standup message",
185
- intent: "Share current work status (in-progress, blocked, up-next) to a Slack channel via webhook",
340
+ description: "Post pm context as a rich Slack standup (Block Kit) message",
341
+ intent: "Share current work status (in-progress, blocked, up-next, done) to a Slack channel via webhook",
186
342
  examples: [
187
343
  "pm standup --webhook https://hooks.slack.com/services/...",
188
344
  "pm standup --channel '#team-eng' --dry-run",
189
- "pm standup --include-done --format text",
345
+ "pm standup --include-done --since 2026-06-01",
346
+ "pm standup --group-by assignee --mention-map 'alice=@alice.s,bob=@bob'",
190
347
  "PM_SLACK_WEBHOOK=https://... pm standup --channel '#standups'",
191
348
  ],
192
349
  flags: [
193
- {
194
- long: "--webhook",
195
- value_name: "url",
196
- description: "Slack incoming webhook URL (overrides PM_SLACK_WEBHOOK env var)",
197
- },
198
- {
199
- long: "--channel",
200
- value_name: "name",
201
- description: "Channel name to prepend to the standup message (e.g. #team-eng)",
202
- },
203
- {
204
- long: "--dry-run",
205
- description: "Print the message without posting to Slack",
206
- },
207
- {
208
- long: "--include-done",
209
- description: "Include items with 'closed' status in a Done Today section",
210
- },
211
- {
212
- long: "--format",
213
- value_name: "fmt",
214
- description: "Output format: 'slack' uses mrkdwn bold/italic, 'text' is plain (default: slack)",
215
- },
350
+ { long: "--webhook", value_name: "url", description: "Slack incoming webhook URL (overrides PM_SLACK_WEBHOOK env var)" },
351
+ { long: "--channel", value_name: "name", description: "Channel name shown in the message (e.g. #team-eng)" },
352
+ { long: "--dry-run", description: "Print the message without posting to Slack" },
353
+ { long: "--include-done", description: "Include recently-closed items in a Done section" },
354
+ { long: "--since", value_name: "iso", description: "ISO date/time window; filters the Done section to items updated since then" },
355
+ { long: "--group-by", value_name: "field", description: "Group section items by 'status' (default) or 'assignee'" },
356
+ { long: "--mention-map", value_name: "map", description: "Map pm authors to Slack handles, e.g. 'alice=@alice,bob=@bob'" },
357
+ { long: "--format", value_name: "fmt", description: "Plain-text rendering: 'slack' uses mrkdwn, 'text' is plain (default: slack)" },
216
358
  ],
217
359
  async run(ctx) {
218
- // Resolve options. pm normalizes flags to camelCase at runtime, so we
219
- // read both kebab- and camelCase forms via the option helpers.
220
360
  const webhookUrl = readStrOption(ctx.options, "webhook") ?? process.env["PM_SLACK_WEBHOOK"] ?? "";
221
361
  const dryRun = readBoolOption(ctx.options, "dry-run");
222
- const includeDone = readBoolOption(ctx.options, "include-done");
223
- const rawFormat = readStrOption(ctx.options, "format");
224
- const format = rawFormat === "text" ? "text" : "slack";
225
- const channel = readStrOption(ctx.options, "channel");
362
+ const opts = resolveStandupOptions(ctx.options);
226
363
  if (!dryRun && !webhookUrl) {
227
- // Throw so pm reports a non-zero exit code; returning an error object
228
- // would let the command exit 0 and mask the failure.
229
- throw new Error("No webhook URL provided. Set --webhook or PM_SLACK_WEBHOOK env var, or use --dry-run.");
364
+ // Graceful no-op when no webhook is configured: warn and exit 0 so the
365
+ // command never blocks a workflow on a missing/unset webhook.
366
+ console.error("PM_SLACK_WEBHOOK not set and no --webhook provided Slack posting disabled. " +
367
+ "Use --dry-run to preview the message.");
368
+ return { posted: false, disabled: true, reason: "no-webhook" };
230
369
  }
231
- // Fetch items using pm subcommands
232
- const wipItems = fetchItemsByStatus(ctx.pm_root, "list-in-progress");
233
- const blockedItems = fetchItemsByStatus(ctx.pm_root, "list-blocked");
234
- const todoItems = fetchItemsByStatus(ctx.pm_root, "list-open");
235
- const doneItems = includeDone ? fetchItemsByStatus(ctx.pm_root, "list-closed") : [];
236
- // Sort todo by priority (lower number = higher priority), take top 3
237
- const upNext = [...todoItems]
238
- .sort((a, b) => {
239
- const pa = a.priority ?? 9999;
240
- const pb = b.priority ?? 9999;
241
- return pa - pb;
242
- })
243
- .slice(0, 3);
244
- const message = buildMessage(wipItems, blockedItems, doneItems, upNext, { channel, format, includeDate: true });
370
+ const items = fetchAllItems(ctx.pm_root);
371
+ const data = buildStandupData(items, opts);
372
+ const { blocks, fallback } = buildBlockKit(data, opts);
373
+ const textPreview = opts.format === "text" ? buildTextMessage(data, opts) : fallback;
245
374
  if (dryRun) {
246
375
  console.error("--- DRY RUN (message not posted) ---");
247
- process.stdout.write(message + "\n");
376
+ process.stdout.write(textPreview + "\n");
377
+ console.error("--- Block Kit payload ---");
378
+ process.stdout.write(JSON.stringify({ blocks }, null, 2) + "\n");
248
379
  console.error("--- END ---");
249
380
  return {
250
381
  dryRun: true,
251
- message,
252
- wip: wipItems.length,
253
- blocked: blockedItems.length,
254
- done: doneItems.length,
255
- upNext: upNext.length,
382
+ blocks,
383
+ fallback,
384
+ wip: data.wip.length,
385
+ blocked: data.blocked.length,
386
+ done: data.done.length,
387
+ upNext: data.upNext.length,
256
388
  };
257
389
  }
258
- await postToSlack(webhookUrl, message);
390
+ try {
391
+ await postToSlack(webhookUrl, { text: fallback, blocks, mrkdwn: true });
392
+ }
393
+ catch (err) {
394
+ // Never throw on network failure: warn and exit 0 so a flaky Slack
395
+ // endpoint doesn't break the caller's workflow.
396
+ console.error(`Slack post failed (continuing): ${err instanceof Error ? err.message : String(err)}`);
397
+ return { posted: false, error: err instanceof Error ? err.message : String(err) };
398
+ }
259
399
  return {
260
400
  posted: true,
261
- wip: wipItems.length,
262
- blocked: blockedItems.length,
263
- done: doneItems.length,
264
- upNext: upNext.length,
401
+ wip: data.wip.length,
402
+ blocked: data.blocked.length,
403
+ done: data.done.length,
404
+ upNext: data.upNext.length,
265
405
  };
266
406
  },
267
407
  });
408
+ // -----------------------------------------------------------------------
409
+ // Exporter: standup → `pm standup export`
410
+ // Writes the standup to a file (or stdout) as Markdown or JSON. JSON emits
411
+ // the full Block Kit payload so it can be POSTed elsewhere or archived.
412
+ // (No collision with the `pm standup` command — different invocation.)
413
+ // -----------------------------------------------------------------------
414
+ api.registerExporter("standup", async (ctx) => {
415
+ const opts = resolveStandupOptions(ctx.options);
416
+ const rawFormat = (readStrOption(ctx.options, "format") ?? "md").toLowerCase();
417
+ // For the exporter, --format selects the file format (md|json); the
418
+ // mrkdwn-vs-plain text choice is irrelevant here so default text to plain.
419
+ const fileFormat = rawFormat === "json" ? "json" : "md";
420
+ const exportOpts = { ...opts, format: "text" };
421
+ const items = fetchAllItems(ctx.pm_root);
422
+ const data = buildStandupData(items, exportOpts);
423
+ let output;
424
+ if (fileFormat === "json") {
425
+ const { blocks, fallback } = buildBlockKit(data, opts);
426
+ output = JSON.stringify({
427
+ date: todayISO(),
428
+ channel: opts.channel,
429
+ since: opts.since,
430
+ groupBy: opts.groupBy,
431
+ counts: {
432
+ wip: data.wip.length,
433
+ blocked: data.blocked.length,
434
+ done: data.done.length,
435
+ upNext: data.upNext.length,
436
+ total: data.total,
437
+ },
438
+ sections: {
439
+ in_progress: data.wip,
440
+ blocked: data.blocked,
441
+ up_next: data.upNext,
442
+ done: data.done,
443
+ },
444
+ slack: { text: fallback, blocks },
445
+ }, null, 2);
446
+ }
447
+ else {
448
+ // Markdown: reuse the plain-text renderer, upgrade headings to `##`.
449
+ const md = buildTextMessage(data, exportOpts)
450
+ .replace(/^📊 pm standup — (.+)$/m, "# pm standup — $1")
451
+ .replace(/^(🏃|🚫|✅|📋) (.+)$/gm, "## $1 $2");
452
+ output = md;
453
+ }
454
+ const outputPath = readStrOption(ctx.options, "output");
455
+ if (outputPath) {
456
+ const absolutePath = resolve(outputPath);
457
+ writeFileSync(absolutePath, output + "\n", "utf-8");
458
+ console.error(`standup export: wrote ${data.total} item(s) as ${fileFormat} to ${absolutePath}`);
459
+ return { exported: data.total, format: fileFormat, file: absolutePath };
460
+ }
461
+ console.log(output);
462
+ console.error(`standup export: rendered ${data.total} item(s) as ${fileFormat}.`);
463
+ return { exported: data.total, format: fileFormat, output };
464
+ });
268
465
  },
269
466
  });
270
467
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/manifest.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "pm-slack-standup",
3
- "version": "2026.5.31",
3
+ "version": "2026.6.2",
4
4
  "description": "Post pm context as a Slack standup message",
5
5
  "author": "@unbraind",
6
6
  "entry": "./dist/index.js",
7
7
  "priority": 50,
8
8
  "capabilities": [
9
9
  "commands",
10
- "schema"
10
+ "schema",
11
+ "importers"
11
12
  ],
12
13
  "pm": {
13
14
  "compatibility": "v2"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-slack-standup",
3
- "version": "2026.5.31",
3
+ "version": "2026.6.2",
4
4
  "description": "Post pm context as a Slack standup message",
5
5
  "repository": {
6
6
  "type": "git",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/node": "^25.9.1",
42
- "@unbrained/pm-cli": "^2026.5.29",
42
+ "@unbrained/pm-cli": "^2026.5.31",
43
43
  "pm-changelog": "^2026.5.29-2",
44
44
  "typescript": "^6.0.3"
45
45
  },