pm-slack 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 +19 -1
- package/README.md +106 -9
- package/dist/index.d.ts +109 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +540 -35
- package/dist/index.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 2026.6.
|
|
3
|
+
## 2026.6.3 - 2026-06-02
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Deep feature enhancement 2026-06-03 ([pm-slack-l3ux](https://github.com/unbraind/pm-slack/blob/main/.agents/pm/features/pm-slack-l3ux.toon))
|
|
8
|
+
- Digest reads pm store toon/json files directly \(no new SDK service\) ([pm-slack-06ti](https://github.com/unbraind/pm-slack/blob/main/.agents/pm/decisions/pm-slack-06ti.toon))
|
|
9
|
+
|
|
10
|
+
### Other
|
|
11
|
+
|
|
12
|
+
- Best-effort hook policy unchanged; strict creds only in test/digest real-post ([pm-slack-b08f](https://github.com/unbraind/pm-slack/blob/main/.agents/pm/decisions/pm-slack-b08f.toon))
|
|
13
|
+
- Routing model: PM\_SLACK\_ROUTES JSON map + per-event channel override ([pm-slack-i3ir](https://github.com/unbraind/pm-slack/blob/main/.agents/pm/decisions/pm-slack-i3ir.toon))
|
|
14
|
+
- Unit tests + README + functional test + release 2026.6.3 ([pm-slack-ffs4](https://github.com/unbraind/pm-slack/blob/main/.agents/pm/tasks/pm-slack-ffs4.toon))
|
|
15
|
+
- Strict missing-creds CommandError for real posts; keep best-effort hook ([pm-slack-7fk4](https://github.com/unbraind/pm-slack/blob/main/.agents/pm/tasks/pm-slack-7fk4.toon))
|
|
16
|
+
- slack digest command: activity summary over --since/--days ([pm-slack-nga4](https://github.com/unbraind/pm-slack/blob/main/.agents/pm/tasks/pm-slack-nga4.toon))
|
|
17
|
+
- slack test command: offline preview, no network, --json ([pm-slack-36xw](https://github.com/unbraind/pm-slack/blob/main/.agents/pm/tasks/pm-slack-36xw.toon))
|
|
18
|
+
- Event/type routing to multiple webhooks/channels \(PM\_SLACK\_ROUTES\) ([pm-slack-747x](https://github.com/unbraind/pm-slack/blob/main/.agents/pm/tasks/pm-slack-747x.toon))
|
|
19
|
+
- Format toggle: --format text\|blockkit for hook + commands ([pm-slack-1fbz](https://github.com/unbraind/pm-slack/blob/main/.agents/pm/tasks/pm-slack-1fbz.toon))
|
|
20
|
+
|
|
21
|
+
## 2026.06.02 - 2026-06-02
|
|
4
22
|
|
|
5
23
|
### Added
|
|
6
24
|
|
package/README.md
CHANGED
|
@@ -33,10 +33,12 @@ pm install github.com/unbraind/pm-slack --project
|
|
|
33
33
|
|
|
34
34
|
| Variable | Required | Default | Description |
|
|
35
35
|
|---|---|---|---|
|
|
36
|
-
| `PM_SLACK_WEBHOOK` |
|
|
37
|
-
| `PM_SLACK_CHANNEL` | No | — |
|
|
36
|
+
| `PM_SLACK_WEBHOOK` | Usually | — | Slack incoming webhook URL (optional if every routing rule carries its own `webhook`) |
|
|
37
|
+
| `PM_SLACK_CHANNEL` | No | — | Default channel hint appended to messages (e.g. `#pm-alerts`) |
|
|
38
38
|
| `PM_SLACK_MIN_PRIORITY` | No | `1` | Minimum priority to notify (1=critical, 2=high, 3=medium, 4=low) |
|
|
39
39
|
| `PM_SLACK_EVENTS` | No | `create,close,block` | Comma-separated list of events to notify on |
|
|
40
|
+
| `PM_SLACK_FORMAT` | No | `blockkit` | Default message format: `blockkit` (rich) or `text` (plain mrkdwn) |
|
|
41
|
+
| `PM_SLACK_ROUTES` | No | — | JSON array of routing rules (see [Routing](#routing-by-event-type-or-status)) |
|
|
40
42
|
|
|
41
43
|
Export them in your shell profile or `.env`:
|
|
42
44
|
|
|
@@ -45,6 +47,7 @@ export PM_SLACK_WEBHOOK="<slack-webhook-url>"
|
|
|
45
47
|
export PM_SLACK_CHANNEL="#pm-alerts"
|
|
46
48
|
export PM_SLACK_MIN_PRIORITY=2 # only critical + high
|
|
47
49
|
export PM_SLACK_EVENTS="create,close" # skip block notifications
|
|
50
|
+
export PM_SLACK_FORMAT="text" # plain text instead of Block Kit
|
|
48
51
|
```
|
|
49
52
|
|
|
50
53
|
---
|
|
@@ -115,12 +118,107 @@ PM_SLACK_EVENTS="create,close"
|
|
|
115
118
|
|
|
116
119
|
---
|
|
117
120
|
|
|
121
|
+
## Message Formats
|
|
122
|
+
|
|
123
|
+
Notifications render as rich Slack **Block Kit** by default (header, a fields
|
|
124
|
+
grid with item id / type / event / priority / status / author, an optional
|
|
125
|
+
reason section, and a context footer). Set the format to plain `text` for
|
|
126
|
+
minimal/legacy channels:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
export PM_SLACK_FORMAT="text" # plain mrkdwn, no blocks
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Per-command, the `--format blockkit|text` flag overrides the env var for
|
|
133
|
+
`slack notify`, `slack test`, and `slack digest`.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Routing (by event, type, or status)
|
|
138
|
+
|
|
139
|
+
`PM_SLACK_ROUTES` is an optional JSON array of rules that send specific events,
|
|
140
|
+
item types, or statuses to a different webhook and/or channel. Routing is purely
|
|
141
|
+
additive — with no rules configured, behavior is unchanged.
|
|
142
|
+
|
|
143
|
+
Each rule is `{ "match": "<selector>", "webhook"?: "...", "channel"?: "..." }`.
|
|
144
|
+
Selectors:
|
|
145
|
+
|
|
146
|
+
| Selector | Matches |
|
|
147
|
+
|---|---|
|
|
148
|
+
| `create` / `close` / `block` | that lifecycle event |
|
|
149
|
+
| `type:<itemType>` | items of that type (case-insensitive) |
|
|
150
|
+
| `status:<status>` | items in that status (case-insensitive) |
|
|
151
|
+
| `*` / `all` | everything (use as a catch-all) |
|
|
152
|
+
|
|
153
|
+
The **first matching rule wins**; any field a rule omits falls back to the
|
|
154
|
+
default `PM_SLACK_WEBHOOK` / `PM_SLACK_CHANNEL`.
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
export PM_SLACK_ROUTES='[
|
|
158
|
+
{ "match": "block", "channel": "#urgent" },
|
|
159
|
+
{ "match": "type:Bug", "webhook": "https://hooks.slack.com/services/AAA/BBB/CCC" }
|
|
160
|
+
]'
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Commands
|
|
166
|
+
|
|
167
|
+
### `pm slack notify`
|
|
168
|
+
|
|
169
|
+
Manually post a Block Kit (or text) message for an ad-hoc note.
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
pm slack notify --text 'Release shipped :rocket:' --dry-run
|
|
173
|
+
pm slack notify --title 'Deploy done' --on close --format text --channel '#releases'
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### `pm slack test`
|
|
177
|
+
|
|
178
|
+
Build and **print** a sample notification in the chosen format **without
|
|
179
|
+
posting** — fully offline, no webhook required. Great for previewing formatting.
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
pm slack test --format blockkit # rich preview
|
|
183
|
+
pm slack test --format text --on close # plain-text preview of a close event
|
|
184
|
+
pm slack test --on block --json # machine-readable payload (with global --json)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Flags: `--format blockkit|text`, `--on create|close|block`, `--title`,
|
|
188
|
+
`--channel`, `--json`.
|
|
189
|
+
|
|
190
|
+
### `pm slack digest`
|
|
191
|
+
|
|
192
|
+
Produce a single summary of recent activity (created / closed / blocked /
|
|
193
|
+
in-progress) over a time window, as Block Kit or text. Reads the pm store
|
|
194
|
+
directly. Use `--dry-run` to preview without posting.
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
pm slack digest --days 7 --dry-run
|
|
198
|
+
pm slack digest --since 2026-06-01 --format text --dry-run
|
|
199
|
+
pm slack digest --days 1 --format blockkit # real post (needs a webhook)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Flags: `--since <date>`, `--days <n>` (default 7), `--format blockkit|text`,
|
|
203
|
+
`--channel`, `--webhook`, `--dry-run`, `--json`.
|
|
204
|
+
|
|
205
|
+
A real (non-`--dry-run`) `slack digest` post without a configured webhook fails
|
|
206
|
+
with a clear error (exit 1) rather than crashing.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
118
210
|
## Error Handling
|
|
119
211
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
212
|
+
The **lifecycle hook is best-effort** and never breaks your pm command:
|
|
213
|
+
|
|
214
|
+
- If `PM_SLACK_WEBHOOK` is not set, the hook silently skips all notifications and logs a debug message.
|
|
215
|
+
- If the webhook URL is invalid, the hook logs an error and continues without crashing pm-cli.
|
|
216
|
+
- HTTP errors from Slack (non-2xx responses), network failures, and timeouts (10s) are logged but never fail the underlying `pm` command.
|
|
217
|
+
|
|
218
|
+
The **`slack digest` command is strict** when actually posting:
|
|
219
|
+
|
|
220
|
+
- A real (non-`--dry-run`) `slack digest` post without a webhook fails with a clear `CommandError` (exit 1).
|
|
221
|
+
- Use `--dry-run` to build and preview a digest with no webhook and no network call.
|
|
124
222
|
|
|
125
223
|
---
|
|
126
224
|
|
|
@@ -141,12 +239,11 @@ The extension uses only Node.js built-ins (`node:https`) — no external runtime
|
|
|
141
239
|
```json
|
|
142
240
|
{
|
|
143
241
|
"name": "pm-slack",
|
|
144
|
-
"version": "0.1.0",
|
|
145
242
|
"description": "Slack notifications for pm item lifecycle events",
|
|
146
243
|
"author": "@unbraind",
|
|
147
|
-
"entry": "index.js",
|
|
244
|
+
"entry": "./dist/index.js",
|
|
148
245
|
"priority": 50,
|
|
149
|
-
"capabilities": ["hooks", "
|
|
246
|
+
"capabilities": ["commands", "hooks", "schema"]
|
|
150
247
|
}
|
|
151
248
|
```
|
|
152
249
|
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,13 @@
|
|
|
14
14
|
* PM_SLACK_CHANNEL (optional) Override channel, e.g. #pm-alerts
|
|
15
15
|
* PM_SLACK_MIN_PRIORITY (optional) Minimum priority to notify (1=critical … 4=low), default 1 (critical only; set 4 for all)
|
|
16
16
|
* PM_SLACK_EVENTS (optional) Comma-separated subset of hook events: create,close,block (default: all)
|
|
17
|
+
* PM_SLACK_FORMAT (optional) Default notification format: "blockkit" (default) or "text"
|
|
18
|
+
* PM_SLACK_ROUTES (optional) JSON array of routing rules to send specific
|
|
19
|
+
* events/types/statuses to different webhooks/channels.
|
|
20
|
+
* Each rule: { "match": "<selector>", "webhook"?: "...", "channel"?: "..." }
|
|
21
|
+
* Selector forms: an event ("create"|"close"|"block"),
|
|
22
|
+
* "type:<itemType>" (case-insensitive), or "status:<status>".
|
|
23
|
+
* First matching rule wins; unset fields fall back to the defaults.
|
|
17
24
|
*/
|
|
18
25
|
import type { AfterCommandHookContext } from "@unbrained/pm-cli/sdk";
|
|
19
26
|
declare class CommandError extends Error {
|
|
@@ -34,11 +41,53 @@ interface PmItem {
|
|
|
34
41
|
author?: string;
|
|
35
42
|
}
|
|
36
43
|
type EventKind = "create" | "close" | "block";
|
|
44
|
+
type MessageFormat = "blockkit" | "text";
|
|
45
|
+
/** A single routing rule parsed from PM_SLACK_ROUTES. */
|
|
46
|
+
interface RouteRule {
|
|
47
|
+
/** Raw selector string, e.g. "block", "type:Bug", "status:blocked". */
|
|
48
|
+
match: string;
|
|
49
|
+
webhook?: string;
|
|
50
|
+
channel?: string;
|
|
51
|
+
}
|
|
52
|
+
/** Resolved destination for a notification after applying routing rules. */
|
|
53
|
+
interface RouteTarget {
|
|
54
|
+
webhookUrl: string;
|
|
55
|
+
channel?: string;
|
|
56
|
+
}
|
|
37
57
|
interface SlackBlock {
|
|
38
58
|
type: string;
|
|
39
59
|
[key: string]: unknown;
|
|
40
60
|
}
|
|
61
|
+
interface SlackPayload {
|
|
62
|
+
text: string;
|
|
63
|
+
blocks?: SlackBlock[];
|
|
64
|
+
mrkdwn?: boolean;
|
|
65
|
+
channel?: string;
|
|
66
|
+
thread_ts?: string;
|
|
67
|
+
}
|
|
41
68
|
declare function parseEvents(spec: string | undefined): Set<EventKind>;
|
|
69
|
+
/**
|
|
70
|
+
* Normalize a format spec to a known MessageFormat. Accepts a few friendly
|
|
71
|
+
* aliases ("block"/"blocks" → blockkit, "plain"/"txt" → text). Falls back to
|
|
72
|
+
* the supplied default when the spec is empty or unrecognized.
|
|
73
|
+
*/
|
|
74
|
+
declare function parseFormat(spec: string | undefined, fallback?: MessageFormat): MessageFormat;
|
|
75
|
+
declare function parseRoutes(spec: string | undefined): RouteRule[];
|
|
76
|
+
/**
|
|
77
|
+
* Does a single route rule match this event/item? Selector forms:
|
|
78
|
+
* - bare event name: "create" | "close" | "block"
|
|
79
|
+
* - "type:<itemType>" (case-insensitive on item.type)
|
|
80
|
+
* - "status:<status>" (case-insensitive on item.status)
|
|
81
|
+
* - "*" / "all" (matches everything — useful as a catch-all)
|
|
82
|
+
*/
|
|
83
|
+
declare function ruleMatches(rule: RouteRule, event: EventKind, item: PmItem): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Resolve the destination (webhook + channel) for an event/item given the
|
|
86
|
+
* configured routes and the default webhook/channel. First matching rule wins;
|
|
87
|
+
* any field a rule omits falls back to the default. Returns null only when no
|
|
88
|
+
* webhook can be resolved at all.
|
|
89
|
+
*/
|
|
90
|
+
declare function selectRoute(event: EventKind, item: PmItem, routes: RouteRule[], defaultWebhook: string, defaultChannel?: string): RouteTarget | null;
|
|
42
91
|
declare function meetsMinPriority(item: PmItem, minPriority: Priority): boolean;
|
|
43
92
|
declare function buildTextMessage(item: PmItem, event: EventKind, channel?: string): string;
|
|
44
93
|
interface BlockKitOptions {
|
|
@@ -50,6 +99,55 @@ declare function buildItemBlockKit(item: PmItem, event: EventKind, opts?: BlockK
|
|
|
50
99
|
blocks: SlackBlock[];
|
|
51
100
|
fallback: string;
|
|
52
101
|
};
|
|
102
|
+
/**
|
|
103
|
+
* Build a ready-to-post SlackPayload for an item event in the requested format.
|
|
104
|
+
* - "blockkit": rich Block Kit blocks + plain-text fallback in `text`.
|
|
105
|
+
* - "text": plain mrkdwn only (no `blocks`), for minimal/legacy channels.
|
|
106
|
+
*/
|
|
107
|
+
declare function buildItemPayload(item: PmItem, event: EventKind, format: MessageFormat, opts?: BlockKitOptions): SlackPayload;
|
|
108
|
+
/** Fields we read off each stored item for digest purposes. */
|
|
109
|
+
interface DigestItem extends PmItem {
|
|
110
|
+
created_at?: string;
|
|
111
|
+
updated_at?: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Minimal parser for a stored pm item file. Handles the toon scalar form
|
|
115
|
+
* (`key: value`, optionally quoted) and JSON. Only top-level scalar fields are
|
|
116
|
+
* extracted; nested/array sections are ignored. Returns null when no id found.
|
|
117
|
+
*/
|
|
118
|
+
declare function parseStoredItem(content: string, ext: string): DigestItem | null;
|
|
119
|
+
/**
|
|
120
|
+
* Resolve a `--since <date>` / `--days <n>` window into an epoch-ms cutoff.
|
|
121
|
+
* `since` (ISO date or datetime) wins when both are given; otherwise `days`
|
|
122
|
+
* back from `now`. Defaults to 7 days. Returns the cutoff in ms.
|
|
123
|
+
*/
|
|
124
|
+
declare function resolveWindow(since: string | undefined, days: number | undefined, now?: number): {
|
|
125
|
+
cutoffMs: number;
|
|
126
|
+
label: string;
|
|
127
|
+
};
|
|
128
|
+
type DigestBucket = "created" | "closed" | "blocked" | "in_progress";
|
|
129
|
+
interface DigestSummary {
|
|
130
|
+
windowLabel: string;
|
|
131
|
+
cutoffMs: number;
|
|
132
|
+
counts: Record<DigestBucket, number>;
|
|
133
|
+
buckets: Record<DigestBucket, DigestItem[]>;
|
|
134
|
+
total: number;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Aggregate store items into digest buckets for the window. An item counts as:
|
|
138
|
+
* - created if created_at >= cutoff
|
|
139
|
+
* - closed if it is in a closed/done status AND updated_at >= cutoff
|
|
140
|
+
* - blocked if status === blocked AND updated_at >= cutoff
|
|
141
|
+
* - in_progress if status === in_progress AND updated_at >= cutoff
|
|
142
|
+
* An item may appear in multiple buckets (e.g. created and blocked).
|
|
143
|
+
*/
|
|
144
|
+
declare function aggregateDigest(items: DigestItem[], cutoffMs: number, windowLabel: string): DigestSummary;
|
|
145
|
+
declare function buildDigestText(summary: DigestSummary, channel?: string): string;
|
|
146
|
+
declare function buildDigestBlockKit(summary: DigestSummary, channel?: string): {
|
|
147
|
+
blocks: SlackBlock[];
|
|
148
|
+
fallback: string;
|
|
149
|
+
};
|
|
150
|
+
declare function buildDigestPayload(summary: DigestSummary, format: MessageFormat, channel?: string): SlackPayload;
|
|
53
151
|
declare function detectEvent(ctx: AfterCommandHookContext): EventKind | null;
|
|
54
152
|
declare function extractItem(ctx: AfterCommandHookContext): PmItem | null;
|
|
55
153
|
declare const _default: {
|
|
@@ -60,11 +158,22 @@ declare const _default: {
|
|
|
60
158
|
export default _default;
|
|
61
159
|
export declare const __test__: {
|
|
62
160
|
buildItemBlockKit: typeof buildItemBlockKit;
|
|
161
|
+
buildItemPayload: typeof buildItemPayload;
|
|
63
162
|
buildTextMessage: typeof buildTextMessage;
|
|
64
163
|
parseEvents: typeof parseEvents;
|
|
164
|
+
parseFormat: typeof parseFormat;
|
|
165
|
+
parseRoutes: typeof parseRoutes;
|
|
166
|
+
ruleMatches: typeof ruleMatches;
|
|
167
|
+
selectRoute: typeof selectRoute;
|
|
65
168
|
detectEvent: typeof detectEvent;
|
|
66
169
|
extractItem: typeof extractItem;
|
|
67
170
|
meetsMinPriority: typeof meetsMinPriority;
|
|
171
|
+
parseStoredItem: typeof parseStoredItem;
|
|
172
|
+
resolveWindow: typeof resolveWindow;
|
|
173
|
+
aggregateDigest: typeof aggregateDigest;
|
|
174
|
+
buildDigestText: typeof buildDigestText;
|
|
175
|
+
buildDigestBlockKit: typeof buildDigestBlockKit;
|
|
176
|
+
buildDigestPayload: typeof buildDigestPayload;
|
|
68
177
|
EXIT_CODE: {
|
|
69
178
|
readonly GENERIC_FAILURE: 1;
|
|
70
179
|
readonly USAGE: 2;
|
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":"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"}
|
package/dist/index.js
CHANGED
|
@@ -14,8 +14,17 @@
|
|
|
14
14
|
* PM_SLACK_CHANNEL (optional) Override channel, e.g. #pm-alerts
|
|
15
15
|
* PM_SLACK_MIN_PRIORITY (optional) Minimum priority to notify (1=critical … 4=low), default 1 (critical only; set 4 for all)
|
|
16
16
|
* PM_SLACK_EVENTS (optional) Comma-separated subset of hook events: create,close,block (default: all)
|
|
17
|
+
* PM_SLACK_FORMAT (optional) Default notification format: "blockkit" (default) or "text"
|
|
18
|
+
* PM_SLACK_ROUTES (optional) JSON array of routing rules to send specific
|
|
19
|
+
* events/types/statuses to different webhooks/channels.
|
|
20
|
+
* Each rule: { "match": "<selector>", "webhook"?: "...", "channel"?: "..." }
|
|
21
|
+
* Selector forms: an event ("create"|"close"|"block"),
|
|
22
|
+
* "type:<itemType>" (case-insensitive), or "status:<status>".
|
|
23
|
+
* First matching rule wins; unset fields fall back to the defaults.
|
|
17
24
|
*/
|
|
18
25
|
import https from "node:https";
|
|
26
|
+
import fs from "node:fs";
|
|
27
|
+
import path from "node:path";
|
|
19
28
|
const defineExtension = ((extension) => extension);
|
|
20
29
|
// ---------------------------------------------------------------------------
|
|
21
30
|
// EXIT_CODE / CommandError (re-implemented locally)
|
|
@@ -87,25 +96,127 @@ function parseEvents(spec) {
|
|
|
87
96
|
.filter((e) => ALL_EVENTS.includes(e));
|
|
88
97
|
return parsed.length > 0 ? new Set(parsed) : new Set(ALL_EVENTS);
|
|
89
98
|
}
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
// Format parsing
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
const ALL_FORMATS = ["blockkit", "text"];
|
|
103
|
+
/**
|
|
104
|
+
* Normalize a format spec to a known MessageFormat. Accepts a few friendly
|
|
105
|
+
* aliases ("block"/"blocks" → blockkit, "plain"/"txt" → text). Falls back to
|
|
106
|
+
* the supplied default when the spec is empty or unrecognized.
|
|
107
|
+
*/
|
|
108
|
+
function parseFormat(spec, fallback = "blockkit") {
|
|
109
|
+
if (!spec)
|
|
110
|
+
return fallback;
|
|
111
|
+
const v = spec.trim().toLowerCase();
|
|
112
|
+
if (v === "blockkit" || v === "block" || v === "blocks" || v === "rich")
|
|
113
|
+
return "blockkit";
|
|
114
|
+
if (v === "text" || v === "plain" || v === "txt")
|
|
115
|
+
return "text";
|
|
116
|
+
return fallback;
|
|
117
|
+
}
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
// Routing
|
|
120
|
+
//
|
|
121
|
+
// PM_SLACK_ROUTES is an optional JSON array of rules that send specific events,
|
|
122
|
+
// item types, or statuses to a different webhook/channel. Routing is purely
|
|
123
|
+
// additive: with no rules configured, behavior is identical to before.
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
function parseRoutes(spec) {
|
|
126
|
+
if (!spec || !spec.trim())
|
|
127
|
+
return [];
|
|
128
|
+
let raw;
|
|
129
|
+
try {
|
|
130
|
+
raw = JSON.parse(spec);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
console.error("[pm-slack] PM_SLACK_ROUTES is not valid JSON — routing disabled");
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
if (!Array.isArray(raw)) {
|
|
137
|
+
console.error("[pm-slack] PM_SLACK_ROUTES must be a JSON array — routing disabled");
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
const rules = [];
|
|
141
|
+
for (const entry of raw) {
|
|
142
|
+
if (!entry || typeof entry !== "object")
|
|
143
|
+
continue;
|
|
144
|
+
const e = entry;
|
|
145
|
+
const match = typeof e.match === "string" ? e.match.trim() : "";
|
|
146
|
+
if (!match)
|
|
147
|
+
continue;
|
|
148
|
+
const webhook = typeof e.webhook === "string" && e.webhook.trim() ? e.webhook.trim() : undefined;
|
|
149
|
+
const channel = typeof e.channel === "string" && e.channel.trim() ? e.channel.trim() : undefined;
|
|
150
|
+
if (!webhook && !channel)
|
|
151
|
+
continue; // a rule with no override is meaningless
|
|
152
|
+
rules.push({ match, webhook, channel });
|
|
153
|
+
}
|
|
154
|
+
return rules;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Does a single route rule match this event/item? Selector forms:
|
|
158
|
+
* - bare event name: "create" | "close" | "block"
|
|
159
|
+
* - "type:<itemType>" (case-insensitive on item.type)
|
|
160
|
+
* - "status:<status>" (case-insensitive on item.status)
|
|
161
|
+
* - "*" / "all" (matches everything — useful as a catch-all)
|
|
162
|
+
*/
|
|
163
|
+
function ruleMatches(rule, event, item) {
|
|
164
|
+
const sel = rule.match.toLowerCase();
|
|
165
|
+
if (sel === "*" || sel === "all")
|
|
166
|
+
return true;
|
|
167
|
+
if (sel.startsWith("type:")) {
|
|
168
|
+
return (item.type ?? "").toLowerCase() === sel.slice("type:".length).trim();
|
|
169
|
+
}
|
|
170
|
+
if (sel.startsWith("status:")) {
|
|
171
|
+
return (item.status ?? "").toLowerCase() === sel.slice("status:".length).trim();
|
|
172
|
+
}
|
|
173
|
+
return sel === event;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Resolve the destination (webhook + channel) for an event/item given the
|
|
177
|
+
* configured routes and the default webhook/channel. First matching rule wins;
|
|
178
|
+
* any field a rule omits falls back to the default. Returns null only when no
|
|
179
|
+
* webhook can be resolved at all.
|
|
180
|
+
*/
|
|
181
|
+
function selectRoute(event, item, routes, defaultWebhook, defaultChannel) {
|
|
182
|
+
for (const rule of routes) {
|
|
183
|
+
if (ruleMatches(rule, event, item)) {
|
|
184
|
+
const webhookUrl = rule.webhook ?? defaultWebhook;
|
|
185
|
+
if (!webhookUrl)
|
|
186
|
+
return null;
|
|
187
|
+
return { webhookUrl, channel: rule.channel ?? defaultChannel };
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (!defaultWebhook)
|
|
191
|
+
return null;
|
|
192
|
+
return { webhookUrl: defaultWebhook, channel: defaultChannel };
|
|
193
|
+
}
|
|
90
194
|
function loadConfig() {
|
|
91
195
|
const webhookUrl = process.env.PM_SLACK_WEBHOOK ?? "";
|
|
92
|
-
|
|
196
|
+
const routes = parseRoutes(process.env.PM_SLACK_ROUTES);
|
|
197
|
+
// A default webhook is not strictly required if routing rules carry their own
|
|
198
|
+
// webhook(s); only bail out when there is no webhook source at all.
|
|
199
|
+
const routesHaveWebhook = routes.some((r) => r.webhook);
|
|
200
|
+
if (!webhookUrl && !routesHaveWebhook) {
|
|
93
201
|
console.error("[pm-slack] PM_SLACK_WEBHOOK not set — notifications disabled");
|
|
94
202
|
return null;
|
|
95
203
|
}
|
|
96
|
-
// Validate URL
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
204
|
+
// Validate the default URL when present (route webhooks are validated lazily).
|
|
205
|
+
if (webhookUrl) {
|
|
206
|
+
try {
|
|
207
|
+
new URL(webhookUrl);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
console.error("[pm-slack] PM_SLACK_WEBHOOK is not a valid URL — notifications disabled");
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
103
213
|
}
|
|
104
214
|
const channel = process.env.PM_SLACK_CHANNEL?.trim() || undefined;
|
|
105
215
|
const rawPriority = parseInt(process.env.PM_SLACK_MIN_PRIORITY ?? "1", 10);
|
|
106
216
|
const minPriority = rawPriority >= 1 && rawPriority <= 4 ? rawPriority : 1;
|
|
107
217
|
const events = parseEvents(process.env.PM_SLACK_EVENTS);
|
|
108
|
-
|
|
218
|
+
const format = parseFormat(process.env.PM_SLACK_FORMAT);
|
|
219
|
+
return { webhookUrl, channel, minPriority, events, format, routes };
|
|
109
220
|
}
|
|
110
221
|
// ---------------------------------------------------------------------------
|
|
111
222
|
// Priority helpers
|
|
@@ -203,6 +314,29 @@ function buildItemBlockKit(item, event, opts = {}) {
|
|
|
203
314
|
const fallback = buildTextMessage(item, event, opts.channel);
|
|
204
315
|
return { blocks, fallback };
|
|
205
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* Build a ready-to-post SlackPayload for an item event in the requested format.
|
|
319
|
+
* - "blockkit": rich Block Kit blocks + plain-text fallback in `text`.
|
|
320
|
+
* - "text": plain mrkdwn only (no `blocks`), for minimal/legacy channels.
|
|
321
|
+
*/
|
|
322
|
+
function buildItemPayload(item, event, format, opts = {}) {
|
|
323
|
+
if (format === "text") {
|
|
324
|
+
const text = buildTextMessage(item, event, opts.channel);
|
|
325
|
+
const body = opts.note && opts.note.trim() ? `${text}\n${opts.note.trim()}` : text;
|
|
326
|
+
return {
|
|
327
|
+
text: body,
|
|
328
|
+
mrkdwn: true,
|
|
329
|
+
...(opts.channel ? { channel: opts.channel } : {}),
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
const { blocks, fallback } = buildItemBlockKit(item, event, opts);
|
|
333
|
+
return {
|
|
334
|
+
text: fallback,
|
|
335
|
+
blocks,
|
|
336
|
+
mrkdwn: true,
|
|
337
|
+
...(opts.channel ? { channel: opts.channel } : {}),
|
|
338
|
+
};
|
|
339
|
+
}
|
|
206
340
|
// ---------------------------------------------------------------------------
|
|
207
341
|
// Slack HTTP POST
|
|
208
342
|
// ---------------------------------------------------------------------------
|
|
@@ -246,6 +380,245 @@ function postToSlack(webhookUrl, payload) {
|
|
|
246
380
|
});
|
|
247
381
|
}
|
|
248
382
|
// ---------------------------------------------------------------------------
|
|
383
|
+
// Digest: reading the pm store + activity aggregation
|
|
384
|
+
//
|
|
385
|
+
// The digest reads items directly from the pm store (`<pm_root>/<dir>/*.toon`
|
|
386
|
+
// and `*.json`) using a tiny scalar parser — we only need a handful of
|
|
387
|
+
// top-level fields (id/title/type/status/priority/timestamps/reasons). This
|
|
388
|
+
// avoids a runtime dependency on the pm SDK service layer (registerService is
|
|
389
|
+
// limited and corrupts output, #96) and keeps the package dependency-free.
|
|
390
|
+
// ---------------------------------------------------------------------------
|
|
391
|
+
/** Directories under a pm root that hold items, by convention. */
|
|
392
|
+
const ITEM_DIRS = ["tasks", "features", "issues", "epics", "stories", "bugs", "decisions", "items"];
|
|
393
|
+
/**
|
|
394
|
+
* Minimal parser for a stored pm item file. Handles the toon scalar form
|
|
395
|
+
* (`key: value`, optionally quoted) and JSON. Only top-level scalar fields are
|
|
396
|
+
* extracted; nested/array sections are ignored. Returns null when no id found.
|
|
397
|
+
*/
|
|
398
|
+
function parseStoredItem(content, ext) {
|
|
399
|
+
if (ext === ".json") {
|
|
400
|
+
try {
|
|
401
|
+
const obj = JSON.parse(content);
|
|
402
|
+
const node = (obj.item ?? obj);
|
|
403
|
+
if (typeof node.id !== "string")
|
|
404
|
+
return null;
|
|
405
|
+
return node;
|
|
406
|
+
}
|
|
407
|
+
catch {
|
|
408
|
+
return null;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
// toon: line-oriented `key: value`. Stop reading a key when it introduces a
|
|
412
|
+
// block/array (e.g. `notes[1]{...}:`); we only want flat scalars.
|
|
413
|
+
const out = {};
|
|
414
|
+
for (const rawLine of content.split(/\r?\n/)) {
|
|
415
|
+
const line = rawLine;
|
|
416
|
+
if (!line || /^\s/.test(line))
|
|
417
|
+
continue; // skip indented (nested) lines
|
|
418
|
+
const m = /^([A-Za-z_][A-Za-z0-9_]*)\s*:\s*(.*)$/.exec(line);
|
|
419
|
+
if (!m)
|
|
420
|
+
continue;
|
|
421
|
+
const key = m[1];
|
|
422
|
+
let value = m[2].trim();
|
|
423
|
+
if (value === "" || value === '""') {
|
|
424
|
+
out[key] = "";
|
|
425
|
+
continue;
|
|
426
|
+
}
|
|
427
|
+
// Strip surrounding double quotes (toon quotes strings with embedded chars).
|
|
428
|
+
if (value.startsWith('"') && value.endsWith('"') && value.length >= 2) {
|
|
429
|
+
value = value.slice(1, -1).replace(/\\"/g, '"');
|
|
430
|
+
}
|
|
431
|
+
out[key] = value;
|
|
432
|
+
}
|
|
433
|
+
if (typeof out.id !== "string")
|
|
434
|
+
return null;
|
|
435
|
+
if (typeof out.priority === "string" && /^\d+$/.test(out.priority)) {
|
|
436
|
+
out.priority = parseInt(out.priority, 10);
|
|
437
|
+
}
|
|
438
|
+
return out;
|
|
439
|
+
}
|
|
440
|
+
/** Read all items from a pm root. Best-effort: unreadable files are skipped. */
|
|
441
|
+
function readStoreItems(pmRoot) {
|
|
442
|
+
const items = [];
|
|
443
|
+
for (const dir of ITEM_DIRS) {
|
|
444
|
+
const full = path.join(pmRoot, dir);
|
|
445
|
+
let entries;
|
|
446
|
+
try {
|
|
447
|
+
entries = fs.readdirSync(full);
|
|
448
|
+
}
|
|
449
|
+
catch {
|
|
450
|
+
continue;
|
|
451
|
+
}
|
|
452
|
+
for (const name of entries) {
|
|
453
|
+
const ext = path.extname(name);
|
|
454
|
+
if (ext !== ".toon" && ext !== ".json")
|
|
455
|
+
continue;
|
|
456
|
+
try {
|
|
457
|
+
const content = fs.readFileSync(path.join(full, name), "utf8");
|
|
458
|
+
const item = parseStoredItem(content, ext);
|
|
459
|
+
if (item)
|
|
460
|
+
items.push(item);
|
|
461
|
+
}
|
|
462
|
+
catch {
|
|
463
|
+
// skip unreadable item
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
return items;
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Resolve a `--since <date>` / `--days <n>` window into an epoch-ms cutoff.
|
|
471
|
+
* `since` (ISO date or datetime) wins when both are given; otherwise `days`
|
|
472
|
+
* back from `now`. Defaults to 7 days. Returns the cutoff in ms.
|
|
473
|
+
*/
|
|
474
|
+
function resolveWindow(since, days, now = Date.now()) {
|
|
475
|
+
if (since) {
|
|
476
|
+
const t = Date.parse(since);
|
|
477
|
+
if (!Number.isNaN(t)) {
|
|
478
|
+
return { cutoffMs: t, label: `since ${since}` };
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
const d = days !== undefined && Number.isFinite(days) && days > 0 ? Math.floor(days) : 7;
|
|
482
|
+
return { cutoffMs: now - d * 24 * 60 * 60 * 1000, label: `last ${d} day${d === 1 ? "" : "s"}` };
|
|
483
|
+
}
|
|
484
|
+
function statusIsClosed(status) {
|
|
485
|
+
const s = (status ?? "").toLowerCase();
|
|
486
|
+
return s === "closed" || s === "done" || s === "resolved" || s === "complete" || s === "completed";
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Aggregate store items into digest buckets for the window. An item counts as:
|
|
490
|
+
* - created if created_at >= cutoff
|
|
491
|
+
* - closed if it is in a closed/done status AND updated_at >= cutoff
|
|
492
|
+
* - blocked if status === blocked AND updated_at >= cutoff
|
|
493
|
+
* - in_progress if status === in_progress AND updated_at >= cutoff
|
|
494
|
+
* An item may appear in multiple buckets (e.g. created and blocked).
|
|
495
|
+
*/
|
|
496
|
+
function aggregateDigest(items, cutoffMs, windowLabel) {
|
|
497
|
+
const buckets = {
|
|
498
|
+
created: [],
|
|
499
|
+
closed: [],
|
|
500
|
+
blocked: [],
|
|
501
|
+
in_progress: [],
|
|
502
|
+
};
|
|
503
|
+
for (const item of items) {
|
|
504
|
+
const created = item.created_at ? Date.parse(item.created_at) : NaN;
|
|
505
|
+
const updated = item.updated_at ? Date.parse(item.updated_at) : created;
|
|
506
|
+
const status = (item.status ?? "").toLowerCase();
|
|
507
|
+
if (!Number.isNaN(created) && created >= cutoffMs)
|
|
508
|
+
buckets.created.push(item);
|
|
509
|
+
if (statusIsClosed(status) && !Number.isNaN(updated) && updated >= cutoffMs)
|
|
510
|
+
buckets.closed.push(item);
|
|
511
|
+
if (status === "blocked" && !Number.isNaN(updated) && updated >= cutoffMs)
|
|
512
|
+
buckets.blocked.push(item);
|
|
513
|
+
if (status === "in_progress" && !Number.isNaN(updated) && updated >= cutoffMs)
|
|
514
|
+
buckets.in_progress.push(item);
|
|
515
|
+
}
|
|
516
|
+
const counts = {
|
|
517
|
+
created: buckets.created.length,
|
|
518
|
+
closed: buckets.closed.length,
|
|
519
|
+
blocked: buckets.blocked.length,
|
|
520
|
+
in_progress: buckets.in_progress.length,
|
|
521
|
+
};
|
|
522
|
+
const total = counts.created + counts.closed + counts.blocked + counts.in_progress;
|
|
523
|
+
return { windowLabel, cutoffMs, counts, buckets, total };
|
|
524
|
+
}
|
|
525
|
+
const DIGEST_BUCKET_META = {
|
|
526
|
+
created: { label: "Created", emoji: "🆕" },
|
|
527
|
+
closed: { label: "Closed", emoji: "✅" },
|
|
528
|
+
blocked: { label: "Blocked", emoji: "🚫" },
|
|
529
|
+
in_progress: { label: "In progress", emoji: "🔄" },
|
|
530
|
+
};
|
|
531
|
+
const DIGEST_ORDER = ["created", "closed", "in_progress", "blocked"];
|
|
532
|
+
/** A short "id title" line per item, capped so the digest stays readable. */
|
|
533
|
+
function digestItemLines(items, max = 5) {
|
|
534
|
+
const lines = items.slice(0, max).map((i) => `• ${i.id} — ${i.title ?? "(untitled)"}`);
|
|
535
|
+
if (items.length > max)
|
|
536
|
+
lines.push(`• …and ${items.length - max} more`);
|
|
537
|
+
return lines;
|
|
538
|
+
}
|
|
539
|
+
function buildDigestText(summary, channel) {
|
|
540
|
+
const head = `*pm activity digest* (${summary.windowLabel}) — ${summary.total} update${summary.total === 1 ? "" : "s"}`;
|
|
541
|
+
const parts = [head];
|
|
542
|
+
for (const bucket of DIGEST_ORDER) {
|
|
543
|
+
const items = summary.buckets[bucket];
|
|
544
|
+
if (items.length === 0)
|
|
545
|
+
continue;
|
|
546
|
+
const meta = DIGEST_BUCKET_META[bucket];
|
|
547
|
+
parts.push(`\n${meta.emoji} *${meta.label}* (${items.length})`);
|
|
548
|
+
parts.push(digestItemLines(items).join("\n"));
|
|
549
|
+
}
|
|
550
|
+
if (summary.total === 0)
|
|
551
|
+
parts.push("\n_No activity in this window._");
|
|
552
|
+
if (channel)
|
|
553
|
+
parts.push(`\n_Channel: ${channel}_`);
|
|
554
|
+
return parts.join("\n");
|
|
555
|
+
}
|
|
556
|
+
function buildDigestBlockKit(summary, channel) {
|
|
557
|
+
const blocks = [];
|
|
558
|
+
blocks.push({
|
|
559
|
+
type: "header",
|
|
560
|
+
text: { type: "plain_text", text: `📊 pm activity digest`, emoji: true },
|
|
561
|
+
});
|
|
562
|
+
blocks.push({
|
|
563
|
+
type: "context",
|
|
564
|
+
elements: [
|
|
565
|
+
{
|
|
566
|
+
type: "mrkdwn",
|
|
567
|
+
text: `${summary.windowLabel} · ${summary.total} update${summary.total === 1 ? "" : "s"}`,
|
|
568
|
+
},
|
|
569
|
+
],
|
|
570
|
+
});
|
|
571
|
+
// Counts grid.
|
|
572
|
+
const fields = DIGEST_ORDER.map((bucket) => {
|
|
573
|
+
const meta = DIGEST_BUCKET_META[bucket];
|
|
574
|
+
return { type: "mrkdwn", text: `${meta.emoji} *${meta.label}:*\n${summary.counts[bucket]}` };
|
|
575
|
+
});
|
|
576
|
+
blocks.push({ type: "section", fields });
|
|
577
|
+
for (const bucket of DIGEST_ORDER) {
|
|
578
|
+
const items = summary.buckets[bucket];
|
|
579
|
+
if (items.length === 0)
|
|
580
|
+
continue;
|
|
581
|
+
const meta = DIGEST_BUCKET_META[bucket];
|
|
582
|
+
blocks.push({ type: "divider" });
|
|
583
|
+
blocks.push({
|
|
584
|
+
type: "section",
|
|
585
|
+
text: {
|
|
586
|
+
type: "mrkdwn",
|
|
587
|
+
text: `${meta.emoji} *${meta.label}* (${items.length})\n${digestItemLines(items).join("\n")}`,
|
|
588
|
+
},
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
if (summary.total === 0) {
|
|
592
|
+
blocks.push({
|
|
593
|
+
type: "section",
|
|
594
|
+
text: { type: "mrkdwn", text: "_No activity in this window._" },
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
const footerBits = [`pm digest · ${summary.windowLabel}`, channel ? `channel ${channel}` : null].filter(Boolean);
|
|
598
|
+
blocks.push({
|
|
599
|
+
type: "context",
|
|
600
|
+
elements: [{ type: "mrkdwn", text: `🤖 pm-slack · ${footerBits.join(" · ")}` }],
|
|
601
|
+
});
|
|
602
|
+
const fallback = buildDigestText(summary, channel);
|
|
603
|
+
return { blocks, fallback };
|
|
604
|
+
}
|
|
605
|
+
function buildDigestPayload(summary, format, channel) {
|
|
606
|
+
if (format === "text") {
|
|
607
|
+
return {
|
|
608
|
+
text: buildDigestText(summary, channel),
|
|
609
|
+
mrkdwn: true,
|
|
610
|
+
...(channel ? { channel } : {}),
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
const { blocks, fallback } = buildDigestBlockKit(summary, channel);
|
|
614
|
+
return {
|
|
615
|
+
text: fallback,
|
|
616
|
+
blocks,
|
|
617
|
+
mrkdwn: true,
|
|
618
|
+
...(channel ? { channel } : {}),
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
// ---------------------------------------------------------------------------
|
|
249
622
|
// Event detection (afterCommand hook)
|
|
250
623
|
// ---------------------------------------------------------------------------
|
|
251
624
|
/** Commands that create a new item */
|
|
@@ -289,7 +662,7 @@ function extractItem(ctx) {
|
|
|
289
662
|
// ---------------------------------------------------------------------------
|
|
290
663
|
export default defineExtension({
|
|
291
664
|
name: "pm-slack",
|
|
292
|
-
version: "2026.6.
|
|
665
|
+
version: "2026.6.3",
|
|
293
666
|
activate(api) {
|
|
294
667
|
// -----------------------------------------------------------------------
|
|
295
668
|
// afterCommand hook — fires after every pm-cli command completes.
|
|
@@ -322,15 +695,16 @@ export default defineExtension({
|
|
|
322
695
|
console.error(`[pm-slack] Item priority ${item.priority} below minimum ${config.minPriority} — skipping`);
|
|
323
696
|
return;
|
|
324
697
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
channel:
|
|
698
|
+
// Resolve destination via routing rules (falls back to defaults).
|
|
699
|
+
const target = selectRoute(event, item, config.routes, config.webhookUrl, config.channel);
|
|
700
|
+
if (!target) {
|
|
701
|
+
console.error(`[pm-slack] No webhook resolved for event "${event}" — skipping`);
|
|
702
|
+
return;
|
|
703
|
+
}
|
|
704
|
+
const payload = buildItemPayload(item, event, config.format, {
|
|
705
|
+
channel: target.channel,
|
|
333
706
|
});
|
|
707
|
+
await postToSlack(target.webhookUrl, payload);
|
|
334
708
|
console.error(`[pm-slack] Notification sent for event "${event}" on item ${item.id}`);
|
|
335
709
|
}
|
|
336
710
|
catch (err) {
|
|
@@ -387,8 +761,10 @@ export default defineExtension({
|
|
|
387
761
|
{ long: "--channel", value_name: "name", description: "Channel name shown in the message (e.g. #pm-alerts). Overrides PM_SLACK_CHANNEL." },
|
|
388
762
|
{ long: "--thread", value_name: "ts", description: "Slack thread timestamp (thread_ts) to reply into a thread" },
|
|
389
763
|
{ long: "--on", value_name: "events", description: "Comma list of lifecycle events for the message template (create,close,block). Default: create" },
|
|
764
|
+
{ long: "--format", value_name: "fmt", description: "Message format: blockkit (default) or text. Overrides PM_SLACK_FORMAT." },
|
|
390
765
|
{ 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
|
|
766
|
+
{ long: "--dry-run", description: "Print the message and payload without posting to Slack" },
|
|
767
|
+
{ long: "--json", description: "Emit the result/payload as JSON (machine-readable)" },
|
|
392
768
|
],
|
|
393
769
|
async run(ctx) {
|
|
394
770
|
const options = ctx.options ?? {};
|
|
@@ -396,6 +772,8 @@ export default defineExtension({
|
|
|
396
772
|
const webhookUrl = readStrOption(options, "webhook") ?? process.env.PM_SLACK_WEBHOOK ?? "";
|
|
397
773
|
const channel = (readStrOption(options, "channel") ?? process.env.PM_SLACK_CHANNEL?.trim()) || undefined;
|
|
398
774
|
const threadTs = readStrOption(options, "thread");
|
|
775
|
+
const asJson = ctx.global?.json === true || readBoolOption(options, "json");
|
|
776
|
+
const format = parseFormat(readStrOption(options, "format") ?? process.env.PM_SLACK_FORMAT);
|
|
399
777
|
// `--on` selects the message template. First event wins for the header verb.
|
|
400
778
|
const events = parseEvents(readStrOption(options, "on") ?? "create");
|
|
401
779
|
const event = (ALL_EVENTS.find((e) => events.has(e)) ?? "create");
|
|
@@ -404,27 +782,25 @@ export default defineExtension({
|
|
|
404
782
|
if (!title) {
|
|
405
783
|
throw new CommandError("Provide a --title or --text to send (e.g. `pm slack notify --text 'hello'`)", EXIT_CODE.USAGE);
|
|
406
784
|
}
|
|
407
|
-
// Synthesize a minimal item from the flags so we can reuse the
|
|
408
|
-
//
|
|
785
|
+
// Synthesize a minimal item from the flags so we can reuse the
|
|
786
|
+
// message builder. This command is for ad-hoc posts, not item lookups.
|
|
409
787
|
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
788
|
const payload = {
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
789
|
+
...buildItemPayload(item, event, format, {
|
|
790
|
+
channel,
|
|
791
|
+
note: text && text !== title ? text : undefined,
|
|
792
|
+
}),
|
|
419
793
|
...(threadTs ? { thread_ts: threadTs } : {}),
|
|
420
794
|
};
|
|
421
795
|
if (dryRun) {
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
796
|
+
if (!asJson) {
|
|
797
|
+
console.error("--- DRY RUN (message not posted) ---");
|
|
798
|
+
process.stdout.write(payload.text + "\n");
|
|
799
|
+
console.error(`--- ${format} payload ---`);
|
|
800
|
+
process.stdout.write(JSON.stringify(payload, null, 2) + "\n");
|
|
801
|
+
console.error("--- END ---");
|
|
802
|
+
}
|
|
803
|
+
return { dryRun: true, event, format, channel, thread_ts: threadTs, payload };
|
|
428
804
|
}
|
|
429
805
|
if (!webhookUrl) {
|
|
430
806
|
// Graceful no-op: warn and exit 0 so a missing webhook never blocks
|
|
@@ -445,17 +821,146 @@ export default defineExtension({
|
|
|
445
821
|
return { posted: true, event, channel, thread_ts: threadTs };
|
|
446
822
|
},
|
|
447
823
|
});
|
|
824
|
+
// ---------------------------------------------------------------------
|
|
825
|
+
// command — `pm slack test` : build and PRINT a sample notification in
|
|
826
|
+
// the chosen format WITHOUT posting. Fully offline; the package is
|
|
827
|
+
// testable with no Slack credentials. Honors --json for machine reads.
|
|
828
|
+
// ---------------------------------------------------------------------
|
|
829
|
+
api.registerCommand({
|
|
830
|
+
name: "slack test",
|
|
831
|
+
description: "Preview a sample pm-slack notification in the chosen format without posting (offline)",
|
|
832
|
+
intent: "Preview Slack notification formatting offline (no webhook, no network)",
|
|
833
|
+
examples: [
|
|
834
|
+
"pm slack test --format blockkit",
|
|
835
|
+
"pm slack test --format text --on close",
|
|
836
|
+
"pm slack test --on block --json",
|
|
837
|
+
],
|
|
838
|
+
flags: [
|
|
839
|
+
{ long: "--format", value_name: "fmt", description: "Message format: blockkit (default) or text. Overrides PM_SLACK_FORMAT." },
|
|
840
|
+
{ long: "--on", value_name: "event", description: "Lifecycle event to preview (create,close,block). Default: create" },
|
|
841
|
+
{ long: "--title", value_name: "title", description: "Sample item title (default: a representative example)" },
|
|
842
|
+
{ long: "--channel", value_name: "name", description: "Channel hint to show in the preview (overrides PM_SLACK_CHANNEL)" },
|
|
843
|
+
{ long: "--json", description: "Emit the preview payload as JSON" },
|
|
844
|
+
{ long: "--dry-run", description: "Accepted for symmetry; this command never posts." },
|
|
845
|
+
],
|
|
846
|
+
async run(ctx) {
|
|
847
|
+
const options = ctx.options ?? {};
|
|
848
|
+
// `--json` is consumed by pm as a global flag, so prefer global.json;
|
|
849
|
+
// also honor a local --json for robustness across runtimes.
|
|
850
|
+
const asJson = ctx.global?.json === true || readBoolOption(options, "json");
|
|
851
|
+
const format = parseFormat(readStrOption(options, "format") ?? process.env.PM_SLACK_FORMAT);
|
|
852
|
+
const channel = (readStrOption(options, "channel") ?? process.env.PM_SLACK_CHANNEL?.trim()) || undefined;
|
|
853
|
+
const events = parseEvents(readStrOption(options, "on") ?? "create");
|
|
854
|
+
const event = (ALL_EVENTS.find((e) => events.has(e)) ?? "create");
|
|
855
|
+
// A representative sample item per event so the preview is realistic.
|
|
856
|
+
const sample = {
|
|
857
|
+
create: { id: "pm-1a2b", title: readStrOption(options, "title") ?? "Add OAuth login flow", type: "Feature", priority: 2, status: "open", author: "alice" },
|
|
858
|
+
close: { id: "pm-3c4d", title: readStrOption(options, "title") ?? "Fix login redirect bug", type: "Issue", priority: 1, status: "closed", author: "bob", close_reason: "Fixed in commit abc123" },
|
|
859
|
+
block: { id: "pm-5e6f", title: readStrOption(options, "title") ?? "Dashboard redesign", type: "Epic", priority: 2, status: "blocked", author: "carol", blocked_reason: "Waiting on design approval" },
|
|
860
|
+
};
|
|
861
|
+
const item = sample[event];
|
|
862
|
+
const payload = buildItemPayload(item, event, format, { channel });
|
|
863
|
+
// In JSON mode, pm renders the returned object — don't also write to
|
|
864
|
+
// stdout (that would corrupt the JSON stream). In human mode, print a
|
|
865
|
+
// readable preview to stdout/stderr.
|
|
866
|
+
if (!asJson) {
|
|
867
|
+
console.error(`--- PREVIEW (${format}, event=${event}) — nothing posted ---`);
|
|
868
|
+
process.stdout.write(payload.text + "\n");
|
|
869
|
+
console.error(`--- ${format} payload ---`);
|
|
870
|
+
process.stdout.write(JSON.stringify(payload, null, 2) + "\n");
|
|
871
|
+
console.error("--- END ---");
|
|
872
|
+
}
|
|
873
|
+
return { preview: true, event, format, channel, payload };
|
|
874
|
+
},
|
|
875
|
+
});
|
|
876
|
+
// ---------------------------------------------------------------------
|
|
877
|
+
// command — `pm slack digest` : summarize recent activity (created /
|
|
878
|
+
// closed / blocked / in-progress) over a --since/--days window into a
|
|
879
|
+
// single notification. Reads the pm store directly; --dry-run prints
|
|
880
|
+
// without posting.
|
|
881
|
+
// ---------------------------------------------------------------------
|
|
882
|
+
api.registerCommand({
|
|
883
|
+
name: "slack digest",
|
|
884
|
+
description: "Post (or preview) a single summary of recent pm activity over a time window",
|
|
885
|
+
intent: "Summarize recent pm activity (created/closed/blocked/in-progress) into one Slack message",
|
|
886
|
+
examples: [
|
|
887
|
+
"pm slack digest --days 7 --dry-run",
|
|
888
|
+
"pm slack digest --since 2026-06-01 --format text --dry-run",
|
|
889
|
+
"pm slack digest --days 1 --format blockkit --json --dry-run",
|
|
890
|
+
],
|
|
891
|
+
flags: [
|
|
892
|
+
{ long: "--since", value_name: "date", description: "Only include activity at/after this ISO date (e.g. 2026-06-01)" },
|
|
893
|
+
{ long: "--days", value_name: "n", description: "Look back N days from now (default 7; ignored when --since is given)" },
|
|
894
|
+
{ long: "--format", value_name: "fmt", description: "Message format: blockkit (default) or text. Overrides PM_SLACK_FORMAT." },
|
|
895
|
+
{ long: "--channel", value_name: "name", description: "Channel to post to (overrides PM_SLACK_CHANNEL)" },
|
|
896
|
+
{ long: "--webhook", value_name: "url", description: "Slack incoming webhook URL (overrides PM_SLACK_WEBHOOK)" },
|
|
897
|
+
{ long: "--dry-run", description: "Build and print the digest without posting to Slack" },
|
|
898
|
+
{ long: "--json", description: "Emit the digest summary/payload as JSON" },
|
|
899
|
+
],
|
|
900
|
+
async run(ctx) {
|
|
901
|
+
const options = ctx.options ?? {};
|
|
902
|
+
const dryRun = readBoolOption(options, "dry-run");
|
|
903
|
+
const asJson = ctx.global?.json === true || readBoolOption(options, "json");
|
|
904
|
+
const format = parseFormat(readStrOption(options, "format") ?? process.env.PM_SLACK_FORMAT);
|
|
905
|
+
const channel = (readStrOption(options, "channel") ?? process.env.PM_SLACK_CHANNEL?.trim()) || undefined;
|
|
906
|
+
const webhookUrl = readStrOption(options, "webhook") ?? process.env.PM_SLACK_WEBHOOK ?? "";
|
|
907
|
+
const since = readStrOption(options, "since");
|
|
908
|
+
const daysStr = readStrOption(options, "days");
|
|
909
|
+
const days = daysStr !== undefined ? parseInt(daysStr, 10) : undefined;
|
|
910
|
+
if (daysStr !== undefined && (days === undefined || Number.isNaN(days) || days <= 0)) {
|
|
911
|
+
throw new CommandError(`--days must be a positive integer (got "${daysStr}")`, EXIT_CODE.USAGE);
|
|
912
|
+
}
|
|
913
|
+
const pmRoot = ctx.pm_root ?? path.join(process.cwd(), ".agents", "pm");
|
|
914
|
+
const { cutoffMs, label } = resolveWindow(since, days);
|
|
915
|
+
const items = readStoreItems(pmRoot);
|
|
916
|
+
const summary = aggregateDigest(items, cutoffMs, label);
|
|
917
|
+
const payload = buildDigestPayload(summary, format, channel);
|
|
918
|
+
if (dryRun) {
|
|
919
|
+
if (!asJson) {
|
|
920
|
+
console.error(`--- DRY RUN digest (${format}, ${label}) — nothing posted ---`);
|
|
921
|
+
process.stdout.write(payload.text + "\n");
|
|
922
|
+
console.error(`--- ${format} payload ---`);
|
|
923
|
+
process.stdout.write(JSON.stringify(payload, null, 2) + "\n");
|
|
924
|
+
console.error("--- END ---");
|
|
925
|
+
}
|
|
926
|
+
return { dryRun: true, format, channel, counts: summary.counts, total: summary.total, window: label, payload };
|
|
927
|
+
}
|
|
928
|
+
// Real post requested: a webhook is mandatory. Fail cleanly (exit 1).
|
|
929
|
+
if (!webhookUrl) {
|
|
930
|
+
throw new CommandError("No Slack webhook configured: set PM_SLACK_WEBHOOK or pass --webhook (or use --dry-run to preview).", EXIT_CODE.GENERIC_FAILURE);
|
|
931
|
+
}
|
|
932
|
+
try {
|
|
933
|
+
await postToSlack(webhookUrl, payload);
|
|
934
|
+
}
|
|
935
|
+
catch (err) {
|
|
936
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
937
|
+
throw new CommandError(`Failed to post digest to Slack: ${message}`, EXIT_CODE.GENERIC_FAILURE);
|
|
938
|
+
}
|
|
939
|
+
return { posted: true, format, channel, counts: summary.counts, total: summary.total, window: label };
|
|
940
|
+
},
|
|
941
|
+
});
|
|
448
942
|
}
|
|
449
943
|
},
|
|
450
944
|
});
|
|
451
945
|
// Exported for unit tests (Block Kit builder + helpers).
|
|
452
946
|
export const __test__ = {
|
|
453
947
|
buildItemBlockKit,
|
|
948
|
+
buildItemPayload,
|
|
454
949
|
buildTextMessage,
|
|
455
950
|
parseEvents,
|
|
951
|
+
parseFormat,
|
|
952
|
+
parseRoutes,
|
|
953
|
+
ruleMatches,
|
|
954
|
+
selectRoute,
|
|
456
955
|
detectEvent,
|
|
457
956
|
extractItem,
|
|
458
957
|
meetsMinPriority,
|
|
958
|
+
parseStoredItem,
|
|
959
|
+
resolveWindow,
|
|
960
|
+
aggregateDigest,
|
|
961
|
+
buildDigestText,
|
|
962
|
+
buildDigestBlockKit,
|
|
963
|
+
buildDigestPayload,
|
|
459
964
|
EXIT_CODE,
|
|
460
965
|
CommandError,
|
|
461
966
|
};
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,MAAM,eAAe,GAA+B,CAAC,CAAC,SAAc,EAAE,EAAE,CAAC,SAAS,CAAQ,CAAC;AAE3F,8EAA8E;AAC9E,oDAAoD;AACpD,EAAE;AACF,yEAAyE;AACzE,8EAA8E;AAC9E,gFAAgF;AAChF,6EAA6E;AAC7E,wEAAwE;AACxE,gFAAgF;AAChF,8EAA8E;AAE9E,MAAM,SAAS,GAAG;IAChB,eAAe,EAAE,CAAC;IAClB,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;CACJ,CAAC;AAEX,MAAM,YAAa,SAAQ,KAAK;IAC9B,QAAQ,CAAS;IACjB,YAAY,OAAe,EAAE,WAAmB,SAAS,CAAC,eAAe;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAsDD,8EAA8E;AAC9E,iBAAiB;AACjB,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,gCAAgC;AAChC,8EAA8E;AAE9E,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,cAAc,CAAC,OAAgC,EAAE,GAAW;IACnE,KAAK,MAAM,SAAS,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACxE,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,OAAgC,EAAE,GAAW;IAClE,KAAK,MAAM,SAAS,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,UAAU,GAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAE7D,SAAS,WAAW,CAAC,IAAwB;IAC3C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI;SAChB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,EAAkB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAc,CAAC,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,WAAW,GAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAE1D;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAAwB,EAAE,WAA0B,UAAU;IACjF,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,UAAU,CAAC;IAC3F,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC;IAChE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,uEAAuE;AACvE,8EAA8E;AAE9E,SAAS,WAAW,CAAC,IAAwB;IAC3C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACjF,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACpF,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAClD,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;YAAE,SAAS,CAAC,yCAAyC;QAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,IAAe,EAAE,KAAgB,EAAE,IAAY;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9E,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAClF,CAAC;IACD,OAAO,GAAG,KAAK,KAAK,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAClB,KAAgB,EAChB,IAAY,EACZ,MAAmB,EACnB,cAAsB,EACtB,cAAuB;IAEvB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC;YAClD,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAC;YAC7B,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;QACjE,CAAC;IACH,CAAC;IACD,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AACjE,CAAC;AAeD,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;IACtD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAExD,8EAA8E;IAC9E,oEAAoE;IACpE,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+EAA+E;IAC/E,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;YACzF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAElE,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3E,MAAM,WAAW,GACf,WAAW,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,CAAC,CAAC,CAAE,WAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAExD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACtE,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,eAAe,GAA6B;IAChD,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,KAAK;CACT,CAAC;AAEF,SAAS,aAAa,CAAC,CAAuB;IAC5C,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,WAAqB;IAC3D,+CAA+C;IAC/C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,CAAC,iCAAiC;IAC/E,OAAO,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC;AACtC,CAAC;AAED,8EAA8E;AAC9E,2CAA2C;AAC3C,8EAA8E;AAE9E,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,GAAuD;IACrE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;IACxC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;IACrC,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;CAC3C,CAAC;AAEF,SAAS,WAAW,CAAC,IAAY,EAAE,KAAgB;IACjD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAC7E,CAAC;IACD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAChF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,KAAgB,EAAE,OAAgB;IACxE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,GAAG,GAAG,KAAK,IAAI,MAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IAEjE,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,GAAG,IAAI,eAAe,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,UAAU,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;IACzG,CAAC;SAAM,CAAC;QACN,GAAG,IAAI,aAAa,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,iBAAiB,EAAE,CAAC;IACtE,CAAC;IAED,IAAI,OAAO;QAAE,GAAG,IAAI,eAAe,OAAO,GAAG,CAAC;IAC9C,OAAO,GAAG,CAAC;AACb,CAAC;AAgBD,SAAS,iBAAiB,CACxB,IAAY,EACZ,KAAgB,EAChB,OAAwB,EAAE;IAE1B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;KAC/E,CAAC,CAAC;IAEH,6DAA6D;IAC7D,MAAM,MAAM,GAAuC;QACjD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE;QAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,IAAI,EAAE,EAAE;QAC5C,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,IAAI,CAAC,IAAI,EAAE,EAAE;QAClD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;KACzE,CAAC;IACF,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpF,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,MAAM,EAAE,EAAE;SACtD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,WAAW,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;QACjC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;KAChD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;KAChF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,IAAY,EACZ,KAAgB,EAChB,MAAqB,EACrB,OAAwB,EAAE;IAE1B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnF,OAAO;YACL,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAClE,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,MAAM,EAAE,IAAI;QACZ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,WAAW,CAAC,UAAkB,EAAE,OAAqB;IAC5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAyB;YACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;YACnD,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;aAC1C;SACF,CAAC;QAEF,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC/B,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;gBACnC,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;oBAClC,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpF,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAC7B,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE;YAC1B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,sDAAsD;AACtD,EAAE;AACF,8EAA8E;AAC9E,uEAAuE;AACvE,4EAA4E;AAC5E,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAE9E,kEAAkE;AAClE,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAQpG;;;;GAIG;AACH,SAAS,eAAe,CAAC,OAAe,EAAE,GAAW;IACnD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;YAC3D,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAA4B,CAAC;YAC1D,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAC7C,OAAO,IAA6B,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,4EAA4E;IAC5E,kEAAkE;IAClE,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,OAAO,CAAC;QACrB,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,+BAA+B;QACxE,MAAM,CAAC,GAAG,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QACD,6EAA6E;QAC7E,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClD,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAA4B,CAAC;AACtC,CAAC;AAED,gFAAgF;AAChF,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,OAAO;gBAAE,SAAS;YACjD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC/D,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC3C,IAAI,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CACpB,KAAyB,EACzB,IAAwB,EACxB,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,KAAK,EAAE,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,OAAO,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;AAClG,CAAC;AAYD,SAAS,cAAc,CAAC,MAA0B;IAChD,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,WAAW,CAAC;AACrG,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,KAAmB,EAAE,QAAgB,EAAE,WAAmB;IACjF,MAAM,OAAO,GAAuC;QAClD,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;KAChB,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACxE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,QAAQ;YAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,QAAQ;YAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvG,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,QAAQ;YAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtG,IAAI,MAAM,KAAK,aAAa,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,QAAQ;YAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChH,CAAC;IACD,MAAM,MAAM,GAAiC;QAC3C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;QAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;QAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;QAC/B,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM;KACxC,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;IACnF,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,kBAAkB,GAA2D;IACjF,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;IAC1C,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;IACvC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;IAC1C,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE;CACnD,CAAC;AAEF,MAAM,YAAY,GAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;AAErF,6EAA6E;AAC7E,SAAS,eAAe,CAAC,KAAmB,EAAE,GAAG,GAAG,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,YAAY,EAAE,CAAC,CAAC;IACvF,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,OAAsB,EAAE,OAAgB;IAC/D,MAAM,IAAI,GAAG,yBAAyB,OAAO,CAAC,WAAW,OAAO,OAAO,CAAC,KAAK,UAAU,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACxH,MAAM,KAAK,GAAa,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACvE,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,GAAG,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAsB,EACtB,OAAgB;IAEhB,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,EAAE;KACzE,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,MAAM,OAAO,CAAC,KAAK,UAAU,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;aAC1F;SACF;KACF,CAAC,CAAC;IAEH,eAAe;IACf,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,EAAE,IAAI,EAAE,QAAiB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;IACxG,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzC,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,SAAS;YACf,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,MAAM,KAAK,CAAC,MAAM,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC9F;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,+BAA+B,EAAE;SAChE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,eAAe,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CACrG,OAAO,CACR,CAAC;IACF,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;KAChF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAsB,EACtB,MAAqB,EACrB,OAAgB;IAEhB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;YACvC,MAAM,EAAE,IAAI;YACZ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnE,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,MAAM,EAAE,IAAI;QACZ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E,sCAAsC;AACtC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAE1D,2CAA2C;AAC3C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAEnF,0DAA0D;AAC1D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAErE,SAAS,WAAW,CAAC,GAA4B;IAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAE7C,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAE5C,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,SAAS,GACZ,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAwB;YAC7C,GAAW,CAAC,MAAqD,EAAE,IAAI,EAAE,MAAM;YACjF,EAAE,CAAC;QACL,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;QAE1D,MAAM,UAAU,GAAK,GAAW,CAAC,MAAqD,EAAE,IAAI,CAAC;QAC7F,IAAI,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;IACtE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,GAA4B;IAC/C,MAAM,MAAM,GAAI,GAA0C,CAAC,MAE9C,CAAC;IAEd,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC;IAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAEjC,+DAA+D;IAC/D,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,eAAe,eAAe,CAAC;IAC7B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,UAAU;IAEnB,QAAQ,CAAC,GAAG;QACV,0EAA0E;QAC1E,kEAAkE;QAClE,qEAAqE;QACrE,0EAA0E;QAC1E,mEAAmE;QACnE,0EAA0E;QAC1E,IAAI,OAAO,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,UAAU,EAAE,CAAC;YAClD,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,GAA4B,EAAE,EAAE;gBAC5D,IAAI,CAAC;oBACH,qCAAqC;oBACrC,IAAI,GAAG,IAAK,GAAW,CAAC,EAAE,KAAK,KAAK;wBAAE,OAAO;oBAE7C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;oBAC5B,IAAI,CAAC,MAAM;wBAAE,OAAO,CAAC,4BAA4B;oBAEjD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;oBAC/B,IAAI,CAAC,KAAK;wBAAE,OAAO;oBAEnB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC9B,OAAO,CAAC,KAAK,CAAC,qBAAqB,KAAK,+BAA+B,CAAC,CAAC;wBACzE,OAAO;oBACT,CAAC;oBAED,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;oBAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;wBAC1E,OAAO;oBACT,CAAC;oBAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;wBAChD,OAAO,CAAC,KAAK,CACX,4BAA4B,IAAI,CAAC,QAAQ,kBAAkB,MAAM,CAAC,WAAW,aAAa,CAC3F,CAAC;wBACF,OAAO;oBACT,CAAC;oBAED,kEAAkE;oBAClE,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EACL,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,OAAO,CACf,CAAC;oBACF,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,OAAO,CAAC,KAAK,CAAC,6CAA6C,KAAK,cAAc,CAAC,CAAC;wBAChF,OAAO;oBACT,CAAC;oBAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;wBAC3D,OAAO,EAAE,MAAM,CAAC,OAAO;qBACxB,CAAC,CAAC;oBAEH,MAAM,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBAC9C,OAAO,CAAC,KAAK,CAAC,2CAA2C,KAAK,aAAa,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxF,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,oEAAoE;oBACpE,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACjE,OAAO,CAAC,KAAK,CAAC,iDAAiD,OAAO,EAAE,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,UAAU,EAAE,CAAC;YAC1D,6DAA6D;YAC7D,uEAAuE;YACvE,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,GAA6B,EAAE,EAAE;gBAC9D,IAAI,CAAC;oBACH,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;oBACxF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;oBAC5B,IAAI,CAAC,MAAM;wBAAE,OAAO;oBAEpB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;oBAC7C,IAAI,KAAK,GAAqB,IAAI,CAAC;oBACnC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,KAAK,GAAG,QAAQ,CAAC;yBAC1C,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,KAAK,GAAG,OAAO,CAAC;oBAElD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;wBAAE,OAAO;oBAEhD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC3C,MAAM,IAAI,GAAG,gBAAgB,GAAG,CAAC,OAAO,uBAAuB,KAAK,MAAM,OAAO,EAAE,CAAC;oBAEpF,MAAM,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBACxF,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACjE,OAAO,CAAC,KAAK,CAAC,kDAAkD,OAAO,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,0EAA0E;QAC1E,4DAA4D;QAC5D,0EAA0E;QAC1E,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;YAC9C,GAAG,CAAC,eAAe,CAAC;gBAClB,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,+EAA+E;gBAC5F,MAAM,EAAE,yEAAyE;gBACjF,QAAQ,EAAE;oBACR,6DAA6D;oBAC7D,wEAAwE;oBACxE,4EAA4E;oBAC5E,kFAAkF;iBACnF;gBACD,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,sEAAsE,EAAE;oBAC9H,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,yEAAyE,EAAE;oBAChI,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,kFAAkF,EAAE;oBAC1I,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,2DAA2D,EAAE;oBAChH,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,+FAA+F,EAAE;oBACpJ,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,wEAAwE,EAAE;oBAC9H,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,iEAAiE,EAAE;oBACxH,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,wDAAwD,EAAE;oBAC5F,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oDAAoD,EAAE;iBACtF;gBAED,KAAK,CAAC,GAAG,CAAC,GAA0G;oBAClH,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;oBAClC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;oBAClD,MAAM,UAAU,GACd,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;oBAC1E,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC;oBACzG,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAElD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI,IAAI,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC5E,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;oBAE5F,6EAA6E;oBAC7E,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;oBACrE,MAAM,KAAK,GAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAc,CAAC;oBAE1F,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEtE,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,MAAM,IAAI,YAAY,CACpB,6EAA6E,EAC7E,SAAS,CAAC,KAAK,CAChB,CAAC;oBACJ,CAAC;oBAED,+DAA+D;oBAC/D,uEAAuE;oBACvE,MAAM,IAAI,GAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oBAC3D,MAAM,OAAO,GAAiB;wBAC5B,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;4BACvC,OAAO;4BACP,IAAI,EAAE,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;yBAChD,CAAC;wBACF,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC7C,CAAC;oBAEF,IAAI,MAAM,EAAE,CAAC;wBACX,IAAI,CAAC,MAAM,EAAE,CAAC;4BACZ,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;4BACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;4BAC1C,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,cAAc,CAAC,CAAC;4BAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;4BAC9D,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;wBAC/B,CAAC;wBACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;oBAChF,CAAC;oBAED,IAAI,CAAC,UAAU,EAAE,CAAC;wBAChB,oEAAoE;wBACpE,0DAA0D;wBAC1D,OAAO,CAAC,KAAK,CACX,oFAAoF;4BAClF,uCAAuC,CAC1C,CAAC;wBACF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;oBACjE,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBACzC,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,mDAAmD;wBACnD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACjE,OAAO,CAAC,KAAK,CAAC,8CAA8C,OAAO,EAAE,CAAC,CAAC;wBACvE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;oBAC3C,CAAC;oBAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;gBAC/D,CAAC;aACF,CAAC,CAAC;YAEH,wEAAwE;YACxE,uEAAuE;YACvE,mEAAmE;YACnE,uEAAuE;YACvE,wEAAwE;YACxE,GAAG,CAAC,eAAe,CAAC;gBAClB,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,uFAAuF;gBACpG,MAAM,EAAE,wEAAwE;gBAChF,QAAQ,EAAE;oBACR,iCAAiC;oBACjC,wCAAwC;oBACxC,iCAAiC;iBAClC;gBACD,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,wEAAwE,EAAE;oBAC9H,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,kEAAkE,EAAE;oBACtH,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,uDAAuD,EAAE;oBAC9G,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,kEAAkE,EAAE;oBAC1H,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;oBACnE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,kDAAkD,EAAE;iBACvF;gBAED,KAAK,CAAC,GAAG,CAAC,GAAwF;oBAChG,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;oBAClC,sEAAsE;oBACtE,4DAA4D;oBAC5D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI,IAAI,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC5E,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;oBAC5F,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC;oBAEzG,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;oBACrE,MAAM,KAAK,GAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAc,CAAC;oBAE1F,sEAAsE;oBACtE,MAAM,MAAM,GAA8B;wBACxC,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,sBAAsB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;wBAC1J,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,wBAAwB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,wBAAwB,EAAE;wBACjM,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,oBAAoB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE;qBACtM,CAAC;oBACF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC3B,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;oBAEnE,qEAAqE;oBACrE,sEAAsE;oBACtE,qCAAqC;oBACrC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,OAAO,CAAC,KAAK,CAAC,gBAAgB,MAAM,WAAW,KAAK,wBAAwB,CAAC,CAAC;wBAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;wBAC1C,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,cAAc,CAAC,CAAC;wBAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;wBAC9D,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBAC/B,CAAC;oBACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC5D,CAAC;aACF,CAAC,CAAC;YAEH,wEAAwE;YACxE,qEAAqE;YACrE,sEAAsE;YACtE,qEAAqE;YACrE,mBAAmB;YACnB,wEAAwE;YACxE,GAAG,CAAC,eAAe,CAAC;gBAClB,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,6EAA6E;gBAC1F,MAAM,EAAE,0FAA0F;gBAClG,QAAQ,EAAE;oBACR,oCAAoC;oBACpC,4DAA4D;oBAC5D,6DAA6D;iBAC9D;gBACD,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,gEAAgE,EAAE;oBACtH,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,sEAAsE,EAAE;oBACxH,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,wEAAwE,EAAE;oBAC9H,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,iDAAiD,EAAE;oBACzG,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,yDAAyD,EAAE;oBAChH,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,qDAAqD,EAAE;oBACzF,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;iBAC3E;gBAED,KAAK,CAAC,GAAG,CAAC,GAA0G;oBAClH,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;oBAClC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;oBAClD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI,IAAI,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC5E,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;oBAC5F,MAAM,OAAO,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC;oBACzG,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;oBAE3F,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC/C,MAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACvE,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;wBACrF,MAAM,IAAI,YAAY,CAAC,2CAA2C,OAAO,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;oBAClG,CAAC;oBAED,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBACxE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACvD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;oBACrC,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACxD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;oBAE7D,IAAI,MAAM,EAAE,CAAC;wBACX,IAAI,CAAC,MAAM,EAAE,CAAC;4BACZ,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,KAAK,KAAK,wBAAwB,CAAC,CAAC;4BAC/E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;4BAC1C,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,cAAc,CAAC,CAAC;4BAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;4BAC9D,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;wBAC/B,CAAC;wBACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;oBACjH,CAAC;oBAED,sEAAsE;oBACtE,IAAI,CAAC,UAAU,EAAE,CAAC;wBAChB,MAAM,IAAI,YAAY,CACpB,oGAAoG,EACpG,SAAS,CAAC,eAAe,CAC1B,CAAC;oBACJ,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBACzC,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACjE,MAAM,IAAI,YAAY,CAAC,mCAAmC,OAAO,EAAE,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;oBAClG,CAAC;oBAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;gBACxG,CAAC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,gBAAgB;IAChB,eAAe;IACf,aAAa;IACb,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,kBAAkB;IAClB,SAAS;IACT,YAAY;CACb,CAAC"}
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-slack",
|
|
3
|
-
"version": "2026.6.
|
|
3
|
+
"version": "2026.6.3",
|
|
4
4
|
"description": "Slack notifications for pm item lifecycle events",
|
|
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
|
"engines": {
|