Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Jira BUG Analysis Assistant[Jira-BUG分析助手]

v1.0.0

从 Jira Server/DC 拉取 Bug 数据,进行全面的 AI 分析,并生成交互式 HTML 报表。 分析维度包括:Bug 趋势、优先级/严重程度分布、组件热点、解决时间、经办人负载、 未解决 Bug 老化等。当用户要求分析 Jira Bug、生成 Bug 报表、或查看 Bug 指标时使用此 Skill。

0· 60·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for cntesters/jira-analysis-skill.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Jira BUG Analysis Assistant[Jira-BUG分析助手]" (cntesters/jira-analysis-skill) from ClawHub.
Skill page: https://clawhub.ai/cntesters/jira-analysis-skill
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install jira-analysis-skill

ClawHub CLI

Package manager switcher

npx clawhub@latest install jira-analysis-skill
Security Scan
Capability signals
Requires OAuth tokenRequires sensitive credentials
These labels describe what authority the skill may exercise. They are separate from suspicious or malicious moderation verdicts.
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
The name/description say it pulls Jira Bug data and generates an HTML report. The package contains a Python script that calls the Jira REST API, computes aggregations, and outputs JSON; requirements.txt only lists 'requests'. There are no unrelated binaries, cloud credentials, or unexpected services requested.
Instruction Scope
Runtime instructions are narrowly focused on installing Python deps, running the included script with a Jira server URL and credentials, capturing stdout JSON, and producing an HTML report from that JSON. Two operational privacy/security notes: (1) the SKILL.md and examples pass credentials on the command line (e.g., --username/--password or curl -u), which can expose secrets in process listings and shell history; (2) the report requirement explicitly embeds the full JSON into the HTML head, meaning the generated HTML contains all raw issue data (sensitive metadata could be included). These behaviors are consistent with the skill's purpose but warrant user caution.
Install Mechanism
No install spec that downloads remote code is present; the skill is instruction-only with one local Python script and a small requirements.txt (requests). The recommended pip install -r is standard; install risk is limited to installing the 'requests' package into the environment. Using a virtualenv is suggested in SKILL.md (good practice).
Credentials
The skill requests no environment variables or unrelated credentials. It requires the user to supply Jira credentials (PAT or username/password) at runtime, which is appropriate and proportional to accessing a private Jira Server/DC instance.
Persistence & Privilege
The skill does not request always:true, does not alter other skills, and does not require persistent system-level privileges. It runs as an on-demand script and produces output to stdout for the agent to consume.
Assessment
This skill appears to do what it claims, but take these precautions before running it: - Prefer a Personal Access Token (PAT) over username/password. The script supports Bearer tokens. - Avoid passing credentials on the shell command line where possible (process list / shell history exposure). If you must, run the script in a disposable shell or clear history; preferably run inside an isolated environment (VM or ephemeral container). - Use a Python virtualenv to install dependencies so you don't modify your system Python. - Remember the generated HTML embeds the full JSON report — do not share the HTML publicly if it contains sensitive issue data. - If you have concerns, review the included scripts yourself (get_jiraData.py is present and human-readable) or run it in an isolated sandbox to confirm behavior before granting access to sensitive Jira projects.

Like a lobster shell, security has layers — review code before you run it.

latestvk9764e2bgdz5vzsaj6xn38hvss850f3x
60downloads
0stars
1versions
Updated 1w ago
v1.0.0
MIT-0

Jira Bug Analysis Skill

从 Jira Server/Data Center 拉取 Bug 数据,进行全面分析,并生成自包含的 HTML 报表。

Step 1: Gather Connection Parameters

向用户收集以下必要信息(如果用户已在调用参数中提供,则跳过询问):

必填参数:

  • Jira Server URL: 例如 https://jira.company.com
  • 认证方式(二选一):
    • Personal Access Token (PAT)(推荐)
    • 用户名 + 密码
  • Project Key: Jira 项目标识,例如 PROJ

