Skip to content

feat(assistant): add pitch-deck-creator assistant#1846

Merged
piorpua merged 2 commits intomainfrom
feat/pitch-deck-assistant
Mar 29, 2026
Merged

feat(assistant): add pitch-deck-creator assistant#1846
piorpua merged 2 commits intomainfrom
feat/pitch-deck-assistant

Conversation

@IceyLiu
Copy link
Copy Markdown
Collaborator

@IceyLiu IceyLiu commented Mar 28, 2026

Summary

  • Add pitch-deck-creator assistant with officecli-pitch-deck skill for building investor decks, product launch presentations, and enterprise sales decks
  • Update officecli-academic-paper skill files (sync from officecli v1.0.24, add dollar sign warning)
  • Fix initStorage to detect nameI18n and descriptionI18n changes in preset updates

Test plan

  • Verified pitch-deck-creator appears in assistant list with correct Chinese name (路演 PPT 助手)
  • Verified SKILL.md frontmatter parses correctly (no version comment)
  • Verified TypeScript compiles without new errors
  • Enable pitch-deck-creator and test a sample pitch deck generation

@piorpua piorpua added the bot:reviewing Review in progress (mutex) label Mar 29, 2026
…-paper skill

- Add officecli-pitch-deck skill with SKILL.md and creating.md
- Add pitch-deck-creator assistant with en-US and zh-CN rule files
- Add pitch-deck-creator preset to assistantPresets.ts with battle-tested prompts
- Update officecli-academic-paper skill files (remove version comment, add D-10 dollar sign warning)
- Fix initStorage shouldUpdate to detect nameI18n and descriptionI18n changes
@piorpua piorpua force-pushed the feat/pitch-deck-assistant branch from 6a1c643 to 40f9156 Compare March 29, 2026 09:14
@piorpua piorpua added bot:reviewing Review in progress (mutex) and removed bot:reviewing Review in progress (mutex) labels Mar 29, 2026
@piorpua
Copy link
Copy Markdown
Contributor

piorpua commented Mar 29, 2026

