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 +12 -0
- package/README.md +35 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +341 -144
- package/dist/index.js.map +1 -1
- package/manifest.json +3 -2
- package/package.json +2 -2
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,
|
|
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,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
|
-
//
|
|
88
|
+
// Data fetch
|
|
41
89
|
// ---------------------------------------------------------------------------
|
|
42
|
-
|
|
43
|
-
|
|
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
|
|
98
|
+
console.error(`pm list-all failed: ${result.stderr ?? result.error?.message ?? ""}`);
|
|
46
99
|
return [];
|
|
47
100
|
}
|
|
48
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
86
|
-
|
|
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 (
|
|
89
|
-
|
|
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
|
|
93
|
-
lines.push(
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
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
|
-
|
|
123
|
-
if (upNext.length > 0) {
|
|
214
|
+
if (data.upNext.length > 0) {
|
|
124
215
|
lines.push("");
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
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
|
-
|
|
282
|
+
// ---------------------------------------------------------------------------
|
|
283
|
+
// Slack transport
|
|
284
|
+
// ---------------------------------------------------------------------------
|
|
285
|
+
function postToSlack(webhookUrl, payload) {
|
|
141
286
|
return new Promise((resolve, reject) => {
|
|
142
|
-
const
|
|
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(
|
|
295
|
+
"Content-Length": Buffer.byteLength(body),
|
|
151
296
|
},
|
|
152
297
|
};
|
|
153
298
|
const req = https.request(options, (res) => {
|
|
154
|
-
let
|
|
155
|
-
res.on("data", (chunk) => (
|
|
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"}: ${
|
|
306
|
+
reject(new Error(`Slack webhook returned HTTP ${res.statusCode ?? "unknown"}: ${respBody}`));
|
|
162
307
|
}
|
|
163
308
|
});
|
|
164
309
|
});
|
|
165
|
-
req.on("error", (err) => {
|
|
166
|
-
|
|
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.
|
|
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 --
|
|
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
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
|
|
200
|
-
|
|
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
|
|
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
|
-
//
|
|
228
|
-
//
|
|
229
|
-
|
|
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
|
-
|
|
232
|
-
const
|
|
233
|
-
const
|
|
234
|
-
const
|
|
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(
|
|
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
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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
|
-
|
|
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:
|
|
262
|
-
blocked:
|
|
263
|
-
done:
|
|
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.
|
|
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.
|
|
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
|
},
|