可选参数:

  • 起始日期 (--start-date): 筛选此日期之后创建的 Bug,格式 YYYY-MM-DD
  • 结束日期 (--end-date): 筛选此日期之前创建的 Bug,格式 YYYY-MM-DD
  • Issue Type 名称 (--issue-type): 默认为 Bug。如果 Jira 实例使用中文或自定义名称(如 故障缺陷),需指定实际名称。如果用户不确定,可先用 REST API 查询项目实际的 Issue Type 列表
  • Severity 自定义字段 ID (--severity-field): 如果 Jira 实例中有「严重程度」自定义字段,提供其字段 ID(如 customfield_10072)。告诉用户可以在 Jira 管理后台的自定义字段页面找到此 ID
  • 如果用户的 Jira 使用自签名证书,需要添加 --no-verify 参数

如果用户没有提供日期范围,建议默认使用最近 90 天。

Step 2: Install Dependencies

运行以下命令安装 Python 依赖:

pip install -r ${SKILL_DIR}/requirements.txt

如果 pip 命令失败,尝试使用项目虚拟环境:

source ${SKILL_DIR}/.venv/bin/activate && pip install -r ${SKILL_DIR}/requirements.txt

Step 3: Execute Data Pull

构建并执行以下命令来获取 Jira Bug 数据:

python ${SKILL_DIR}/scripts/get_jiraData.py \
  --server <JIRA_SERVER_URL> \
  --token <PAT> \
  --project <PROJECT_KEY> \
  [--issue-type Bug] \
  [--start-date YYYY-MM-DD] \
  [--end-date YYYY-MM-DD] \
  [--severity-field customfield_NNNNN] \
  [--no-verify]

如果使用用户名密码认证,将 --token 替换为 --username <USER> --password <PASS>

脚本输出:stdout 为结构化 JSON 数据,stderr 为进度信息。捕获 stdout 的 JSON 内容进行后续分析。

Issue Type 自动检测:如果脚本返回 0 条数据,可能是 Issue Type 名称不匹配。此时应通过 REST API 查询项目实际的 Issue Type 列表:

curl -u <USER>:<PASS> -k <SERVER>/rest/api/2/project/<PROJECT_KEY> | python3 -c "import sys,json;[print(t['name']) for t in json.load(sys.stdin).get('issueTypes',[])]"

如果发现实际名称为中文(如 故障缺陷),用 --issue-type 参数指定后重新执行。

错误处理

  • 如果脚本退出码非零,向用户展示 stderr 中的错误信息
  • 401 错误:提示用户检查认证凭据
  • 403 错误:提示用户检查项目访问权限
  • 连接错误:提示用户检查服务器 URL 和网络/VPN 连接
  • SSL 错误:建议使用 --no-verify 参数

Step 4: Analyze the Data

基于获取到的 JSON 数据进行全面分析。JSON 包含三部分:metadata(元数据)、aggregations(聚合统计)、issues(原始 Issue 列表)。

重点关注以下分析维度:

4.1 Executive Summary(执行摘要)

  • 总 Bug 数量、未解决数量、已解决数量
  • 未解决率(未解决/总数)
  • Bug 创建趋势方向(增长/稳定/下降)
  • 平均解决时间

4.2 Bug Creation Trend(Bug 创建趋势)

  • 按月展示 Bug 创建数量变化
  • 识别峰值月份并尝试关联可能的原因
  • 对比创建量与解决量的差异趋势

4.3 Priority Distribution(优先级分布)

  • 各优先级的 Bug 数量和占比
  • 如果 Blocker/Critical 占比异常高,发出警告

4.4 Severity Distribution(严重程度分布)

  • 各严重程度级别的数量和占比(如果有 severity 数据)
  • 对比 severity 与 priority 是否存在不匹配

4.5 Component/Module Hotspots(组件热点)

  • 哪些组件的 Bug 最多
  • 哪些组件的平均解决时间最长
  • 识别需要重点关注的模块

4.6 Resolution Time Analysis(解决时间分析)

  • 整体解决时间统计(均值、中位数、P90)
  • 按优先级分析解决时间——高优先级 Bug 是否得到快速响应
  • 按严重程度分析解决时间
  • 识别解决时间异常长的 Bug

4.7 Assignee Workload(经办人工作负载)

  • 各经办人的 Bug 分配数量
  • 未分配的 Bug 数量
  • 各经办人的已解决 Bug 数和解决效率

4.8 Unresolved Bug Aging(未解决 Bug 老化分析)

  • 按老化区间统计:0-7天、8-30天、31-90天、90天以上
  • 按优先级统计未解决的 Bug
  • 标记超过 90 天未解决的高优先级 Bug