Code Review:feat(assistant): add pitch-deck-creator assistant (#1846)

变更概述

本 PR 新增了 pitch-deck-creator 内置助手(包含英文/中文 .md 提示文件),更新了 officecli-academic-paper skill 文档(添加 $ 美元符号逃逸说明、多栏摘要建议、TOC 分页等改进),并修复了 initStorage.ts 中未检测 nameI18n/descriptionI18n 变更的问题。


方案评估

结论⚠️ 方案有缺陷

新 assistant 文件结构和 skill 文档改进均正确。initStorage.ts 的修复方向正确——将 nameI18n/descriptionI18n 加入 shouldUpdate 判断中——但遗漏了字段从无到有(missing)的场景,与同文件中 promptsI18nMissing 的处理模式不一致,存在同样的初始迁移盲点。


问题清单

🟡 MEDIUM — nameI18n/descriptionI18n 未处理字段从无到有的迁移场景

文件src/process/utils/initStorage.ts,第 968–975 行

问题代码

const nameI18nChanged =
  existing.nameI18n &&
  builtin.nameI18n &&
  JSON.stringify(existing.nameI18n) !== JSON.stringify(builtin.nameI18n);
const descriptionI18nChanged =
  existing.descriptionI18n &&
  builtin.descriptionI18n &&
  JSON.stringify(existing.descriptionI18n) !== JSON.stringify(builtin.descriptionI18n);

问题说明:当 existing.nameI18nundefined(即历史数据中该字段尚未写入),而 builtin.nameI18n 已有值时,两个条件均因短路求值返回 undefined/false,导致 shouldUpdate 不会被触发。这与同文件第 962 行的 promptsI18nMissing 模式不一致——后者显式处理了字段首次出现的场景,但新代码没有对应的 nameI18nMissing/descriptionI18nMissing 检查。后果是:若某个内置助手是在 nameI18n 支持引入之前就已安装的用户,其本地存储中 nameI18n 为空,升级后将无法自动获取新的 i18n 数据。

修复建议

const nameI18nMissing = !existing.nameI18n && !!builtin.nameI18n;
const nameI18nChanged =
  existing.nameI18n &&
  builtin.nameI18n &&
  JSON.stringify(existing.nameI18n) !== JSON.stringify(builtin.nameI18n);
const descriptionI18nMissing = !existing.descriptionI18n && !!builtin.descriptionI18n;
const descriptionI18nChanged =
  existing.descriptionI18n &&
  builtin.descriptionI18n &&
  JSON.stringify(existing.descriptionI18n) !== JSON.stringify(builtin.descriptionI18n);
const shouldUpdate =
  existing.name !== builtin.name ||
  existing.description !== builtin.description ||
  existing.avatar !== builtin.avatar ||
  existing.isPreset !== builtin.isPreset ||
  existing.isBuiltin !== builtin.isBuiltin ||
  nameI18nMissing ||
  !!nameI18nChanged ||
  descriptionI18nMissing ||
  !!descriptionI18nChanged ||
  needsPromptsI18nUpdate;

🔵 LOW — initStorage.tsnameI18n/descriptionI18n 修复缺少单元测试

文件src/process/utils/initStorage.ts

问题说明:PR 新增的 nameI18nChanged/descriptionI18nChanged 逻辑属于条件判断逻辑,没有对应的单元测试覆盖,无法验证字段从无到有、字段更改触发更新、字段未变化不触发更新三种路径的正确性。项目测试覆盖率目标为 80%,建议补充对应测试。


汇总

# 严重级别 文件 问题
1 🟡 MEDIUM src/process/utils/initStorage.ts:968 nameI18n/descriptionI18n 未处理 missing 场景
2 🔵 LOW src/process/utils/initStorage.ts 缺少 initStorage i18n 修复的单元测试

结论

⚠️ 有条件批准initStorage.ts 的修复逻辑与同文件 promptsI18nMissing 模式不一致,存在历史数据迁移盲点,建议补充 nameI18nMissing/descriptionI18nMissing 检查后合并。


本报告由本地 pr-review skill 生成,包含完整项目上下文,无截断限制。

@piorpua piorpua added bot:ready-to-fix CONDITIONAL review done, waiting for bot fix bot:fixing Fix in progress (mutex) and removed bot:reviewing Review in progress (mutex) bot:ready-to-fix CONDITIONAL review done, waiting for bot fix labels Mar 29, 2026
…ng assistant update

Add nameI18nMissing and descriptionI18nMissing checks to shouldUpdate logic,
consistent with existing promptsI18nMissing pattern. Ensures legacy users who
installed an assistant before nameI18n support was added will receive the i18n
data on next startup.

Review follow-up for #1846
@piorpua
Copy link
Copy Markdown
Contributor

piorpua commented Mar 29, 2026

PR Fix 验证报告

原始 PR: #1846
修复方式: 直接推送到 feat/pitch-deck-assistant

# 严重级别 文件 问题 修复方式 状态
1 🟡 MEDIUM src/process/utils/initStorage.ts:968 nameI18n/descriptionI18n 未处理字段从无到有的迁移场景 新增 nameI18nMissing / descriptionI18nMissing 检查,与 promptsI18nMissing 模式保持一致 ✅ 已修复

总结: ✅ 已修复 1 个 | ❌ 未能修复 0 个

🔵 LOW 级别问题已跳过(不阻塞合并,修复优先级低)。

@piorpua piorpua enabled auto-merge (squash) March 29, 2026 09:37
@piorpua piorpua added bot:done Auto-merged by bot and removed bot:fixing Fix in progress (mutex) labels Mar 29, 2026
@piorpua piorpua merged commit 4f31b65 into main Mar 29, 2026
18 of 21 checks passed
@piorpua piorpua deleted the feat/pitch-deck-assistant branch March 29, 2026 09:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bot:done Auto-merged by bot

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants