
Security News
PHP Foundation Says Chainguard Broke Security Embargo Ahead of Emergency Patches
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.
dsh-chart-ascii
Advanced tools
Terminal ASCII charts for DeepSeek Harness: draw horizontal/vertical bar charts, line/scatter/area trend charts and one-line sparklines from plain `label,value` data or a file. Zero runtime dependencies, read-only.
DeepSeek Harness 的终端图表工具箱:bar_chart 把一组数值画成横向 / 纵向条形图,line_chart 画折线 / 散点 / 面积趋势图,sparkline 把整段序列压成一行迷你图。输入只需「标签,值」或纯数值,三张图都在字符网格里按显示宽度对齐。只读、零运行时依赖。
在终端里看数字,最容易出问题的不是「看不到」,而是「看不出」:一列 40 个数字谁大谁小要靠心算,一段 200 个采样点的趋势要靠脑补。文本表格能对齐,但反映不出比例和形状。
本插件的做法是先解析成「标签 + 数值」序列,再把它映射到字符网格上——条形图用长度表示大小,折线图用位置表示高低,迷你图用八级块字符表示相对起伏。三张图都是纯文本输出,能直接贴进聊天、日志、Issue,也能落进 Markdown 与 Word 文档。
数值来源支持两路:text 传内联数据(每行一条),或 path 读文件。每行支持 北京,120、上海 98、制表符 / 分号 / 竖线 / 等号分隔,也支持只写数值自动编号;# 开头的注释行与空行跳过;带 % 后缀的数值(如 12.5%)会记录百分号标记并在展示时带上。无法识别出数值的行会被单独计数,不会静默丢弃。
三张图的取舍:
bar_chart。条形长度按「绝对值最大项」等比缩放,最长的一条永远占满可用宽度,小数值也能看清相对关系。line_chart。按数值范围映射到行,点数超过设定值时自动等分降采样(桶内取平均),保证输出宽度可控。sparkline。不占地方,一眼看出这段序列是走高、走低还是震荡。npm install dsh-chart-ascii
安装后在 cordis.patch.yml 中加入:
- insert:
- id: chart-ascii
name: "dsh-chart-ascii"
把一组数值画成条形图。默认横向,条形长度按最大值等比缩放;orientation=vertical 切换为纵向柱状图。
参数:path / text 二选一(text 优先);orientation(horizontal | vertical,默认 horizontal);style(block | ascii | dot,默认 block);width 横向图最长条形宽度(默认 40,上限 200);height 纵向图高度(默认 10,上限 40);sort(none | asc | desc,默认 none);limit 最多绘制条数(默认 20,上限 200);show_value 是否显示数值(默认 true);show_percent 是否显示占合计的比例(默认 false)。
北京 | ████████████████████████████████████████ 120 (28.0%)
上海 | █████████████████████████████████ 98 (22.9%)
深圳 | ██████████████████████████ 77 (18.0%)
广州 | ██████████████████████ 66 (15.4%)
杭州 | ██████████████████ 55 (12.8%)
成都 | ████ 12.5 (2.9%)
纵向模式把每一行放大成一列,底部按列宽展开标签,顶部标最大值、底部标 0:
120 |█
|█ █
|█ █ █
|█ █ █ █
|█ █ █ █
0 |█ █ █ █
+-------------
北京上海深圳广州
用户:把各城市销量用条形图对比一下,按占比排序
助手:调用
bar_chart,text传数据,sort=desc、show_percent=true
用户:这几个模块的代码行数画成柱状图
助手:调用
bar_chart,orientation=vertical、height=8
把一组数值画成趋势图。style=line 连成折线,scatter 只画点,area 在点下方填充。点数超过 points 时自动等分降采样。
参数:path / text 二选一(text 优先);style(line | scatter | area,默认 line);height 图形高度(默认 10,上限 40);points 横轴最多点数(默认 60,上限 240);marker 数据点字符(默认 *,需单个字符);min / max 手动指定纵轴范围;sort(默认 none);limit 最多使用点数(默认 0,即不截断)。
31 | *|
| ||*
| *||*|
| *||||
|*|||*|
9 | *|
+--------
#0 #7
共 8 个点;样式 line
底部一行是坐标轴标签(取首尾数据行的标签)与统计说明;发生降采样时会写明「按 N 个一组降采样为 M 个」。
用户:这个接口的响应时间波动怎么样
助手:调用
line_chart,text传响应时间序列,height=8
用户:把这些点画成散点图,用 o 当标记
助手:调用
line_chart,style=scatter、marker=o
用户:纵轴统一按 0 到 100 画,方便和上一张图对比
助手:调用
line_chart,min=0、max=100
把一组数值压成一行迷你图。三种字符风格:block 用 ▁▂▃▄▅▆▇█ 八级块字符,ascii 用 ._-~^*+@,dot 用 ·•●。width 可把序列压缩到指定字符数(按组取平均)。
参数:path / text 二选一(text 优先);style(block | ascii | dot,默认 block);width 输出字符数上限(默认 0,即不压缩,上限 240);sort(默认 none);limit 最多使用点数(默认 0)。
▅▆█▁▂
区间:1 ~ 9;共 5 个字符(原始 9 个点按 2 个一组降采样)
用户:用一行表示这 30 天的日活趋势
助手:调用
sparkline,text传日活序列,width=30
用户:终端里不想出现块字符,换成 ASCII 的
助手:调用
sparkline,style=ascii
bar_chart 看分布,再 sparkline 看走势,不必开绘图库。sparkline 输出一行纯文本,可直接贴进日报、周报、Issue 评论。show_percent=true 后每条以占合计的比例展示,适合预算、流量、错误来源构成。line_chart 看峰谷与拐点。sort=desc + limit=10 直接产出 Top N 排行,省掉手工排序。line_chart 配合 min / max 固定纵轴,让不同批次的图可以直接叠着看。width 调小,line_chart 与 sparkline 会自动降采样而不是撑破屏幕。eval、不加载模块、不解析表达式。dsh-credential-scan 检查。| 协作插件 | 集成方式 |
|---|---|
| dsh-text-stats | 先用 text-stats 算出词频 / 分布,再用本插件画成条形图 |
| dsh-log-parse | 把日志统计的时间线数据交给本插件,画成错误趋势图 |
| dsh-similarity | 相似度评分序列用 line_chart / sparkline 看整体分布 |
| dsh-table-render | 需要精确数值时用表格,需要看比例时用本插件,二者互补 |
| dsh-credential-scan | 分享图表输出前扫描其中是否混入密钥、令牌 |
| dsh-csv-inspect | 先看清 CSV 的列结构,再挑出一列数值交给本插件 |
| dsh-bench-compare | 多次基准测试结果画成条形图或折线图,直观看波动 |
| dsh-session-exporter | 把分析过程中的图表与结论归档成记录 |
bar_chart:横向 / 纵向条形图,三种字符风格、等比缩放、排序与条数上限、可选数值与占比line_chart:折线 / 散点 / 面积三种样式,自动等分降采样、可自定义标记与纵轴范围sparkline:三种字符风格的迷你图,支持按宽度压缩v0.2(计划)
bar_chart 增加 stack:同一标签多段数值的堆叠条形图line_chart 增加 overlay:多条序列画在同一网格上对比histogram:按自动分箱统计数值分布并画成直方图v0.3(展望)
column 参数),不必先手工抽列dsh-chart-diff 联动,对比两次采样结果的图形差异Q:为什么最长的条形没有占满 width?
条形长度是 round(|值| / 最大绝对值 × width),最大项必然占满。若看起来偏短,通常是因为最大值明显高于其余项(长尾分布),此时可以用 limit 截断尾部,或改用 sparkline 看整体形状。
Q:所有数值都是 0 会怎样? 不会报错,但不会画出任何条形,输出会明确提示「全部数值为 0,条形长度按 0 绘制」。纵向图同理。
Q:负值怎么处理?
按绝对值参与长度缩放(负值也有长度),数值本身原样显示并保留负号。字符图没有真正的负轴,需要同时看正负时建议改用 dsh-table-render。
Q:line_chart 的点数和实际输出宽度是什么关系?
points 是横轴最多字符数,超过就等分降采样:factor = ceil(总点数 / points),每 factor 个点取平均合成一个字符。输出末尾会写明「原始 N 个点按 K 个一组降采样为 M 个」,不会让你误以为看到的是全部原始点。
Q:marker 传多个字符为什么没生效?
数据点必须占一个字符位,传多字符时会回退为默认的 *。
Q:中文标签为什么没有错位,但字数看起来对不齐? 对齐按「显示宽度」计算,汉字占 2 列。所以一列中文标签在等宽字体下视觉对齐,但在按字符数看时会显得更窄。等宽字体终端里显示正常。
Q:纵向图的标签太长会被截断吗? 列宽按最长标签动态取 2~6 列,超出部分截断并补省略号。标签较多或较长时建议改用横向模式,或先用文本工具缩短标签。
Q:sort 之后原来的顺序信息还在吗?
排序是稳定的(相同数值保持输入顺序),但 bar_chart 的标签行号反映的是解析顺序。需要保留原始次序时用默认的 sort=none。
Q:数值精度会丢吗?
不会。计算全程用浮点数,只有最终展示用 fmtNum(整数原样、小数最多两位)。合计与均值也是按原始值计算的。
Q:文件很大能处理吗?
默认文件大小上限 10240 KB(可调到 51200 KB)。本插件需要一次性读入整个文件解析,超大文件建议先用 dsh-line-ops 抽样或 dsh-file-search 定位更小的目标文件。
Q:输出被截断了怎么办?
输出超过 max_chars(默认 20000)时会截断并提示总字符数,可用 max_chars 调大(上限 200000),或收紧 limit / 缩小 width 让输出更紧凑。
MIT
FAQs
Terminal ASCII charts for DeepSeek Harness: draw horizontal/vertical bar charts, line/scatter/area trend charts and one-line sparklines from plain `label,value` data or a file. Zero runtime dependencies, read-only.
We found that dsh-chart-ascii demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.

Security News
PHP releases emergency patches for two critical RCE vulnerabilities as agencies urge organizations to take unpatched sites offline.

Threat Research
/Security News
A supply chain attack compromised LiteLLM 1.107.0 on PyPI and Docker, spreading malware that steals cloud credentials, developer secrets, and AI provider keys.