4.9 Labels & Tags(标签分析)

  • 常见标签/主题分析
  • 识别回归 Bug(regression 标签)等模式

4.10 Recommendations(建议)

  • 基于以上分析提出 3-5 条可操作的改进建议
  • 针对具体问题给出针对性建议(例如:组件 X 需要更多测试覆盖、经办人 Y 负载过高需要分摊等)

已解决/未解决判定规则(两步判定): 脚本采用两步判定逻辑,聚合数据中的 unresolved_countby_assignee_detailed 等字段均基于此规则:

  1. 第一步:检查 resolution 字段 — 不为空则判定为「已解决」
  2. 第二步:若 resolution 为空,再检查 status — 以下状态视为「已解决」:已关闭、INVALID、DUPLICATED、无法复现、已解决
  3. 其余状态(如 OPEN、Inprogress、POSTPONE)视为「未解决」

每条 Issue 的 JSON 中包含 _resolved 布尔字段,表示最终判定结果。

注意:聚合数据已在 Python 脚本中预计算,直接使用 aggregations 中的数值,不要自行重新计算。只在需要具体举例时才引用 issues 数组中的个别 Issue。

Step 5: Generate HTML Report

基于分析结果生成一个自包含的 HTML 文件,要求如下:

技术要求

  • 单文件:所有 CSS 和 JavaScript 内联在 HTML 中,不依赖外部 CDN 或文件
  • 图表:使用内联 SVG 绘制图表(柱状图、饼图、趋势图等),不使用外部图表库
  • 兼容性:可直接用 file:// 协议在浏览器中打开

数据驱动渲染(重要)

禁止在 HTML 中硬编码任何数据数值。 所有图表和表格必须从嵌入的原始 JSON 数据动态渲染:

  1. 在 HTML <head> 中嵌入完整的脚本输出 JSON:
    <script>
    const REPORT_DATA = <将 get_jiraData.py 输出的完整 JSON 粘贴于此>;
    </script>
    
  2. 所有 SVG 图表必须由 JavaScript 函数从 REPORT_DATA.aggregations 读取数据后动态创建 DOM 元素,不得在 SVG 标签中手写数字
  3. Issue 明细表格从 REPORT_DATA.issues 数组渲染
  4. 指标卡片(总数、未解决数等)从 REPORT_DATA.aggregationsREPORT_DATA.metadata 读取
  5. AI 分析建议(Section 10)也应尽量从 REPORT_DATA 中读取数据动态拼接,而非手写固定数字

这样确保页面上展示的每一个数值都可追溯到原始数据,不存在数据编造或计算偏差的可能。

图表动态尺寸规则

  • 所有水平柱状图的 SVG 高度必须根据数据项数量动态计算,禁止使用固定高度
  • 计算公式:svgHeight = dataItems.length * 40 + topPadding + bottomPadding
  • 每根柱子高度 28px,间距 12px
  • 左侧为文字标签预留足够空间(至少 150px),标签不得超出 SVG viewBox
  • 当数据项超过 15 个时,外层容器设置 max-height: 600px; overflow-y: auto 实现滚动

页面结构

Header: 报表标题、项目名称、日期范围、生成时间(蓝紫渐变背景)
Navigation: 顶部粘性导航栏,包含各章节锚点链接

Sections:
1. Executive Summary — 8 张指标卡片(4列x2行),数据从 aggregations 读取
   数据分类说明面板 — 可折叠,展示已解决/未解决的两步判定规则及来源拆分
2. Bug Trend — SVG 柱状图,按月展示创建数和解决数
3. Priority Distribution — SVG 水平柱状图或环形图
4. Severity Distribution — SVG 图表(如果有 severity 数据,否则跳过此节)
5. Component Hotspots — SVG 柱状图,按数量降序排列
6. Resolution Time — 统计表格(含说明列)+ 按优先级解决时间表格
7. Assignee Analysis — SVG 水平柱状图(使用 `aggregations.by_assignee_detailed` 数据,按 total 降序)+ 表格(经办人、总数、已解决、未解决、解决率、平均解决天数)。柱状图高度按经办人数量动态计算
8. Aging Analysis — SVG 柱状图展示老化区间分布 + 未解决按优先级表格
9. Labels — 柱状图(Top 25)
10. AI Recommendations — 从 REPORT_DATA 动态拼接的改进建议列表
11. Issue Detail Table — 完整 Bug 列表,支持客户端搜索、排序和 Excel 下载

