pm-slack 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 +6 -0
- package/dist/index.d.ts +60 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +295 -93
- package/dist/index.js.map +1 -1
- package/manifest.json +4 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.6.2 - 2026-06-02
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Add afterCommand notification hook + slack notify command with Block Kit ([pm-slack-b3y5](https://github.com/unbraind/pm-slack/blob/main/.agents/pm/features/pm-slack-b3y5.toon))
|
|
8
|
+
|
|
3
9
|
## 2026.05.29 - 2026-05-29
|
|
4
10
|
|
|
5
11
|
### Fixed
|
package/dist/index.d.ts
CHANGED
|
@@ -1,16 +1,75 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* pm-slack — Slack notifications for pm-cli item lifecycle events
|
|
3
3
|
*
|
|
4
|
+
* Two surfaces:
|
|
5
|
+
* 1. afterCommand hook — posts a Slack notification when an item is created,
|
|
6
|
+
* closed, or blocked (only if PM_SLACK_WEBHOOK is set; otherwise a silent
|
|
7
|
+
* no-op). The hook NEVER throws and NEVER blocks the command: all work is
|
|
8
|
+
* wrapped in try/catch and Slack posting is fire-and-forget.
|
|
9
|
+
* 2. `pm slack notify` command — manual posting of a rich Slack Block Kit
|
|
10
|
+
* message (sections, fields, context) with a plain-text fallback.
|
|
11
|
+
*
|
|
4
12
|
* Env vars:
|
|
5
13
|
* PM_SLACK_WEBHOOK (required) Slack incoming webhook URL
|
|
6
14
|
* PM_SLACK_CHANNEL (optional) Override channel, e.g. #pm-alerts
|
|
7
15
|
* PM_SLACK_MIN_PRIORITY (optional) Minimum priority to notify (1=critical … 4=low), default 1 (critical only; set 4 for all)
|
|
8
|
-
* PM_SLACK_EVENTS (optional) Comma-separated subset: create,close,block
|
|
16
|
+
* PM_SLACK_EVENTS (optional) Comma-separated subset of hook events: create,close,block (default: all)
|
|
9
17
|
*/
|
|
18
|
+
import type { AfterCommandHookContext } from "@unbrained/pm-cli/sdk";
|
|
19
|
+
declare class CommandError extends Error {
|
|
20
|
+
exitCode: number;
|
|
21
|
+
constructor(message: string, exitCode?: number);
|
|
22
|
+
}
|
|
23
|
+
type Priority = 1 | 2 | 3 | 4;
|
|
24
|
+
interface PmItem {
|
|
25
|
+
id: string;
|
|
26
|
+
title: string;
|
|
27
|
+
type?: string;
|
|
28
|
+
priority?: Priority;
|
|
29
|
+
status?: string;
|
|
30
|
+
close_reason?: string;
|
|
31
|
+
blocked_reason?: string;
|
|
32
|
+
closedReason?: string;
|
|
33
|
+
blockedReason?: string;
|
|
34
|
+
author?: string;
|
|
35
|
+
}
|
|
36
|
+
type EventKind = "create" | "close" | "block";
|
|
37
|
+
interface SlackBlock {
|
|
38
|
+
type: string;
|
|
39
|
+
[key: string]: unknown;
|
|
40
|
+
}
|
|
41
|
+
declare function parseEvents(spec: string | undefined): Set<EventKind>;
|
|
42
|
+
declare function meetsMinPriority(item: PmItem, minPriority: Priority): boolean;
|
|
43
|
+
declare function buildTextMessage(item: PmItem, event: EventKind, channel?: string): string;
|
|
44
|
+
interface BlockKitOptions {
|
|
45
|
+
channel?: string;
|
|
46
|
+
/** Extra free-form body appended as a section (e.g. from `--text`). */
|
|
47
|
+
note?: string;
|
|
48
|
+
}
|
|
49
|
+
declare function buildItemBlockKit(item: PmItem, event: EventKind, opts?: BlockKitOptions): {
|
|
50
|
+
blocks: SlackBlock[];
|
|
51
|
+
fallback: string;
|
|
52
|
+
};
|
|
53
|
+
declare function detectEvent(ctx: AfterCommandHookContext): EventKind | null;
|
|
54
|
+
declare function extractItem(ctx: AfterCommandHookContext): PmItem | null;
|
|
10
55
|
declare const _default: {
|
|
11
56
|
name: string;
|
|
12
57
|
version: string;
|
|
13
58
|
activate(api: import("@unbrained/pm-cli/sdk").ExtensionApi): void;
|
|
14
59
|
};
|
|
15
60
|
export default _default;
|
|
61
|
+
export declare const __test__: {
|
|
62
|
+
buildItemBlockKit: typeof buildItemBlockKit;
|
|
63
|
+
buildTextMessage: typeof buildTextMessage;
|
|
64
|
+
parseEvents: typeof parseEvents;
|
|
65
|
+
detectEvent: typeof detectEvent;
|
|
66
|
+
extractItem: typeof extractItem;
|
|
67
|
+
meetsMinPriority: typeof meetsMinPriority;
|
|
68
|
+
EXIT_CODE: {
|
|
69
|
+
readonly GENERIC_FAILURE: 1;
|
|
70
|
+
readonly USAGE: 2;
|
|
71
|
+
readonly NOT_FOUND: 3;
|
|
72
|
+
};
|
|
73
|
+
CommandError: typeof CommandError;
|
|
74
|
+
};
|
|
16
75
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAEV,uBAAuB,EAExB,MAAM,uBAAuB,CAAC;AAqB/B,cAAM,YAAa,SAAQ,KAAK;IAC9B,QAAQ,EAAE,MAAM,CAAC;gBACL,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAkC;CAK1E;AAMD,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE9B,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9C,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAmDD,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAO7D;AAsDD,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAItE;AA0BD,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAalF;AAUD,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iBAAS,iBAAiB,CACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,EAChB,IAAI,GAAE,eAAoB,GACzB;IAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CA+C5C;AA+DD,iBAAS,WAAW,CAAC,GAAG,EAAE,uBAAuB,GAAG,SAAS,GAAG,IAAI,CAkBnE;AAED,iBAAS,WAAW,CAAC,GAAG,EAAE,uBAAuB,GAAG,MAAM,GAAG,IAAI,CAehE;;;;;;AAMD,wBAoLG;AAGH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CASpB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,92 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* pm-slack — Slack notifications for pm-cli item lifecycle events
|
|
3
3
|
*
|
|
4
|
+
* Two surfaces:
|
|
5
|
+
* 1. afterCommand hook — posts a Slack notification when an item is created,
|
|
6
|
+
* closed, or blocked (only if PM_SLACK_WEBHOOK is set; otherwise a silent
|
|
7
|
+
* no-op). The hook NEVER throws and NEVER blocks the command: all work is
|
|
8
|
+
* wrapped in try/catch and Slack posting is fire-and-forget.
|
|
9
|
+
* 2. `pm slack notify` command — manual posting of a rich Slack Block Kit
|
|
10
|
+
* message (sections, fields, context) with a plain-text fallback.
|
|
11
|
+
*
|
|
4
12
|
* Env vars:
|
|
5
13
|
* PM_SLACK_WEBHOOK (required) Slack incoming webhook URL
|
|
6
14
|
* PM_SLACK_CHANNEL (optional) Override channel, e.g. #pm-alerts
|
|
7
15
|
* PM_SLACK_MIN_PRIORITY (optional) Minimum priority to notify (1=critical … 4=low), default 1 (critical only; set 4 for all)
|
|
8
|
-
* PM_SLACK_EVENTS (optional) Comma-separated subset: create,close,block
|
|
16
|
+
* PM_SLACK_EVENTS (optional) Comma-separated subset of hook events: create,close,block (default: all)
|
|
9
17
|
*/
|
|
10
18
|
import https from "node:https";
|
|
11
19
|
const defineExtension = ((extension) => extension);
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// EXIT_CODE / CommandError (re-implemented locally)
|
|
22
|
+
//
|
|
23
|
+
// pm's extension command runtime only treats a thrown error as a cleanly
|
|
24
|
+
// handled non-zero exit when the error carries a numeric `exitCode` property.
|
|
25
|
+
// A plain `Error` makes the runtime fall through to its "unhandled" path, which
|
|
26
|
+
// re-invokes the handler and exits with a generic code. Standalone-installed
|
|
27
|
+
// extensions only load their own `dist/`, so `@unbrained/pm-cli` is not
|
|
28
|
+
// resolvable at runtime — mirror the SDK contract here instead of importing it.
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
const EXIT_CODE = {
|
|
31
|
+
GENERIC_FAILURE: 1,
|
|
32
|
+
USAGE: 2,
|
|
33
|
+
NOT_FOUND: 3,
|
|
34
|
+
};
|
|
35
|
+
class CommandError extends Error {
|
|
36
|
+
exitCode;
|
|
37
|
+
constructor(message, exitCode = EXIT_CODE.GENERIC_FAILURE) {
|
|
38
|
+
super(message);
|
|
39
|
+
this.name = "CommandError";
|
|
40
|
+
this.exitCode = exitCode;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Option helpers
|
|
45
|
+
//
|
|
46
|
+
// pm normalizes CLI flags to camelCase at runtime (e.g. `--dry-run` becomes
|
|
47
|
+
// `dryRun`), so reading only the kebab-case key silently misses the value.
|
|
48
|
+
// Read both forms to be robust.
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
function camelCase(key) {
|
|
51
|
+
return key.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
|
|
52
|
+
}
|
|
53
|
+
function readBoolOption(options, key) {
|
|
54
|
+
for (const candidate of [key, camelCase(key)]) {
|
|
55
|
+
const value = options[candidate];
|
|
56
|
+
if (typeof value === "boolean")
|
|
57
|
+
return value;
|
|
58
|
+
if (typeof value === "string") {
|
|
59
|
+
const v = value.trim().toLowerCase();
|
|
60
|
+
if (v === "true" || v === "1" || v === "yes" || v === "on")
|
|
61
|
+
return true;
|
|
62
|
+
if (v === "false" || v === "0" || v === "no" || v === "off")
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
function readStrOption(options, key) {
|
|
69
|
+
for (const candidate of [key, camelCase(key)]) {
|
|
70
|
+
const value = options[candidate];
|
|
71
|
+
if (typeof value === "string" && value.trim().length > 0) {
|
|
72
|
+
return value.trim();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
// Event parsing
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
const ALL_EVENTS = ["create", "close", "block"];
|
|
81
|
+
function parseEvents(spec) {
|
|
82
|
+
if (!spec)
|
|
83
|
+
return new Set(ALL_EVENTS);
|
|
84
|
+
const parsed = spec
|
|
85
|
+
.split(",")
|
|
86
|
+
.map((e) => e.trim().toLowerCase())
|
|
87
|
+
.filter((e) => ALL_EVENTS.includes(e));
|
|
88
|
+
return parsed.length > 0 ? new Set(parsed) : new Set(ALL_EVENTS);
|
|
89
|
+
}
|
|
12
90
|
function loadConfig() {
|
|
13
91
|
const webhookUrl = process.env.PM_SLACK_WEBHOOK ?? "";
|
|
14
92
|
if (!webhookUrl) {
|
|
@@ -26,19 +104,7 @@ function loadConfig() {
|
|
|
26
104
|
const channel = process.env.PM_SLACK_CHANNEL?.trim() || undefined;
|
|
27
105
|
const rawPriority = parseInt(process.env.PM_SLACK_MIN_PRIORITY ?? "1", 10);
|
|
28
106
|
const minPriority = rawPriority >= 1 && rawPriority <= 4 ? rawPriority : 1;
|
|
29
|
-
const
|
|
30
|
-
const allEvents = ["create", "close", "block"];
|
|
31
|
-
let events;
|
|
32
|
-
if (rawEvents) {
|
|
33
|
-
const parsed = rawEvents
|
|
34
|
-
.split(",")
|
|
35
|
-
.map((e) => e.trim().toLowerCase())
|
|
36
|
-
.filter((e) => allEvents.includes(e));
|
|
37
|
-
events = parsed.length > 0 ? new Set(parsed) : new Set(allEvents);
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
events = new Set(allEvents);
|
|
41
|
-
}
|
|
107
|
+
const events = parseEvents(process.env.PM_SLACK_EVENTS);
|
|
42
108
|
return { webhookUrl, channel, minPriority, events };
|
|
43
109
|
}
|
|
44
110
|
// ---------------------------------------------------------------------------
|
|
@@ -60,43 +126,89 @@ function meetsMinPriority(item, minPriority) {
|
|
|
60
126
|
return item.priority <= minPriority;
|
|
61
127
|
}
|
|
62
128
|
// ---------------------------------------------------------------------------
|
|
63
|
-
//
|
|
129
|
+
// Plain-text message formatting (fallback)
|
|
64
130
|
// ---------------------------------------------------------------------------
|
|
65
131
|
function itemTypeLabel(item) {
|
|
66
132
|
return item.type ?? "Item";
|
|
67
133
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
134
|
+
const EVENT_META = {
|
|
135
|
+
create: { verb: "created", emoji: "🆕" },
|
|
136
|
+
close: { verb: "closed", emoji: "✅" },
|
|
137
|
+
block: { verb: "is blocked", emoji: "🚫" },
|
|
138
|
+
};
|
|
139
|
+
function eventReason(item, event) {
|
|
140
|
+
if (event === "close") {
|
|
141
|
+
return item.close_reason?.trim() || item.closedReason?.trim() || undefined;
|
|
142
|
+
}
|
|
143
|
+
if (event === "block") {
|
|
144
|
+
return item.blocked_reason?.trim() || item.blockedReason?.trim() || undefined;
|
|
145
|
+
}
|
|
146
|
+
return undefined;
|
|
77
147
|
}
|
|
78
|
-
function
|
|
148
|
+
function buildTextMessage(item, event, channel) {
|
|
79
149
|
const type = itemTypeLabel(item);
|
|
80
|
-
const
|
|
81
|
-
let msg = `*[${type}]* ${item.title}
|
|
150
|
+
const meta = EVENT_META[event];
|
|
151
|
+
let msg = `*[${type}]* ${item.title} ${meta.verb} ${meta.emoji}`;
|
|
152
|
+
if (event === "create") {
|
|
153
|
+
msg += `\nPriority: ${priorityLabel(item.priority)} • Type: ${type} • By: ${item.author ?? "unknown"}`;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
msg += `\nReason: ${eventReason(item, event) ?? "no reason given"}`;
|
|
157
|
+
}
|
|
82
158
|
if (channel)
|
|
83
159
|
msg += `\n_Channel: ${channel}_`;
|
|
84
160
|
return msg;
|
|
85
161
|
}
|
|
86
|
-
function
|
|
162
|
+
function buildItemBlockKit(item, event, opts = {}) {
|
|
87
163
|
const type = itemTypeLabel(item);
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
164
|
+
const meta = EVENT_META[event];
|
|
165
|
+
const blocks = [];
|
|
166
|
+
blocks.push({
|
|
167
|
+
type: "header",
|
|
168
|
+
text: { type: "plain_text", text: `${meta.emoji} ${item.title}`, emoji: true },
|
|
169
|
+
});
|
|
170
|
+
// Fields section: a 2-column grid of mrkdwn key/value pairs.
|
|
171
|
+
const fields = [
|
|
172
|
+
{ type: "mrkdwn", text: `*Item:*\n${item.id}` },
|
|
173
|
+
{ type: "mrkdwn", text: `*Type:*\n${type}` },
|
|
174
|
+
{ type: "mrkdwn", text: `*Event:*\n${meta.verb}` },
|
|
175
|
+
{ type: "mrkdwn", text: `*Priority:*\n${priorityLabel(item.priority)}` },
|
|
176
|
+
];
|
|
177
|
+
if (item.status)
|
|
178
|
+
fields.push({ type: "mrkdwn", text: `*Status:*\n${item.status}` });
|
|
179
|
+
if (item.author)
|
|
180
|
+
fields.push({ type: "mrkdwn", text: `*By:*\n${item.author}` });
|
|
181
|
+
blocks.push({ type: "section", fields });
|
|
182
|
+
const reason = eventReason(item, event);
|
|
183
|
+
if (reason) {
|
|
184
|
+
blocks.push({
|
|
185
|
+
type: "section",
|
|
186
|
+
text: { type: "mrkdwn", text: `*Reason:* ${reason}` },
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
if (opts.note) {
|
|
190
|
+
blocks.push({
|
|
191
|
+
type: "section",
|
|
192
|
+
text: { type: "mrkdwn", text: opts.note },
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
const footerBits = [
|
|
196
|
+
`pm item ${item.id} ${meta.verb}`,
|
|
197
|
+
opts.channel ? `channel ${opts.channel}` : null,
|
|
198
|
+
].filter(Boolean);
|
|
199
|
+
blocks.push({
|
|
200
|
+
type: "context",
|
|
201
|
+
elements: [{ type: "mrkdwn", text: `🤖 pm-slack · ${footerBits.join(" · ")}` }],
|
|
202
|
+
});
|
|
203
|
+
const fallback = buildTextMessage(item, event, opts.channel);
|
|
204
|
+
return { blocks, fallback };
|
|
93
205
|
}
|
|
94
206
|
// ---------------------------------------------------------------------------
|
|
95
207
|
// Slack HTTP POST
|
|
96
208
|
// ---------------------------------------------------------------------------
|
|
97
|
-
function postToSlack(webhookUrl,
|
|
209
|
+
function postToSlack(webhookUrl, payload) {
|
|
98
210
|
return new Promise((resolve, reject) => {
|
|
99
|
-
const body = JSON.stringify(
|
|
211
|
+
const body = JSON.stringify(payload);
|
|
100
212
|
const parsed = new URL(webhookUrl);
|
|
101
213
|
const options = {
|
|
102
214
|
hostname: parsed.hostname,
|
|
@@ -134,7 +246,7 @@ function postToSlack(webhookUrl, text) {
|
|
|
134
246
|
});
|
|
135
247
|
}
|
|
136
248
|
// ---------------------------------------------------------------------------
|
|
137
|
-
// Event detection
|
|
249
|
+
// Event detection (afterCommand hook)
|
|
138
250
|
// ---------------------------------------------------------------------------
|
|
139
251
|
/** Commands that create a new item */
|
|
140
252
|
const CREATE_COMMANDS = new Set(["add", "create", "new"]);
|
|
@@ -149,13 +261,11 @@ function detectEvent(ctx) {
|
|
|
149
261
|
if (CLOSE_COMMANDS.has(cmd))
|
|
150
262
|
return "close";
|
|
151
263
|
if (UPDATE_COMMANDS.has(cmd)) {
|
|
152
|
-
// Detect a block status being set via options or result
|
|
153
264
|
const newStatus = ctx.options?.["status"] ??
|
|
154
265
|
ctx.result?.item?.status ??
|
|
155
266
|
"";
|
|
156
267
|
if (newStatus.toLowerCase() === "blocked")
|
|
157
268
|
return "block";
|
|
158
|
-
// Also check result item for blocked status transition
|
|
159
269
|
const resultItem = ctx.result?.item;
|
|
160
270
|
if (resultItem?.status?.toLowerCase() === "blocked")
|
|
161
271
|
return "block";
|
|
@@ -179,82 +289,174 @@ function extractItem(ctx) {
|
|
|
179
289
|
// ---------------------------------------------------------------------------
|
|
180
290
|
export default defineExtension({
|
|
181
291
|
name: "pm-slack",
|
|
182
|
-
version: "2026.
|
|
292
|
+
version: "2026.6.2",
|
|
183
293
|
activate(api) {
|
|
184
|
-
//
|
|
185
|
-
// afterCommand hook — fires after every pm-cli command completes
|
|
186
|
-
//
|
|
294
|
+
// -----------------------------------------------------------------------
|
|
295
|
+
// afterCommand hook — fires after every pm-cli command completes.
|
|
296
|
+
// Posts a rich Block Kit notification for create/close/block events.
|
|
297
|
+
// NEVER throws and NEVER blocks: every path returns cleanly and the Slack
|
|
298
|
+
// POST is fire-and-forget (failures are logged, never propagated).
|
|
299
|
+
// -----------------------------------------------------------------------
|
|
187
300
|
if (typeof api.hooks?.afterCommand === "function") {
|
|
188
301
|
api.hooks.afterCommand(async (ctx) => {
|
|
189
|
-
const config = loadConfig();
|
|
190
|
-
if (!config)
|
|
191
|
-
return;
|
|
192
|
-
const event = detectEvent(ctx);
|
|
193
|
-
if (!event)
|
|
194
|
-
return;
|
|
195
|
-
if (!config.events.has(event)) {
|
|
196
|
-
console.error(`[pm-slack] Event "${event}" filtered by PM_SLACK_EVENTS`);
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
const item = extractItem(ctx);
|
|
200
|
-
if (!item) {
|
|
201
|
-
console.error("[pm-slack] Could not extract item from result — skipping");
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
if (!meetsMinPriority(item, config.minPriority)) {
|
|
205
|
-
console.error(`[pm-slack] Item priority ${item.priority} below minimum ${config.minPriority} — skipping`);
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
let text;
|
|
209
|
-
switch (event) {
|
|
210
|
-
case "create":
|
|
211
|
-
text = buildCreateMessage(item, config.channel);
|
|
212
|
-
break;
|
|
213
|
-
case "close":
|
|
214
|
-
text = buildCloseMessage(item, config.channel);
|
|
215
|
-
break;
|
|
216
|
-
case "block":
|
|
217
|
-
text = buildBlockMessage(item, config.channel);
|
|
218
|
-
break;
|
|
219
|
-
}
|
|
220
302
|
try {
|
|
221
|
-
|
|
303
|
+
// Only react to successful commands.
|
|
304
|
+
if (ctx && ctx.ok === false)
|
|
305
|
+
return;
|
|
306
|
+
const config = loadConfig();
|
|
307
|
+
if (!config)
|
|
308
|
+
return; // no webhook → silent no-op
|
|
309
|
+
const event = detectEvent(ctx);
|
|
310
|
+
if (!event)
|
|
311
|
+
return;
|
|
312
|
+
if (!config.events.has(event)) {
|
|
313
|
+
console.error(`[pm-slack] Event "${event}" filtered by PM_SLACK_EVENTS`);
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
const item = extractItem(ctx);
|
|
317
|
+
if (!item) {
|
|
318
|
+
console.error("[pm-slack] Could not extract item from result — skipping");
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
if (!meetsMinPriority(item, config.minPriority)) {
|
|
322
|
+
console.error(`[pm-slack] Item priority ${item.priority} below minimum ${config.minPriority} — skipping`);
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
const { blocks, fallback } = buildItemBlockKit(item, event, {
|
|
326
|
+
channel: config.channel,
|
|
327
|
+
});
|
|
328
|
+
await postToSlack(config.webhookUrl, {
|
|
329
|
+
text: fallback,
|
|
330
|
+
blocks,
|
|
331
|
+
mrkdwn: true,
|
|
332
|
+
channel: config.channel,
|
|
333
|
+
});
|
|
222
334
|
console.error(`[pm-slack] Notification sent for event "${event}" on item ${item.id}`);
|
|
223
335
|
}
|
|
224
336
|
catch (err) {
|
|
337
|
+
// Hooks must never throw or block the command — swallow everything.
|
|
225
338
|
const message = err instanceof Error ? err.message : String(err);
|
|
226
|
-
console.error(`[pm-slack]
|
|
339
|
+
console.error(`[pm-slack] afterCommand hook error (ignored): ${message}`);
|
|
227
340
|
}
|
|
228
341
|
});
|
|
229
342
|
}
|
|
230
343
|
else if (typeof api.hooks?.beforeCommand === "function") {
|
|
231
344
|
// Fallback: use beforeCommand if afterCommand is unavailable
|
|
232
|
-
// (result data
|
|
345
|
+
// (result data is unavailable, so we can only notify on command name).
|
|
233
346
|
api.hooks.beforeCommand(async (ctx) => {
|
|
234
|
-
console.error("[pm-slack] afterCommand not available — limited event detection active");
|
|
235
|
-
const config = loadConfig();
|
|
236
|
-
if (!config)
|
|
237
|
-
return;
|
|
238
|
-
const cmd = ctx.command?.toLowerCase() ?? "";
|
|
239
|
-
let event = null;
|
|
240
|
-
if (CREATE_COMMANDS.has(cmd))
|
|
241
|
-
event = "create";
|
|
242
|
-
else if (CLOSE_COMMANDS.has(cmd))
|
|
243
|
-
event = "close";
|
|
244
|
-
if (!event || !config.events.has(event))
|
|
245
|
-
return;
|
|
246
|
-
// Without result we can only build a generic message
|
|
247
|
-
const cmdArgs = (ctx.args ?? []).join(" ");
|
|
248
|
-
const text = `pm command \`${ctx.command}\` triggered event *${event}*\n${cmdArgs}`;
|
|
249
347
|
try {
|
|
250
|
-
|
|
348
|
+
console.error("[pm-slack] afterCommand not available — limited event detection active");
|
|
349
|
+
const config = loadConfig();
|
|
350
|
+
if (!config)
|
|
351
|
+
return;
|
|
352
|
+
const cmd = ctx.command?.toLowerCase() ?? "";
|
|
353
|
+
let event = null;
|
|
354
|
+
if (CREATE_COMMANDS.has(cmd))
|
|
355
|
+
event = "create";
|
|
356
|
+
else if (CLOSE_COMMANDS.has(cmd))
|
|
357
|
+
event = "close";
|
|
358
|
+
if (!event || !config.events.has(event))
|
|
359
|
+
return;
|
|
360
|
+
const cmdArgs = (ctx.args ?? []).join(" ");
|
|
361
|
+
const text = `pm command \`${ctx.command}\` triggered event *${event}*\n${cmdArgs}`;
|
|
362
|
+
await postToSlack(config.webhookUrl, { text, mrkdwn: true, channel: config.channel });
|
|
251
363
|
}
|
|
252
364
|
catch (err) {
|
|
253
365
|
const message = err instanceof Error ? err.message : String(err);
|
|
254
|
-
console.error(`[pm-slack]
|
|
366
|
+
console.error(`[pm-slack] beforeCommand hook error (ignored): ${message}`);
|
|
255
367
|
}
|
|
256
368
|
});
|
|
257
369
|
}
|
|
370
|
+
// -----------------------------------------------------------------------
|
|
371
|
+
// command — `pm slack notify` : manual rich Block Kit post.
|
|
372
|
+
// -----------------------------------------------------------------------
|
|
373
|
+
if (typeof api.registerCommand === "function") {
|
|
374
|
+
api.registerCommand({
|
|
375
|
+
name: "slack notify",
|
|
376
|
+
description: "Post a rich Slack Block Kit notification for a pm item or a free-form message",
|
|
377
|
+
intent: "Manually send a Slack notification (Block Kit with plain-text fallback)",
|
|
378
|
+
examples: [
|
|
379
|
+
"pm slack notify --text 'Release shipped :rocket:' --dry-run",
|
|
380
|
+
"pm slack notify --title 'Deploy done' --on close --channel '#releases'",
|
|
381
|
+
"pm slack notify --title 'Auth epic' --on create --thread 1700000000.000100",
|
|
382
|
+
"PM_SLACK_WEBHOOK=https://hooks.slack.com/... pm slack notify --text 'hello team'",
|
|
383
|
+
],
|
|
384
|
+
flags: [
|
|
385
|
+
{ long: "--text", value_name: "message", description: "Free-form message body (mrkdwn). Used when no item context is given." },
|
|
386
|
+
{ long: "--title", value_name: "title", description: "Title shown in the Block Kit header (defaults to the --text first line)" },
|
|
387
|
+
{ long: "--channel", value_name: "name", description: "Channel name shown in the message (e.g. #pm-alerts). Overrides PM_SLACK_CHANNEL." },
|
|
388
|
+
{ long: "--thread", value_name: "ts", description: "Slack thread timestamp (thread_ts) to reply into a thread" },
|
|
389
|
+
{ long: "--on", value_name: "events", description: "Comma list of lifecycle events for the message template (create,close,block). Default: create" },
|
|
390
|
+
{ long: "--webhook", value_name: "url", description: "Slack incoming webhook URL (overrides PM_SLACK_WEBHOOK env var)" },
|
|
391
|
+
{ long: "--dry-run", description: "Print the message and Block Kit payload without posting to Slack" },
|
|
392
|
+
],
|
|
393
|
+
async run(ctx) {
|
|
394
|
+
const options = ctx.options ?? {};
|
|
395
|
+
const dryRun = readBoolOption(options, "dry-run");
|
|
396
|
+
const webhookUrl = readStrOption(options, "webhook") ?? process.env.PM_SLACK_WEBHOOK ?? "";
|
|
397
|
+
const channel = (readStrOption(options, "channel") ?? process.env.PM_SLACK_CHANNEL?.trim()) || undefined;
|
|
398
|
+
const threadTs = readStrOption(options, "thread");
|
|
399
|
+
// `--on` selects the message template. First event wins for the header verb.
|
|
400
|
+
const events = parseEvents(readStrOption(options, "on") ?? "create");
|
|
401
|
+
const event = (ALL_EVENTS.find((e) => events.has(e)) ?? "create");
|
|
402
|
+
const text = readStrOption(options, "text");
|
|
403
|
+
const title = readStrOption(options, "title") ?? text?.split("\n")[0];
|
|
404
|
+
if (!title) {
|
|
405
|
+
throw new CommandError("Provide a --title or --text to send (e.g. `pm slack notify --text 'hello'`)", EXIT_CODE.USAGE);
|
|
406
|
+
}
|
|
407
|
+
// Synthesize a minimal item from the flags so we can reuse the Block
|
|
408
|
+
// Kit builder. This command is for ad-hoc posts, not item lookups.
|
|
409
|
+
const item = { id: "manual", title, type: "Note" };
|
|
410
|
+
const { blocks, fallback } = buildItemBlockKit(item, event, {
|
|
411
|
+
channel,
|
|
412
|
+
note: text && text !== title ? text : undefined,
|
|
413
|
+
});
|
|
414
|
+
const payload = {
|
|
415
|
+
text: fallback,
|
|
416
|
+
blocks,
|
|
417
|
+
mrkdwn: true,
|
|
418
|
+
...(channel ? { channel } : {}),
|
|
419
|
+
...(threadTs ? { thread_ts: threadTs } : {}),
|
|
420
|
+
};
|
|
421
|
+
if (dryRun) {
|
|
422
|
+
console.error("--- DRY RUN (message not posted) ---");
|
|
423
|
+
process.stdout.write(fallback + "\n");
|
|
424
|
+
console.error("--- Block Kit payload ---");
|
|
425
|
+
process.stdout.write(JSON.stringify(payload, null, 2) + "\n");
|
|
426
|
+
console.error("--- END ---");
|
|
427
|
+
return { dryRun: true, event, channel, thread_ts: threadTs, blocks, fallback };
|
|
428
|
+
}
|
|
429
|
+
if (!webhookUrl) {
|
|
430
|
+
// Graceful no-op: warn and exit 0 so a missing webhook never blocks
|
|
431
|
+
// a workflow. Use --dry-run to preview without a webhook.
|
|
432
|
+
console.error("[pm-slack] PM_SLACK_WEBHOOK not set and no --webhook provided — posting disabled. " +
|
|
433
|
+
"Use --dry-run to preview the message.");
|
|
434
|
+
return { posted: false, disabled: true, reason: "no-webhook" };
|
|
435
|
+
}
|
|
436
|
+
try {
|
|
437
|
+
await postToSlack(webhookUrl, payload);
|
|
438
|
+
}
|
|
439
|
+
catch (err) {
|
|
440
|
+
// Never throw on network failure: warn and exit 0.
|
|
441
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
442
|
+
console.error(`[pm-slack] Slack post failed (continuing): ${message}`);
|
|
443
|
+
return { posted: false, error: message };
|
|
444
|
+
}
|
|
445
|
+
return { posted: true, event, channel, thread_ts: threadTs };
|
|
446
|
+
},
|
|
447
|
+
});
|
|
448
|
+
}
|
|
258
449
|
},
|
|
259
450
|
});
|
|
451
|
+
// Exported for unit tests (Block Kit builder + helpers).
|
|
452
|
+
export const __test__ = {
|
|
453
|
+
buildItemBlockKit,
|
|
454
|
+
buildTextMessage,
|
|
455
|
+
parseEvents,
|
|
456
|
+
detectEvent,
|
|
457
|
+
extractItem,
|
|
458
|
+
meetsMinPriority,
|
|
459
|
+
EXIT_CODE,
|
|
460
|
+
CommandError,
|
|
461
|
+
};
|
|
260
462
|
//# 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,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-slack",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.6.2",
|
|
4
4
|
"description": "Slack notifications for pm item lifecycle events",
|
|
5
5
|
"author": "@unbraind",
|
|
6
6
|
"entry": "./dist/index.js",
|
|
7
7
|
"priority": 50,
|
|
8
8
|
"capabilities": [
|
|
9
|
-
"
|
|
9
|
+
"commands",
|
|
10
|
+
"hooks",
|
|
11
|
+
"schema"
|
|
10
12
|
],
|
|
11
13
|
"pm": {
|
|
12
14
|
"compatibility": "v2"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-slack",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.6.2",
|
|
4
4
|
"description": "Slack notifications for pm item lifecycle events",
|
|
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
|
},
|