pm-slack-standup 2026.6.2 → 2026.6.3
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 +18 -1
- package/README.md +38 -12
- package/dist/index.d.ts +147 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +346 -117
- package/dist/index.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 2026.6.
|
|
3
|
+
## 2026.6.3 - 2026-06-02
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Deep feature expansion: multi-format output, grouping, sections, date windows ([pm-slack-standup-h64p](https://github.com/unbraind/pm-slack-standup/blob/main/.agents/pm/features/pm-slack-standup-h64p.toon))
|
|
8
|
+
- Add --days relative date window alongside --since ([pm-slack-standup-5sow](https://github.com/unbraind/pm-slack-standup/blob/main/.agents/pm/tasks/pm-slack-standup-5sow.toon))
|
|
9
|
+
- Add --sections selection/ordering with dedicated Blocked section ([pm-slack-standup-jimx](https://github.com/unbraind/pm-slack-standup/blob/main/.agents/pm/tasks/pm-slack-standup-jimx.toon))
|
|
10
|
+
- Add --group-by sprint and type \(extend assignee/status\) ([pm-slack-standup-f4m6](https://github.com/unbraind/pm-slack-standup/blob/main/.agents/pm/tasks/pm-slack-standup-f4m6.toon))
|
|
11
|
+
- Add --format slack\|blockkit\|markdown\|plain unified output ([pm-slack-standup-dgyy](https://github.com/unbraind/pm-slack-standup/blob/main/.agents/pm/tasks/pm-slack-standup-dgyy.toon))
|
|
12
|
+
|
|
13
|
+
### Other
|
|
14
|
+
|
|
15
|
+
- Keep slack message text byte-identical; --format governs printed output only \(blockkit JSON no longer always dumped in dry-run\) ([pm-slack-standup-rttw](https://github.com/unbraind/pm-slack-standup/blob/main/.agents/pm/decisions/pm-slack-standup-rttw.toon))
|
|
16
|
+
- Block Kit schema: single header \(150ch\), one mrkdwn section per bucket \(3000ch truncation\), divider + context footer ([pm-slack-standup-rpty](https://github.com/unbraind/pm-slack-standup/blob/main/.agents/pm/decisions/pm-slack-standup-rpty.toon))
|
|
17
|
+
- Export pure helpers + node:test unit suite \(formatters/grouping/window\) ([pm-slack-standup-uf4j](https://github.com/unbraind/pm-slack-standup/blob/main/.agents/pm/tasks/pm-slack-standup-uf4j.toon))
|
|
18
|
+
- Missing-creds real post -\> CommandError \(exit 1\); no network in dry-run ([pm-slack-standup-m9ze](https://github.com/unbraind/pm-slack-standup/blob/main/.agents/pm/tasks/pm-slack-standup-m9ze.toon))
|
|
19
|
+
|
|
20
|
+
## 2026.06.02 - 2026-06-02
|
|
4
21
|
|
|
5
22
|
### Added
|
|
6
23
|
|
package/README.md
CHANGED
|
@@ -5,12 +5,14 @@ A [pm-cli](https://github.com/unbraind/pm-cli) extension that posts your current
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
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
|
-
-
|
|
9
|
-
-
|
|
8
|
+
- **Four output formats** (`--format`): `slack` (Slack mrkdwn, the default), `blockkit` (the raw Block Kit `blocks` JSON), `markdown` (GitHub/CommonMark), and `plain` text
|
|
9
|
+
- **`--dry-run`** — build and print the message in the chosen format **without** posting to Slack (no network call is made)
|
|
10
|
+
- Group section items by `status` (default), `assignee`, `sprint`, or `type` (`--group-by`)
|
|
11
|
+
- Choose which sections to render and in what order with `--sections` (`in_progress`, `blocked`, `done`, `up_next`); a dedicated **Blocked** section always surfaces blocked items
|
|
12
|
+
- Scope the "recently closed / Done" window with `--since <iso>` **or** `--days <n>` (relative)
|
|
10
13
|
- Map pm authors to Slack handles so they get mentioned (`--mention-map`)
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
- Webhook URL configurable via flag or environment variable; missing webhook is a graceful no-op (never blocks a workflow)
|
|
14
|
+
- `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)
|
|
15
|
+
- `--channel` override; webhook URL configurable via flag or environment variable. A real post with **no webhook configured** fails with a clear, structured error (exit 1) rather than crashing — use `--dry-run` to preview without credentials
|
|
14
16
|
|
|
15
17
|
## Installation
|
|
16
18
|
|
|
@@ -58,12 +60,31 @@ pm standup [flags]
|
|
|
58
60
|
|------|------|---------|-------------|
|
|
59
61
|
| `--webhook <url>` | string | — | Slack incoming webhook URL (overrides `PM_SLACK_WEBHOOK`) |
|
|
60
62
|
| `--channel <name>` | string | — | Channel name shown in the message (e.g. `#team-eng`) |
|
|
61
|
-
| `--dry-run` | boolean | `false` |
|
|
63
|
+
| `--dry-run` | boolean | `false` | Build and print the message in the chosen format **without** posting |
|
|
64
|
+
| `--format <fmt>` | string | `slack` | Output format: `slack` (mrkdwn) \| `blockkit` (JSON) \| `markdown` \| `plain` |
|
|
62
65
|
| `--include-done` | boolean | `false` | Include recently-closed items in a Done section |
|
|
63
|
-
| `--since <iso>` | string | — | ISO date/time window;
|
|
64
|
-
| `--
|
|
66
|
+
| `--since <iso>` | string | — | ISO date/time window; scopes the Done section to items updated since then |
|
|
67
|
+
| `--days <n>` | number | — | Relative window: scope Done to items updated in the last N days (combines with `--since`, more restrictive bound wins) |
|
|
68
|
+
| `--group-by <field>` | string | `status` | Group section items by `status` \| `assignee` \| `sprint` \| `type` |
|
|
69
|
+
| `--sections <list>` | string | all | Comma list of sections to render/order: `in_progress`, `blocked`, `done`, `up_next` |
|
|
65
70
|
| `--mention-map <map>` | string | — | Map pm authors to Slack handles, e.g. `alice=@alice,bob=@bob` |
|
|
66
|
-
|
|
71
|
+
|
|
72
|
+
> **Note on `text`:** the legacy `--format text` value is still accepted as an alias for `plain`.
|
|
73
|
+
|
|
74
|
+
### Output formats
|
|
75
|
+
|
|
76
|
+
`--format` selects what the command prints (in `--dry-run`) and how it renders the Slack message text:
|
|
77
|
+
|
|
78
|
+
- **`slack`** (default) — Slack mrkdwn (`*bold*`, `_italic_`). The message posted to Slack is unchanged from previous versions.
|
|
79
|
+
- **`blockkit`** — the raw Slack Block Kit `{ "blocks": [...] }` JSON, ready to POST to `chat.postMessage` or paste into Block Kit Builder.
|
|
80
|
+
- **`markdown`** — GitHub/CommonMark with `#`/`##` headings and `-` bullets, for issues, wikis, or PR comments.
|
|
81
|
+
- **`plain`** — emphasis-free plain text for email or terminals.
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pm standup --dry-run --format blockkit # raw Block Kit JSON
|
|
85
|
+
pm standup --dry-run --format markdown --include-done # CommonMark
|
|
86
|
+
pm standup --dry-run --format plain --days 7 # plain text, last 7 days
|
|
87
|
+
```
|
|
67
88
|
|
|
68
89
|
## Export
|
|
69
90
|
|
|
@@ -96,7 +117,12 @@ pm standup --channel '#team-eng' --dry-run
|
|
|
96
117
|
|
|
97
118
|
**Include done items and use plain text format:**
|
|
98
119
|
```bash
|
|
99
|
-
pm standup --include-done --format
|
|
120
|
+
pm standup --include-done --format plain
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Group by sprint, only In Progress + Blocked:**
|
|
124
|
+
```bash
|
|
125
|
+
pm standup --dry-run --group-by sprint --sections in_progress,blocked
|
|
100
126
|
```
|
|
101
127
|
|
|
102
128
|
**Full explicit invocation:**
|
|
@@ -132,7 +158,7 @@ pm standup \
|
|
|
132
158
|
• [Chore] Update dependencies (priority 3)
|
|
133
159
|
```
|
|
134
160
|
|
|
135
|
-
### Plain Text (`--format
|
|
161
|
+
### Plain Text (`--format plain`)
|
|
136
162
|
|
|
137
163
|
```
|
|
138
164
|
📊 pm standup — 2026-05-09
|
|
@@ -176,7 +202,7 @@ npm run dev # watch mode
|
|
|
176
202
|
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
203
|
2. Sorts open items by priority (ascending) and takes the top 3 as "Up Next".
|
|
178
204
|
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.
|
|
205
|
+
4. In `--dry-run`, prints the message in the chosen `--format` and exits without any network call. Otherwise posts `{ text, blocks }` to the configured Slack webhook using Node.js native `https`. A missing webhook (on a real post) or a failed post raises a structured `CommandError` and exits non-zero.
|
|
180
206
|
|
|
181
207
|
## License
|
|
182
208
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,150 @@
|
|
|
1
|
+
export declare class CommandError extends Error {
|
|
2
|
+
exitCode: number;
|
|
3
|
+
constructor(message: string, exitCode?: number);
|
|
4
|
+
}
|
|
5
|
+
export interface PmItem {
|
|
6
|
+
id: string;
|
|
7
|
+
title: string;
|
|
8
|
+
status: string;
|
|
9
|
+
type?: string;
|
|
10
|
+
priority?: number;
|
|
11
|
+
tags?: string[];
|
|
12
|
+
milestone?: string;
|
|
13
|
+
release?: string;
|
|
14
|
+
sprint?: string;
|
|
15
|
+
assignee?: string;
|
|
16
|
+
author?: string;
|
|
17
|
+
body?: string;
|
|
18
|
+
created_at?: string;
|
|
19
|
+
updated_at?: string;
|
|
20
|
+
}
|
|
21
|
+
export type Format = "slack" | "blockkit" | "markdown" | "plain";
|
|
22
|
+
export type GroupBy = "status" | "assignee" | "sprint" | "type";
|
|
23
|
+
export type SectionKey = "in_progress" | "blocked" | "done" | "up_next";
|
|
24
|
+
export declare const ALL_SECTIONS: readonly SectionKey[];
|
|
25
|
+
export interface StandupData {
|
|
26
|
+
wip: PmItem[];
|
|
27
|
+
blocked: PmItem[];
|
|
28
|
+
done: PmItem[];
|
|
29
|
+
upNext: PmItem[];
|
|
30
|
+
total: number;
|
|
31
|
+
}
|
|
32
|
+
export interface StandupOptions {
|
|
33
|
+
channel?: string;
|
|
34
|
+
format: Format;
|
|
35
|
+
includeDone: boolean;
|
|
36
|
+
since?: string;
|
|
37
|
+
groupBy: GroupBy;
|
|
38
|
+
sections: SectionKey[];
|
|
39
|
+
mentionMap: Record<string, string>;
|
|
40
|
+
}
|
|
41
|
+
export declare function readBoolOption(options: Record<string, unknown>, key: string): boolean;
|
|
42
|
+
export declare function readStrOption(options: Record<string, unknown>, key: string): string | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Parse a `--mention-map` spec mapping pm authors to Slack handles.
|
|
45
|
+
* Accepts `author=@handle,other=@h2` (commas) or semicolon separators.
|
|
46
|
+
* A leading `@` on the handle is optional and normalized on.
|
|
47
|
+
*/
|
|
48
|
+
export declare function parseMentionMap(spec: string | undefined): Record<string, string>;
|
|
49
|
+
/**
|
|
50
|
+
* Normalize a `--format` value. Accepts the four public formats plus the
|
|
51
|
+
* legacy `text` alias (== `plain`). Unknown values raise a USAGE CommandError.
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseFormat(raw: string | undefined): Format;
|
|
54
|
+
export declare function parseGroupBy(raw: string | undefined): GroupBy;
|
|
55
|
+
/**
|
|
56
|
+
* Parse a `--sections` spec (comma/semicolon list) into an ordered, de-duped
|
|
57
|
+
* list of section keys. Empty spec → all sections in default order. An
|
|
58
|
+
* unknown token is a USAGE error rather than a silent drop.
|
|
59
|
+
*/
|
|
60
|
+
export declare function parseSections(spec: string | undefined): SectionKey[];
|
|
61
|
+
/**
|
|
62
|
+
* Resolve the "recently closed" window start (ms epoch) from `--since` and/or
|
|
63
|
+
* `--days`. `--since` is an explicit ISO date/time; `--days <n>` is N days
|
|
64
|
+
* before now. If both are given the *later* (more restrictive) bound wins.
|
|
65
|
+
* Returns NaN when neither is set (no windowing). Invalid input → USAGE error.
|
|
66
|
+
*/
|
|
67
|
+
export declare function resolveSinceMs(since: string | undefined, days: number | undefined, now?: number): number;
|
|
68
|
+
export declare function parseDays(raw: string | undefined): number | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Read every item once via `list-all --json --include-body`, then bucket by
|
|
71
|
+
* status locally. This is a single pm invocation (vs. four list-by-status
|
|
72
|
+
* calls) and gives us bodies + assignee + timestamps for grouping/windowing.
|
|
73
|
+
*/
|
|
74
|
+
export declare function fetchAllItems(pmRoot: string): PmItem[];
|
|
75
|
+
/**
|
|
76
|
+
* True when an item's last activity falls within the [sinceMs, now] window.
|
|
77
|
+
* NaN sinceMs means "no window" → always true.
|
|
78
|
+
*/
|
|
79
|
+
export declare function withinWindow(item: PmItem, sinceMs: number): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Bucket items into standup sections.
|
|
82
|
+
* `sinceMs` (epoch ms, NaN = no window) filters the Done section to items
|
|
83
|
+
* updated within the window; WIP/blocked/up-next always reflect current state.
|
|
84
|
+
*/
|
|
85
|
+
export declare function buildStandupData(items: PmItem[], opts: StandupOptions, sinceMs?: number): StandupData;
|
|
86
|
+
interface SectionDef {
|
|
87
|
+
key: SectionKey;
|
|
88
|
+
emoji: string;
|
|
89
|
+
title: string;
|
|
90
|
+
items: PmItem[];
|
|
91
|
+
emptyNote: string | null;
|
|
92
|
+
withPriority: boolean;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Resolve the ordered, selected section definitions for the given data.
|
|
96
|
+
* `in_progress` and `blocked` always render (even empty, with their note);
|
|
97
|
+
* `done` and `up_next` only render when they hold items — preserving the
|
|
98
|
+
* historical message shape. `--sections` filters which keys are eligible.
|
|
99
|
+
*/
|
|
100
|
+
export declare function resolveSections(data: StandupData, opts: StandupOptions): SectionDef[];
|
|
101
|
+
export declare function itemText(item: PmItem, mentionMap: Record<string, string>, withPriority?: boolean): string;
|
|
102
|
+
/**
|
|
103
|
+
* Group a list of items by the configured field (assignee, sprint or type).
|
|
104
|
+
* Items missing the field bucket under a synthetic "_none" key (rendered as a
|
|
105
|
+
* friendly label). Returns entries sorted by group key for stable output.
|
|
106
|
+
*/
|
|
107
|
+
export declare function groupItems(items: PmItem[], groupBy: GroupBy): Array<[string, PmItem[]]>;
|
|
108
|
+
/**
|
|
109
|
+
* Render the standup as a single text blob for the chosen non-Block-Kit
|
|
110
|
+
* format. `slack` is byte-identical to the historical output (mrkdwn);
|
|
111
|
+
* `plain` drops emphasis punctuation; `markdown` uses `#`/`**`/`-`.
|
|
112
|
+
*/
|
|
113
|
+
export declare function buildTextMessage(data: StandupData, opts: StandupOptions): string;
|
|
114
|
+
export interface SlackBlock {
|
|
115
|
+
type: string;
|
|
116
|
+
[key: string]: unknown;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Build a Slack Block Kit `blocks` array: a header, a section per selected
|
|
120
|
+
* standup bucket and a context footer. Returns the blocks plus a plain-text
|
|
121
|
+
* `fallback` Slack renders in notifications and old clients.
|
|
122
|
+
*
|
|
123
|
+
* Block Kit schema choices: a single `header` block (plain_text, capped at
|
|
124
|
+
* Slack's 150-char limit), one `section`/`mrkdwn` block per bucket (Slack
|
|
125
|
+
* caps section text at 3000 chars — long buckets are truncated with an
|
|
126
|
+
* ellipsis to stay valid), a `divider`, then a `context` footer summarizing
|
|
127
|
+
* counts / window / grouping.
|
|
128
|
+
*/
|
|
129
|
+
export declare function buildBlockKit(data: StandupData, opts: StandupOptions): {
|
|
130
|
+
blocks: SlackBlock[];
|
|
131
|
+
fallback: string;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Render the standup in whichever `--format` was selected, as the string the
|
|
135
|
+
* command prints (dry-run) or the exporter writes. `blockkit` returns the
|
|
136
|
+
* pretty-printed `{ blocks }` JSON; everything else returns text.
|
|
137
|
+
*/
|
|
138
|
+
export declare function renderStandup(data: StandupData, opts: StandupOptions): string;
|
|
139
|
+
/**
|
|
140
|
+
* Resolve every standup option except the render `format`, which differs
|
|
141
|
+
* between the command (slack|blockkit|markdown|plain) and the exporter
|
|
142
|
+
* (md|json file format). Callers supply the format they want.
|
|
143
|
+
*/
|
|
144
|
+
export declare function resolveStandupOptions(options: Record<string, unknown>, format: Format): {
|
|
145
|
+
opts: StandupOptions;
|
|
146
|
+
sinceMs: number;
|
|
147
|
+
};
|
|
1
148
|
declare const _default: {
|
|
2
149
|
name: string;
|
|
3
150
|
version: string;
|
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":"AA0BA,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,EAAE,MAAM,CAAC;gBACL,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAkC;CAK1E;AAMD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;AACjE,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAChE,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAExE,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAKpC,CAAC;AAEX,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAeD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,EAAE,MAAM,GACV,OAAO,CAWT;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAQpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAahF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAW3D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAW7D;AAgBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,EAAE,CAgBpE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,GAAG,GAAE,MAAmB,GACvB,MAAM,CAiBR;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOrE;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBtD;AAWD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAInE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,MAAY,GACpB,WAAW,CAab;AAMD,UAAU,UAAU;IAClB,GAAG,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;CACvB;AAYD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,GAAG,UAAU,EAAE,CAqBrF;AAkBD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,UAAQ,GAAG,MAAM,CAKvG;AAMD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAavF;AA0DD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,CAkBhF;AAMD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAgBD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,GAAG;IAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAoDjH;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,CAM7E;AA4CD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,EAAE,MAAM,GACb;IACD,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAgBA;;;;;;AAMD,wBA8JG"}
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@ const EXIT_CODE = {
|
|
|
18
18
|
USAGE: 2,
|
|
19
19
|
NOT_FOUND: 3,
|
|
20
20
|
};
|
|
21
|
-
class CommandError extends Error {
|
|
21
|
+
export class CommandError extends Error {
|
|
22
22
|
exitCode;
|
|
23
23
|
constructor(message, exitCode = EXIT_CODE.GENERIC_FAILURE) {
|
|
24
24
|
super(message);
|
|
@@ -26,6 +26,12 @@ class CommandError extends Error {
|
|
|
26
26
|
this.exitCode = exitCode;
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
+
export const ALL_SECTIONS = [
|
|
30
|
+
"in_progress",
|
|
31
|
+
"blocked",
|
|
32
|
+
"done",
|
|
33
|
+
"up_next",
|
|
34
|
+
];
|
|
29
35
|
// ---------------------------------------------------------------------------
|
|
30
36
|
// Option helpers
|
|
31
37
|
// ---------------------------------------------------------------------------
|
|
@@ -37,7 +43,7 @@ class CommandError extends Error {
|
|
|
37
43
|
function camelCase(key) {
|
|
38
44
|
return key.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
|
|
39
45
|
}
|
|
40
|
-
function readBoolOption(options, key) {
|
|
46
|
+
export function readBoolOption(options, key) {
|
|
41
47
|
for (const candidate of [key, camelCase(key)]) {
|
|
42
48
|
const value = options[candidate];
|
|
43
49
|
if (typeof value === "boolean")
|
|
@@ -52,7 +58,7 @@ function readBoolOption(options, key) {
|
|
|
52
58
|
}
|
|
53
59
|
return false;
|
|
54
60
|
}
|
|
55
|
-
function readStrOption(options, key) {
|
|
61
|
+
export function readStrOption(options, key) {
|
|
56
62
|
for (const candidate of [key, camelCase(key)]) {
|
|
57
63
|
const value = options[candidate];
|
|
58
64
|
if (typeof value === "string" && value.trim().length > 0) {
|
|
@@ -66,7 +72,7 @@ function readStrOption(options, key) {
|
|
|
66
72
|
* Accepts `author=@handle,other=@h2` (commas) or semicolon separators.
|
|
67
73
|
* A leading `@` on the handle is optional and normalized on.
|
|
68
74
|
*/
|
|
69
|
-
function parseMentionMap(spec) {
|
|
75
|
+
export function parseMentionMap(spec) {
|
|
70
76
|
const map = {};
|
|
71
77
|
if (!spec)
|
|
72
78
|
return map;
|
|
@@ -84,6 +90,106 @@ function parseMentionMap(spec) {
|
|
|
84
90
|
}
|
|
85
91
|
return map;
|
|
86
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Normalize a `--format` value. Accepts the four public formats plus the
|
|
95
|
+
* legacy `text` alias (== `plain`). Unknown values raise a USAGE CommandError.
|
|
96
|
+
*/
|
|
97
|
+
export function parseFormat(raw) {
|
|
98
|
+
if (raw == null)
|
|
99
|
+
return "slack";
|
|
100
|
+
const v = raw.trim().toLowerCase();
|
|
101
|
+
if (v === "" || v === "slack")
|
|
102
|
+
return "slack";
|
|
103
|
+
if (v === "blockkit" || v === "block-kit" || v === "blocks")
|
|
104
|
+
return "blockkit";
|
|
105
|
+
if (v === "markdown" || v === "md")
|
|
106
|
+
return "markdown";
|
|
107
|
+
if (v === "plain" || v === "text" || v === "txt")
|
|
108
|
+
return "plain";
|
|
109
|
+
throw new CommandError(`Unknown --format '${raw}'. Valid: slack | blockkit | markdown | plain.`, EXIT_CODE.USAGE);
|
|
110
|
+
}
|
|
111
|
+
export function parseGroupBy(raw) {
|
|
112
|
+
if (raw == null)
|
|
113
|
+
return "status";
|
|
114
|
+
const v = raw.trim().toLowerCase();
|
|
115
|
+
if (v === "" || v === "status")
|
|
116
|
+
return "status";
|
|
117
|
+
if (v === "assignee" || v === "owner")
|
|
118
|
+
return "assignee";
|
|
119
|
+
if (v === "sprint")
|
|
120
|
+
return "sprint";
|
|
121
|
+
if (v === "type")
|
|
122
|
+
return "type";
|
|
123
|
+
throw new CommandError(`Unknown --group-by '${raw}'. Valid: status | assignee | sprint | type.`, EXIT_CODE.USAGE);
|
|
124
|
+
}
|
|
125
|
+
const SECTION_ALIASES = {
|
|
126
|
+
in_progress: "in_progress",
|
|
127
|
+
"in-progress": "in_progress",
|
|
128
|
+
wip: "in_progress",
|
|
129
|
+
progress: "in_progress",
|
|
130
|
+
blocked: "blocked",
|
|
131
|
+
done: "done",
|
|
132
|
+
closed: "done",
|
|
133
|
+
up_next: "up_next",
|
|
134
|
+
"up-next": "up_next",
|
|
135
|
+
upnext: "up_next",
|
|
136
|
+
next: "up_next",
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Parse a `--sections` spec (comma/semicolon list) into an ordered, de-duped
|
|
140
|
+
* list of section keys. Empty spec → all sections in default order. An
|
|
141
|
+
* unknown token is a USAGE error rather than a silent drop.
|
|
142
|
+
*/
|
|
143
|
+
export function parseSections(spec) {
|
|
144
|
+
if (!spec || !spec.trim())
|
|
145
|
+
return [...ALL_SECTIONS];
|
|
146
|
+
const out = [];
|
|
147
|
+
for (const raw of spec.split(/[,;]/)) {
|
|
148
|
+
const token = raw.trim().toLowerCase();
|
|
149
|
+
if (!token)
|
|
150
|
+
continue;
|
|
151
|
+
const key = SECTION_ALIASES[token];
|
|
152
|
+
if (!key) {
|
|
153
|
+
throw new CommandError(`Unknown --sections value '${raw.trim()}'. Valid: in_progress | blocked | done | up_next.`, EXIT_CODE.USAGE);
|
|
154
|
+
}
|
|
155
|
+
if (!out.includes(key))
|
|
156
|
+
out.push(key);
|
|
157
|
+
}
|
|
158
|
+
return out.length > 0 ? out : [...ALL_SECTIONS];
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Resolve the "recently closed" window start (ms epoch) from `--since` and/or
|
|
162
|
+
* `--days`. `--since` is an explicit ISO date/time; `--days <n>` is N days
|
|
163
|
+
* before now. If both are given the *later* (more restrictive) bound wins.
|
|
164
|
+
* Returns NaN when neither is set (no windowing). Invalid input → USAGE error.
|
|
165
|
+
*/
|
|
166
|
+
export function resolveSinceMs(since, days, now = Date.now()) {
|
|
167
|
+
let bound = NaN;
|
|
168
|
+
if (since != null) {
|
|
169
|
+
const ms = Date.parse(since);
|
|
170
|
+
if (isNaN(ms)) {
|
|
171
|
+
throw new CommandError(`Invalid --since value '${since}' (expected an ISO date/time).`, EXIT_CODE.USAGE);
|
|
172
|
+
}
|
|
173
|
+
bound = ms;
|
|
174
|
+
}
|
|
175
|
+
if (days != null) {
|
|
176
|
+
if (!Number.isFinite(days) || days < 0) {
|
|
177
|
+
throw new CommandError(`Invalid --days value '${days}' (expected a non-negative number).`, EXIT_CODE.USAGE);
|
|
178
|
+
}
|
|
179
|
+
const daysBound = now - days * 86_400_000;
|
|
180
|
+
bound = isNaN(bound) ? daysBound : Math.max(bound, daysBound);
|
|
181
|
+
}
|
|
182
|
+
return bound;
|
|
183
|
+
}
|
|
184
|
+
export function parseDays(raw) {
|
|
185
|
+
if (raw == null || raw.trim() === "")
|
|
186
|
+
return undefined;
|
|
187
|
+
const n = Number(raw.trim());
|
|
188
|
+
if (!Number.isFinite(n)) {
|
|
189
|
+
throw new CommandError(`Invalid --days value '${raw}' (expected a number).`, EXIT_CODE.USAGE);
|
|
190
|
+
}
|
|
191
|
+
return n;
|
|
192
|
+
}
|
|
87
193
|
// ---------------------------------------------------------------------------
|
|
88
194
|
// Data fetch
|
|
89
195
|
// ---------------------------------------------------------------------------
|
|
@@ -92,7 +198,7 @@ function parseMentionMap(spec) {
|
|
|
92
198
|
* status locally. This is a single pm invocation (vs. four list-by-status
|
|
93
199
|
* calls) and gives us bodies + assignee + timestamps for grouping/windowing.
|
|
94
200
|
*/
|
|
95
|
-
function fetchAllItems(pmRoot) {
|
|
201
|
+
export function fetchAllItems(pmRoot) {
|
|
96
202
|
const result = spawnSync("pm", ["--path", pmRoot, "list-all", "--json", "--include-body"], { encoding: "utf-8" });
|
|
97
203
|
if (result.error || result.status !== 0) {
|
|
98
204
|
console.error(`pm list-all failed: ${result.stderr ?? result.error?.message ?? ""}`);
|
|
@@ -113,30 +219,68 @@ const DONE_STATUSES = new Set(["closed", "done", "complete", "completed"]);
|
|
|
113
219
|
function statusOf(item) {
|
|
114
220
|
return (item.status ?? "").trim().toLowerCase();
|
|
115
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* True when an item's last activity falls within the [sinceMs, now] window.
|
|
224
|
+
* NaN sinceMs means "no window" → always true.
|
|
225
|
+
*/
|
|
226
|
+
export function withinWindow(item, sinceMs) {
|
|
227
|
+
if (isNaN(sinceMs))
|
|
228
|
+
return true;
|
|
229
|
+
const ts = Date.parse(item.updated_at ?? item.created_at ?? "");
|
|
230
|
+
return isNaN(ts) ? false : ts >= sinceMs;
|
|
231
|
+
}
|
|
116
232
|
/**
|
|
117
233
|
* Bucket items into standup sections.
|
|
118
|
-
* `
|
|
119
|
-
* window; WIP/blocked/up-next always reflect current state.
|
|
234
|
+
* `sinceMs` (epoch ms, NaN = no window) filters the Done section to items
|
|
235
|
+
* updated within the window; WIP/blocked/up-next always reflect current state.
|
|
120
236
|
*/
|
|
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
|
-
};
|
|
237
|
+
export function buildStandupData(items, opts, sinceMs = NaN) {
|
|
129
238
|
const wip = items.filter((i) => WIP_STATUSES.has(statusOf(i)));
|
|
130
239
|
const blocked = items.filter((i) => BLOCKED_STATUSES.has(statusOf(i)));
|
|
131
240
|
const open = items.filter((i) => OPEN_STATUSES.has(statusOf(i)));
|
|
132
241
|
const done = opts.includeDone
|
|
133
|
-
? items.filter((i) => DONE_STATUSES.has(statusOf(i)) && withinWindow(i))
|
|
242
|
+
? items.filter((i) => DONE_STATUSES.has(statusOf(i)) && withinWindow(i, sinceMs))
|
|
134
243
|
: [];
|
|
135
244
|
const upNext = [...open]
|
|
136
245
|
.sort((a, b) => (a.priority ?? 9999) - (b.priority ?? 9999))
|
|
137
246
|
.slice(0, 3);
|
|
138
247
|
return { wip, blocked, done, upNext, total: items.length };
|
|
139
248
|
}
|
|
249
|
+
const SECTION_META = {
|
|
250
|
+
in_progress: { emoji: "🏃", title: "In Progress", emptyNote: "nothing in progress", withPriority: false },
|
|
251
|
+
blocked: { emoji: "🚫", title: "Blocked", emptyNote: "nothing blocked", withPriority: false },
|
|
252
|
+
done: { emoji: "✅", title: "Done", emptyNote: null, withPriority: false },
|
|
253
|
+
up_next: { emoji: "📋", title: "Up Next", emptyNote: null, withPriority: true },
|
|
254
|
+
};
|
|
255
|
+
/**
|
|
256
|
+
* Resolve the ordered, selected section definitions for the given data.
|
|
257
|
+
* `in_progress` and `blocked` always render (even empty, with their note);
|
|
258
|
+
* `done` and `up_next` only render when they hold items — preserving the
|
|
259
|
+
* historical message shape. `--sections` filters which keys are eligible.
|
|
260
|
+
*/
|
|
261
|
+
export function resolveSections(data, opts) {
|
|
262
|
+
const itemsFor = {
|
|
263
|
+
in_progress: data.wip,
|
|
264
|
+
blocked: data.blocked,
|
|
265
|
+
done: data.done,
|
|
266
|
+
up_next: data.upNext,
|
|
267
|
+
};
|
|
268
|
+
const alwaysShow = {
|
|
269
|
+
in_progress: true,
|
|
270
|
+
blocked: true,
|
|
271
|
+
done: false,
|
|
272
|
+
up_next: false,
|
|
273
|
+
};
|
|
274
|
+
const out = [];
|
|
275
|
+
for (const key of opts.sections) {
|
|
276
|
+
const items = itemsFor[key];
|
|
277
|
+
if (!alwaysShow[key] && items.length === 0)
|
|
278
|
+
continue;
|
|
279
|
+
const meta = SECTION_META[key];
|
|
280
|
+
out.push({ key, emoji: meta.emoji, title: meta.title, items, emptyNote: meta.emptyNote, withPriority: meta.withPriority });
|
|
281
|
+
}
|
|
282
|
+
return out;
|
|
283
|
+
}
|
|
140
284
|
// ---------------------------------------------------------------------------
|
|
141
285
|
// Rendering helpers
|
|
142
286
|
// ---------------------------------------------------------------------------
|
|
@@ -147,12 +291,12 @@ function typeLabel(item) {
|
|
|
147
291
|
return `[${label}]`;
|
|
148
292
|
}
|
|
149
293
|
function mentionFor(item, mentionMap) {
|
|
150
|
-
const author = item.assignee;
|
|
294
|
+
const author = item.assignee ?? item.author;
|
|
151
295
|
if (author && mentionMap[author])
|
|
152
296
|
return ` (${mentionMap[author]})`;
|
|
153
297
|
return "";
|
|
154
298
|
}
|
|
155
|
-
function itemText(item, mentionMap, withPriority = false) {
|
|
299
|
+
export function itemText(item, mentionMap, withPriority = false) {
|
|
156
300
|
const label = typeLabel(item);
|
|
157
301
|
const title = label ? `${label} ${item.title}` : item.title;
|
|
158
302
|
const prio = withPriority && item.priority != null ? ` (priority ${item.priority})` : "";
|
|
@@ -162,68 +306,122 @@ function todayISO() {
|
|
|
162
306
|
return new Date().toISOString().slice(0, 10);
|
|
163
307
|
}
|
|
164
308
|
/**
|
|
165
|
-
* Group a list of items by
|
|
166
|
-
*
|
|
309
|
+
* Group a list of items by the configured field (assignee, sprint or type).
|
|
310
|
+
* Items missing the field bucket under a synthetic "_none" key (rendered as a
|
|
311
|
+
* friendly label). Returns entries sorted by group key for stable output.
|
|
167
312
|
*/
|
|
168
|
-
function
|
|
313
|
+
export function groupItems(items, groupBy) {
|
|
169
314
|
const groups = new Map();
|
|
170
315
|
for (const item of items) {
|
|
171
|
-
|
|
172
|
-
(
|
|
316
|
+
let key;
|
|
317
|
+
if (groupBy === "assignee")
|
|
318
|
+
key = item.assignee ?? "_none";
|
|
319
|
+
else if (groupBy === "sprint")
|
|
320
|
+
key = item.sprint ?? "_none";
|
|
321
|
+
else if (groupBy === "type")
|
|
322
|
+
key = item.type ?? "_none";
|
|
323
|
+
else
|
|
324
|
+
key = "_none";
|
|
325
|
+
const bucket = groups.get(key);
|
|
326
|
+
if (bucket)
|
|
327
|
+
bucket.push(item);
|
|
328
|
+
else
|
|
329
|
+
groups.set(key, [item]);
|
|
173
330
|
}
|
|
174
331
|
return [...groups.entries()].sort((a, b) => a[0].localeCompare(b[0]));
|
|
175
332
|
}
|
|
333
|
+
function groupLabel(key, groupBy) {
|
|
334
|
+
if (key !== "_none")
|
|
335
|
+
return key;
|
|
336
|
+
if (groupBy === "assignee")
|
|
337
|
+
return "Unassigned";
|
|
338
|
+
if (groupBy === "sprint")
|
|
339
|
+
return "No sprint";
|
|
340
|
+
if (groupBy === "type")
|
|
341
|
+
return "Untyped";
|
|
342
|
+
return key;
|
|
343
|
+
}
|
|
344
|
+
const isGrouped = (opts) => opts.groupBy !== "status";
|
|
176
345
|
// ---------------------------------------------------------------------------
|
|
177
|
-
// Plain-text / mrkdwn message (fallback + dry-run preview)
|
|
346
|
+
// Plain-text / mrkdwn / markdown message (fallback + dry-run preview)
|
|
178
347
|
// ---------------------------------------------------------------------------
|
|
179
|
-
function
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
if (
|
|
183
|
-
|
|
184
|
-
|
|
348
|
+
function bold(text, format) {
|
|
349
|
+
if (format === "slack")
|
|
350
|
+
return `*${text}*`;
|
|
351
|
+
if (format === "markdown")
|
|
352
|
+
return `**${text}**`;
|
|
353
|
+
return text;
|
|
354
|
+
}
|
|
355
|
+
function italic(text, format) {
|
|
356
|
+
if (format === "slack")
|
|
357
|
+
return `_${text}_`;
|
|
358
|
+
if (format === "markdown")
|
|
359
|
+
return `_${text}_`;
|
|
360
|
+
return text;
|
|
361
|
+
}
|
|
362
|
+
function renderSection(lines, def, opts) {
|
|
363
|
+
const count = `(${def.items.length})`;
|
|
364
|
+
if (opts.format === "markdown") {
|
|
365
|
+
lines.push(`## ${def.emoji} ${def.title} ${count}`);
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
lines.push(`${def.emoji} ${bold(def.title, opts.format)} ${count}`);
|
|
369
|
+
}
|
|
370
|
+
if (def.items.length === 0) {
|
|
371
|
+
if (def.emptyNote) {
|
|
372
|
+
const bullet = opts.format === "markdown" ? "- " : "• ";
|
|
373
|
+
lines.push(`${bullet}${italic(def.emptyNote, opts.format)}`);
|
|
374
|
+
}
|
|
185
375
|
return;
|
|
186
376
|
}
|
|
187
|
-
if (opts
|
|
188
|
-
for (const [
|
|
189
|
-
const name =
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
377
|
+
if (isGrouped(opts)) {
|
|
378
|
+
for (const [key, group] of groupItems(def.items, opts.groupBy)) {
|
|
379
|
+
const name = groupLabel(key, opts.groupBy);
|
|
380
|
+
if (opts.format === "markdown")
|
|
381
|
+
lines.push(`- ${bold(name, opts.format)}`);
|
|
382
|
+
else
|
|
383
|
+
lines.push(` ${bold(name, opts.format)}`);
|
|
384
|
+
for (const item of group) {
|
|
385
|
+
const bullet = opts.format === "markdown" ? " - " : " • ";
|
|
386
|
+
lines.push(`${bullet}${itemText(item, opts.mentionMap, def.withPriority)}`);
|
|
387
|
+
}
|
|
193
388
|
}
|
|
194
389
|
}
|
|
195
390
|
else {
|
|
196
|
-
|
|
197
|
-
|
|
391
|
+
const bullet = opts.format === "markdown" ? "- " : "• ";
|
|
392
|
+
for (const item of def.items)
|
|
393
|
+
lines.push(`${bullet}${itemText(item, opts.mentionMap, def.withPriority)}`);
|
|
198
394
|
}
|
|
199
395
|
}
|
|
200
|
-
|
|
396
|
+
/**
|
|
397
|
+
* Render the standup as a single text blob for the chosen non-Block-Kit
|
|
398
|
+
* format. `slack` is byte-identical to the historical output (mrkdwn);
|
|
399
|
+
* `plain` drops emphasis punctuation; `markdown` uses `#`/`**`/`-`.
|
|
400
|
+
*/
|
|
401
|
+
export function buildTextMessage(data, opts) {
|
|
201
402
|
const lines = [];
|
|
202
403
|
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}`);
|
|
206
|
-
lines.push("");
|
|
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) {
|
|
211
|
-
lines.push("");
|
|
212
|
-
renderSection(lines, "✅", "Done", data.done, null, opts);
|
|
213
|
-
}
|
|
214
|
-
if (data.upNext.length > 0) {
|
|
215
|
-
lines.push("");
|
|
216
|
-
renderSection(lines, "📋", "Up Next", data.upNext, null, opts, true);
|
|
404
|
+
if (opts.channel) {
|
|
405
|
+
lines.push(opts.format === "markdown" ? `> Channel: ${opts.channel}` : `> Channel: ${opts.channel}`);
|
|
217
406
|
}
|
|
407
|
+
const title = `📊 ${bold("pm standup", opts.format)} — ${dateStr}`;
|
|
408
|
+
lines.push(opts.format === "markdown" ? `# 📊 pm standup — ${dateStr}` : title);
|
|
409
|
+
lines.push("");
|
|
410
|
+
const sections = resolveSections(data, opts);
|
|
411
|
+
sections.forEach((def, idx) => {
|
|
412
|
+
if (idx > 0)
|
|
413
|
+
lines.push("");
|
|
414
|
+
renderSection(lines, def, opts);
|
|
415
|
+
});
|
|
218
416
|
return lines.join("\n");
|
|
219
417
|
}
|
|
220
418
|
function mrkdwnList(items, opts, withPriority = false) {
|
|
221
419
|
if (items.length === 0)
|
|
222
420
|
return "_none_";
|
|
223
|
-
if (opts
|
|
421
|
+
if (isGrouped(opts)) {
|
|
224
422
|
const parts = [];
|
|
225
|
-
for (const [
|
|
226
|
-
const name =
|
|
423
|
+
for (const [key, group] of groupItems(items, opts.groupBy)) {
|
|
424
|
+
const name = groupLabel(key, opts.groupBy);
|
|
227
425
|
parts.push(`*${name}*`);
|
|
228
426
|
for (const item of group)
|
|
229
427
|
parts.push(`• ${itemText(item, opts.mentionMap, withPriority)}`);
|
|
@@ -233,17 +431,23 @@ function mrkdwnList(items, opts, withPriority = false) {
|
|
|
233
431
|
return items.map((item) => `• ${itemText(item, opts.mentionMap, withPriority)}`).join("\n");
|
|
234
432
|
}
|
|
235
433
|
/**
|
|
236
|
-
* Build a Slack Block Kit `blocks` array: a header, a section per
|
|
237
|
-
* bucket
|
|
238
|
-
*
|
|
239
|
-
*
|
|
434
|
+
* Build a Slack Block Kit `blocks` array: a header, a section per selected
|
|
435
|
+
* standup bucket and a context footer. Returns the blocks plus a plain-text
|
|
436
|
+
* `fallback` Slack renders in notifications and old clients.
|
|
437
|
+
*
|
|
438
|
+
* Block Kit schema choices: a single `header` block (plain_text, capped at
|
|
439
|
+
* Slack's 150-char limit), one `section`/`mrkdwn` block per bucket (Slack
|
|
440
|
+
* caps section text at 3000 chars — long buckets are truncated with an
|
|
441
|
+
* ellipsis to stay valid), a `divider`, then a `context` footer summarizing
|
|
442
|
+
* counts / window / grouping.
|
|
240
443
|
*/
|
|
241
|
-
function buildBlockKit(data, opts) {
|
|
444
|
+
export function buildBlockKit(data, opts) {
|
|
242
445
|
const blocks = [];
|
|
243
446
|
const dateStr = todayISO();
|
|
447
|
+
const truncate = (text, max) => text.length <= max ? text : text.slice(0, max - 1) + "…";
|
|
244
448
|
blocks.push({
|
|
245
449
|
type: "header",
|
|
246
|
-
text: { type: "plain_text", text: `📊 pm standup — ${dateStr}`, emoji: true },
|
|
450
|
+
text: { type: "plain_text", text: truncate(`📊 pm standup — ${dateStr}`, 150), emoji: true },
|
|
247
451
|
});
|
|
248
452
|
if (opts.channel) {
|
|
249
453
|
blocks.push({
|
|
@@ -251,39 +455,52 @@ function buildBlockKit(data, opts) {
|
|
|
251
455
|
elements: [{ type: "mrkdwn", text: `Channel: ${opts.channel}` }],
|
|
252
456
|
});
|
|
253
457
|
}
|
|
254
|
-
const
|
|
458
|
+
for (const def of resolveSections(data, opts)) {
|
|
255
459
|
blocks.push({
|
|
256
460
|
type: "section",
|
|
257
461
|
text: {
|
|
258
462
|
type: "mrkdwn",
|
|
259
|
-
text: `${emoji} *${title}* (${items.length})\n${mrkdwnList(items, opts, withPriority)}`,
|
|
463
|
+
text: truncate(`${def.emoji} *${def.title}* (${def.items.length})\n${mrkdwnList(def.items, opts, def.withPriority)}`, 3000),
|
|
260
464
|
},
|
|
261
465
|
});
|
|
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);
|
|
466
|
+
}
|
|
268
467
|
blocks.push({ type: "divider" });
|
|
468
|
+
const groupNote = {
|
|
469
|
+
status: null,
|
|
470
|
+
assignee: "grouped by assignee",
|
|
471
|
+
sprint: "grouped by sprint",
|
|
472
|
+
type: "grouped by type",
|
|
473
|
+
};
|
|
269
474
|
const footerBits = [
|
|
270
475
|
`${data.total} item(s) total`,
|
|
271
476
|
opts.since ? `since ${opts.since}` : null,
|
|
272
|
-
opts.groupBy
|
|
477
|
+
groupNote[opts.groupBy],
|
|
273
478
|
].filter(Boolean);
|
|
274
479
|
blocks.push({
|
|
275
480
|
type: "context",
|
|
276
481
|
elements: [{ type: "mrkdwn", text: `🤖 pm-slack-standup · ${footerBits.join(" · ")}` }],
|
|
277
482
|
});
|
|
278
|
-
// Plain-text fallback mirrors the text message
|
|
483
|
+
// Plain-text fallback mirrors the slack-mrkdwn text message.
|
|
279
484
|
const fallback = buildTextMessage(data, { ...opts, format: "slack" });
|
|
280
485
|
return { blocks, fallback };
|
|
281
486
|
}
|
|
487
|
+
/**
|
|
488
|
+
* Render the standup in whichever `--format` was selected, as the string the
|
|
489
|
+
* command prints (dry-run) or the exporter writes. `blockkit` returns the
|
|
490
|
+
* pretty-printed `{ blocks }` JSON; everything else returns text.
|
|
491
|
+
*/
|
|
492
|
+
export function renderStandup(data, opts) {
|
|
493
|
+
if (opts.format === "blockkit") {
|
|
494
|
+
const { blocks } = buildBlockKit(data, opts);
|
|
495
|
+
return JSON.stringify({ blocks }, null, 2);
|
|
496
|
+
}
|
|
497
|
+
return buildTextMessage(data, opts);
|
|
498
|
+
}
|
|
282
499
|
// ---------------------------------------------------------------------------
|
|
283
500
|
// Slack transport
|
|
284
501
|
// ---------------------------------------------------------------------------
|
|
285
502
|
function postToSlack(webhookUrl, payload) {
|
|
286
|
-
return new Promise((
|
|
503
|
+
return new Promise((resolvePromise, reject) => {
|
|
287
504
|
const body = JSON.stringify(payload);
|
|
288
505
|
const url = new URL(webhookUrl);
|
|
289
506
|
const options = {
|
|
@@ -300,7 +517,7 @@ function postToSlack(webhookUrl, payload) {
|
|
|
300
517
|
res.on("data", (chunk) => (respBody += chunk.toString()));
|
|
301
518
|
res.on("end", () => {
|
|
302
519
|
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
303
|
-
|
|
520
|
+
resolvePromise();
|
|
304
521
|
}
|
|
305
522
|
else {
|
|
306
523
|
reject(new Error(`Slack webhook returned HTTP ${res.statusCode ?? "unknown"}: ${respBody}`));
|
|
@@ -316,24 +533,34 @@ function postToSlack(webhookUrl, payload) {
|
|
|
316
533
|
// ---------------------------------------------------------------------------
|
|
317
534
|
// Shared option resolution
|
|
318
535
|
// ---------------------------------------------------------------------------
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
536
|
+
/**
|
|
537
|
+
* Resolve every standup option except the render `format`, which differs
|
|
538
|
+
* between the command (slack|blockkit|markdown|plain) and the exporter
|
|
539
|
+
* (md|json file format). Callers supply the format they want.
|
|
540
|
+
*/
|
|
541
|
+
export function resolveStandupOptions(options, format) {
|
|
542
|
+
const since = readStrOption(options, "since");
|
|
543
|
+
const days = parseDays(readStrOption(options, "days"));
|
|
544
|
+
const opts = {
|
|
323
545
|
channel: readStrOption(options, "channel"),
|
|
324
|
-
format
|
|
546
|
+
format,
|
|
325
547
|
includeDone: readBoolOption(options, "include-done"),
|
|
326
|
-
since
|
|
327
|
-
groupBy:
|
|
548
|
+
since,
|
|
549
|
+
groupBy: parseGroupBy(readStrOption(options, "group-by")),
|
|
550
|
+
sections: parseSections(readStrOption(options, "sections")),
|
|
328
551
|
mentionMap: parseMentionMap(readStrOption(options, "mention-map")),
|
|
329
552
|
};
|
|
553
|
+
// `--days` implies windowing the Done section; surface it even without
|
|
554
|
+
// `--include-done` being set so the footer/window stays accurate.
|
|
555
|
+
const sinceMs = resolveSinceMs(since, days);
|
|
556
|
+
return { opts, sinceMs };
|
|
330
557
|
}
|
|
331
558
|
// ---------------------------------------------------------------------------
|
|
332
559
|
// Extension
|
|
333
560
|
// ---------------------------------------------------------------------------
|
|
334
561
|
export default defineExtension({
|
|
335
562
|
name: "pm-slack-standup",
|
|
336
|
-
version: "2026.6.
|
|
563
|
+
version: "2026.6.3",
|
|
337
564
|
activate(api) {
|
|
338
565
|
api.registerCommand({
|
|
339
566
|
name: "standup",
|
|
@@ -342,43 +569,41 @@ export default defineExtension({
|
|
|
342
569
|
examples: [
|
|
343
570
|
"pm standup --webhook https://hooks.slack.com/services/...",
|
|
344
571
|
"pm standup --channel '#team-eng' --dry-run",
|
|
345
|
-
"pm standup --
|
|
572
|
+
"pm standup --dry-run --format blockkit",
|
|
573
|
+
"pm standup --dry-run --format markdown --include-done --days 7",
|
|
346
574
|
"pm standup --group-by assignee --mention-map 'alice=@alice.s,bob=@bob'",
|
|
575
|
+
"pm standup --group-by sprint --sections in_progress,blocked",
|
|
347
576
|
"PM_SLACK_WEBHOOK=https://... pm standup --channel '#standups'",
|
|
348
577
|
],
|
|
349
578
|
flags: [
|
|
350
579
|
{ long: "--webhook", value_name: "url", description: "Slack incoming webhook URL (overrides PM_SLACK_WEBHOOK env var)" },
|
|
351
580
|
{ long: "--channel", value_name: "name", description: "Channel name shown in the message (e.g. #team-eng)" },
|
|
352
|
-
{ long: "--dry-run", description: "
|
|
581
|
+
{ long: "--dry-run", description: "Build and print the message in the chosen format WITHOUT posting to Slack" },
|
|
582
|
+
{ long: "--format", value_name: "fmt", description: "Output format: slack (mrkdwn, default) | blockkit (JSON) | markdown | plain" },
|
|
353
583
|
{ long: "--include-done", description: "Include recently-closed items in a Done section" },
|
|
354
|
-
{ long: "--since", value_name: "iso", description: "ISO date/time window;
|
|
355
|
-
{ long: "--
|
|
584
|
+
{ long: "--since", value_name: "iso", description: "ISO date/time window; scopes the Done section to items updated since then" },
|
|
585
|
+
{ long: "--days", value_name: "n", description: "Relative window: scope Done to items updated in the last N days" },
|
|
586
|
+
{ long: "--group-by", value_name: "field", description: "Group section items by status (default) | assignee | sprint | type" },
|
|
587
|
+
{ long: "--sections", value_name: "list", description: "Comma list of sections to render: in_progress,blocked,done,up_next" },
|
|
356
588
|
{ 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)" },
|
|
358
589
|
],
|
|
359
590
|
async run(ctx) {
|
|
360
591
|
const webhookUrl = readStrOption(ctx.options, "webhook") ?? process.env["PM_SLACK_WEBHOOK"] ?? "";
|
|
361
592
|
const dryRun = readBoolOption(ctx.options, "dry-run");
|
|
362
|
-
const opts = resolveStandupOptions(ctx.options);
|
|
363
|
-
if (!dryRun && !webhookUrl) {
|
|
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" };
|
|
369
|
-
}
|
|
593
|
+
const { opts, sinceMs } = resolveStandupOptions(ctx.options, parseFormat(readStrOption(ctx.options, "format")));
|
|
370
594
|
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;
|
|
595
|
+
const data = buildStandupData(items, opts, sinceMs);
|
|
374
596
|
if (dryRun) {
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
console.error(
|
|
378
|
-
process.stdout.write(
|
|
597
|
+
// No network call happens on this path.
|
|
598
|
+
const rendered = renderStandup(data, opts);
|
|
599
|
+
console.error(`--- DRY RUN (${opts.format}, message not posted) ---`);
|
|
600
|
+
process.stdout.write(rendered + "\n");
|
|
379
601
|
console.error("--- END ---");
|
|
602
|
+
const { blocks, fallback } = buildBlockKit(data, opts);
|
|
380
603
|
return {
|
|
381
604
|
dryRun: true,
|
|
605
|
+
format: opts.format,
|
|
606
|
+
rendered,
|
|
382
607
|
blocks,
|
|
383
608
|
fallback,
|
|
384
609
|
wip: data.wip.length,
|
|
@@ -387,17 +612,22 @@ export default defineExtension({
|
|
|
387
612
|
upNext: data.upNext.length,
|
|
388
613
|
};
|
|
389
614
|
}
|
|
615
|
+
// Real post path: a missing webhook is a hard, structured error (exit 1)
|
|
616
|
+
// rather than a crash or silent success. Use --dry-run to preview.
|
|
617
|
+
if (!webhookUrl) {
|
|
618
|
+
throw new CommandError("No Slack webhook configured. Set PM_SLACK_WEBHOOK or pass --webhook <url>, " +
|
|
619
|
+
"or use --dry-run to preview the message without posting.", EXIT_CODE.GENERIC_FAILURE);
|
|
620
|
+
}
|
|
621
|
+
const { blocks, fallback } = buildBlockKit(data, opts);
|
|
390
622
|
try {
|
|
391
623
|
await postToSlack(webhookUrl, { text: fallback, blocks, mrkdwn: true });
|
|
392
624
|
}
|
|
393
625
|
catch (err) {
|
|
394
|
-
|
|
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) };
|
|
626
|
+
throw new CommandError(`Slack post failed: ${err instanceof Error ? err.message : String(err)}`, EXIT_CODE.GENERIC_FAILURE);
|
|
398
627
|
}
|
|
399
628
|
return {
|
|
400
629
|
posted: true,
|
|
630
|
+
channel: opts.channel,
|
|
401
631
|
wip: data.wip.length,
|
|
402
632
|
blocked: data.blocked.length,
|
|
403
633
|
done: data.done.length,
|
|
@@ -412,14 +642,16 @@ export default defineExtension({
|
|
|
412
642
|
// (No collision with the `pm standup` command — different invocation.)
|
|
413
643
|
// -----------------------------------------------------------------------
|
|
414
644
|
api.registerExporter("standup", async (ctx) => {
|
|
415
|
-
const opts = resolveStandupOptions(ctx.options);
|
|
416
645
|
const rawFormat = (readStrOption(ctx.options, "format") ?? "md").toLowerCase();
|
|
417
|
-
// For the exporter, --format selects the file format (md|json); the
|
|
418
|
-
//
|
|
646
|
+
// For the exporter, --format selects the file format (md|json); the text
|
|
647
|
+
// rendering is always markdown. We resolve options with markdown rather
|
|
648
|
+
// than routing the exporter's md|json through the command's --format
|
|
649
|
+
// validator (which only knows slack|blockkit|markdown|plain).
|
|
419
650
|
const fileFormat = rawFormat === "json" ? "json" : "md";
|
|
420
|
-
const
|
|
651
|
+
const { opts, sinceMs } = resolveStandupOptions(ctx.options, "markdown");
|
|
652
|
+
const exportOpts = opts;
|
|
421
653
|
const items = fetchAllItems(ctx.pm_root);
|
|
422
|
-
const data = buildStandupData(items, exportOpts);
|
|
654
|
+
const data = buildStandupData(items, exportOpts, sinceMs);
|
|
423
655
|
let output;
|
|
424
656
|
if (fileFormat === "json") {
|
|
425
657
|
const { blocks, fallback } = buildBlockKit(data, opts);
|
|
@@ -428,6 +660,7 @@ export default defineExtension({
|
|
|
428
660
|
channel: opts.channel,
|
|
429
661
|
since: opts.since,
|
|
430
662
|
groupBy: opts.groupBy,
|
|
663
|
+
sections: opts.sections,
|
|
431
664
|
counts: {
|
|
432
665
|
wip: data.wip.length,
|
|
433
666
|
blocked: data.blocked.length,
|
|
@@ -435,7 +668,7 @@ export default defineExtension({
|
|
|
435
668
|
upNext: data.upNext.length,
|
|
436
669
|
total: data.total,
|
|
437
670
|
},
|
|
438
|
-
|
|
671
|
+
sections_data: {
|
|
439
672
|
in_progress: data.wip,
|
|
440
673
|
blocked: data.blocked,
|
|
441
674
|
up_next: data.upNext,
|
|
@@ -445,11 +678,7 @@ export default defineExtension({
|
|
|
445
678
|
}, null, 2);
|
|
446
679
|
}
|
|
447
680
|
else {
|
|
448
|
-
|
|
449
|
-
const md = buildTextMessage(data, exportOpts)
|
|
450
|
-
.replace(/^📊 pm standup — (.+)$/m, "# pm standup — $1")
|
|
451
|
-
.replace(/^(🏃|🚫|✅|📋) (.+)$/gm, "## $1 $2");
|
|
452
|
-
output = md;
|
|
681
|
+
output = buildTextMessage(data, exportOpts);
|
|
453
682
|
}
|
|
454
683
|
const outputPath = readStrOption(ctx.options, "output");
|
|
455
684
|
if (outputPath) {
|
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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-slack-standup",
|
|
3
|
-
"version": "2026.6.
|
|
3
|
+
"version": "2026.6.3",
|
|
4
4
|
"description": "Post pm context as a Slack standup message",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
"release:check": "npm run typecheck && npm run build && npm run audit:prod && npm run pack:dry-run && npm run changelog:check"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@unbrained/pm-cli": ">=2026.5.
|
|
38
|
+
"@unbrained/pm-cli": ">=2026.5.31"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/node": "^25.9.1",
|
|
42
42
|
"@unbrained/pm-cli": "^2026.5.31",
|
|
43
|
-
"pm-changelog": "^2026.
|
|
43
|
+
"pm-changelog": "^2026.6.2",
|
|
44
44
|
"typescript": "^6.0.3"
|
|
45
45
|
},
|
|
46
46
|
"keywords": [
|