Footer: 报告说明和生成信息

视觉风格

  • 使用专业的明亮主题(页面背景 #f0f2f5,卡片/区块白色,Header 蓝紫渐变)
  • 清晰的排版层次,紧凑间距,最大宽度 1200px
  • 响应式布局,适配不同屏幕宽度
  • SVG 图表使用 viewBox + preserveAspectRatio="xMinYMin meet" 实现自适应容器宽度,禁止固定像素宽度
  • SVG 图表配色统一协调

指标卡片布局

  • 使用 grid 4 列 布局(grid-template-columns: repeat(4, 1fr)),共 8 张卡片排成 2 行
  • 每张卡片内部:上方为图标 + 标签(横排),下方为数值,再下方为灰色辅助信息
  • 数值和标签必须设置 overflow: hidden; text-overflow: ellipsis; white-space: nowrap 防止内容溢出卡片边界
  • 8 张卡片:总故障数、已解决、未解决、中位数解决时间、本月新增、90天+高龄、最热组件、积压最多的经办人

数据分类说明面板

在指标卡片下方放置一个可折叠面板,标题为「数据分类说明:已解决与未解决是如何判定的?」:

  • 默认收起,点击展开
  • 展开后清晰说明两步判定规则(resolution 优先,status 兜底)
  • 左右两栏分别展示:已解决的来源拆分(resolution 判定 vs status 判定的各状态计数)、未解决的 status 分布
  • 数据从 REPORT_DATA.issues_resolvedresolutionstatus 字段动态统计

数据来源提示(Tooltip)

  • 每个 Section 标题旁放置一个 ? 圆形提示图标,鼠标悬停弹出气泡说明数据来源字段和计算方式
  • 例如:趋势图提示「按 created / resolutiondate 按月聚合」,解决时间提示「resolution_days = (resolutiondate - created) / 86400」

Issue 表格功能

  • 搜索框:实时过滤表格内容
  • 可点击列头排序
  • 显示字段:Key、Summary、Status、Priority、Severity、Assignee、Created、Resolution Days
  • 状态和优先级用不同颜色标记

原始数据 Excel 下载功能

在 Issue 明细表的搜索框旁边放置一个**「下载 Excel」**按钮,点击后在客户端生成并下载包含全部原始 Issue 数据的 Excel 文件。

技术实现要求:

  • 使用纯 JavaScript 在客户端生成 Excel XML Spreadsheet(Office 2003 XML 格式),不依赖任何外部库或 CDN
  • 将全部 issues 数组中的数据写入 Excel,每条 Issue 一行
  • Excel 列:Key、Summary、Status、Priority、Severity、Assignee、Reporter、Created、Resolved、Resolution、Components、Labels、Fix Versions、Original Estimate (h)、Time Spent (h)、Resolution Days
  • 数值字段(估时、耗时、解决天数)使用 Number 类型,其余使用 String 类型
  • 表头行加粗并设置背景色以便区分
  • 设置合适的列宽(如 Summary 列 300、Key 列 80 等)
  • 对 XML 特殊字符(&, <, >, ")进行转义
  • 文件名格式:{PROJECT_KEY}_bug_raw_data_{YYYY-MM-DD}.xls
  • 通过 Blob + URL.createObjectURL + 临时 <a> 标签触发下载

**按钮样式:**绿色背景(#44bb66),白色粗体文字,圆角,与搜索框同行排列

文件命名和保存

  • 文件名:{PROJECT_KEY}_bug_analysis_{YYYY-MM-DD}.html
  • 保存在用户的当前工作目录(不是 skill 目录)
  • 生成后告知用户文件路径

Error Recovery

  • 脚本返回 0 条数据:告知用户未找到匹配的 Bug,建议扩大日期范围或检查项目 Key 是否正确
  • Severity 字段全部为 null:在报表中跳过严重程度分析章节,并在执行摘要中说明
  • 数据量超过 500 条:分析时重点关注聚合数据,只在必要时引用个别 Issue
  • 网络或认证错误:展示具体错误信息,给出排查建议

Comments

Loading comments...