patrick204nqh/triagekit

GitHub: patrick204nqh/triagekit

一款无后端的 GitHub 仓库分诊工具,将 Dependabot 警报、代码扫描、PR 和 issue 聚合到一个自包含 HTML 仪表盘中进行评分和分层管理。

Stars: 4 | Forks: 0

triagekit

无后端仓库分类管理。单个 HTML 文件。

npm CI License: MIT Live demo

`triagekit` 可编译为一个单一、独立的 HTML 仪表盘,完全在浏览器中运行 —— 无需后端,无需构建服务器,无需第三方脚本,且不内置任何 token(您需要在运行时自行粘贴)。GitHub 是首个提供商:它将您处理的内容分为 **Findings**(Dependabot 警报、代码扫描)和 **Work**(拉取请求、问题),每一项都可从数据驱动的工具栏中进行评分、分层和排序。PR 和问题会打开一个包含头像和完整 Markdown 正文的审查面板;可选的 **Insights** 视图将表格替换为组合图表。

triagekit walkthrough — Dependencies findings, Insights charts, Code scanning, and the PR review panel
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`)为加载的项目渲染一个图表网格 —— 这是一个独立的界面,确保表格保持作为一个简洁的操作驾驶舱。

triagekit Insights — quick-wins ratio, priority distribution, age buckets, top locations

- **仅限快照。** 每个图表都是组合式的(分布 / 排名 / 比率),绝不是时间序列 —— 无后端的抓取没有可用于趋势分析的历史数据。 - **按类型贡献。** 通用图表(优先级分布、年龄区间、热门位置)适用于所有内容;`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, 上游代理, 云安全监控, 代码仓库管理, 多模态安全, 数据分析看板, 数据可视化, 暗色界面, 漏洞预警, 纯前端, 自动化攻击, 静态分析