Offipy

Latest version: v0.20.0

Safety actively analyzes 993520 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 8

0.20.0

Added

- **PPTX 动画效果(v0.20)**:HTML 声明 `data-ppt-anim`/`data-ppt-transition` + 约定回退
(`data-aos`/`data-anim`/`.fade-in`)→ 入场动画(fade/float_up/fly_in/wipe/zoom_in/grow)
与页面过渡(fade/wipe/push/cover)。`deck make --animations` 开启;独立 API
`apply_animations`/`apply_transitions` 对现成 .pptx 注入;`deck add-anim --pptx X --spec spec.json` CLI。

Build

- CI:ci.yml 全 job 接入 setup-uv 依赖缓存 + 新增 `workflow-lint` job(actionlint 校验全部
workflow 语法,防 YAML 结构错 0-jobs 秒挂无日志复发)
- CI:release.yml 发布链接入 setup-uv 依赖缓存
- Docs:新增 `docs-deploy.yml` 发布 mkdocs 站点到 GitHub Pages(官方
configure-pages / upload-pages-artifact / deploy-pages 三件套),mkdocs.yml 补 `site_url`

0.19.0

Fixed

- **feedback status 透传 capacity(134)**:valid 分支输出 `capacity` 全量 dict
(`level` / `suggest_n` / `samples_per_param`)与 `capacity_warning` 布尔——capacity
告警不再只有裸 `samples_per_param` 数字,阈值分级与补样建议对消费方可见。

Added

- **CLI feedback reschema(144)**:`offipy feedback reschema` 把 schema 过期的历史
反馈记录(有特征快照)原地重写为当前 `feature_schema_version`,供 bump 后迁移。
返回 `{rewritten, skipped_no_features, already_current}`;坏行保留不破坏文件。

0.18.2

Added

- **证据层(wave1)**:art / audit 视觉证据增强——
- **元素级 opacity(137)**:measurement 透传元素透明度 → `ArtElement.opacity`
(0-1,None=无证据);PPTX-only 路径按 run 前景 alpha 与形状填充 alpha 的 min 合并
- **fill_kind 标记(140)**:measurement 记录 `fill_kind`(solid / gradient / shadow /
image),gradient / shadow 等光栅化装饰可被 audit 识别
- **元素类型补全(127)**:asset / svg / deco_snapshot 映射到正确 kind 与 role
- **deco 截图扩视口(138)**:deco_snapshot 右/下越界时临时扩视口截全捕获框后还原,
左/上负坐标 clamp 并回写偏移,不再双轴 clamp 截断
- **颜色解析扩展(129)**:hex / 命名色 / 百分比 alpha 解析,无法解析的告警不崩
- **PPTX-only 审计富集(128)**:只传 `pptx=` 时从 `_ShapeRecord` 解析字号 / 字体 /
前景色 / 背景色 / 透明度 / fill_kind,hierarchy / typography / color 维度获得字号 /
颜色证据(evidence_coverage 从 0 提升);schemeClr / sysClr(主题色引用)仍不解析
- **SmartArt / 表格 / 图表文本(124/125)**:audit 计入 SmartArt 内部节点
(`smartart_node_count`)、表格单元格、图表系列 / 类别 / 轴标题文本——
文本统计不再漏 graphicFrame 内容
- **图表系列色(139)**:audit 提取 `c:ser` 显式系列色 → `chart_series_colors`;
chart graphicFrame 在 `_KIND_MAP` 归入 `chart` kind
- **deck 媒体保真度(141)**:转换时 `<audio>` 无法用 PPTX 表达 → 静默丢弃并告警;
`<video>` 链接 / `<a>` href 线程到真实 `a:hlinkClick` 超链接;虚线边框按 active 边写
`a:ln`;缺失 webfont 子集跳过并 surface substitution 警告;媒体保真度警告入质量报告
- **CLI feedback 专属子解析器(135 146 149)**:`offipy feedback` 专属 subparser,
5 op 帮助与必填参数引导(`feedback recommend` 缺 `--pptx` exit 2);入口强制 UTF-8
输出(Windows 中文终端不再乱码);`feedback_dir` 与其他路径参数一致绝对化
- **feedback 消费端新增面(130 133 157 159 160)**:
- `experimental_score_mode`:综合指数标注来源(`grade_mean` 规则评级 /
`worth_sigmoid` 模型置信度,130)
- severity_shift 生效时标 override + `details.feedback` 溯源(before/after/worth/shift,157)
- rule.delta 落到 `report.feedback_adjustments` + deck audit JSON/文本「模型调整」段(159)
- `quality_score_coverage`:分数基于置信子集的覆盖率统计(covered/total/abstain/ood,133)
- `offipy feedback recommend/apply`:只读建议 + rule.delta 持久化到
`~/.offipy/art_profiles.json`(160),apply 后 `deck audit --profile` 不带
`--feedback-dir` 也吃到调整
- **docs/api diagram/feedback 参考页(161)**:双向 API 参考页生成(含 recommend/apply)

Changed

- **图片拉伸失真按解码 vs 渲染判定(126)**:`distorted_image` 的 `natural_ratio` /
`physical_ratio` 现基于图片**解码尺寸**(naturalWidth / SVG viewBox 定比)与**渲染尺寸**
(CSS 布局宽高)之比,检出真实拉伸漂移(旧实现两值同源渲染尺寸、漂移恒≈0);
**`feature_schema_version()` 由 2→3**——历史 FEATURES 训练样本 / 模型因语义变化作废
(冷启动回退 v2 语义不变)。
- **图表框架透明度参与遮挡(139)**:chart 框架填充改读 `c:chartSpace/c:spPr`——
noFill 透明图表不再按整块不透明误报遮挡(透明上层按 transparent_overlay 抑制)
- **drawio 折线边识别与透明(123/136)**:waypoint 折线边渲染为 freeform +
noFill + connector 标记,audit 识别为 `is_connector` 且透明不遮挡
- **场景融合 measurement 为主、pptx 补缺(142)**:`merge_scenes` 合并时 primary
缺字段(None / 空文本)用 secondary 补齐(font_size 三元组同源),不再因测量缺
证据丢视觉线索

Fixed

- art: tiny_text/title_too_small/no_focus 的 finding 附可学习 details(145)
- art: 维度 reliability 从 finding 级 evidence_reliability 派生(153)
- art: experimental 规则 conf 封顶提至 0.4,低权重参与 grade(154)
- art: coverage 门控按规则独立判定,不再整维丢弃 findings(155)
- art: 强调色评估走 run 级颜色,口径与调色板统一(156)
- **feedback 训练链加固(131 134 143 144 148 150 151 152)**:
- kept 下标越界/缺失/非数值 → `ModelBundle.load` 回退 v2 + `status` 报 `stale`(150)
- heads 非有限值处理:NaN → 中性值、±inf → clamp,`severity_shift` 阈值步进(148)
- append 未传 features 时自动补 `feature_schema_version`(143)
- no_valid_samples 返回 `excluded` 过滤分类 + hint(131);`status` 三分支透出
`excluded`(144)
- schema 过期记录 `reschema_records` 原子重写(tmp+os.replace,保留空行,144)
- `status` / `train` 成功返回体透出 `per_rule` 逐规则诊断(152)
- 模型输出饱和检测持久化,`status` / analyze warning 透出(151)
- 容量阈值重标定(spp≥1 ok / ≥0.25 warn / <0.25 critical)+ `suggest_n` 补样估算(134)
- **feedback 消费端诚实性(132 147 158)**:
- `status` 权重形状损坏(schema 匹配但 weights 重建失败)→ 报 `corrupt`,不冒充 valid(147)
- 无有效模型 → `feedback.model.unavailable` warning,不再静默回退 v2(158)
- `quality_score` 需 ≥3 个 assessed 维度 worth 才写(不足不冒充分数,158)
- severity_shift 后按 post-shift findings 重推维度 grade,grade 与 finding 一致(132)

0.18.0

Added

