mirror of
https://github.com/anthropics/claude-code.git
synced 2026-04-17 08:42:45 +00:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e7f65eb95 | ||
|
|
8799bb0901 | ||
|
|
05a2bde7be | ||
|
|
3c917dfe50 | ||
|
|
8f0fe03e56 | ||
|
|
baf29b882a | ||
|
|
6aecb15d98 | ||
|
|
76826f2c80 | ||
|
|
3592c8be2a | ||
|
|
3ad3231f0f | ||
|
|
65dfa9898e | ||
|
|
0d996a7c34 | ||
|
|
b18f2e7df0 |
66
.claude/commands/triage-issue.md
Normal file
66
.claude/commands/triage-issue.md
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
allowed-tools: Bash(gh label list:*),Bash(gh issue view:*),Bash(./scripts/edit-issue-labels.sh:*),Bash(gh search issues:*)
|
||||
description: Triage GitHub issues by analyzing and applying labels
|
||||
---
|
||||
|
||||
You're an issue triage assistant. Analyze the issue and manage labels.
|
||||
|
||||
IMPORTANT: Don't post any comments or messages to the issue. Your only actions are adding or removing labels.
|
||||
|
||||
Context:
|
||||
|
||||
$ARGUMENTS
|
||||
|
||||
TOOLS:
|
||||
- `gh label list`: Fetch all available labels in this repo
|
||||
- `gh issue view NUMBER`: Read the issue title, body, and labels
|
||||
- `gh issue view NUMBER --comments`: Read the conversation
|
||||
- `gh search issues QUERY`: Find similar or duplicate issues
|
||||
- `./scripts/edit-issue-labels.sh --issue NUMBER --add-label LABEL --remove-label LABEL`: Add or remove labels
|
||||
|
||||
TASK:
|
||||
|
||||
1. Run `gh label list` to fetch the available labels. You may ONLY use labels from this list. Never invent new labels.
|
||||
2. Run `gh issue view ISSUE_NUMBER` to read the issue details.
|
||||
3. Run `gh issue view ISSUE_NUMBER --comments` to read the conversation.
|
||||
|
||||
**If EVENT is "issues" (new issue):**
|
||||
|
||||
4. First, check if this issue is actually about Claude Code (the CLI/IDE tool). Issues about the Claude API, claude.ai, the Claude app, Anthropic billing, or other Anthropic products should be labeled `invalid`. If invalid, apply only that label and stop.
|
||||
|
||||
5. Analyze and apply category labels:
|
||||
- Type (bug, enhancement, question, etc.)
|
||||
- Technical areas and platform
|
||||
- Check for duplicates with `gh search issues`. Only mark as duplicate of OPEN issues.
|
||||
|
||||
6. Evaluate lifecycle labels:
|
||||
- `needs-repro` (bugs only, 7 days): Bug reports without clear steps to reproduce. A good repro has specific, followable steps that someone else could use to see the same issue.
|
||||
Do NOT apply if the user already provided error messages, logs, file paths, or a description of what they did. Don't require a specific format — narrative descriptions count.
|
||||
For model behavior issues (e.g. "Claude does X when it should do Y"), don't require traditional repro steps — examples and patterns are sufficient.
|
||||
- `needs-info` (bugs only, 7 days): The issue needs something from the community before it can progress — e.g. error messages, versions, environment details, or answers to follow-up questions. Don't apply to questions or enhancements.
|
||||
Do NOT apply if the user already provided version, environment, and error details. If the issue just needs engineering investigation, that's not `needs-info`.
|
||||
|
||||
Issues with these labels are automatically closed after the timeout if there's no response.
|
||||
The goal is to avoid issues lingering without a clear next step.
|
||||
|
||||
7. Apply all selected labels:
|
||||
`./scripts/edit-issue-labels.sh --issue ISSUE_NUMBER --add-label "label1" --add-label "label2"`
|
||||
|
||||
**If EVENT is "issue_comment" (comment on existing issue):**
|
||||
|
||||
4. Evaluate lifecycle labels based on the full conversation:
|
||||
- If the issue has `stale` or `autoclose`, remove the label — a new human comment means the issue is still active:
|
||||
`./scripts/edit-issue-labels.sh --issue ISSUE_NUMBER --remove-label "stale" --remove-label "autoclose"`
|
||||
- If the issue has `needs-repro` or `needs-info` and the missing information has now been provided, remove the label:
|
||||
`./scripts/edit-issue-labels.sh --issue ISSUE_NUMBER --remove-label "needs-repro"`
|
||||
- If the issue doesn't have lifecycle labels but clearly needs them (e.g., a maintainer asked for repro steps or more details), add the appropriate label.
|
||||
- Comments like "+1", "me too", "same here", or emoji reactions are NOT the missing information. Only remove `needs-repro` or `needs-info` when substantive details are actually provided.
|
||||
- Do NOT add or remove category labels (bug, enhancement, etc.) on comment events.
|
||||
|
||||
GUIDELINES:
|
||||
- ONLY use labels from `gh label list` — never create or guess label names
|
||||
- DO NOT post any comments to the issue
|
||||
- Be conservative with lifecycle labels — only apply when clearly warranted
|
||||
- Only apply lifecycle labels (`needs-repro`, `needs-info`) to bugs — never to questions or enhancements
|
||||
- When in doubt, don't apply a lifecycle label — false positives are worse than missing labels
|
||||
- It's okay to not add any labels if none are clearly applicable
|
||||
70
.github/workflows/claude-issue-triage.yml
vendored
70
.github/workflows/claude-issue-triage.yml
vendored
@@ -32,75 +32,7 @@ jobs:
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
allowed_non_write_users: "*"
|
||||
prompt: |
|
||||
You're an issue triage assistant. Analyze the issue and manage labels.
|
||||
|
||||
IMPORTANT: Don't post any comments or messages to the issue. Your only actions are adding or removing labels.
|
||||
|
||||
Context:
|
||||
- REPO: ${{ github.repository }}
|
||||
- ISSUE_NUMBER: ${{ github.event.issue.number }}
|
||||
- EVENT: ${{ github.event_name }}
|
||||
|
||||
ALLOWED LABELS — you may ONLY use labels from this list. Never invent new labels.
|
||||
|
||||
Type: bug, enhancement, question, documentation, duplicate, invalid
|
||||
Lifecycle: needs-repro, needs-info, stale, autoclose
|
||||
Platform: platform:linux, platform:macos, platform:windows, platform:wsl, platform:ios, platform:android, platform:vscode, platform:intellij, platform:web, platform:aws-bedrock
|
||||
API: api:bedrock, api:vertex
|
||||
|
||||
TOOLS:
|
||||
- `gh issue view NUMBER`: Read the issue title, body, and labels
|
||||
- `gh issue view NUMBER --comments`: Read the conversation
|
||||
- `gh search issues QUERY`: Find similar or duplicate issues
|
||||
- `gh issue edit NUMBER --add-label` / `--remove-label`: Add or remove labels
|
||||
|
||||
TASK:
|
||||
|
||||
1. Run `gh issue view ${{ github.event.issue.number }}` to read the issue details.
|
||||
2. Run `gh issue view ${{ github.event.issue.number }} --comments` to read the conversation.
|
||||
|
||||
**If EVENT is "issues" (new issue):**
|
||||
|
||||
3. First, check if this issue is actually about Claude Code (the CLI/IDE tool). Issues about the Claude API, claude.ai, the Claude app, Anthropic billing, or other Anthropic products should be labeled `invalid`. If invalid, apply only that label and stop.
|
||||
|
||||
4. Analyze and apply category labels:
|
||||
- Type (bug, enhancement, question, etc.)
|
||||
- Technical areas and platform
|
||||
- Check for duplicates with `gh search issues`. Only mark as duplicate of OPEN issues.
|
||||
|
||||
5. Evaluate lifecycle labels:
|
||||
- `needs-repro` (bugs only, 7 days): Bug reports without clear steps to reproduce. A good repro has specific, followable steps that someone else could use to see the same issue.
|
||||
Do NOT apply if the user already provided error messages, logs, file paths, or a description of what they did. Don't require a specific format — narrative descriptions count.
|
||||
For model behavior issues (e.g. "Claude does X when it should do Y"), don't require traditional repro steps — examples and patterns are sufficient.
|
||||
- `needs-info` (bugs only, 7 days): The issue needs something from the community before it can progress — e.g. error messages, versions, environment details, or answers to follow-up questions. Don't apply to questions or enhancements.
|
||||
Do NOT apply if the user already provided version, environment, and error details. If the issue just needs engineering investigation, that's not `needs-info`.
|
||||
|
||||
Issues with these labels are automatically closed after the timeout if there's no response.
|
||||
The goal is to avoid issues lingering without a clear next step.
|
||||
|
||||
6. Apply all selected labels:
|
||||
`gh issue edit ${{ github.event.issue.number }} --add-label "label1" --add-label "label2"`
|
||||
|
||||
**If EVENT is "issue_comment" (comment on existing issue):**
|
||||
|
||||
3. Evaluate lifecycle labels based on the full conversation:
|
||||
- If the issue has `stale` or `autoclose`, remove the label — a new human comment means the issue is still active:
|
||||
`gh issue edit ${{ github.event.issue.number }} --remove-label "stale" --remove-label "autoclose"`
|
||||
- If the issue has `needs-repro` or `needs-info` and the missing information has now been provided, remove the label:
|
||||
`gh issue edit ${{ github.event.issue.number }} --remove-label "needs-repro"`
|
||||
- If the issue doesn't have lifecycle labels but clearly needs them (e.g., a maintainer asked for repro steps or more details), add the appropriate label.
|
||||
- Comments like "+1", "me too", "same here", or emoji reactions are NOT the missing information. Only remove `needs-repro` or `needs-info` when substantive details are actually provided.
|
||||
- Do NOT add or remove category labels (bug, enhancement, etc.) on comment events.
|
||||
|
||||
GUIDELINES:
|
||||
- ONLY use labels from the ALLOWED LABELS list above — never create or guess label names
|
||||
- DO NOT post any comments to the issue
|
||||
- Be conservative with lifecycle labels — only apply when clearly warranted
|
||||
- Only apply lifecycle labels (`needs-repro`, `needs-info`) to bugs — never to questions or enhancements
|
||||
- When in doubt, don't apply a lifecycle label — false positives are worse than missing labels
|
||||
- It's okay to not add any labels if none are clearly applicable
|
||||
prompt: "/triage-issue REPO: ${{ github.repository }} ISSUE_NUMBER: ${{ github.event.issue.number }} EVENT: ${{ github.event_name }}"
|
||||
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
claude_args: |
|
||||
--model claude-opus-4-6
|
||||
--allowedTools "Bash(gh issue view:*),Bash(gh issue edit:*),Bash(gh search issues:*)"
|
||||
|
||||
47
.github/workflows/non-write-users-check.yml
vendored
Normal file
47
.github/workflows/non-write-users-check.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
name: Non-write Users Check
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- ".github/**"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
allowed-non-write-check:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
steps:
|
||||
- run: |
|
||||
DIFF=$(gh pr diff "$PR_NUMBER" -R "$REPO" || true)
|
||||
|
||||
if ! echo "$DIFF" | grep -qE '^diff --git a/\.github/.*\.ya?ml'; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
MATCHES=$(echo "$DIFF" | grep "^+.*allowed_non_write_users" || true)
|
||||
|
||||
if [ -z "$MATCHES" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
EXISTING=$(gh pr view "$PR_NUMBER" -R "$REPO" --json comments --jq '.comments[].body' \
|
||||
| grep -c "<!-- non-write-users-check -->" || true)
|
||||
|
||||
if [ "$EXISTING" -gt 0 ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
gh pr comment "$PR_NUMBER" -R "$REPO" --body '<!-- non-write-users-check -->
|
||||
**`allowed_non_write_users` detected**
|
||||
|
||||
This PR adds or modifies `allowed_non_write_users`, which allows users without write access to trigger Claude Code Action workflows. This can introduce security risks.
|
||||
|
||||
If this is a new flow, please make sure you actually need `allowed_non_write_users`. If you are editing an existing workflow, double check that you are not adding new Claude permissions which might lead to a vulnerability.
|
||||
|
||||
See existing workflows in this repo for safe usage examples, or contact the AppSec team.'
|
||||
env:
|
||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||
REPO: ${{ github.repository }}
|
||||
87
CHANGELOG.md
87
CHANGELOG.md
@@ -1,5 +1,92 @@
|
||||
# Changelog
|
||||
|
||||
## 2.1.53
|
||||
|
||||
- Fixed a UI flicker where user input would briefly disappear after submission before the message rendered
|
||||
- Fixed bulk agent kill (ctrl+f) to send a single aggregate notification instead of one per agent, and to properly clear the command queue
|
||||
- Fixed graceful shutdown sometimes leaving stale sessions when using Remote Control by parallelizing teardown network calls
|
||||
- Fixed `--worktree` sometimes being ignored on first launch
|
||||
- Fixed a panic ("switch on corrupted value") on Windows
|
||||
- Fixed a crash that could occur when spawning many processes on Windows
|
||||
- Fixed a crash in the WebAssembly interpreter on Linux x64 & Windows x64
|
||||
- Fixed a crash that sometimes occurred after 2 minutes on Windows ARM64
|
||||
|
||||
## 2.1.52
|
||||
|
||||
- VS Code: Fixed extension crash on Windows ("command 'claude-vscode.editor.openLast' not found")
|
||||
|
||||
## 2.1.51
|
||||
|
||||
- Added `claude remote-control` subcommand for external builds, enabling local environment serving for all users.
|
||||
- Updated plugin marketplace default git timeout from 30s to 120s and added `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` to configure.
|
||||
- Added support for custom npm registries and specific version pinning when installing plugins from npm sources
|
||||
- BashTool now skips login shell (`-l` flag) by default when a shell snapshot is available, improving command execution performance. Previously this required setting `CLAUDE_BASH_NO_LOGIN=true`.
|
||||
- Fixed a security issue where `statusLine` and `fileSuggestion` hook commands could execute without workspace trust acceptance in interactive mode.
|
||||
- Tool results larger than 50K characters are now persisted to disk (previously 100K). This reduces context window usage and improves conversation longevity.
|
||||
- Fixed a bug where duplicate `control_response` messages (e.g. from WebSocket reconnects) could cause API 400 errors by pushing duplicate assistant messages into the conversation.
|
||||
- Added `CLAUDE_CODE_ACCOUNT_UUID`, `CLAUDE_CODE_USER_EMAIL`, and `CLAUDE_CODE_ORGANIZATION_UUID` environment variables for SDK callers to provide account info synchronously, eliminating a race condition where early telemetry events lacked account metadata.
|
||||
- Fixed slash command autocomplete crashing when a plugin's SKILL.md description is a YAML array or other non-string type
|
||||
- The `/model` picker now shows human-readable labels (e.g., "Sonnet 4.5") instead of raw model IDs for pinned model versions, with an upgrade hint when a newer version is available.
|
||||
- Managed settings can now be set via macOS plist or Windows Registry. Learn more at https://code.claude.com/docs/en/settings#settings-files
|
||||
|
||||
## 2.1.50
|
||||
|
||||
- Added support for `startupTimeout` configuration for LSP servers
|
||||
- Added `WorktreeCreate` and `WorktreeRemove` hook events, enabling custom VCS setup and teardown when agent worktree isolation creates or removes worktrees.
|
||||
- Fixed a bug where resumed sessions could be invisible when the working directory involved symlinks, because the session storage path was resolved at different times during startup. Also fixed session data loss on SSH disconnect by flushing session data before hooks and analytics in the graceful shutdown sequence.
|
||||
- Linux: Fixed native modules not loading on systems with glibc older than 2.30 (e.g., RHEL 8)
|
||||
- Fixed memory leak in agent teams where completed teammate tasks were never garbage collected from session state
|
||||
- Fixed `CLAUDE_CODE_SIMPLE` to fully strip down skills, session memory, custom agents, and CLAUDE.md token counting
|
||||
- Fixed `/mcp reconnect` freezing the CLI when given a server name that doesn't exist
|
||||
- Fixed memory leak where completed task state objects were never removed from AppState
|
||||
- Added support for `isolation: worktree` in agent definitions, allowing agents to declaratively run in isolated git worktrees.
|
||||
- `CLAUDE_CODE_SIMPLE` mode now also disables MCP tools, attachments, hooks, and CLAUDE.md file loading for a fully minimal experience.
|
||||
- Fixed bug where MCP tools were not discovered when tool search is enabled and a prompt is passed in as a launch argument
|
||||
- Improved memory usage during long sessions by clearing internal caches after compaction
|
||||
- Added `claude agents` CLI command to list all configured agents
|
||||
- Improved memory usage during long sessions by clearing large tool results after they have been processed
|
||||
- Fixed a memory leak where LSP diagnostic data was never cleaned up after delivery, causing unbounded memory growth in long sessions
|
||||
- Fixed a memory leak where completed task output was not freed from memory, reducing memory usage in long sessions with many tasks
|
||||
- Improved startup performance for headless mode (`-p` flag) by deferring Yoga WASM and UI component imports
|
||||
- Fixed prompt suggestion cache regression that reduced cache hit rates
|
||||
- Fixed unbounded memory growth in long sessions by capping file history snapshots
|
||||
- Added `CLAUDE_CODE_DISABLE_1M_CONTEXT` environment variable to disable 1M context window support
|
||||
- Opus 4.6 (fast mode) now includes the full 1M context window
|
||||
- VSCode: Added `/extra-usage` command support in VS Code sessions
|
||||
- Fixed memory leak where TaskOutput retained recent lines after cleanup
|
||||
- Fixed memory leak in CircularBuffer where cleared items were retained in the backing array
|
||||
- Fixed memory leak in shell command execution where ChildProcess and AbortController references were retained after cleanup
|
||||
|
||||
## 2.1.49
|
||||
|
||||
- Improved MCP OAuth authentication with step-up auth support and discovery caching, reducing redundant network requests during server connections
|
||||
- Added `--worktree` (`-w`) flag to start Claude in an isolated git worktree
|
||||
- Subagents support `isolation: "worktree"` for working in a temporary git worktree
|
||||
- Added Ctrl+F keybinding to kill background agents (two-press confirmation)
|
||||
- Agent definitions support `background: true` to always run as a background task
|
||||
- Plugins can ship `settings.json` for default configuration
|
||||
- Fixed file-not-found errors to suggest corrected paths when the model drops the repo folder
|
||||
- Fixed Ctrl+C and ESC being silently ignored when background agents are running and the main thread is idle. Pressing twice within 3 seconds now kills all background agents.
|
||||
- Fixed prompt suggestion cache regression that reduced cache hit rates.
|
||||
- Fixed `plugin enable` and `plugin disable` to auto-detect the correct scope when `--scope` is not specified, instead of always defaulting to user scope
|
||||
- Simple mode (`CLAUDE_CODE_SIMPLE`) now includes the file edit tool in addition to the Bash tool, allowing direct file editing in simple mode.
|
||||
- Permission suggestions are now populated when safety checks trigger an ask response, enabling SDK consumers to display permission options
|
||||
- Sonnet 4.5 with 1M context is being removed from the Max plan in favor of our frontier Sonnet 4.6 model, which now has 1M context. Please switch in /model.
|
||||
- Fixed verbose mode not updating thinking block display when toggled via `/config` — memo comparators now correctly detect verbose changes
|
||||
- Fixed unbounded WASM memory growth during long sessions by periodically resetting the tree-sitter parser
|
||||
- Fixed potential rendering issues caused by stale yoga layout references
|
||||
- Improved performance in non-interactive mode (`-p`) by skipping unnecessary API calls during startup
|
||||
- Improved performance by caching authentication failures for HTTP and SSE MCP servers, avoiding repeated connection attempts to servers requiring auth
|
||||
- Fixed unbounded memory growth during long-running sessions caused by Yoga WASM linear memory never shrinking
|
||||
- SDK model info now includes `supportsEffort`, `supportedEffortLevels`, and `supportsAdaptiveThinking` fields so consumers can discover model capabilities.
|
||||
- Added `ConfigChange` hook event that fires when configuration files change during a session, enabling enterprise security auditing and optional blocking of settings changes.
|
||||
- Improved startup performance by caching MCP auth failures to avoid redundant connection attempts
|
||||
- Improved startup performance by reducing HTTP calls for analytics token counting
|
||||
- Improved startup performance by batching MCP tool token counting into a single API call
|
||||
- Fixed `disableAllHooks` setting to respect managed settings hierarchy — non-managed settings can no longer disable managed hooks set by policy (#26637)
|
||||
- Fixed `--resume` session picker showing raw XML tags for sessions that start with commands like `/clear`. Now correctly falls through to the session ID fallback.
|
||||
- Improved permission prompts for path safety and working directory blocks to show the reason for the restriction instead of a bare prompt with no context
|
||||
|
||||
## 2.1.47
|
||||
|
||||
- Fixed FileWriteTool line counting to preserve intentional trailing blank lines instead of stripping them with `trimEnd()`.
|
||||
|
||||
87
scripts/edit-issue-labels.sh
Executable file
87
scripts/edit-issue-labels.sh
Executable file
@@ -0,0 +1,87 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Edits labels on a GitHub issue.
|
||||
# Usage: ./edit-issue-labels.sh --issue 123 --add-label bug --add-label needs-triage --remove-label untriaged
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
ISSUE=""
|
||||
ADD_LABELS=()
|
||||
REMOVE_LABELS=()
|
||||
|
||||
# Parse arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--issue)
|
||||
ISSUE="$2"
|
||||
shift 2
|
||||
;;
|
||||
--add-label)
|
||||
ADD_LABELS+=("$2")
|
||||
shift 2
|
||||
;;
|
||||
--remove-label)
|
||||
REMOVE_LABELS+=("$2")
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Validate issue number
|
||||
if [[ -z "$ISSUE" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [[ "$ISSUE" =~ ^[0-9]+$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ${#ADD_LABELS[@]} -eq 0 && ${#REMOVE_LABELS[@]} -eq 0 ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Fetch valid labels from the repo
|
||||
VALID_LABELS=$(gh label list --limit 500 --json name --jq '.[].name')
|
||||
|
||||
# Filter to only labels that exist in the repo
|
||||
FILTERED_ADD=()
|
||||
for label in "${ADD_LABELS[@]}"; do
|
||||
if echo "$VALID_LABELS" | grep -qxF "$label"; then
|
||||
FILTERED_ADD+=("$label")
|
||||
fi
|
||||
done
|
||||
|
||||
FILTERED_REMOVE=()
|
||||
for label in "${REMOVE_LABELS[@]}"; do
|
||||
if echo "$VALID_LABELS" | grep -qxF "$label"; then
|
||||
FILTERED_REMOVE+=("$label")
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#FILTERED_ADD[@]} -eq 0 && ${#FILTERED_REMOVE[@]} -eq 0 ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Build gh command arguments
|
||||
GH_ARGS=("issue" "edit" "$ISSUE")
|
||||
|
||||
for label in "${FILTERED_ADD[@]}"; do
|
||||
GH_ARGS+=("--add-label" "$label")
|
||||
done
|
||||
|
||||
for label in "${FILTERED_REMOVE[@]}"; do
|
||||
GH_ARGS+=("--remove-label" "$label")
|
||||
done
|
||||
|
||||
gh "${GH_ARGS[@]}"
|
||||
|
||||
if [[ ${#FILTERED_ADD[@]} -gt 0 ]]; then
|
||||
echo "Added: ${FILTERED_ADD[*]}"
|
||||
fi
|
||||
if [[ ${#FILTERED_REMOVE[@]} -gt 0 ]]; then
|
||||
echo "Removed: ${FILTERED_REMOVE[*]}"
|
||||
fi
|
||||
Reference in New Issue
Block a user