@activade/open-workflows 2.0.5 → 2.0.7
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/README.md +47 -1
- package/actions/changeset/action.yml +54 -0
- package/actions/changeset/skill.md +289 -0
- package/actions/doc-sync/action.yml +9 -1
- package/actions/doc-sync/skill.md +4 -0
- package/actions/issue-label/action.yml +9 -1
- package/actions/issue-label/skill.md +4 -0
- package/actions/pr-review/action.yml +9 -1
- package/actions/pr-review/skill.md +4 -0
- package/dist/cli/index.js +89 -57
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -17,6 +17,7 @@ The CLI will prompt you to select workflows and install them to `.github/workflo
|
|
|
17
17
|
| `pr-review` | Yes | AI-powered code reviews |
|
|
18
18
|
| `issue-label` | Yes | Auto-label issues based on content |
|
|
19
19
|
| `doc-sync` | Yes | Keep docs in sync with code changes |
|
|
20
|
+
| `changeset` | Yes | AI-generated changesets for monorepo releases |
|
|
20
21
|
| `release` | No | Semantic versioning with npm provenance |
|
|
21
22
|
|
|
22
23
|
## Manual Usage
|
|
@@ -36,6 +37,8 @@ jobs:
|
|
|
36
37
|
steps:
|
|
37
38
|
- uses: actions/checkout@v4
|
|
38
39
|
- uses: activadee/open-workflows/actions/pr-review@main
|
|
40
|
+
with:
|
|
41
|
+
variants: UNDEFINED
|
|
39
42
|
env:
|
|
40
43
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
41
44
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
@@ -72,6 +75,39 @@ jobs:
|
|
|
72
75
|
|
|
73
76
|
No NPM_TOKEN needed - uses OIDC trusted publishing with provenance.
|
|
74
77
|
|
|
78
|
+
### Changeset Action (AI-Powered)
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
name: AI Changeset
|
|
82
|
+
on:
|
|
83
|
+
pull_request:
|
|
84
|
+
types: [opened, synchronize, reopened]
|
|
85
|
+
jobs:
|
|
86
|
+
changeset:
|
|
87
|
+
runs-on: ubuntu-latest
|
|
88
|
+
permissions:
|
|
89
|
+
contents: write
|
|
90
|
+
pull-requests: write
|
|
91
|
+
steps:
|
|
92
|
+
- uses: actions/checkout@v4
|
|
93
|
+
with:
|
|
94
|
+
fetch-depth: 0
|
|
95
|
+
ref: ${{ github.head_ref }}
|
|
96
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
97
|
+
- uses: activadee/open-workflows/actions/changeset@main
|
|
98
|
+
with:
|
|
99
|
+
mode: commit # or 'comment' to suggest via PR comment
|
|
100
|
+
variants: UNDEFINED
|
|
101
|
+
env:
|
|
102
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
103
|
+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The changeset action analyzes PR changes and generates [Changesets](https://github.com/changesets/changesets) files automatically:
|
|
107
|
+
- Detects which packages are affected in monorepos
|
|
108
|
+
- Infers version bump type from conventional commits
|
|
109
|
+
- Writes user-facing changelog entries
|
|
110
|
+
|
|
75
111
|
## Authentication
|
|
76
112
|
|
|
77
113
|
### For AI Actions
|
|
@@ -94,6 +130,10 @@ Or manually set the secret:
|
|
|
94
130
|
gh secret set OPENCODE_AUTH < ~/.local/share/opencode/auth.json
|
|
95
131
|
```
|
|
96
132
|
|
|
133
|
+
## Variants
|
|
134
|
+
|
|
135
|
+
AI actions accept an optional `variants` input to control OpenCode reasoning effort. Use `UNDEFINED` to omit the setting entirely.
|
|
136
|
+
|
|
97
137
|
## CLI Options
|
|
98
138
|
|
|
99
139
|
```bash
|
|
@@ -107,12 +147,18 @@ OPTIONS
|
|
|
107
147
|
|
|
108
148
|
## How It Works
|
|
109
149
|
|
|
110
|
-
**AI Actions (pr-review, issue-label, doc-sync):**
|
|
150
|
+
**AI Actions (pr-review, issue-label, doc-sync, changeset):**
|
|
111
151
|
1. Workflow triggers on GitHub event
|
|
112
152
|
2. Composite action sets up Bun and OpenCode
|
|
113
153
|
3. OpenCode runs with the bundled skill
|
|
114
154
|
4. AI analyzes content and takes action
|
|
115
155
|
|
|
156
|
+
**Changeset Action:**
|
|
157
|
+
1. Triggers on PR open/update
|
|
158
|
+
2. AI analyzes diff, commits, and PR description
|
|
159
|
+
3. Generates `.changeset/<random>.md` with package bumps and changelog
|
|
160
|
+
4. Either commits to PR branch or suggests via comment
|
|
161
|
+
|
|
116
162
|
**Release Action:**
|
|
117
163
|
1. Manually triggered with version bump type
|
|
118
164
|
2. Generates changelog from git commits
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: 'AI Changeset'
|
|
2
|
+
description: 'AI-powered changeset generation for monorepo releases'
|
|
3
|
+
author: 'activadee'
|
|
4
|
+
|
|
5
|
+
inputs:
|
|
6
|
+
model:
|
|
7
|
+
description: 'Model to use for changeset generation'
|
|
8
|
+
required: false
|
|
9
|
+
default: 'anthropic/claude-sonnet-4-5'
|
|
10
|
+
mode:
|
|
11
|
+
description: 'Operation mode: commit (auto-commit changeset) or comment (suggest via PR comment)'
|
|
12
|
+
required: false
|
|
13
|
+
default: 'commit'
|
|
14
|
+
variants:
|
|
15
|
+
description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.'
|
|
16
|
+
required: false
|
|
17
|
+
default: 'UNDEFINED'
|
|
18
|
+
|
|
19
|
+
runs:
|
|
20
|
+
using: 'composite'
|
|
21
|
+
steps:
|
|
22
|
+
- name: Setup Bun
|
|
23
|
+
uses: oven-sh/setup-bun@v2
|
|
24
|
+
|
|
25
|
+
- name: Setup OpenCode auth
|
|
26
|
+
if: env.OPENCODE_AUTH != ''
|
|
27
|
+
shell: bash
|
|
28
|
+
run: |
|
|
29
|
+
mkdir -p ~/.local/share/opencode
|
|
30
|
+
echo "$OPENCODE_AUTH" > ~/.local/share/opencode/auth.json
|
|
31
|
+
- name: Install opencode-ai
|
|
32
|
+
shell: bash
|
|
33
|
+
run: |
|
|
34
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
35
|
+
- name: Install skill and tools
|
|
36
|
+
shell: bash
|
|
37
|
+
run: |
|
|
38
|
+
mkdir -p .opencode/skill/changeset
|
|
39
|
+
cp "${{ github.action_path }}/skill.md" .opencode/skill/changeset/SKILL.md
|
|
40
|
+
mkdir -p ~/.config/opencode/tool
|
|
41
|
+
cp "${{ github.action_path }}/../../scripts/"*.ts ~/.config/opencode/tool/
|
|
42
|
+
cd ~/.config/opencode && bun add @opencode-ai/plugin
|
|
43
|
+
|
|
44
|
+
- name: Generate Changeset
|
|
45
|
+
shell: bash
|
|
46
|
+
run: |
|
|
47
|
+
VARIANTS_ARG=()
|
|
48
|
+
if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then
|
|
49
|
+
VARIANTS_ARG=(--variants "${{ inputs.variants }}")
|
|
50
|
+
fi
|
|
51
|
+
opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \
|
|
52
|
+
"Load the changeset skill. Generate changeset for PR ${{ github.event.pull_request.number }} in mode: ${{ inputs.mode }}"
|
|
53
|
+
env:
|
|
54
|
+
GITHUB_TOKEN: ${{ github.token }}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: changeset
|
|
3
|
+
description: AI-powered changeset generation for monorepo releases. Analyzes PR changes to generate properly formatted changeset files.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Action Inputs
|
|
8
|
+
|
|
9
|
+
- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit.
|
|
10
|
+
|
|
11
|
+
## What I Do
|
|
12
|
+
|
|
13
|
+
Analyze pull request changes and generate [Changesets](https://github.com/changesets/changesets) files that capture:
|
|
14
|
+
1. Which packages are affected
|
|
15
|
+
2. What version bump is appropriate (patch/minor/major)
|
|
16
|
+
3. A user-facing changelog entry
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
1. **Get PR context**: Fetch PR metadata and changed files
|
|
21
|
+
```bash
|
|
22
|
+
gh pr view <number> --json files,title,body,commits,headRefOid
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
2. **Detect monorepo structure**: Find package locations
|
|
26
|
+
```bash
|
|
27
|
+
# Check for common monorepo patterns
|
|
28
|
+
ls packages/ 2>/dev/null || ls apps/ 2>/dev/null || cat pnpm-workspace.yaml 2>/dev/null
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
3. **Analyze changes**: For each changed file, determine:
|
|
32
|
+
- Which package it belongs to
|
|
33
|
+
- The nature of the change (feature, fix, breaking, docs, etc.)
|
|
34
|
+
|
|
35
|
+
4. **Infer version bump**: Based on changes and commit messages
|
|
36
|
+
- `major`: Breaking changes (look for BREAKING CHANGE, !)
|
|
37
|
+
- `minor`: New features (feat:, feature)
|
|
38
|
+
- `patch`: Bug fixes, refactors, docs (fix:, chore:, docs:, refactor:)
|
|
39
|
+
|
|
40
|
+
5. **Generate changeset**: Create the changeset content
|
|
41
|
+
|
|
42
|
+
6. **Execute action**: Based on mode parameter
|
|
43
|
+
- `commit`: Write file and commit to PR branch
|
|
44
|
+
- `comment`: Post suggestion as PR comment
|
|
45
|
+
|
|
46
|
+
## Package Detection
|
|
47
|
+
|
|
48
|
+
### Finding Affected Packages
|
|
49
|
+
|
|
50
|
+
1. **Parse monorepo config** (in priority order):
|
|
51
|
+
```bash
|
|
52
|
+
# pnpm workspaces
|
|
53
|
+
cat pnpm-workspace.yaml
|
|
54
|
+
|
|
55
|
+
# npm/yarn workspaces
|
|
56
|
+
cat package.json | jq '.workspaces'
|
|
57
|
+
|
|
58
|
+
# lerna
|
|
59
|
+
cat lerna.json | jq '.packages'
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
2. **Map files to packages**:
|
|
63
|
+
- `packages/cli/src/foo.ts` → `cli` package
|
|
64
|
+
- `apps/web/pages/index.tsx` → `web` package
|
|
65
|
+
- `libs/core/utils.ts` → `core` package
|
|
66
|
+
- Root-level files (README, configs) → may affect all packages or none
|
|
67
|
+
|
|
68
|
+
3. **Read package.json for each affected package**:
|
|
69
|
+
```bash
|
|
70
|
+
cat packages/cli/package.json | jq '.name'
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Handling Root Changes
|
|
74
|
+
|
|
75
|
+
Files at the repository root typically don't need changesets:
|
|
76
|
+
- `.github/*` - CI/CD changes
|
|
77
|
+
- `*.md` - Documentation
|
|
78
|
+
- `.eslintrc`, `tsconfig.json` - Config files
|
|
79
|
+
- `package.json` (root) - Dependency updates
|
|
80
|
+
|
|
81
|
+
Exception: If root changes affect package behavior, include relevant packages.
|
|
82
|
+
|
|
83
|
+
## Version Inference
|
|
84
|
+
|
|
85
|
+
### From Conventional Commits
|
|
86
|
+
|
|
87
|
+
Parse commit messages in the PR:
|
|
88
|
+
```bash
|
|
89
|
+
gh pr view <number> --json commits --jq '.commits[].messageHeadline'
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
| Prefix | Version | Example |
|
|
93
|
+
|--------|---------|---------|
|
|
94
|
+
| `feat:` | minor | `feat: add retry logic` |
|
|
95
|
+
| `feat!:` | major | `feat!: change API signature` |
|
|
96
|
+
| `fix:` | patch | `fix: handle null case` |
|
|
97
|
+
| `perf:` | patch | `perf: optimize query` |
|
|
98
|
+
| `refactor:` | patch | `refactor: extract helper` |
|
|
99
|
+
| `docs:` | patch | `docs: update README` |
|
|
100
|
+
| `chore:` | patch | `chore: update deps` |
|
|
101
|
+
| `BREAKING CHANGE` | major | (in commit body) |
|
|
102
|
+
|
|
103
|
+
### From PR Content
|
|
104
|
+
|
|
105
|
+
If no conventional commits, analyze:
|
|
106
|
+
- PR title for keywords (add, fix, change, remove, break)
|
|
107
|
+
- PR body for context
|
|
108
|
+
- File changes (new files = likely feature, modified = likely fix)
|
|
109
|
+
|
|
110
|
+
### Default Behavior
|
|
111
|
+
|
|
112
|
+
When uncertain:
|
|
113
|
+
- Default to `patch` for single-package changes
|
|
114
|
+
- Ask via comment if breaking changes are detected but unclear
|
|
115
|
+
|
|
116
|
+
## Changeset Format
|
|
117
|
+
|
|
118
|
+
Changesets use this format in `.changeset/<random-id>.md`:
|
|
119
|
+
|
|
120
|
+
```markdown
|
|
121
|
+
---
|
|
122
|
+
"@myorg/cli": minor
|
|
123
|
+
"@myorg/core": patch
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
Add retry logic for failed API requests
|
|
127
|
+
|
|
128
|
+
The CLI now automatically retries failed requests up to 3 times with exponential backoff.
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Formatting Rules
|
|
132
|
+
|
|
133
|
+
1. **YAML frontmatter**: Package names in quotes, version bump type
|
|
134
|
+
2. **Summary line**: Imperative mood, user-facing (what changed, not how)
|
|
135
|
+
3. **Optional body**: Additional context, migration notes for breaking changes
|
|
136
|
+
4. **Length**: Summary under 80 chars, body can be multiple paragraphs
|
|
137
|
+
|
|
138
|
+
### Good vs Bad Summaries
|
|
139
|
+
|
|
140
|
+
| Bad (dev-speak) | Good (user-facing) |
|
|
141
|
+
|-----------------|-------------------|
|
|
142
|
+
| `refactored auth module` | `Improved authentication reliability` |
|
|
143
|
+
| `fixed bug in parser` | `Fixed parsing of nested arrays` |
|
|
144
|
+
| `added new function` | `Add support for custom themes` |
|
|
145
|
+
| `updated dependencies` | `Security updates for dependencies` |
|
|
146
|
+
|
|
147
|
+
## Writing the Changeset
|
|
148
|
+
|
|
149
|
+
Use the `write-changeset` tool to create the changeset file:
|
|
150
|
+
|
|
151
|
+
### Tool Arguments
|
|
152
|
+
|
|
153
|
+
| Argument | Required | Description |
|
|
154
|
+
|----------|----------|-------------|
|
|
155
|
+
| `packages` | Yes | Object mapping package names to bump types |
|
|
156
|
+
| `summary` | Yes | Short summary (imperative mood, user-facing) |
|
|
157
|
+
| `body` | No | Additional details or migration notes |
|
|
158
|
+
|
|
159
|
+
### Example
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"packages": {
|
|
164
|
+
"@myorg/cli": "minor",
|
|
165
|
+
"@myorg/core": "patch"
|
|
166
|
+
},
|
|
167
|
+
"summary": "Add retry logic for failed API requests",
|
|
168
|
+
"body": "The CLI now automatically retries failed requests up to 3 times with exponential backoff."
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Mode: commit
|
|
173
|
+
|
|
174
|
+
When mode is `commit`:
|
|
175
|
+
|
|
176
|
+
1. Generate changeset using `write-changeset` tool
|
|
177
|
+
2. Stage the new file:
|
|
178
|
+
```bash
|
|
179
|
+
git add .changeset/*.md
|
|
180
|
+
```
|
|
181
|
+
3. Commit with `[skip ci]` to prevent infinite workflow loops:
|
|
182
|
+
```bash
|
|
183
|
+
git commit -m "chore: add changeset for PR #<number> [skip ci]"
|
|
184
|
+
```
|
|
185
|
+
4. Push to PR branch:
|
|
186
|
+
```bash
|
|
187
|
+
git push
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**CRITICAL**: Always include `[skip ci]` in the commit message to prevent the workflow from triggering itself.
|
|
191
|
+
|
|
192
|
+
## Mode: comment
|
|
193
|
+
|
|
194
|
+
When mode is `comment`:
|
|
195
|
+
|
|
196
|
+
1. Generate the changeset content
|
|
197
|
+
2. Post as PR comment with the suggested changeset:
|
|
198
|
+
|
|
199
|
+
````markdown
|
|
200
|
+
## Suggested Changeset
|
|
201
|
+
|
|
202
|
+
Based on the changes in this PR, here's the recommended changeset:
|
|
203
|
+
|
|
204
|
+
```markdown
|
|
205
|
+
---
|
|
206
|
+
"@myorg/cli": minor
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
Add retry logic for failed API requests
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
<details>
|
|
213
|
+
<summary>How to apply</summary>
|
|
214
|
+
|
|
215
|
+
Create this file as `.changeset/<any-name>.md` and commit it to this PR.
|
|
216
|
+
|
|
217
|
+
Or run: `npx changeset add` and follow the prompts.
|
|
218
|
+
</details>
|
|
219
|
+
````
|
|
220
|
+
|
|
221
|
+
## Edge Cases
|
|
222
|
+
|
|
223
|
+
### No Package Changes
|
|
224
|
+
|
|
225
|
+
If changes only affect non-package files (CI, docs, root configs):
|
|
226
|
+
- In `commit` mode: Skip creating changeset, post comment explaining why
|
|
227
|
+
- In `comment` mode: Explain that no changeset is needed
|
|
228
|
+
|
|
229
|
+
### Multiple Packages, Same Change
|
|
230
|
+
|
|
231
|
+
When a change spans packages but represents one logical feature:
|
|
232
|
+
- Create ONE changeset file
|
|
233
|
+
- List all affected packages with appropriate bumps
|
|
234
|
+
- Write a unified summary
|
|
235
|
+
|
|
236
|
+
### Existing Changeset
|
|
237
|
+
|
|
238
|
+
Before creating a new changeset:
|
|
239
|
+
```bash
|
|
240
|
+
ls .changeset/*.md 2>/dev/null | head -5
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
If changesets already exist for this PR:
|
|
244
|
+
- Check if they cover the current changes
|
|
245
|
+
- Only add a new one if there are uncovered changes
|
|
246
|
+
- Never overwrite existing changesets
|
|
247
|
+
|
|
248
|
+
## Common Mistakes to Avoid
|
|
249
|
+
|
|
250
|
+
- Do NOT create changesets for documentation-only changes in most cases
|
|
251
|
+
- Do NOT guess package names - always verify from package.json
|
|
252
|
+
- Do NOT create empty changesets
|
|
253
|
+
- Do NOT overwrite existing changesets from previous commits
|
|
254
|
+
- Do NOT commit in `comment` mode
|
|
255
|
+
- Do NOT assume monorepo structure - verify it exists first
|
|
256
|
+
- Do NOT forget `[skip ci]` in commit message - this causes infinite workflow loops
|
|
257
|
+
|
|
258
|
+
## Non-Monorepo Fallback
|
|
259
|
+
|
|
260
|
+
If no monorepo structure is detected (single package.json at root):
|
|
261
|
+
- Use the package name from root package.json
|
|
262
|
+
- Follow the same version inference rules
|
|
263
|
+
- Changeset format remains the same
|
|
264
|
+
|
|
265
|
+
## Example Changeset Output
|
|
266
|
+
|
|
267
|
+
For a PR that adds a feature to the CLI and fixes a related bug in core:
|
|
268
|
+
|
|
269
|
+
```markdown
|
|
270
|
+
---
|
|
271
|
+
"@myorg/cli": minor
|
|
272
|
+
"@myorg/core": patch
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
Add support for custom retry strategies
|
|
276
|
+
|
|
277
|
+
Users can now configure custom retry strategies for API requests. The default exponential backoff behavior is unchanged.
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Checklist Before Submitting
|
|
282
|
+
|
|
283
|
+
- [ ] Verified package names from actual package.json files
|
|
284
|
+
- [ ] Version bump matches the change type
|
|
285
|
+
- [ ] Summary is user-facing, not developer-focused
|
|
286
|
+
- [ ] Summary uses imperative mood ("Add" not "Added")
|
|
287
|
+
- [ ] No duplicate changesets for the same changes
|
|
288
|
+
- [ ] File committed only in `commit` mode
|
|
289
|
+
- [ ] Commit message includes `[skip ci]` (commit mode only)
|
|
@@ -7,6 +7,10 @@ inputs:
|
|
|
7
7
|
description: 'Model to use for doc analysis'
|
|
8
8
|
required: false
|
|
9
9
|
default: 'anthropic/claude-sonnet-4-5'
|
|
10
|
+
variants:
|
|
11
|
+
description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.'
|
|
12
|
+
required: false
|
|
13
|
+
default: 'UNDEFINED'
|
|
10
14
|
|
|
11
15
|
runs:
|
|
12
16
|
using: 'composite'
|
|
@@ -41,7 +45,11 @@ runs:
|
|
|
41
45
|
- name: Sync Documentation
|
|
42
46
|
shell: bash
|
|
43
47
|
run: |
|
|
44
|
-
|
|
48
|
+
VARIANTS_ARG=()
|
|
49
|
+
if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then
|
|
50
|
+
VARIANTS_ARG=(--variants "${{ inputs.variants }}")
|
|
51
|
+
fi
|
|
52
|
+
opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \
|
|
45
53
|
"Load the doc-sync skill and sync documentation for PR ${{ github.event.pull_request.number }}"
|
|
46
54
|
env:
|
|
47
55
|
GITHUB_TOKEN: ${{ github.token }}
|
|
@@ -4,6 +4,10 @@ description: Keep documentation in sync with code changes. Analyzes PR diffs and
|
|
|
4
4
|
license: MIT
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## Action Inputs
|
|
8
|
+
|
|
9
|
+
- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit.
|
|
10
|
+
|
|
7
11
|
## What I Do
|
|
8
12
|
|
|
9
13
|
Analyze pull request changes and update documentation to reflect code changes. Uses native OpenCode tools (`write`, `bash`) for file operations and git commits.
|
|
@@ -7,6 +7,10 @@ inputs:
|
|
|
7
7
|
description: 'Model to use for labeling'
|
|
8
8
|
required: false
|
|
9
9
|
default: 'anthropic/claude-haiku-4-5'
|
|
10
|
+
variants:
|
|
11
|
+
description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.'
|
|
12
|
+
required: false
|
|
13
|
+
default: 'UNDEFINED'
|
|
10
14
|
|
|
11
15
|
runs:
|
|
12
16
|
using: 'composite'
|
|
@@ -36,7 +40,11 @@ runs:
|
|
|
36
40
|
- name: Label Issue
|
|
37
41
|
shell: bash
|
|
38
42
|
run: |
|
|
39
|
-
|
|
43
|
+
VARIANTS_ARG=()
|
|
44
|
+
if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then
|
|
45
|
+
VARIANTS_ARG=(--variants "${{ inputs.variants }}")
|
|
46
|
+
fi
|
|
47
|
+
opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \
|
|
40
48
|
"Load the issue-label skill. Label issue ${{ github.event.issue.number }}"
|
|
41
49
|
env:
|
|
42
50
|
GITHUB_TOKEN: ${{ github.token }}
|
|
@@ -4,6 +4,10 @@ description: Automatically apply appropriate labels to GitHub issues based on co
|
|
|
4
4
|
license: MIT
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## Action Inputs
|
|
8
|
+
|
|
9
|
+
- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit.
|
|
10
|
+
|
|
7
11
|
## What I Do
|
|
8
12
|
|
|
9
13
|
Analyze GitHub issue content and apply up to 3 appropriate labels to help maintainers triage and search issues effectively.
|
|
@@ -7,6 +7,10 @@ inputs:
|
|
|
7
7
|
description: 'Model to use for review'
|
|
8
8
|
required: false
|
|
9
9
|
default: 'anthropic/claude-sonnet-4-5'
|
|
10
|
+
variants:
|
|
11
|
+
description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.'
|
|
12
|
+
required: false
|
|
13
|
+
default: 'UNDEFINED'
|
|
10
14
|
|
|
11
15
|
runs:
|
|
12
16
|
using: 'composite'
|
|
@@ -36,7 +40,11 @@ runs:
|
|
|
36
40
|
- name: Review PR
|
|
37
41
|
shell: bash
|
|
38
42
|
run: |
|
|
39
|
-
|
|
43
|
+
VARIANTS_ARG=()
|
|
44
|
+
if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then
|
|
45
|
+
VARIANTS_ARG=(--variants "${{ inputs.variants }}")
|
|
46
|
+
fi
|
|
47
|
+
opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \
|
|
40
48
|
"Load the pr-review skill. Review PR ${{ github.event.pull_request.number }}"
|
|
41
49
|
env:
|
|
42
50
|
GITHUB_TOKEN: ${{ github.token }}
|
|
@@ -4,6 +4,10 @@ description: AI-powered pull request code review focusing on correctness, securi
|
|
|
4
4
|
license: MIT
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## Action Inputs
|
|
8
|
+
|
|
9
|
+
- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit.
|
|
10
|
+
|
|
7
11
|
## What I Do
|
|
8
12
|
|
|
9
13
|
Review pull request changes systematically and post findings as a sticky PR comment. Focus on **real issues that matter** - bugs, security risks, and stability problems that would block a merge in a typical code review.
|
package/dist/cli/index.js
CHANGED
|
@@ -1,58 +1,58 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
var gs=Object.create;var{getPrototypeOf:xs,defineProperty:_o,getOwnPropertyNames:ks}=Object;var ys=Object.prototype.hasOwnProperty;var H=(s,n,e)=>{e=s!=null?gs(xs(s)):{};let l=n||!s||!s.__esModule?_o(e,"default",{value:s,enumerable:!0}):e;for(let r of ks(s))if(!ys.call(l,r))_o(l,r,{get:()=>s[r],enumerable:!0});return l};var u=(s,n)=>()=>(n||s((n={exports:{}}).exports,n),n.exports);var D=u((gn,Ao)=>{var F={to(s,n){if(!n)return`\x1B[${s+1}G`;return`\x1B[${n+1};${s+1}H`},move(s,n){let e="";if(s<0)e+=`\x1B[${-s}D`;else if(s>0)e+=`\x1B[${s}C`;if(n<0)e+=`\x1B[${-n}A`;else if(n>0)e+=`\x1B[${n}B`;return e},up:(s=1)=>`\x1B[${s}A`,down:(s=1)=>`\x1B[${s}B`,forward:(s=1)=>`\x1B[${s}C`,backward:(s=1)=>`\x1B[${s}D`,nextLine:(s=1)=>"\x1B[E".repeat(s),prevLine:(s=1)=>"\x1B[F".repeat(s),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Es={up:(s=1)=>"\x1B[S".repeat(s),down:(s=1)=>"\x1B[T".repeat(s)},Is={screen:"\x1B[2J",up:(s=1)=>"\x1B[1J".repeat(s),down:(s=1)=>"\x1B[J".repeat(s),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(s){let n="";for(let e=0;e<s;e++)n+=this.line+(e<s-1?F.up():"");if(s)n+=F.left;return n}};Ao.exports={cursor:F,scroll:Es,erase:Is,beep:"\x07"}});var so=u((xn,oo)=>{var V=process||{},Co=V.argv||[],G=V.env||{},Os=!(!!G.NO_COLOR||Co.includes("--no-color"))&&(!!G.FORCE_COLOR||Co.includes("--color")||V.platform==="win32"||(V.stdout||{}).isTTY&&G.TERM!=="dumb"||!!G.CI),vs=(s,n,e=s)=>(l)=>{let r=""+l,i=r.indexOf(n,s.length);return~i?s+$s(r,n,e,i)+n:s+r+n},$s=(s,n,e,l)=>{let r="",i=0;do r+=s.substring(i,l)+e,i=l+n.length,l=s.indexOf(n,i);while(~l);return r+s.substring(i)},No=(s=Os)=>{let n=s?vs:()=>String;return{isColorSupported:s,reset:n("\x1B[0m","\x1B[0m"),bold:n("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:n("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:n("\x1B[3m","\x1B[23m"),underline:n("\x1B[4m","\x1B[24m"),inverse:n("\x1B[7m","\x1B[27m"),hidden:n("\x1B[8m","\x1B[28m"),strikethrough:n("\x1B[9m","\x1B[29m"),black:n("\x1B[30m","\x1B[39m"),red:n("\x1B[31m","\x1B[39m"),green:n("\x1B[32m","\x1B[39m"),yellow:n("\x1B[33m","\x1B[39m"),blue:n("\x1B[34m","\x1B[39m"),magenta:n("\x1B[35m","\x1B[39m"),cyan:n("\x1B[36m","\x1B[39m"),white:n("\x1B[37m","\x1B[39m"),gray:n("\x1B[90m","\x1B[39m"),bgBlack:n("\x1B[40m","\x1B[49m"),bgRed:n("\x1B[41m","\x1B[49m"),bgGreen:n("\x1B[42m","\x1B[49m"),bgYellow:n("\x1B[43m","\x1B[49m"),bgBlue:n("\x1B[44m","\x1B[49m"),bgMagenta:n("\x1B[45m","\x1B[49m"),bgCyan:n("\x1B[46m","\x1B[49m"),bgWhite:n("\x1B[47m","\x1B[49m"),blackBright:n("\x1B[90m","\x1B[39m"),redBright:n("\x1B[91m","\x1B[39m"),greenBright:n("\x1B[92m","\x1B[39m"),yellowBright:n("\x1B[93m","\x1B[39m"),blueBright:n("\x1B[94m","\x1B[39m"),magentaBright:n("\x1B[95m","\x1B[39m"),cyanBright:n("\x1B[96m","\x1B[39m"),whiteBright:n("\x1B[97m","\x1B[39m"),bgBlackBright:n("\x1B[100m","\x1B[49m"),bgRedBright:n("\x1B[101m","\x1B[49m"),bgGreenBright:n("\x1B[102m","\x1B[49m"),bgYellowBright:n("\x1B[103m","\x1B[49m"),bgBlueBright:n("\x1B[104m","\x1B[49m"),bgMagentaBright:n("\x1B[105m","\x1B[49m"),bgCyanBright:n("\x1B[106m","\x1B[49m"),bgWhiteBright:n("\x1B[107m","\x1B[49m")}};oo.exports=No();oo.exports.createColors=No});var ps=u((un,mn)=>{mn.exports={name:"@activade/open-workflows",version:"2.0.5",description:"AI-powered GitHub automation workflows via composite actions",keywords:["github","github-actions","ai","automation","code-review","pr-review","issue-labeling","opencode"],author:"activadee",license:"MIT",repository:{type:"git",url:"git+https://github.com/activadee/open-workflows.git"},type:"module",bin:{"open-workflows":"dist/cli/index.js"},files:["dist","actions","README.md","LICENSE"],scripts:{clean:"rm -rf dist",build:"bun run clean && bun build src/cli/index.ts --outdir dist/cli --target bun --format esm --minify",dev:"bun run build --watch",typecheck:"tsc --noEmit",test:"bun test",prepublishOnly:"bun run clean && bun run build && bun run typecheck"},dependencies:{"@clack/prompts":"^0.10.0",picocolors:"^1.1.1"},devDependencies:{"@types/node":"^22.0.0","@types/bun":"^1.3.5",typescript:"^5.6.0"},engines:{node:">=18.0.0"}}});import{stripVTControlCharacters as co}from"util";var x=H(D(),1);import{stdin as Lo,stdout as Go}from"process";import*as S from"readline";import To from"readline";import{Writable as Ss}from"stream";function _s({onlyFirst:s=!1}={}){let n=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(n,s?void 0:"g")}var As=_s();function Vo(s){if(typeof s!="string")throw TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(As,"")}function Yo(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var jo={exports:{}};(function(s){var n={};s.exports=n,n.eastAsianWidth=function(l){var r=l.charCodeAt(0),i=l.length==2?l.charCodeAt(1):0,o=r;return 55296<=r&&r<=56319&&56320<=i&&i<=57343&&(r&=1023,i&=1023,o=r<<10|i,o+=65536),o==12288||65281<=o&&o<=65376||65504<=o&&o<=65510?"F":o==8361||65377<=o&&o<=65470||65474<=o&&o<=65479||65482<=o&&o<=65487||65490<=o&&o<=65495||65498<=o&&o<=65500||65512<=o&&o<=65518?"H":4352<=o&&o<=4447||4515<=o&&o<=4519||4602<=o&&o<=4607||9001<=o&&o<=9002||11904<=o&&o<=11929||11931<=o&&o<=12019||12032<=o&&o<=12245||12272<=o&&o<=12283||12289<=o&&o<=12350||12353<=o&&o<=12438||12441<=o&&o<=12543||12549<=o&&o<=12589||12593<=o&&o<=12686||12688<=o&&o<=12730||12736<=o&&o<=12771||12784<=o&&o<=12830||12832<=o&&o<=12871||12880<=o&&o<=13054||13056<=o&&o<=19903||19968<=o&&o<=42124||42128<=o&&o<=42182||43360<=o&&o<=43388||44032<=o&&o<=55203||55216<=o&&o<=55238||55243<=o&&o<=55291||63744<=o&&o<=64255||65040<=o&&o<=65049||65072<=o&&o<=65106||65108<=o&&o<=65126||65128<=o&&o<=65131||110592<=o&&o<=110593||127488<=o&&o<=127490||127504<=o&&o<=127546||127552<=o&&o<=127560||127568<=o&&o<=127569||131072<=o&&o<=194367||177984<=o&&o<=196605||196608<=o&&o<=262141?"W":32<=o&&o<=126||162<=o&&o<=163||165<=o&&o<=166||o==172||o==175||10214<=o&&o<=10221||10629<=o&&o<=10630?"Na":o==161||o==164||167<=o&&o<=168||o==170||173<=o&&o<=174||176<=o&&o<=180||182<=o&&o<=186||188<=o&&o<=191||o==198||o==208||215<=o&&o<=216||222<=o&&o<=225||o==230||232<=o&&o<=234||236<=o&&o<=237||o==240||242<=o&&o<=243||247<=o&&o<=250||o==252||o==254||o==257||o==273||o==275||o==283||294<=o&&o<=295||o==299||305<=o&&o<=307||o==312||319<=o&&o<=322||o==324||328<=o&&o<=331||o==333||338<=o&&o<=339||358<=o&&o<=359||o==363||o==462||o==464||o==466||o==468||o==470||o==472||o==474||o==476||o==593||o==609||o==708||o==711||713<=o&&o<=715||o==717||o==720||728<=o&&o<=731||o==733||o==735||768<=o&&o<=879||913<=o&&o<=929||931<=o&&o<=937||945<=o&&o<=961||963<=o&&o<=969||o==1025||1040<=o&&o<=1103||o==1105||o==8208||8211<=o&&o<=8214||8216<=o&&o<=8217||8220<=o&&o<=8221||8224<=o&&o<=8226||8228<=o&&o<=8231||o==8240||8242<=o&&o<=8243||o==8245||o==8251||o==8254||o==8308||o==8319||8321<=o&&o<=8324||o==8364||o==8451||o==8453||o==8457||o==8467||o==8470||8481<=o&&o<=8482||o==8486||o==8491||8531<=o&&o<=8532||8539<=o&&o<=8542||8544<=o&&o<=8555||8560<=o&&o<=8569||o==8585||8592<=o&&o<=8601||8632<=o&&o<=8633||o==8658||o==8660||o==8679||o==8704||8706<=o&&o<=8707||8711<=o&&o<=8712||o==8715||o==8719||o==8721||o==8725||o==8730||8733<=o&&o<=8736||o==8739||o==8741||8743<=o&&o<=8748||o==8750||8756<=o&&o<=8759||8764<=o&&o<=8765||o==8776||o==8780||o==8786||8800<=o&&o<=8801||8804<=o&&o<=8807||8810<=o&&o<=8811||8814<=o&&o<=8815||8834<=o&&o<=8835||8838<=o&&o<=8839||o==8853||o==8857||o==8869||o==8895||o==8978||9312<=o&&o<=9449||9451<=o&&o<=9547||9552<=o&&o<=9587||9600<=o&&o<=9615||9618<=o&&o<=9621||9632<=o&&o<=9633||9635<=o&&o<=9641||9650<=o&&o<=9651||9654<=o&&o<=9655||9660<=o&&o<=9661||9664<=o&&o<=9665||9670<=o&&o<=9672||o==9675||9678<=o&&o<=9681||9698<=o&&o<=9701||o==9711||9733<=o&&o<=9734||o==9737||9742<=o&&o<=9743||9748<=o&&o<=9749||o==9756||o==9758||o==9792||o==9794||9824<=o&&o<=9825||9827<=o&&o<=9829||9831<=o&&o<=9834||9836<=o&&o<=9837||o==9839||9886<=o&&o<=9887||9918<=o&&o<=9919||9924<=o&&o<=9933||9935<=o&&o<=9953||o==9955||9960<=o&&o<=9983||o==10045||o==10071||10102<=o&&o<=10111||11093<=o&&o<=11097||12872<=o&&o<=12879||57344<=o&&o<=63743||65024<=o&&o<=65039||o==65533||127232<=o&&o<=127242||127248<=o&&o<=127277||127280<=o&&o<=127337||127344<=o&&o<=127386||917760<=o&&o<=917999||983040<=o&&o<=1048573||1048576<=o&&o<=1114109?"A":"N"},n.characterLength=function(l){var r=this.eastAsianWidth(l);return r=="F"||r=="W"||r=="A"?2:1};function e(l){return l.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}n.length=function(l){for(var r=e(l),i=0,o=0;o<r.length;o++)i=i+this.characterLength(r[o]);return i},n.slice=function(l,r,i){textLen=n.length(l),r=r||0,i=i||1,r<0&&(r=textLen+r),i<0&&(i=textLen+i);for(var o="",a=0,p=e(l),m=0;m<p.length;m++){var w=p[m],c=n.length(w);if(a>=r-(c==2?1:0))if(a+c<=i)o+=w;else break;a+=c}return o}})(jo);var Cs=jo.exports,Ns=Yo(Cs),Ts=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},Rs=Yo(Ts);function K(s,n={}){if(typeof s!="string"||s.length===0||(n={ambiguousIsNarrow:!0,...n},s=Vo(s),s.length===0))return 0;s=s.replace(Rs()," ");let e=n.ambiguousIsNarrow?1:2,l=0;for(let r of s){let i=r.codePointAt(0);if(i<=31||i>=127&&i<=159||i>=768&&i<=879)continue;switch(Ns.eastAsianWidth(r)){case"F":case"W":l+=2;break;case"A":l+=e;break;default:l+=1}}return l}var no=10,Ro=(s=0)=>(n)=>`\x1B[${n+s}m`,Po=(s=0)=>(n)=>`\x1B[${38+s};5;${n}m`,Bo=(s=0)=>(n,e,l)=>`\x1B[${38+s};2;${n};${e};${l}m`,f={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(f.modifier);var Ps=Object.keys(f.color),Bs=Object.keys(f.bgColor);[...Ps,...Bs];function Hs(){let s=new Map;for(let[n,e]of Object.entries(f)){for(let[l,r]of Object.entries(e))f[l]={open:`\x1B[${r[0]}m`,close:`\x1B[${r[1]}m`},e[l]=f[l],s.set(r[0],r[1]);Object.defineProperty(f,n,{value:e,enumerable:!1})}return Object.defineProperty(f,"codes",{value:s,enumerable:!1}),f.color.close="\x1B[39m",f.bgColor.close="\x1B[49m",f.color.ansi=Ro(),f.color.ansi256=Po(),f.color.ansi16m=Bo(),f.bgColor.ansi=Ro(no),f.bgColor.ansi256=Po(no),f.bgColor.ansi16m=Bo(no),Object.defineProperties(f,{rgbToAnsi256:{value:(n,e,l)=>n===e&&e===l?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(e/255*5)+Math.round(l/255*5),enumerable:!1},hexToRgb:{value:(n)=>{let e=/[a-f\d]{6}|[a-f\d]{3}/i.exec(n.toString(16));if(!e)return[0,0,0];let[l]=e;l.length===3&&(l=[...l].map((i)=>i+i).join(""));let r=Number.parseInt(l,16);return[r>>16&255,r>>8&255,r&255]},enumerable:!1},hexToAnsi256:{value:(n)=>f.rgbToAnsi256(...f.hexToRgb(n)),enumerable:!1},ansi256ToAnsi:{value:(n)=>{if(n<8)return 30+n;if(n<16)return 90+(n-8);let e,l,r;if(n>=232)e=((n-232)*10+8)/255,l=e,r=e;else{n-=16;let a=n%36;e=Math.floor(n/36)/5,l=Math.floor(a/6)/5,r=a%6/5}let i=Math.max(e,l,r)*2;if(i===0)return 30;let o=30+(Math.round(r)<<2|Math.round(l)<<1|Math.round(e));return i===2&&(o+=60),o},enumerable:!1},rgbToAnsi:{value:(n,e,l)=>f.ansi256ToAnsi(f.rgbToAnsi256(n,e,l)),enumerable:!1},hexToAnsi:{value:(n)=>f.ansi256ToAnsi(f.hexToAnsi256(n)),enumerable:!1}}),f}var Ks=Hs(),q=new Set(["\x1B","\x9B"]),Ws=39,lo="\x07",qo="[",Us="]",zo="m",io=`${Us}8;;`,Ho=(s)=>`${q.values().next().value}${qo}${s}${zo}`,Ko=(s)=>`${q.values().next().value}${io}${s}${lo}`,Ls=(s)=>s.split(" ").map((n)=>K(n)),eo=(s,n,e)=>{let l=[...n],r=!1,i=!1,o=K(Vo(s[s.length-1]));for(let[a,p]of l.entries()){let m=K(p);if(o+m<=e?s[s.length-1]+=p:(s.push(p),o=0),q.has(p)&&(r=!0,i=l.slice(a+1).join("").startsWith(io)),r){i?p===lo&&(r=!1,i=!1):p===zo&&(r=!1);continue}o+=m,o===e&&a<l.length-1&&(s.push(""),o=0)}!o&&s[s.length-1].length>0&&s.length>1&&(s[s.length-2]+=s.pop())},Gs=(s)=>{let n=s.split(" "),e=n.length;for(;e>0&&!(K(n[e-1])>0);)e--;return e===n.length?s:n.slice(0,e).join(" ")+n.slice(e).join("")},Vs=(s,n,e={})=>{if(e.trim!==!1&&s.trim()==="")return"";let l="",r,i,o=Ls(s),a=[""];for(let[m,w]of s.split(" ").entries()){e.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let c=K(a[a.length-1]);if(m!==0&&(c>=n&&(e.wordWrap===!1||e.trim===!1)&&(a.push(""),c=0),(c>0||e.trim===!1)&&(a[a.length-1]+=" ",c++)),e.hard&&o[m]>n){let h=n-c,I=1+Math.floor((o[m]-h-1)/n);Math.floor((o[m]-1)/n)<I&&a.push(""),eo(a,w,n);continue}if(c+o[m]>n&&c>0&&o[m]>0){if(e.wordWrap===!1&&c<n){eo(a,w,n);continue}a.push("")}if(c+o[m]>n&&e.wordWrap===!1){eo(a,w,n);continue}a[a.length-1]+=w}e.trim!==!1&&(a=a.map((m)=>Gs(m)));let p=[...a.join(`
|
|
4
|
-
`)];for(let[m,
|
|
5
|
-
`?(
|
|
6
|
-
`&&(r&&c&&(l+=
|
|
3
|
+
var xs=Object.create;var{getPrototypeOf:Es,defineProperty:So,getOwnPropertyNames:ks}=Object;var Is=Object.prototype.hasOwnProperty;var H=(s,e,n)=>{n=s!=null?xs(Es(s)):{};let l=e||!s||!s.__esModule?So(n,"default",{value:s,enumerable:!0}):n;for(let r of ks(s))if(!Is.call(l,r))So(l,r,{get:()=>s[r],enumerable:!0});return l};var u=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports);var D=u((de,Ao)=>{var F={to(s,e){if(!e)return`\x1B[${s+1}G`;return`\x1B[${e+1};${s+1}H`},move(s,e){let n="";if(s<0)n+=`\x1B[${-s}D`;else if(s>0)n+=`\x1B[${s}C`;if(e<0)n+=`\x1B[${-e}A`;else if(e>0)n+=`\x1B[${e}B`;return n},up:(s=1)=>`\x1B[${s}A`,down:(s=1)=>`\x1B[${s}B`,forward:(s=1)=>`\x1B[${s}C`,backward:(s=1)=>`\x1B[${s}D`,nextLine:(s=1)=>"\x1B[E".repeat(s),prevLine:(s=1)=>"\x1B[F".repeat(s),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},ys={up:(s=1)=>"\x1B[S".repeat(s),down:(s=1)=>"\x1B[T".repeat(s)},vs={screen:"\x1B[2J",up:(s=1)=>"\x1B[1J".repeat(s),down:(s=1)=>"\x1B[J".repeat(s),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(s){let e="";for(let n=0;n<s;n++)e+=this.line+(n<s-1?F.up():"");if(s)e+=F.left;return e}};Ao.exports={cursor:F,scroll:ys,erase:vs,beep:"\x07"}});var so=u((xe,oo)=>{var V=process||{},To=V.argv||[],L=V.env||{},Os=!(!!L.NO_COLOR||To.includes("--no-color"))&&(!!L.FORCE_COLOR||To.includes("--color")||V.platform==="win32"||(V.stdout||{}).isTTY&&L.TERM!=="dumb"||!!L.CI),$s=(s,e,n=s)=>(l)=>{let r=""+l,t=r.indexOf(e,s.length);return~t?s+_s(r,e,n,t)+e:s+r+e},_s=(s,e,n,l)=>{let r="",t=0;do r+=s.substring(t,l)+n,t=l+e.length,l=s.indexOf(e,t);while(~l);return r+s.substring(t)},Co=(s=Os)=>{let e=s?$s:()=>String;return{isColorSupported:s,reset:e("\x1B[0m","\x1B[0m"),bold:e("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:e("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:e("\x1B[3m","\x1B[23m"),underline:e("\x1B[4m","\x1B[24m"),inverse:e("\x1B[7m","\x1B[27m"),hidden:e("\x1B[8m","\x1B[28m"),strikethrough:e("\x1B[9m","\x1B[29m"),black:e("\x1B[30m","\x1B[39m"),red:e("\x1B[31m","\x1B[39m"),green:e("\x1B[32m","\x1B[39m"),yellow:e("\x1B[33m","\x1B[39m"),blue:e("\x1B[34m","\x1B[39m"),magenta:e("\x1B[35m","\x1B[39m"),cyan:e("\x1B[36m","\x1B[39m"),white:e("\x1B[37m","\x1B[39m"),gray:e("\x1B[90m","\x1B[39m"),bgBlack:e("\x1B[40m","\x1B[49m"),bgRed:e("\x1B[41m","\x1B[49m"),bgGreen:e("\x1B[42m","\x1B[49m"),bgYellow:e("\x1B[43m","\x1B[49m"),bgBlue:e("\x1B[44m","\x1B[49m"),bgMagenta:e("\x1B[45m","\x1B[49m"),bgCyan:e("\x1B[46m","\x1B[49m"),bgWhite:e("\x1B[47m","\x1B[49m"),blackBright:e("\x1B[90m","\x1B[39m"),redBright:e("\x1B[91m","\x1B[39m"),greenBright:e("\x1B[92m","\x1B[39m"),yellowBright:e("\x1B[93m","\x1B[39m"),blueBright:e("\x1B[94m","\x1B[39m"),magentaBright:e("\x1B[95m","\x1B[39m"),cyanBright:e("\x1B[96m","\x1B[39m"),whiteBright:e("\x1B[97m","\x1B[39m"),bgBlackBright:e("\x1B[100m","\x1B[49m"),bgRedBright:e("\x1B[101m","\x1B[49m"),bgGreenBright:e("\x1B[102m","\x1B[49m"),bgYellowBright:e("\x1B[103m","\x1B[49m"),bgBlueBright:e("\x1B[104m","\x1B[49m"),bgMagentaBright:e("\x1B[105m","\x1B[49m"),bgCyanBright:e("\x1B[106m","\x1B[49m"),bgWhiteBright:e("\x1B[107m","\x1B[49m")}};oo.exports=Co();oo.exports.createColors=Co});var cs=u((on,me)=>{me.exports={name:"@activade/open-workflows",version:"2.0.7",description:"AI-powered GitHub automation workflows via composite actions",keywords:["github","github-actions","ai","automation","code-review","pr-review","issue-labeling","opencode"],author:"activadee",license:"MIT",repository:{type:"git",url:"git+https://github.com/activadee/open-workflows.git"},type:"module",bin:{"open-workflows":"dist/cli/index.js"},files:["dist","actions","README.md","LICENSE"],scripts:{clean:"rm -rf dist",build:"bun run clean && bun build src/cli/index.ts --outdir dist/cli --target bun --format esm --minify",dev:"bun run build --watch",typecheck:"tsc --noEmit",test:"bun test",prepublishOnly:"bun run clean && bun run build && bun run typecheck"},dependencies:{"@clack/prompts":"^0.11.0",picocolors:"^1.1.1"},devDependencies:{"@types/node":"^25.0.10","@types/bun":"^1.3.5",typescript:"^5.6.0"},engines:{node:">=18.0.0"}}});import{stripVTControlCharacters as co}from"util";var x=H(D(),1);import{stdin as Lo,stdout as Vo}from"process";import*as _ from"readline";import Po from"readline";import{Writable as Ns}from"stream";function Ss({onlyFirst:s=!1}={}){let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(e,s?void 0:"g")}var As=Ss();function Yo(s){if(typeof s!="string")throw TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(As,"")}function jo(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var qo={exports:{}};(function(s){var e={};s.exports=e,e.eastAsianWidth=function(l){var r=l.charCodeAt(0),t=l.length==2?l.charCodeAt(1):0,o=r;return 55296<=r&&r<=56319&&56320<=t&&t<=57343&&(r&=1023,t&=1023,o=r<<10|t,o+=65536),o==12288||65281<=o&&o<=65376||65504<=o&&o<=65510?"F":o==8361||65377<=o&&o<=65470||65474<=o&&o<=65479||65482<=o&&o<=65487||65490<=o&&o<=65495||65498<=o&&o<=65500||65512<=o&&o<=65518?"H":4352<=o&&o<=4447||4515<=o&&o<=4519||4602<=o&&o<=4607||9001<=o&&o<=9002||11904<=o&&o<=11929||11931<=o&&o<=12019||12032<=o&&o<=12245||12272<=o&&o<=12283||12289<=o&&o<=12350||12353<=o&&o<=12438||12441<=o&&o<=12543||12549<=o&&o<=12589||12593<=o&&o<=12686||12688<=o&&o<=12730||12736<=o&&o<=12771||12784<=o&&o<=12830||12832<=o&&o<=12871||12880<=o&&o<=13054||13056<=o&&o<=19903||19968<=o&&o<=42124||42128<=o&&o<=42182||43360<=o&&o<=43388||44032<=o&&o<=55203||55216<=o&&o<=55238||55243<=o&&o<=55291||63744<=o&&o<=64255||65040<=o&&o<=65049||65072<=o&&o<=65106||65108<=o&&o<=65126||65128<=o&&o<=65131||110592<=o&&o<=110593||127488<=o&&o<=127490||127504<=o&&o<=127546||127552<=o&&o<=127560||127568<=o&&o<=127569||131072<=o&&o<=194367||177984<=o&&o<=196605||196608<=o&&o<=262141?"W":32<=o&&o<=126||162<=o&&o<=163||165<=o&&o<=166||o==172||o==175||10214<=o&&o<=10221||10629<=o&&o<=10630?"Na":o==161||o==164||167<=o&&o<=168||o==170||173<=o&&o<=174||176<=o&&o<=180||182<=o&&o<=186||188<=o&&o<=191||o==198||o==208||215<=o&&o<=216||222<=o&&o<=225||o==230||232<=o&&o<=234||236<=o&&o<=237||o==240||242<=o&&o<=243||247<=o&&o<=250||o==252||o==254||o==257||o==273||o==275||o==283||294<=o&&o<=295||o==299||305<=o&&o<=307||o==312||319<=o&&o<=322||o==324||328<=o&&o<=331||o==333||338<=o&&o<=339||358<=o&&o<=359||o==363||o==462||o==464||o==466||o==468||o==470||o==472||o==474||o==476||o==593||o==609||o==708||o==711||713<=o&&o<=715||o==717||o==720||728<=o&&o<=731||o==733||o==735||768<=o&&o<=879||913<=o&&o<=929||931<=o&&o<=937||945<=o&&o<=961||963<=o&&o<=969||o==1025||1040<=o&&o<=1103||o==1105||o==8208||8211<=o&&o<=8214||8216<=o&&o<=8217||8220<=o&&o<=8221||8224<=o&&o<=8226||8228<=o&&o<=8231||o==8240||8242<=o&&o<=8243||o==8245||o==8251||o==8254||o==8308||o==8319||8321<=o&&o<=8324||o==8364||o==8451||o==8453||o==8457||o==8467||o==8470||8481<=o&&o<=8482||o==8486||o==8491||8531<=o&&o<=8532||8539<=o&&o<=8542||8544<=o&&o<=8555||8560<=o&&o<=8569||o==8585||8592<=o&&o<=8601||8632<=o&&o<=8633||o==8658||o==8660||o==8679||o==8704||8706<=o&&o<=8707||8711<=o&&o<=8712||o==8715||o==8719||o==8721||o==8725||o==8730||8733<=o&&o<=8736||o==8739||o==8741||8743<=o&&o<=8748||o==8750||8756<=o&&o<=8759||8764<=o&&o<=8765||o==8776||o==8780||o==8786||8800<=o&&o<=8801||8804<=o&&o<=8807||8810<=o&&o<=8811||8814<=o&&o<=8815||8834<=o&&o<=8835||8838<=o&&o<=8839||o==8853||o==8857||o==8869||o==8895||o==8978||9312<=o&&o<=9449||9451<=o&&o<=9547||9552<=o&&o<=9587||9600<=o&&o<=9615||9618<=o&&o<=9621||9632<=o&&o<=9633||9635<=o&&o<=9641||9650<=o&&o<=9651||9654<=o&&o<=9655||9660<=o&&o<=9661||9664<=o&&o<=9665||9670<=o&&o<=9672||o==9675||9678<=o&&o<=9681||9698<=o&&o<=9701||o==9711||9733<=o&&o<=9734||o==9737||9742<=o&&o<=9743||9748<=o&&o<=9749||o==9756||o==9758||o==9792||o==9794||9824<=o&&o<=9825||9827<=o&&o<=9829||9831<=o&&o<=9834||9836<=o&&o<=9837||o==9839||9886<=o&&o<=9887||9918<=o&&o<=9919||9924<=o&&o<=9933||9935<=o&&o<=9953||o==9955||9960<=o&&o<=9983||o==10045||o==10071||10102<=o&&o<=10111||11093<=o&&o<=11097||12872<=o&&o<=12879||57344<=o&&o<=63743||65024<=o&&o<=65039||o==65533||127232<=o&&o<=127242||127248<=o&&o<=127277||127280<=o&&o<=127337||127344<=o&&o<=127386||917760<=o&&o<=917999||983040<=o&&o<=1048573||1048576<=o&&o<=1114109?"A":"N"},e.characterLength=function(l){var r=this.eastAsianWidth(l);return r=="F"||r=="W"||r=="A"?2:1};function n(l){return l.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}e.length=function(l){for(var r=n(l),t=0,o=0;o<r.length;o++)t=t+this.characterLength(r[o]);return t},e.slice=function(l,r,t){textLen=e.length(l),r=r||0,t=t||1,r<0&&(r=textLen+r),t<0&&(t=textLen+t);for(var o="",a=0,p=n(l),m=0;m<p.length;m++){var f=p[m],c=e.length(f);if(a>=r-(c==2?1:0))if(a+c<=t)o+=f;else break;a+=c}return o}})(qo);var Ts=qo.exports,Cs=jo(Ts),Ps=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},Rs=jo(Ps);function U(s,e={}){if(typeof s!="string"||s.length===0||(e={ambiguousIsNarrow:!0,...e},s=Yo(s),s.length===0))return 0;s=s.replace(Rs()," ");let n=e.ambiguousIsNarrow?1:2,l=0;for(let r of s){let t=r.codePointAt(0);if(t<=31||t>=127&&t<=159||t>=768&&t<=879)continue;switch(Cs.eastAsianWidth(r)){case"F":case"W":l+=2;break;case"A":l+=n;break;default:l+=1}}return l}var eo=10,Ro=(s=0)=>(e)=>`\x1B[${e+s}m`,Bo=(s=0)=>(e)=>`\x1B[${38+s};5;${e}m`,Ho=(s=0)=>(e,n,l)=>`\x1B[${38+s};2;${e};${n};${l}m`,w={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(w.modifier);var Bs=Object.keys(w.color),Hs=Object.keys(w.bgColor);[...Bs,...Hs];function Us(){let s=new Map;for(let[e,n]of Object.entries(w)){for(let[l,r]of Object.entries(n))w[l]={open:`\x1B[${r[0]}m`,close:`\x1B[${r[1]}m`},n[l]=w[l],s.set(r[0],r[1]);Object.defineProperty(w,e,{value:n,enumerable:!1})}return Object.defineProperty(w,"codes",{value:s,enumerable:!1}),w.color.close="\x1B[39m",w.bgColor.close="\x1B[49m",w.color.ansi=Ro(),w.color.ansi256=Bo(),w.color.ansi16m=Ho(),w.bgColor.ansi=Ro(eo),w.bgColor.ansi256=Bo(eo),w.bgColor.ansi16m=Ho(eo),Object.defineProperties(w,{rgbToAnsi256:{value:(e,n,l)=>e===n&&n===l?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(l/255*5),enumerable:!1},hexToRgb:{value:(e)=>{let n=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!n)return[0,0,0];let[l]=n;l.length===3&&(l=[...l].map((t)=>t+t).join(""));let r=Number.parseInt(l,16);return[r>>16&255,r>>8&255,r&255]},enumerable:!1},hexToAnsi256:{value:(e)=>w.rgbToAnsi256(...w.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value:(e)=>{if(e<8)return 30+e;if(e<16)return 90+(e-8);let n,l,r;if(e>=232)n=((e-232)*10+8)/255,l=n,r=n;else{e-=16;let a=e%36;n=Math.floor(e/36)/5,l=Math.floor(a/6)/5,r=a%6/5}let t=Math.max(n,l,r)*2;if(t===0)return 30;let o=30+(Math.round(r)<<2|Math.round(l)<<1|Math.round(n));return t===2&&(o+=60),o},enumerable:!1},rgbToAnsi:{value:(e,n,l)=>w.ansi256ToAnsi(w.rgbToAnsi256(e,n,l)),enumerable:!1},hexToAnsi:{value:(e)=>w.ansi256ToAnsi(w.hexToAnsi256(e)),enumerable:!1}}),w}var Ks=Us(),q=new Set(["\x1B","\x9B"]),Ws=39,lo="\x07",zo="[",Gs="]",Jo="m",to=`${Gs}8;;`,Uo=(s)=>`${q.values().next().value}${zo}${s}${Jo}`,Ko=(s)=>`${q.values().next().value}${to}${s}${lo}`,Ls=(s)=>s.split(" ").map((e)=>U(e)),no=(s,e,n)=>{let l=[...e],r=!1,t=!1,o=U(Yo(s[s.length-1]));for(let[a,p]of l.entries()){let m=U(p);if(o+m<=n?s[s.length-1]+=p:(s.push(p),o=0),q.has(p)&&(r=!0,t=l.slice(a+1).join("").startsWith(to)),r){t?p===lo&&(r=!1,t=!1):p===Jo&&(r=!1);continue}o+=m,o===n&&a<l.length-1&&(s.push(""),o=0)}!o&&s[s.length-1].length>0&&s.length>1&&(s[s.length-2]+=s.pop())},Vs=(s)=>{let e=s.split(" "),n=e.length;for(;n>0&&!(U(e[n-1])>0);)n--;return n===e.length?s:e.slice(0,n).join(" ")+e.slice(n).join("")},Ys=(s,e,n={})=>{if(n.trim!==!1&&s.trim()==="")return"";let l="",r,t,o=Ls(s),a=[""];for(let[m,f]of s.split(" ").entries()){n.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let c=U(a[a.length-1]);if(m!==0&&(c>=e&&(n.wordWrap===!1||n.trim===!1)&&(a.push(""),c=0),(c>0||n.trim===!1)&&(a[a.length-1]+=" ",c++)),n.hard&&o[m]>e){let g=e-c,y=1+Math.floor((o[m]-g-1)/e);Math.floor((o[m]-1)/e)<y&&a.push(""),no(a,f,e);continue}if(c+o[m]>e&&c>0&&o[m]>0){if(n.wordWrap===!1&&c<e){no(a,f,e);continue}a.push("")}if(c+o[m]>e&&n.wordWrap===!1){no(a,f,e);continue}a[a.length-1]+=f}n.trim!==!1&&(a=a.map((m)=>Vs(m)));let p=[...a.join(`
|
|
4
|
+
`)];for(let[m,f]of p.entries()){if(l+=f,q.has(f)){let{groups:g}=new RegExp(`(?:\\${zo}(?<code>\\d+)m|\\${to}(?<uri>.*)${lo})`).exec(p.slice(m).join(""))||{groups:{}};if(g.code!==void 0){let y=Number.parseFloat(g.code);r=y===Ws?void 0:y}else g.uri!==void 0&&(t=g.uri.length===0?void 0:g.uri)}let c=Ks.codes.get(Number(r));p[m+1]===`
|
|
5
|
+
`?(t&&(l+=Ko("")),r&&c&&(l+=Uo(c))):f===`
|
|
6
|
+
`&&(r&&c&&(l+=Uo(r)),t&&(l+=Ko(t)))}return l};function Wo(s,e,n){return String(s).normalize().replace(/\r\n/g,`
|
|
7
7
|
`).split(`
|
|
8
|
-
`).map((l)=>
|
|
9
|
-
`)}var
|
|
10
|
-
`),l=
|
|
11
|
-
`),r=[];for(let
|
|
8
|
+
`).map((l)=>Ys(l,e,n)).join(`
|
|
9
|
+
`)}var js=["up","down","left","right","space","enter","cancel"],j={actions:new Set(js),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]])};function io(s,e){if(typeof s=="string")return j.aliases.get(s)===e;for(let n of s)if(n!==void 0&&io(n,e))return!0;return!1}function qs(s,e){if(s===e)return;let n=s.split(`
|
|
10
|
+
`),l=e.split(`
|
|
11
|
+
`),r=[];for(let t=0;t<Math.max(n.length,l.length);t++)n[t]!==l[t]&&r.push(t);return r}var zs=globalThis.process.platform.startsWith("win"),ro=Symbol("clack:cancel");function C(s){return s===ro}function Y(s,e){let n=s;n.isTTY&&n.setRawMode(e)}function Qo({input:s=Lo,output:e=Vo,overwrite:n=!0,hideCursor:l=!0}={}){let r=_.createInterface({input:s,output:e,prompt:"",tabSize:1});_.emitKeypressEvents(s,r),s.isTTY&&s.setRawMode(!0);let t=(o,{name:a,sequence:p})=>{let m=String(o);if(io([m,a,p],"cancel")){l&&e.write(x.cursor.show),process.exit(0);return}if(!n)return;_.moveCursor(e,a==="return"?0:-1,a==="return"?-1:0,()=>{_.clearLine(e,1,()=>{s.once("keypress",t)})})};return l&&e.write(x.cursor.hide),s.once("keypress",t),()=>{s.off("keypress",t),l&&e.write(x.cursor.show),s.isTTY&&!zs&&s.setRawMode(!1),r.terminal=!1,r.close()}}var Js=Object.defineProperty,Qs=(s,e,n)=>(e in s)?Js(s,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):s[e]=n,I=(s,e,n)=>(Qs(s,typeof e!="symbol"?e+"":e,n),n);class ao{constructor(s,e=!0){I(this,"input"),I(this,"output"),I(this,"_abortSignal"),I(this,"rl"),I(this,"opts"),I(this,"_render"),I(this,"_track",!1),I(this,"_prevFrame",""),I(this,"_subscribers",new Map),I(this,"_cursor",0),I(this,"state","initial"),I(this,"error",""),I(this,"value");let{input:n=Lo,output:l=Vo,render:r,signal:t,...o}=s;this.opts=o,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=r.bind(this),this._track=e,this._abortSignal=t,this.input=n,this.output=l}unsubscribe(){this._subscribers.clear()}setSubscriber(s,e){let n=this._subscribers.get(s)??[];n.push(e),this._subscribers.set(s,n)}on(s,e){this.setSubscriber(s,{cb:e})}once(s,e){this.setSubscriber(s,{cb:e,once:!0})}emit(s,...e){let n=this._subscribers.get(s)??[],l=[];for(let r of n)r.cb(...e),r.once&&l.push(()=>n.splice(n.indexOf(r),1));for(let r of l)r()}prompt(){return new Promise((s,e)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),s(ro);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}let n=new Ns;n._write=(l,r,t)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),t()},this.input.pipe(n),this.rl=Po.createInterface({input:this.input,output:n,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),Po.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),Y(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(x.cursor.show),this.output.off("resize",this.render),Y(this.input,!1),s(this.value)}),this.once("cancel",()=>{this.output.write(x.cursor.show),this.output.off("resize",this.render),Y(this.input,!1),s(ro)})})}onKeypress(s,e){if(this.state==="error"&&(this.state="active"),e?.name&&(!this._track&&j.aliases.has(e.name)&&this.emit("cursor",j.aliases.get(e.name)),j.actions.has(e.name)&&this.emit("cursor",e.name)),s&&(s.toLowerCase()==="y"||s.toLowerCase()==="n")&&this.emit("confirm",s.toLowerCase()==="y"),s==="\t"&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),s&&this.emit("key",s.toLowerCase()),e?.name==="return"){if(this.opts.validate){let n=this.opts.validate(this.value);n&&(this.error=n instanceof Error?n.message:n,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}io([s,e?.name,e?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
|
|
12
12
|
`),Y(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let s=Wo(this._prevFrame,process.stdout.columns,{hard:!0}).split(`
|
|
13
|
-
`).length-1;this.output.write(x.cursor.move(-999,s*-1))}render(){let s=Wo(this._render(this)??"",process.stdout.columns,{hard:!0});if(s!==this._prevFrame){if(this.state==="initial")this.output.write(x.cursor.hide);else{let
|
|
14
|
-
`);this.output.write(l[
|
|
15
|
-
`).slice(
|
|
16
|
-
`)),this._prevFrame=s;return}this.output.write(x.erase.down())}this.output.write(s),this.state==="initial"&&(this.state="active"),this._prevFrame=s}}}class po extends ao{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(s){super(s,!1),this.value=!!s.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",(
|
|
17
|
-
${
|
|
18
|
-
`,r=this.value?n
|
|
19
|
-
${
|
|
20
|
-
${
|
|
21
|
-
`}}}).prompt()};var ns=(s)=>{let
|
|
22
|
-
${
|
|
23
|
-
${
|
|
24
|
-
`,l=(r,
|
|
25
|
-
${
|
|
26
|
-
`).map((
|
|
27
|
-
`);return`${
|
|
28
|
-
${
|
|
13
|
+
`).length-1;this.output.write(x.cursor.move(-999,s*-1))}render(){let s=Wo(this._render(this)??"",process.stdout.columns,{hard:!0});if(s!==this._prevFrame){if(this.state==="initial")this.output.write(x.cursor.hide);else{let e=qs(this._prevFrame,s);if(this.restoreCursor(),e&&e?.length===1){let n=e[0];this.output.write(x.cursor.move(0,n)),this.output.write(x.erase.lines(1));let l=s.split(`
|
|
14
|
+
`);this.output.write(l[n]),this._prevFrame=s,this.output.write(x.cursor.move(0,l.length-n-1));return}if(e&&e?.length>1){let n=e[0];this.output.write(x.cursor.move(0,n)),this.output.write(x.erase.down());let l=s.split(`
|
|
15
|
+
`).slice(n);this.output.write(l.join(`
|
|
16
|
+
`)),this._prevFrame=s;return}this.output.write(x.erase.down())}this.output.write(s),this.state==="initial"&&(this.state="active"),this._prevFrame=s}}}class po extends ao{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(s){super(s,!1),this.value=!!s.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",(e)=>{this.output.write(x.cursor.move(0,-1)),this.value=e,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var Xs;Xs=new WeakMap;var Zs=Object.defineProperty,Ms=(s,e,n)=>(e in s)?Zs(s,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):s[e]=n,Go=(s,e,n)=>(Ms(s,typeof e!="symbol"?e+"":e,n),n),Xo=class extends ao{constructor(s){super(s,!1),Go(this,"options"),Go(this,"cursor",0),this.options=s.options,this.value=[...s.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:e})=>e===s.cursorAt),0),this.on("key",(e)=>{e==="a"&&this.toggleAll()}),this.on("cursor",(e)=>{switch(e){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case"space":this.toggleValue();break}})}get _value(){return this.options[this.cursor].value}toggleAll(){let s=this.value.length===this.options.length;this.value=s?[]:this.options.map((e)=>e.value)}toggleValue(){let s=this.value.includes(this._value);this.value=s?this.value.filter((e)=>e!==this._value):[...this.value,this._value]}};var i=H(so(),1),z=H(D(),1);import O from"process";function us(){return O.platform!=="win32"?O.env.TERM!=="linux":!!O.env.CI||!!O.env.WT_SESSION||!!O.env.TERMINUS_SUBLIME||O.env.ConEmuTask==="{cmd::Cmder}"||O.env.TERM_PROGRAM==="Terminus-Sublime"||O.env.TERM_PROGRAM==="vscode"||O.env.TERM==="xterm-256color"||O.env.TERM==="alacritty"||O.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var mo=us(),h=(s,e)=>mo?s:e,Fs=h("\u25C6","*"),os=h("\u25A0","x"),ss=h("\u25B2","x"),J=h("\u25C7","o"),Ds=h("\u250C","T"),b=h("\u2502","|"),K=h("\u2514","\u2014"),Zo=h("\u25CF",">"),Mo=h("\u25CB"," "),oe=h("\u25FB","[\u2022]"),uo=h("\u25FC","[+]"),se=h("\u25FB","[ ]"),Re=h("\u25AA","\u2022"),Fo=h("\u2500","-"),ee=h("\u256E","+"),ne=h("\u251C","+"),re=h("\u256F","+"),le=h("\u25CF","\u2022"),te=h("\u25C6","*"),ie=h("\u25B2","!"),ae=h("\u25A0","x"),es=(s)=>{switch(s){case"initial":case"active":return i.default.cyan(Fs);case"cancel":return i.default.red(os);case"error":return i.default.yellow(ss);case"submit":return i.default.green(J)}},Do=(s)=>{let{cursor:e,options:n,style:l}=s,r=s.maxItems??Number.POSITIVE_INFINITY,t=Math.max(process.stdout.rows-4,0),o=Math.min(t,Math.max(r,5)),a=0;e>=a+o-3?a=Math.max(Math.min(e-o+3,n.length-o),0):e<a+2&&(a=Math.max(e-2,0));let p=o<n.length&&a>0,m=o<n.length&&a+o<n.length;return n.slice(a,a+o).map((f,c,g)=>{let y=c===0&&p,R=c===g.length-1&&m;return y||R?i.default.dim("..."):l(f,c+a===e)})};var Q=(s)=>{let e=s.active??"Yes",n=s.inactive??"No";return new po({active:e,inactive:n,initialValue:s.initialValue??!0,render(){let l=`${i.default.gray(b)}
|
|
17
|
+
${es(this.state)} ${s.message}
|
|
18
|
+
`,r=this.value?e:n;switch(this.state){case"submit":return`${l}${i.default.gray(b)} ${i.default.dim(r)}`;case"cancel":return`${l}${i.default.gray(b)} ${i.default.strikethrough(i.default.dim(r))}
|
|
19
|
+
${i.default.gray(b)}`;default:return`${l}${i.default.cyan(b)} ${this.value?`${i.default.green(Zo)} ${e}`:`${i.default.dim(Mo)} ${i.default.dim(e)}`} ${i.default.dim("/")} ${this.value?`${i.default.dim(Mo)} ${i.default.dim(n)}`:`${i.default.green(Zo)} ${n}`}
|
|
20
|
+
${i.default.cyan(K)}
|
|
21
|
+
`}}}).prompt()};var ns=(s)=>{let e=(n,l)=>{let r=n.label??String(n.value);return l==="active"?`${i.default.cyan(oe)} ${r} ${n.hint?i.default.dim(`(${n.hint})`):""}`:l==="selected"?`${i.default.green(uo)} ${i.default.dim(r)} ${n.hint?i.default.dim(`(${n.hint})`):""}`:l==="cancelled"?`${i.default.strikethrough(i.default.dim(r))}`:l==="active-selected"?`${i.default.green(uo)} ${r} ${n.hint?i.default.dim(`(${n.hint})`):""}`:l==="submitted"?`${i.default.dim(r)}`:`${i.default.dim(se)} ${i.default.dim(r)}`};return new Xo({options:s.options,initialValues:s.initialValues,required:s.required??!0,cursorAt:s.cursorAt,validate(n){if(this.required&&n.length===0)return`Please select at least one option.
|
|
22
|
+
${i.default.reset(i.default.dim(`Press ${i.default.gray(i.default.bgWhite(i.default.inverse(" space ")))} to select, ${i.default.gray(i.default.bgWhite(i.default.inverse(" enter ")))} to submit`))}`},render(){let n=`${i.default.gray(b)}
|
|
23
|
+
${es(this.state)} ${s.message}
|
|
24
|
+
`,l=(r,t)=>{let o=this.value.includes(r.value);return t&&o?e(r,"active-selected"):o?e(r,"selected"):e(r,t?"active":"inactive")};switch(this.state){case"submit":return`${n}${i.default.gray(b)} ${this.options.filter(({value:r})=>this.value.includes(r)).map((r)=>e(r,"submitted")).join(i.default.dim(", "))||i.default.dim("none")}`;case"cancel":{let r=this.options.filter(({value:t})=>this.value.includes(t)).map((t)=>e(t,"cancelled")).join(i.default.dim(", "));return`${n}${i.default.gray(b)} ${r.trim()?`${r}
|
|
25
|
+
${i.default.gray(b)}`:""}`}case"error":{let r=this.error.split(`
|
|
26
|
+
`).map((t,o)=>o===0?`${i.default.yellow(K)} ${i.default.yellow(t)}`:` ${t}`).join(`
|
|
27
|
+
`);return`${n+i.default.yellow(b)} ${Do({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:l}).join(`
|
|
28
|
+
${i.default.yellow(b)} `)}
|
|
29
29
|
${r}
|
|
30
|
-
`}default:return`${
|
|
31
|
-
${
|
|
32
|
-
${
|
|
33
|
-
`}}}).prompt()};var X=(s="",
|
|
30
|
+
`}default:return`${n}${i.default.cyan(b)} ${Do({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:l}).join(`
|
|
31
|
+
${i.default.cyan(b)} `)}
|
|
32
|
+
${i.default.cyan(K)}
|
|
33
|
+
`}}}).prompt()};var X=(s="",e="")=>{let n=`
|
|
34
34
|
${s}
|
|
35
35
|
`.split(`
|
|
36
|
-
`),l=co(
|
|
37
|
-
`);process.stdout.write(`${
|
|
38
|
-
${
|
|
39
|
-
${
|
|
40
|
-
${
|
|
41
|
-
`)},Z=(s="")=>{process.stdout.write(`${
|
|
42
|
-
|
|
43
|
-
`)},
|
|
44
|
-
`)},
|
|
45
|
-
${
|
|
46
|
-
|
|
47
|
-
`)},
|
|
48
|
-
`);
|
|
36
|
+
`),l=co(e).length,r=Math.max(n.reduce((o,a)=>{let p=co(a);return p.length>o?p.length:o},0),l)+2,t=n.map((o)=>`${i.default.gray(b)} ${i.default.dim(o)}${" ".repeat(r-co(o).length)}${i.default.gray(b)}`).join(`
|
|
37
|
+
`);process.stdout.write(`${i.default.gray(b)}
|
|
38
|
+
${i.default.green(J)} ${i.default.reset(e)} ${i.default.gray(Fo.repeat(Math.max(r-l-1,1))+ee)}
|
|
39
|
+
${t}
|
|
40
|
+
${i.default.gray(ne+Fo.repeat(r+2)+re)}
|
|
41
|
+
`)},Z=(s="")=>{process.stdout.write(`${i.default.gray(K)} ${i.default.red(s)}
|
|
42
|
+
|
|
43
|
+
`)},rs=(s="")=>{process.stdout.write(`${i.default.gray(Ds)} ${s}
|
|
44
|
+
`)},ls=(s="")=>{process.stdout.write(`${i.default.gray(b)}
|
|
45
|
+
${i.default.gray(K)} ${s}
|
|
46
|
+
|
|
47
|
+
`)},d={message:(s="",{symbol:e=i.default.gray(b)}={})=>{let n=[`${i.default.gray(b)}`];if(s){let[l,...r]=s.split(`
|
|
48
|
+
`);n.push(`${e} ${l}`,...r.map((t)=>`${i.default.gray(b)} ${t}`))}process.stdout.write(`${n.join(`
|
|
49
49
|
`)}
|
|
50
|
-
`)},info:(s)=>{
|
|
51
|
-
`);let
|
|
52
|
-
`);process.stdout.write(z.cursor.move(-999,
|
|
53
|
-
`);let
|
|
50
|
+
`)},info:(s)=>{d.message(s,{symbol:i.default.blue(le)})},success:(s)=>{d.message(s,{symbol:i.default.green(te)})},step:(s)=>{d.message(s,{symbol:i.default.green(J)})},warn:(s)=>{d.message(s,{symbol:i.default.yellow(ie)})},warning:(s)=>{d.warn(s)},error:(s)=>{d.message(s,{symbol:i.default.red(ae)})}},Be=`${i.default.gray(b)} `;var ts=({indicator:s="dots"}={})=>{let e=mo?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],n=mo?80:120,l=process.env.CI==="true",r,t,o=!1,a="",p,m=performance.now(),f=(E)=>{let v=E>1?"Something went wrong":"Canceled";o&&No(v,E)},c=()=>f(2),g=()=>f(1),y=()=>{process.on("uncaughtExceptionMonitor",c),process.on("unhandledRejection",c),process.on("SIGINT",g),process.on("SIGTERM",g),process.on("exit",f)},R=()=>{process.removeListener("uncaughtExceptionMonitor",c),process.removeListener("unhandledRejection",c),process.removeListener("SIGINT",g),process.removeListener("SIGTERM",g),process.removeListener("exit",f)},B=()=>{if(p===void 0)return;l&&process.stdout.write(`
|
|
51
|
+
`);let E=p.split(`
|
|
52
|
+
`);process.stdout.write(z.cursor.move(-999,E.length-1)),process.stdout.write(z.erase.down(E.length))},M=(E)=>E.replace(/\.+$/,""),_o=(E)=>{let v=(performance.now()-E)/1000,$=Math.floor(v/60),T=Math.floor(v%60);return $>0?`[${$}m ${T}s]`:`[${T}s]`},gs=(E="")=>{o=!0,r=Qo(),a=M(E),m=performance.now(),process.stdout.write(`${i.default.gray(b)}
|
|
53
|
+
`);let v=0,$=0;y(),t=setInterval(()=>{if(l&&a===p)return;B(),p=a;let T=i.default.magenta(e[v]);if(l)process.stdout.write(`${T} ${a}...`);else if(s==="timer")process.stdout.write(`${T} ${a} ${_o(m)}`);else{let ds=".".repeat(Math.floor($)).slice(0,3);process.stdout.write(`${T} ${a}${ds}`)}v=v+1<e.length?v+1:0,$=$<e.length?$+0.125:0},n)},No=(E="",v=0)=>{o=!1,clearInterval(t),B();let $=v===0?i.default.green(J):v===1?i.default.red(os):i.default.red(ss);a=M(E??a),s==="timer"?process.stdout.write(`${$} ${a} ${_o(m)}
|
|
54
54
|
`):process.stdout.write(`${$} ${a}
|
|
55
|
-
`),
|
|
55
|
+
`),R(),r()};return{start:gs,stop:No,message:(E="")=>{a=M(E??a)}}},is=async(s,e)=>{let n={},l=Object.keys(s);for(let r of l){let t=s[r],o=await t({results:n})?.catch((a)=>{throw a});if(typeof e?.onCancel=="function"&&C(o)){n[r]="canceled",e.onCancel({results:n});continue}n[r]=o}return n};var k=H(so(),1);import*as A from"fs";import*as W from"path";var N="\n OPENCODE_AUTH: ${{ secrets.OPENCODE_AUTH }}",S="\n ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}";var wo=(s)=>`name: PR Review
|
|
56
56
|
|
|
57
57
|
on:
|
|
58
58
|
pull_request:
|
|
@@ -68,9 +68,11 @@ jobs:
|
|
|
68
68
|
- uses: actions/checkout@v4
|
|
69
69
|
|
|
70
70
|
- uses: activadee/open-workflows/actions/pr-review@main
|
|
71
|
+
with:
|
|
72
|
+
variants: "UNDEFINED"
|
|
71
73
|
env:
|
|
72
|
-
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${s?N:
|
|
73
|
-
`;var
|
|
74
|
+
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${s?N:S}
|
|
75
|
+
`;var fo=(s)=>`name: Issue Label
|
|
74
76
|
|
|
75
77
|
on:
|
|
76
78
|
issues:
|
|
@@ -85,8 +87,10 @@ jobs:
|
|
|
85
87
|
- uses: actions/checkout@v4
|
|
86
88
|
|
|
87
89
|
- uses: activadee/open-workflows/actions/issue-label@main
|
|
90
|
+
with:
|
|
91
|
+
variants: "UNDEFINED"
|
|
88
92
|
env:
|
|
89
|
-
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${s?N:
|
|
93
|
+
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${s?N:S}
|
|
90
94
|
`;var bo=(s)=>`name: Doc Sync
|
|
91
95
|
|
|
92
96
|
on:
|
|
@@ -106,8 +110,10 @@ jobs:
|
|
|
106
110
|
fetch-depth: 0
|
|
107
111
|
|
|
108
112
|
- uses: activadee/open-workflows/actions/doc-sync@main
|
|
113
|
+
with:
|
|
114
|
+
variants: "UNDEFINED"
|
|
109
115
|
env:
|
|
110
|
-
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${s?N:
|
|
116
|
+
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${s?N:S}
|
|
111
117
|
`;var ho=(s)=>`name: Release
|
|
112
118
|
|
|
113
119
|
on:
|
|
@@ -143,8 +149,33 @@ jobs:
|
|
|
143
149
|
version: \${{ inputs.version }}
|
|
144
150
|
env:
|
|
145
151
|
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}
|
|
146
|
-
`;var go=
|
|
147
|
-
|
|
152
|
+
`;var go=(s)=>`name: AI Changeset
|
|
153
|
+
|
|
154
|
+
on:
|
|
155
|
+
pull_request:
|
|
156
|
+
types: [opened, synchronize, reopened]
|
|
157
|
+
|
|
158
|
+
jobs:
|
|
159
|
+
changeset:
|
|
160
|
+
runs-on: ubuntu-latest
|
|
161
|
+
permissions:
|
|
162
|
+
contents: write
|
|
163
|
+
pull-requests: write
|
|
164
|
+
steps:
|
|
165
|
+
- uses: actions/checkout@v4
|
|
166
|
+
with:
|
|
167
|
+
fetch-depth: 0
|
|
168
|
+
ref: \${{ github.head_ref }}
|
|
169
|
+
token: \${{ secrets.GITHUB_TOKEN }}
|
|
170
|
+
|
|
171
|
+
- uses: activadee/open-workflows/actions/changeset@main
|
|
172
|
+
with:
|
|
173
|
+
mode: commit
|
|
174
|
+
variants: "UNDEFINED"
|
|
175
|
+
env:
|
|
176
|
+
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${s?N:S}
|
|
177
|
+
`;var xo={review:"pr-review",label:"issue-label","doc-sync":"doc-sync",release:"release",changeset:"changeset"};var ce={"pr-review":wo,"issue-label":fo,"doc-sync":bo,release:ho,changeset:go};function as(s){let{workflows:e,cwd:n=process.cwd()}=s,l=W.join(n,".github","workflows"),r=[];for(let t of e){let o=xo[t],a=W.join(l,`${o}.yml`);if(A.existsSync(a))r.push({type:"workflow",name:t,path:`.github/workflows/${o}.yml`})}return r}function ps(s){let{workflows:e,cwd:n=process.cwd(),useOAuth:l=!1,override:r=!1,overrideNames:t}=s,o=[],a=W.join(n,".github","workflows");if(!A.existsSync(a))A.mkdirSync(a,{recursive:!0});for(let p of e){let m=xo[p],f=ce[m],c=W.join(a,`${m}.yml`);if(!f){o.push({type:"workflow",name:p,status:"error",path:c,message:`Unknown workflow: ${p}`});continue}let g=f(l);if(!g){o.push({type:"workflow",name:p,status:"error",path:c,message:`Unknown workflow: ${p}`});continue}let y=A.existsSync(c),R=r||t?.has(p);if(y&&!R){o.push({type:"workflow",name:p,status:"skipped",path:`.github/workflows/${m}.yml`,message:"Skipped: already exists"});continue}try{A.writeFileSync(c,g,"utf-8"),o.push({type:"workflow",name:p,status:y?"overwritten":"created",path:`.github/workflows/${m}.yml`,message:y?"Overwritten successfully":"Created successfully"})}catch(B){o.push({type:"workflow",name:p,status:"error",path:c,message:`Failed to write file: ${B instanceof Error?B.message:"Unknown error"}`})}}return o}var we=await Promise.resolve().then(() => H(cs(),1)).catch(()=>({version:"unknown"})),Oo=we.version,P=process.argv.slice(2),fe=P.includes("--help")||P.includes("-h"),be=P.includes("--version")||P.includes("-v"),vo=P.includes("--force")||P.includes("-f");if(be)process.stdout.write(`@activade/open-workflows v${Oo}
|
|
178
|
+
`),process.exit(0);if(fe)process.stdout.write(`@activade/open-workflows v${Oo}
|
|
148
179
|
|
|
149
180
|
AI-powered GitHub automation workflows.
|
|
150
181
|
|
|
@@ -162,6 +193,7 @@ WHAT GETS INSTALLED
|
|
|
162
193
|
.github/workflows/issue-label.yml
|
|
163
194
|
.github/workflows/doc-sync.yml
|
|
164
195
|
.github/workflows/release.yml
|
|
196
|
+
.github/workflows/changeset.yml
|
|
165
197
|
|
|
166
198
|
REQUIRED SECRETS
|
|
167
199
|
For Claude Max (OAuth):
|
|
@@ -171,10 +203,10 @@ REQUIRED SECRETS
|
|
|
171
203
|
ANTHROPIC_API_KEY - Your Anthropic API key
|
|
172
204
|
|
|
173
205
|
For more information: https://github.com/activadee/open-workflows
|
|
174
|
-
`),process.exit(0);
|
|
175
|
-
${
|
|
206
|
+
`),process.exit(0);rs(k.default.bgCyan(k.default.black(` @activade/open-workflows v${Oo} `)));var ms=await is({workflows:()=>ns({message:"Select workflows to install:",options:[{value:"review",label:"PR Review",hint:"AI-powered code reviews"},{value:"label",label:"Issue Label",hint:"Auto-label issues"},{value:"doc-sync",label:"Doc Sync",hint:"Keep docs in sync"},{value:"release",label:"Release",hint:"Automated releases with notes"},{value:"changeset",label:"Changeset",hint:"AI-generated changesets for monorepos"}],required:!0}),useOAuth:()=>Q({message:"Use Claude Max subscription (OAuth)? (No = API key)",initialValue:!1})},{onCancel:()=>{Z("Installation cancelled."),process.exit(0)}}),ws=ms.workflows||[],$o=Boolean(ms.useOAuth),fs=!1;if($o){let s=await Q({message:"Install opencode-auth-sync plugin? (keeps OAuth tokens synced)",initialValue:!0});if(C(s))Z("Installation cancelled."),process.exit(0);fs=Boolean(s)}var bs=new Set;if(!vo){let s=as({workflows:ws});if(s.length>0){d.warn(`Found ${s.length} existing file(s):`);for(let e of s){let n=await Q({message:`Override ${e.path}?`,initialValue:!1});if(C(n))Z("Installation cancelled."),process.exit(0);if(n)bs.add(e.name)}}}var hs=ts();hs.start("Installing workflows...");var G=ps({workflows:ws,useOAuth:$o,override:vo,overrideNames:vo?void 0:bs}),he=G.some((s)=>s.status==="error");hs.stop(he?"Installation completed with errors":"Installation complete!");var Eo=G.filter((s)=>s.status==="created"),ko=G.filter((s)=>s.status==="overwritten"),Io=G.filter((s)=>s.status==="skipped"),yo=G.filter((s)=>s.status==="error");if(Eo.length>0){d.success(`Created ${Eo.length} file(s):`);for(let s of Eo)d.message(` ${k.default.green("+")} ${s.path}`)}if(ko.length>0){d.success(`Overwritten ${ko.length} file(s):`);for(let s of ko)d.message(` ${k.default.cyan("~")} ${s.path}`)}if(Io.length>0){d.warn(`Skipped ${Io.length} file(s) (already exist):`);for(let s of Io)d.message(` ${k.default.yellow("-")} ${s.path}`)}if(yo.length>0){d.error(`Failed ${yo.length} file(s):`);for(let s of yo)d.message(` ${k.default.red("x")} ${s.path}: ${s.message}`)}if($o)if(fs)d.info("Launching opencode-auth-sync setup..."),await Bun.spawn(["bunx","@activade/opencode-auth-sync"],{stdio:["inherit","inherit","inherit"]}).exited,X("Commit and push the workflow files","Next steps");else X(`${k.default.cyan("1.")} Export your OpenCode auth as a secret:
|
|
207
|
+
${k.default.dim("gh secret set OPENCODE_AUTH < ~/.local/share/opencode/auth.json")}
|
|
176
208
|
|
|
177
|
-
${
|
|
178
|
-
${
|
|
209
|
+
${k.default.cyan("2.")} Commit and push the workflow files`,"Next steps (OAuth)");else X(`${k.default.cyan("1.")} Add your Anthropic API key:
|
|
210
|
+
${k.default.dim("gh secret set ANTHROPIC_API_KEY")}
|
|
179
211
|
|
|
180
|
-
${
|
|
212
|
+
${k.default.cyan("2.")} Commit and push the workflow files`,"Next steps");ls(k.default.green("Done!"));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@activade/open-workflows",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.7",
|
|
4
4
|
"description": "AI-powered GitHub automation workflows via composite actions",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"github",
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
"prepublishOnly": "bun run clean && bun run build && bun run typecheck"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@clack/prompts": "^0.
|
|
40
|
+
"@clack/prompts": "^0.11.0",
|
|
41
41
|
"picocolors": "^1.1.1"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@types/node": "^
|
|
44
|
+
"@types/node": "^25.0.10",
|
|
45
45
|
"@types/bun": "^1.3.5",
|
|
46
46
|
"typescript": "^5.6.0"
|
|
47
47
|
},
|