- **feedback 学习质量 8 项(115-122)**:
- tiny_image 特征补全 + FEATURES schema v1→v2 bump(115):媒体特征新增
`art.media.tiny_image.area_ratio`;旧记录 feature_schema_version 不符 →
不可训练样本(冷启动回退 v2 语义不变)
- 预处理标准化(118/120):训练集拟合**零方差特征 drop + 高相关(|r|≥0.99)
去重 + 全局 z-score**,mean/scale/kept 持久化到 model.json `preprocessing` 块
(model schema v2),推理端走同一 transform
- 容量自适应 soft warning(121):容量按独立样本数自适应(Lunt & Xu H≈√n),
`samples_per_param` 分级 ok/warn/critical,只记录不拒绝写盘
- 样本级 repeated stratified CV(119):按 rule 分层的重复 5 折、**绝不做
pair-level split**(Kajimura 2022);95% 置信下界触 chance →
`poor_generalization` soft flag,不拒绝写盘
- insufficient_pairs 逐规则诊断(117):训练样本不足时返回 per-rule
`{fixed, accepted, pairs, single_direction, suggest}` 可行动建议
- ensemble K=5(122):多 seed member 取平均降方差 + worth 校准
(quality_score 归一)+ abstain(|worth| 近零 / member 分歧大的 finding 不
shift)+ OOD(特征 z 越界不 shift,保守回退 v2)
- CLI deck audit 透传 experimental score(116):`deck audit --feedback-dir`
时报告 / `--json` 输出带 `experimental_score`(无有效模型时保持公式值,
不足 3 个 assessed 维度才为 null)
- `feedback status` 表面 `effective_dims` / `samples_per_param` /
`poor_generalization`(121/119)

Fixed

- **deck srcset 还原越界(110)**:源 HTML 含字面 `__OFFIPY_DATA_N__` 占位符
(N 越界)时不再抛裸 IndexError——未 stash 的占位符原样保留,交给 URL 重写按
普通相对路径处理。

Changed

- **mkdocs build --strict 纳入纯模块 CI 门禁(108)**:任何文档构建告警即 CI 红
(dev extra 新增 mkdocs + mkdocs-material)。
- **stdlib-random + 固定 seed 变异 fuzz(110)**:drawio / HTML 解析器以固定 seed
变异输入做鲁棒性 fuzz(含 URL / data 路径白名单验证)。

0.17.1

Fixed

- **feedback 学习 4 个修复(111-114)**:
- 训练加数值门禁(112):loss 非有限 → `training_diverged`;输出恒定 → `model_collapsed`;全局梯度裁剪;坏模型不写,原子保留旧模型
- 学习消费必须显式 `feedback_dir`(113):`feedback=True` 无 dir → `InvalidArgumentError`;`learned_adjustments` 无 dir → 回退 v2,不静默加载全局 `~/.offipy`
- `severity_shift` 按规则证据门禁(111):仅 ≥3 有效标签的规则被 shift;`quality.score` 同语义(只由通过门禁的 finding 贡献)
- CLI 打开学习消费通道(114):`deck audit --feedback-dir` 应用反馈学习;`deck make --export-png`(`--feedback` 为弃用别名);`feedback append` 追加标签

0.17.0

Added

- 可学习 feedback 系统:自定义 numpy MLP(配对 margin loss + centering 先验),
注册式输入输出(FEATURES 特征注册表 + OUTPUTS 输出注册表,均带 schema 版本)
- `offipy[feedback]` extra(numpy 必选);核心 `import offipy` 仍零依赖
- CLI/MCP:`feedback_train` / `feedback_status`(schema app `feedback`)
- `art analyze` 学习路径:`rule.delta`(历史聚合 → feedback_severity_adjustments)、
`finding.severity_shift`(后处理 pass,severity_override=False 才作用)、
`quality.score`(替换 experimental_score,opt-in)
- 冷启动回退 v2(无模型/过期/无 numpy 时行为不变);旧 v1/v2 API 完全向后兼容

Page 1 of 8

© 2026 Safety CLI Cybersecurity Inc. All Rights Reserved.