pm-slack-standup 2026.6.1 → 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 +7 -1
- package/README.md +35 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +314 -147
- package/dist/index.js.map +1 -1
- package/manifest.json +3 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 2026.6.
|
|
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
|
|
4
10
|
|
|
5
11
|
### Fixed
|
|
6
12
|
|
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,
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
- Slack
|
|
11
|
-
-
|
|
12
|
-
-
|
|
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
|
|
60
|
-
| `--dry-run` | boolean | `false` | Print the message without posting
|
|
61
|
-
| `--include-done` | boolean | `false` | Include items
|
|
62
|
-
| `--
|
|
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.
|
|
156
|
-
2. Sorts
|
|
157
|
-
3.
|
|
158
|
-
4. Posts
|
|
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
|
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;AA2aA,wBAuJG"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
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
|
// ---------------------------------------------------------------------------
|
|
5
7
|
// Error contract
|
|
@@ -59,110 +61,230 @@ function readStrOption(options, key) {
|
|
|
59
61
|
}
|
|
60
62
|
return undefined;
|
|
61
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
|
+
}
|
|
62
87
|
// ---------------------------------------------------------------------------
|
|
63
|
-
//
|
|
88
|
+
// Data fetch
|
|
64
89
|
// ---------------------------------------------------------------------------
|
|
65
|
-
|
|
66
|
-
|
|
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" });
|
|
67
97
|
if (result.error || result.status !== 0) {
|
|
68
|
-
console.error(`pm
|
|
98
|
+
console.error(`pm list-all failed: ${result.stderr ?? result.error?.message ?? ""}`);
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
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)}`);
|
|
69
106
|
return [];
|
|
70
107
|
}
|
|
71
|
-
return (JSON.parse(result.stdout).items ?? []);
|
|
72
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();
|
|
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
|
+
// ---------------------------------------------------------------------------
|
|
73
143
|
function typeLabel(item) {
|
|
74
144
|
if (!item.type)
|
|
75
145
|
return "";
|
|
76
146
|
const label = item.type.charAt(0).toUpperCase() + item.type.slice(1);
|
|
77
147
|
return `[${label}]`;
|
|
78
148
|
}
|
|
79
|
-
function
|
|
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) {
|
|
80
156
|
const label = typeLabel(item);
|
|
81
157
|
const title = label ? `${label} ${item.title}` : item.title;
|
|
82
|
-
|
|
158
|
+
const prio = withPriority && item.priority != null ? ` (priority ${item.priority})` : "";
|
|
159
|
+
return `${title}${prio}${mentionFor(item, mentionMap)}`;
|
|
83
160
|
}
|
|
84
161
|
function todayISO() {
|
|
85
162
|
return new Date().toISOString().slice(0, 10);
|
|
86
163
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
lines.push(`📊 pm standup — ${dateStr}`);
|
|
97
|
-
}
|
|
98
|
-
// Channel prefix (prepended at the very top when posting to Slack)
|
|
99
|
-
// It's added to the message body so dry-run also shows it.
|
|
100
|
-
if (opts.channel) {
|
|
101
|
-
lines.unshift(`> Channel: ${opts.channel}`);
|
|
102
|
-
}
|
|
103
|
-
lines.push("");
|
|
104
|
-
// In Progress
|
|
105
|
-
if (format === "slack") {
|
|
106
|
-
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);
|
|
107
173
|
}
|
|
108
|
-
|
|
109
|
-
|
|
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;
|
|
110
186
|
}
|
|
111
|
-
if (
|
|
112
|
-
|
|
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
|
+
}
|
|
113
194
|
}
|
|
114
195
|
else {
|
|
115
|
-
for (const item of
|
|
116
|
-
lines.push(
|
|
196
|
+
for (const item of items)
|
|
197
|
+
lines.push(`• ${itemText(item, opts.mentionMap, withPriority)}`);
|
|
117
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}`);
|
|
118
206
|
lines.push("");
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
else {
|
|
124
|
-
lines.push(`🚫 Blocked (${blocked.length})`);
|
|
125
|
-
}
|
|
126
|
-
if (blocked.length === 0) {
|
|
127
|
-
lines.push("• _nothing blocked_");
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
for (const item of blocked)
|
|
131
|
-
lines.push(itemLine(item, format));
|
|
132
|
-
}
|
|
133
|
-
// Done Today (optional)
|
|
134
|
-
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) {
|
|
135
211
|
lines.push("");
|
|
136
|
-
|
|
137
|
-
lines.push(`✅ *Done Today* (${done.length})`);
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
lines.push(`✅ Done Today (${done.length})`);
|
|
141
|
-
}
|
|
142
|
-
for (const item of done)
|
|
143
|
-
lines.push(itemLine(item, format));
|
|
212
|
+
renderSection(lines, "✅", "Done", data.done, null, opts);
|
|
144
213
|
}
|
|
145
|
-
|
|
146
|
-
if (upNext.length > 0) {
|
|
214
|
+
if (data.upNext.length > 0) {
|
|
147
215
|
lines.push("");
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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)}`);
|
|
153
230
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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}` }],
|
|
159
252
|
});
|
|
160
253
|
}
|
|
161
|
-
|
|
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 };
|
|
162
281
|
}
|
|
163
|
-
|
|
282
|
+
// ---------------------------------------------------------------------------
|
|
283
|
+
// Slack transport
|
|
284
|
+
// ---------------------------------------------------------------------------
|
|
285
|
+
function postToSlack(webhookUrl, payload) {
|
|
164
286
|
return new Promise((resolve, reject) => {
|
|
165
|
-
const
|
|
287
|
+
const body = JSON.stringify(payload);
|
|
166
288
|
const url = new URL(webhookUrl);
|
|
167
289
|
const options = {
|
|
168
290
|
hostname: url.hostname,
|
|
@@ -170,131 +292,176 @@ function postToSlack(webhookUrl, text) {
|
|
|
170
292
|
method: "POST",
|
|
171
293
|
headers: {
|
|
172
294
|
"Content-Type": "application/json",
|
|
173
|
-
"Content-Length": Buffer.byteLength(
|
|
295
|
+
"Content-Length": Buffer.byteLength(body),
|
|
174
296
|
},
|
|
175
297
|
};
|
|
176
298
|
const req = https.request(options, (res) => {
|
|
177
|
-
let
|
|
178
|
-
res.on("data", (chunk) => (
|
|
299
|
+
let respBody = "";
|
|
300
|
+
res.on("data", (chunk) => (respBody += chunk.toString()));
|
|
179
301
|
res.on("end", () => {
|
|
180
302
|
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
181
303
|
resolve();
|
|
182
304
|
}
|
|
183
305
|
else {
|
|
184
|
-
reject(new Error(`Slack webhook returned HTTP ${res.statusCode ?? "unknown"}: ${
|
|
306
|
+
reject(new Error(`Slack webhook returned HTTP ${res.statusCode ?? "unknown"}: ${respBody}`));
|
|
185
307
|
}
|
|
186
308
|
});
|
|
187
309
|
});
|
|
188
|
-
req.on("error", (err) => {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
req.setTimeout(10_000, () => {
|
|
192
|
-
req.destroy(new Error("Slack webhook request timed out after 10s"));
|
|
193
|
-
});
|
|
194
|
-
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);
|
|
195
313
|
req.end();
|
|
196
314
|
});
|
|
197
315
|
}
|
|
198
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
|
+
// ---------------------------------------------------------------------------
|
|
199
332
|
// Extension
|
|
200
333
|
// ---------------------------------------------------------------------------
|
|
201
334
|
export default defineExtension({
|
|
202
335
|
name: "pm-slack-standup",
|
|
203
|
-
version: "2026.6.
|
|
336
|
+
version: "2026.6.2",
|
|
204
337
|
activate(api) {
|
|
205
338
|
api.registerCommand({
|
|
206
339
|
name: "standup",
|
|
207
|
-
description: "Post pm context as a Slack standup message",
|
|
208
|
-
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",
|
|
209
342
|
examples: [
|
|
210
343
|
"pm standup --webhook https://hooks.slack.com/services/...",
|
|
211
344
|
"pm standup --channel '#team-eng' --dry-run",
|
|
212
|
-
"pm standup --include-done --
|
|
345
|
+
"pm standup --include-done --since 2026-06-01",
|
|
346
|
+
"pm standup --group-by assignee --mention-map 'alice=@alice.s,bob=@bob'",
|
|
213
347
|
"PM_SLACK_WEBHOOK=https://... pm standup --channel '#standups'",
|
|
214
348
|
],
|
|
215
349
|
flags: [
|
|
216
|
-
{
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
description: "Channel name to prepend to the standup message (e.g. #team-eng)",
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
long: "--dry-run",
|
|
228
|
-
description: "Print the message without posting to Slack",
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
long: "--include-done",
|
|
232
|
-
description: "Include items with 'closed' status in a Done Today section",
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
long: "--format",
|
|
236
|
-
value_name: "fmt",
|
|
237
|
-
description: "Output format: 'slack' uses mrkdwn bold/italic, 'text' is plain (default: slack)",
|
|
238
|
-
},
|
|
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)" },
|
|
239
358
|
],
|
|
240
359
|
async run(ctx) {
|
|
241
|
-
// Resolve options. pm normalizes flags to camelCase at runtime, so we
|
|
242
|
-
// read both kebab- and camelCase forms via the option helpers.
|
|
243
360
|
const webhookUrl = readStrOption(ctx.options, "webhook") ?? process.env["PM_SLACK_WEBHOOK"] ?? "";
|
|
244
361
|
const dryRun = readBoolOption(ctx.options, "dry-run");
|
|
245
|
-
const
|
|
246
|
-
const rawFormat = readStrOption(ctx.options, "format");
|
|
247
|
-
const format = rawFormat === "text" ? "text" : "slack";
|
|
248
|
-
const channel = readStrOption(ctx.options, "channel");
|
|
362
|
+
const opts = resolveStandupOptions(ctx.options);
|
|
249
363
|
if (!dryRun && !webhookUrl) {
|
|
250
|
-
//
|
|
251
|
-
//
|
|
252
|
-
|
|
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" };
|
|
253
369
|
}
|
|
254
|
-
|
|
255
|
-
const
|
|
256
|
-
const
|
|
257
|
-
const
|
|
258
|
-
const doneItems = includeDone ? fetchItemsByStatus(ctx.pm_root, "list-closed") : [];
|
|
259
|
-
// Sort todo by priority (lower number = higher priority), take top 3
|
|
260
|
-
const upNext = [...todoItems]
|
|
261
|
-
.sort((a, b) => {
|
|
262
|
-
const pa = a.priority ?? 9999;
|
|
263
|
-
const pb = b.priority ?? 9999;
|
|
264
|
-
return pa - pb;
|
|
265
|
-
})
|
|
266
|
-
.slice(0, 3);
|
|
267
|
-
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;
|
|
268
374
|
if (dryRun) {
|
|
269
375
|
console.error("--- DRY RUN (message not posted) ---");
|
|
270
|
-
process.stdout.write(
|
|
376
|
+
process.stdout.write(textPreview + "\n");
|
|
377
|
+
console.error("--- Block Kit payload ---");
|
|
378
|
+
process.stdout.write(JSON.stringify({ blocks }, null, 2) + "\n");
|
|
271
379
|
console.error("--- END ---");
|
|
272
380
|
return {
|
|
273
381
|
dryRun: true,
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
382
|
+
blocks,
|
|
383
|
+
fallback,
|
|
384
|
+
wip: data.wip.length,
|
|
385
|
+
blocked: data.blocked.length,
|
|
386
|
+
done: data.done.length,
|
|
387
|
+
upNext: data.upNext.length,
|
|
279
388
|
};
|
|
280
389
|
}
|
|
281
390
|
try {
|
|
282
|
-
await postToSlack(webhookUrl,
|
|
391
|
+
await postToSlack(webhookUrl, { text: fallback, blocks, mrkdwn: true });
|
|
283
392
|
}
|
|
284
393
|
catch (err) {
|
|
285
|
-
//
|
|
286
|
-
//
|
|
287
|
-
|
|
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) };
|
|
288
398
|
}
|
|
289
399
|
return {
|
|
290
400
|
posted: true,
|
|
291
|
-
wip:
|
|
292
|
-
blocked:
|
|
293
|
-
done:
|
|
294
|
-
upNext: upNext.length,
|
|
401
|
+
wip: data.wip.length,
|
|
402
|
+
blocked: data.blocked.length,
|
|
403
|
+
done: data.done.length,
|
|
404
|
+
upNext: data.upNext.length,
|
|
295
405
|
};
|
|
296
406
|
},
|
|
297
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
|
+
});
|
|
298
465
|
},
|
|
299
466
|
});
|
|
300
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.6.
|
|
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.6.
|
|
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.
|
|
42
|
+
"@unbrained/pm-cli": "^2026.5.31",
|
|
43
43
|
"pm-changelog": "^2026.5.29-2",
|
|
44
44
|
"typescript": "^6.0.3"
|
|
45
45
|
},
|