patrick204nqh/triagekit
GitHub: patrick204nqh/triagekit
一款无后端的 GitHub 仓库分诊工具,将 Dependabot 警报、代码扫描、PR 和 issue 聚合到一个自包含 HTML 仪表盘中进行评分和分层管理。
Stars: 4 | Forks: 0
无后端仓库分类管理。单个 HTML 文件。
`triagekit` 可编译为一个单一、独立的 HTML 仪表盘,完全在浏览器中运行 —— 无需后端,无需构建服务器,无需第三方脚本,且不内置任何 token(您需要在运行时自行粘贴)。GitHub 是首个提供商:它将您处理的内容分为 **Findings**(Dependabot 警报、代码扫描)和 **Work**(拉取请求、问题),每一项都可从数据驱动的工具栏中进行评分、分层和排序。PR 和问题会打开一个包含头像和完整 Markdown 正文的审查面板;可选的 **Insights** 视图将表格替换为组合图表。
Live demo → · screenshots use fictional acme-corp data — the tool never ships or commits real repo names or tokens.
## 快速开始
```
npx triagekit build --generic # writes dist/triage.html
open dist/triage.html # or double-click — it's just a file
```
在页面中,打开 **Settings** (⚙) 并连接一个具有您要处理资源(Dependabot 警报、代码扫描、拉取请求、问题)读取权限的 **fine-grained personal access token**,然后使用 **"Find repositories I can access"** 选择您的仓库并点击 **Load**。您的范围会保存在本地;token 仅保留在此标签页中。
一个预构建的通用仪表盘也托管在[在线演示](https://patrick204nqh.github.io/triagekit/)中 —— 连接 token 即可使用,无需安装任何内容。
## 构建模式
| 模式 | 命令 | 范围 | 可以公开分享吗? |
| --- | --- | --- | --- |
| **Generic** | `triagekit build --generic` | 在运行时通过 **Settings** 选择 | ✅ 不内置任何特定于源的内容 |
| **Compiled** | `triagekit build` | 从 `triage.config.yml` 内置的 `scope` 包 | ⚠ 包含您的仓库名称 —— 仅限团队内部使用 |
Generic 模式是通用工具:构建一次,将 HTML 交给任何人,每个用户连接 token 并选择他们的仓库。Compiled 模式为“开箱即用”的团队仪表盘预先内置了特定范围。**这两种模式都不会嵌入 token** —— 每个用户始终需要粘贴自己的 token。
## 配置(compiled 模式)
```
cp triage.config.example.yml triage.config.yml # the copy is gitignored
$EDITOR triage.config.yml # set your scope + branding
npx triagekit build # writes dist/triage.html
```
```
source: github
# 编译模式会生成一个 per-source scope bag(绝不会嵌入任何 token)。
scope:
repos:
- acme-corp/web-app
- acme-corp/api-gateway
- acme-corp/billing-service
views:
- code-security # security findings: Dependabot + code scanning
# - insights # add to enable the Insights (charts) tab
branding:
title: "Acme Triage"
# 可选:一个导出 scoring overrides 的 JS/TS 模块。
# logicHooks: ./triage.hooks.ts
```
## 安全性与 token 模型
本仓库是 **engine** —— 它 **不** 包含任何真实的组织名称、仓库名称、主机名或 token;所有标识 *您* 的内容都存在于被 gitignore 忽略的输入中(参见 [CONTRIBUTING.md](CONTRIBUTING.md#the-public--private-boundary))。该引擎具有 **零** 读取或嵌入凭据的代码路径。
- **您在运行时粘贴自己的 token。** 它从不会在构建时被读取或嵌入到 HTML 中。凭据按源存储在 `sessionStorage` 中 —— 当您关闭标签页时即被清除,绝不在会话之间持久化。请使用仅限定于您要处理的仓库的 fine-grained PAT。切勿将 token 粘贴到被跟踪的文件、截图或 commit 中。
- **单一文件,无外部脚本。** 构建过程将所有内容(脚本、字体)内联 —— 没有 CDN。如果输出中出现任何 `src="http…"` 引用,CI 将会失败。
- **严格的基于哈希的 CSP** 在构建时计算:`default-src 'none'`,仅允许通过其 `sha256` 哈希内联脚本的 `script-src`(无 `unsafe-inline`),以及仅限于配置的提供商 API 源的 `connect-src`。
## 设置
所有配置都位于 **Settings** 滑出面板 (⚙) 中。命令栏包含范围/健康状态芯片、手动刷新和主题切换;其他所有内容都位于四个标签页中:
- **Connections** —— 为每个源添加一个 **仅限当前会话** 的凭据。范围由 schema 驱动:可发现的源(例如 GitHub 仓库)提供 **"Find … I can access"**(按凭据缓存)。范围是非机密的,因此会按源持久化存储在 `localStorage` 中。
- **Scoring & priority** —— 分层界限(P0 / P1 / P2;P3 是隐含的底层)和按类型的评分模型 —— 基于 类型信号的 **Simple** 权重或 **Advanced** 公式。
- **Filters** —— 机器人账户白名单,以便可以在 Work 界面上屏蔽自动化噪音。
- **General** —— **Appearance**(`Auto` / `Light` / `Dark`)、**Auto-refresh**(可选的 5 或 10 分钟快照重新获取,并带有“updated *N*m ago”时间戳)和 **Data**(清除凭据或保存的范围)。
Compiled 构建会自动植入其内置的 `scope`,因此“开箱即用”的仪表盘只需要一个 token。
## 洞察
可选的 **Insights** 视图(将 `insights` 添加到 `views`)为加载的项目渲染一个图表网格 —— 这是一个独立的界面,确保表格保持作为一个简洁的操作驾驶舱。

- **仅限快照。** 每个图表都是组合式的(分布 / 排名 / 比率),绝不是时间序列 —— 无后端的抓取没有可用于趋势分析的历史数据。
- **按类型贡献。** 通用图表(优先级分布、年龄区间、热门位置)适用于所有内容;`dependency-vuln` 添加了“修复可用”的“快速见效”比率和运行时与开发的对比;`code-scanning` 添加了按严重程度和工具细分的开启状态。新的数据源会自动激活它们自己的图表。
## 自定义评分
每种类型都提供了一个透明的内置评分器(基于共享的 `makeSeverityScorer` 工厂构建)。要在不 fork 引擎的情况下覆盖评分,请将 `logicHooks` 指向一个导出 `score` 函数且匹配 `Scorer` 类型的模块 —— 它会在构建时被打包进 HTML 中:
```
// triage.hooks.ts (gitignored)
import type { Scorer } from "./src/runtime/scoring/registry";
import type { DependencyVulnDetails } from "./src/runtime/dataset/kinds/dependency-vuln";
export const score: Scorer = (item) => {
const d = item.details as DependencyVulnDetails;
return d.severity === "critical" ? 1000 : item.signal;
};
```
## 设计
视觉语言 —— 以深色优先的操作驾驶舱(Void Zinc 画布、单一的 Kelp Teal 强调色、语义化的 P0–P3 渐变色等、等宽数字)—— 记录在 [DESIGN.md](DESIGN.md) 中。**Space Grotesk** 和 **JetBrains Mono** 为自托管并内联(无 CDN);严格的 CSP 仅允许通过 `font-src 'self' data:` 加载字体。
## 贡献与许可
环境设置、测试/检查规范以及公共/私有边界位于 [CONTRIBUTING.md](CONTRIBUTING.md) 中。基于 [MIT](LICENSE) 许可证发布。
标签:DevSecOps, 上游代理, 云安全监控, 代码仓库管理, 多模态安全, 数据分析看板, 数据可视化, 暗色界面, 漏洞预警, 纯前端, 自动化攻击, 静态分析