Skip to content

Releases: caesarloo/ai-pm-tool

AI PM Tool v0.1.6

Choose a tag to compare

@github-actions github-actions released this 18 Sep 06:27

AI PM Tool v0.1.6

English | 中文


English

Release Date: 2026-09-18

Update

v0.1.6 fixes two defects in the write-back of a milestone email record into the requirement note.

1. Tables in the email body showed up as plain text in Obsidian

Markdown requires a blank line between a table and the line above it. The write-back glued the record lines straight onto the email body, so a table that followed any line of text — the 正文(文本存档): marker, a greeting, a paragraph — was written out as raw | … | rows instead of a table.

The write-back now inserts a blank line before every table block. The block itself is left untouched (header, separator and data rows stay adjacent), an existing blank line is never doubled, and tables inside ``` / ~~~ fenced code blocks are ignored. When the body starts with a table, the blank line also lands between the section heading and the table.

2. A second write-back could delete the sections below

Replacing an existing section consumed the blank line that separated it from the next section. On the next write-back the boundary check — a ## <label>邮件 heading preceded by a blank line — no longer matched, the replacement ran to the end of the note, and every later section disappeared, including non-email content such as a closing note. That separating blank line is now preserved, so repeated write-backs are stable.

The write-back logic also moved out of the mail modal into its own module, covered by 31 assertions in a new smoke test; npm test runs it on every build.

Release Assets

  • dist/main.js - Plugin main program
  • dist/manifest.json - Plugin manifest
  • dist/styles.css - Plugin styles

Chinese / 中文

发布日期: 2026-09-18

版本更新

v0.1.6 修复节点邮件回写需求笔记时的两个缺陷。

1. 邮件正文里的表格在 Obsidian 中显示成普通文本

Markdown 要求表格与上一行之间留一个空行。回写时记录各行与邮件正文直接拼接,于是表格只要跟在任何一行文字之后——正文(文本存档):、称呼、正文段落——就会被写成裸的 | … | 行,而不是表格。

现在回写会在每个表格块之前补一个空行。表格块本身不被改动(表头、分隔行、数据行保持相邻),已有空行不重复补,``` / ~~~ 围栏代码块内的表格不处理;当正文首行即表格时,空行同样落在小节标题与表格之间。

2. 再次回写会删掉后面的小节

替换已有小节时,小节与下一小节之间的空行被一并吃掉。于是下一次回写时,边界判定(## <label>邮件 标题且其上一行为空行)不再命中,替换范围一直延伸到文末,后续小节连同非邮件内容(如结尾说明)全部消失。现在该空行会被保留,重复回写稳定。

回写逻辑也从邮件弹窗中移出为独立模块,新增冒烟测试 31 项断言,npm test 每次构建都会覆盖。

发布附件

  • dist/main.js - 插件主程序
  • dist/manifest.json - 插件清单
  • dist/styles.css - 插件样式

AI PM Tool v0.1.5

Choose a tag to compare

@github-actions github-actions released this 17 Sep 06:31

AI PM Tool v0.1.5

English | 中文


English

Release Date: 2026-09-17

Update

v0.1.5 replaces the specific port number used in the custom-proxy example with a neutral one.

The error message, the setting description and the source comments all illustrated the "custom proxy" option with one particular port. That number happens to be a common default for local proxy tools, so the example could be read as the value you are expected to enter rather than as a placeholder.

Fix (example text only, no behavior change):

  1. Every occurrence now reads http://127.0.0.1:8080.
  2. Nothing in the proxy path changed: the URL is still parsed, validated and used exactly as before, and any host:port value remains acceptable.
  3. The three source files that carry the example — src/llm/gateway.ts, src/settings.ts, src/types.ts — are now consistent.

Release Assets

  • dist/main.js - Plugin main program
  • dist/manifest.json - Plugin manifest
  • dist/styles.css - Plugin styles

Chinese / 中文

发布日期: 2026-09-17

版本更新

v0.1.5 把「自定义代理」的示例端口改为中性值。

错误提示、设置项描述与源码注释里的示例都写着一个特定端口号,而它恰好是某些本地代理工具的常见默认值——使用者容易把它理解成「应该填这个值」,而不是「这只是格式示例」。

修复(仅示例文案,行为不变):

  1. 所有出现处统一为 http://127.0.0.1:8080
  2. 代理处理链路完全未动:地址的解析、校验与使用方式与之前一致,任何 host:port 形式都仍然接受。
  3. 承载该示例的三个源码文件 src/llm/gateway.tssrc/settings.tssrc/types.ts 现在保持一致。

发布附件

  • dist/main.js - 插件主程序
  • dist/manifest.json - 插件清单
  • dist/styles.css - 插件样式

AI PM Tool v0.1.4

Choose a tag to compare

@github-actions github-actions released this 16 Sep 11:57

AI PM Tool v0.1.4

English | 中文


English

Release Date: 2026-09-16

Update

v0.1.4 clears the one blocking Error raised by the automated Obsidian plugin review against v0.1.3.

Review Error: Disabling 'obsidianmd/ui/sentence-case' is not allowed

The v0.1.3 file-picker placeholder contained the word Markdown, which obsidianmd/ui/sentence-case wanted lowercased; the earlier build suppressed the rule with an // eslint-disable-next-line … -- description comment. Adding a description is enough for most rules, but obsidianmd/ui/sentence-case is on the review's non-disableable list — the suppression itself is the Error.

Fix (no suppression, no behavior change):

  1. The eslint-disable comment is gone — the repo now has zero eslint-disable directives in src/.
  2. The placeholder is reworded to avoid the English proper noun: 输入关键词过滤,或浏览整个仓库的笔记文件… ("type to filter, or browse every note file in the vault"). The picker's actual scope is unchanged: it still lists every Markdown file in the vault, at any depth, with fuzzy matching over the full vault-relative path.
  3. Audit of the remaining UI strings: no other setName / setDesc / setPlaceholder / setButtonText literal hides an English proper noun behind a conditional expression (the pattern that let the v0.1.3 string slip past the local lint run).

Release Assets

  • dist/main.js - Plugin main program
  • dist/manifest.json - Plugin manifest
  • dist/styles.css - Plugin styles

Chinese / 中文

发布日期: 2026-09-16

版本更新

v0.1.4 清掉 Obsidian 自动化插件审核针对 v0.1.3 报出的 1 条阻断性 Error

审核 Error:Disabling 'obsidianmd/ui/sentence-case' is not allowed

v0.1.3 的文件选择器提示语含英文词 Markdownobsidianmd/ui/sentence-case 规则要求小写,当时用带说明的 // eslint-disable-next-line … -- 描述 抑制了该规则。多数规则带说明即可,但 obsidianmd/ui/sentence-case 在审核的不可禁用名单内——抑制动作本身即 Error。

修复(不加抑制、行为不变):

  1. 删除该 eslint-disable 注释——现在 src/eslint-disable 指令为 0 条
  2. 提示语改写为不含英文专有名词的表述:输入关键词过滤,或浏览整个仓库的笔记文件…。选择器实际范围不变:仍列出仓库内任意层级的全部 Markdown 文件,模糊匹配对象仍是完整路径。
  3. 复查其余 UI 文案:无其他 setName / setDesc / setPlaceholder / setButtonText 字面量把英文专有名词藏在条件表达式后面(正是这个模式让 v0.1.3 的那句逃过了本地 lint)。

发布附件

  • dist/main.js - 插件主程序
  • dist/manifest.json - 插件清单
  • dist/styles.css - 插件样式

AI PM Tool v0.1.3

Choose a tag to compare

@github-actions github-actions released this 16 Sep 11:46

AI PM Tool v0.1.3

English | 中文


English

Release Date: 2026-09-16

Update

v0.1.3 removes the directory restriction from every file picker in the settings tab. Templates, contact books and rule/SKILL files often live outside the folder you happen to be configuring, so the candidate list is now the whole vault:

  1. Vault-wide file pickers — the "Choose file…" buttons for requirement-note template path, contact-book path, requirement review SKILL path and requirement content SKILL path no longer narrow the list to a context directory (the setting's own folder, or the template folder). Every Markdown file in the vault is listed, at any depth and under any top-level folder.
  2. Simpler, faster enumeration — enumeration walks the vault's in-memory index tree (vault.getRoot().children, recursive) instead of the on-disk adapter listing, so the picker opens synchronously with no disk I/O, and files that are not registered in the metadata index can no longer be missed. Non-Markdown files are filtered out.
  3. Fuzzy match still narrows — the fuzzy matcher runs against the full vault-relative path, so typing a folder name (e.g. 模板) narrows the list just like before; typing a file name works from anywhere.
  4. Cleanup — the two context-directory resolvers (filePickerBaseDir, contactBookPickerBaseDir) and the picker's baseDir parameter / async preload were removed. The README privacy disclosure ("Vault enumeration") now states that the pickers list the whole vault, in both English and Chinese.

Release Assets

  • dist/main.js - Plugin main program
  • dist/manifest.json - Plugin manifest
  • dist/styles.css - Plugin styles

Chinese / 中文

发布日期: 2026-09-16

版本更新

v0.1.3 去掉设置页所有文件选择器的目录限制。模板、通讯录、规则/SKILL 文件常常并不放在你当下正在配置的那个目录里,候选列表现在统一为整个仓库

  1. 全库文件选择器 — 「需求笔记模板路径」「通讯录名单路径」「需求审核 SKILL 路径」「需求内容生成 SKILL 路径」的「选择文件…」按钮不再按上下文目录(设置项当前所在目录、模板目录)收窄范围,列出仓库内任意层级、任意顶层目录下的 Markdown 文件。
  2. 枚举更简单更快 — 枚举走 vault 内存索引树(vault.getRoot().children 递归),不再走磁盘 adapter 列目录:选择器同步打开、无磁盘 IO,也不会漏掉未进入元数据索引的文件;非 Markdown 文件一律过滤。
  3. 模糊匹配照旧收窄 — 模糊匹配对象是完整路径,输入子目录名(如「模板」)即可收窄,输入文件名在任意位置都能搜到。
  4. 清理 — 删除两个上下文目录解析函数(filePickerBaseDircontactBookPickerBaseDir)以及选择器的 baseDir 参数与异步预加载;README「枚举 vault 文件」隐私披露的中英两份同步为「列出整个仓库」。

发布附件

  • dist/main.js - 插件主程序
  • dist/manifest.json - 插件清单
  • dist/styles.css - 插件样式

AI PM Tool v0.1.2

Choose a tag to compare

@github-actions github-actions released this 16 Sep 10:47

AI PM Tool v0.1.2

English | 中文


English

Release Date: 2026-09-16

Update

v0.1.2 clears the four warnings from the automated Obsidian plugin review and promotes the matching rules into the local lint config so they cannot come back:

  1. @typescript-eslint/no-unsafe-argument (parser) — in the frontmatter serializer an inline key holding a list went through Array.isArray(raw), which widens unknown to any[]; the items were passed straight into a string parameter. Items are now read as unknown[] and converted with String(…) before the single-line cleanup — identical output, no any leak.
  2. Promise in a void-expecting argument (settings) — the model provider "Test" button passed an async closure to addEventListener. The work moved into a named runProbe(): Promise<void> with a synchronous () => void runProbe() wrapper. Behaviour is unchanged.
  3. window.setTimeout (settings)setTimeout(syncTitle, 0) in the long-path input helper is now window.setTimeout(…) for popout-window compatibility.
  4. CSS extended-system-fonts — the requirement-body textarea font stack used ui-monospace (font-family: var(--font-monospace, ui-monospace, Consolas, monospace)), a browser feature not supported by Obsidian 1.11.4. The ui-monospace fallback was dropped; the stack is now var(--font-monospace, Consolas, monospace). The rest of the stylesheet was checked — no other ui-* / system-ui font family remains, and no bare setTimeout / setInterval / requestAnimationFrame call remains in src/.

Also in this release: eslint.config.mjs now enforces obsidianmd/prefer-window-timers, @typescript-eslint/no-unsafe-argument and @typescript-eslint/no-misused-promises (all at error level, verified with --print-config), so local npm run lint matches what the review bot scans.

Release Assets

  • dist/main.js - Plugin main program
  • dist/manifest.json - Plugin manifest
  • dist/styles.css - Plugin styles

Chinese / 中文

发布日期: 2026-09-16

版本更新

v0.1.2 清掉 Obsidian 自动化插件审核的 4 条 warning,并把对应规则前移到本地 lint,避免再次出现:

  1. @typescript-eslint/no-unsafe-argument(parser) — frontmatter 序列化中「内联键但值为列表」分支经 Array.isArray(raw)unknown 收窄成 any[],列表项直接流入 string 参数。现按 unknown[] 读取、先 String(…) 再单行化——输出完全一致,不再有 any 泄漏。
  2. Promise 传入 void 回调(settings) — 模型 provider 的「测试」按钮把 async 闭包直接交给 addEventListener。现改为命名函数 runProbe(): Promise<void> + 同步包装 () => void runProbe(),行为不变。
  3. window.setTimeout(settings) — 长路径输入框辅助函数里的 setTimeout(syncTitle, 0) 改为 window.setTimeout(…)(popout 窗口兼容)。
  4. CSS extended-system-fonts — 需求正文 textarea 的字体栈用了 ui-monospacefont-family: var(--font-monospace, ui-monospace, Consolas, monospace)),该浏览器特性在 Obsidian 1.11.4 不受支持。已去掉 ui-monospace,现为 var(--font-monospace, Consolas, monospace)。全样式表已复查:无其他 ui-* / system-ui 字体族;src/ 中也无裸 setTimeout / setInterval / requestAnimationFrame 调用。

本次同时在 eslint.config.mjs 启用 obsidianmd/prefer-window-timers@typescript-eslint/no-unsafe-argument@typescript-eslint/no-misused-promises(均为 error 级,已用 --print-config 验证生效),本地 npm run lint 与审核 bot 扫描口径一致。

发布附件

  • dist/main.js - 插件主程序
  • dist/manifest.json - 插件清单
  • dist/styles.css - 插件样式

AI PM Tool v0.1.1

Choose a tag to compare

@github-actions github-actions released this 16 Sep 10:14

AI PM Tool v0.1.1

English | 中文


English

Release Date: 2026-09-16

Update

v0.1.1 fixes two usability defects in settings and the project overview:

  1. File picker works when the path setting is empty — previously the Choose file… button enumerated only the current directory context (the directory the configured file lives in, else the template directory); when both were empty the candidate list was empty, so no file could be selected. Now the picker falls back to every Markdown file in the vault when there is no directory context (from the vault index tree, not vault.getFiles()), and Choose file… is usable straight away — e.g. picking the requirement template or a SKILL file before any directory has been configured. With a directory context the list stays scoped to that directory. Whitespace-only values (" ") are treated as empty as well. The README "Enumerate vault files" behaviour disclosure was updated to match.
  2. "My tasks" and project status can be selected together — the overview's filter row made them mutually exclusive (a single-value dimension: picking one cleared the other). "My tasks" is now an independent switch in its own row, combined AND-wise with project status / request status / approval / search, so "My tasks + In progress" (and any other combination) works. Defaults are unchanged: with own tasks present the view starts on "My tasks" (no status filter), otherwise on "In progress".

Also in this release: the combined filter logic moved into applyNoteFilters() (single AND-composing entry point) and a new smoke test suite covers it — my tasks + project status together, all four dimensions combined, keyword, and the picker's empty-context vault-wide fallback.

Release Assets

  • dist/main.js - Plugin main program
  • dist/manifest.json - Plugin manifest
  • dist/styles.css - Plugin styles

Chinese / 中文

发布日期: 2026-09-16

版本更新

v0.1.1 修复设置与项目总览的两处可用性缺陷:

  1. 设置项路径留空时文件选择器可正常匹配文件 — 此前「选择文件…」只在当前目录上下文(该设置有值时的所在目录,否则「模板目录」)内枚举;两者都为空时候选列表为空,任何文件都选不到。现在无目录上下文时回退整个仓库的 Markdown 文件(走 vault 索引树,不用 vault.getFiles()),未配置任何目录也能直接点「选择文件…」选到需求模板 / SKILL 文件;有目录上下文时仍只列该目录内文件。纯空白值(" ")同样按空处理。README「枚举 vault 文件」行为披露已同步更新。
  2. 「我的任务」与项目状态可同时选中 — 此前总览筛选把它们放成同一个单选维度(点一个就取消另一个)。现在「我的任务」是独立开关(单独一行),与项目状态 / 需求状态 / 审批 / 搜索按 AND 组合生效,因此「我的任务 + 进行中」等任意组合同步可用。默认值保持原行为:有我的任务时默认只看我的任务(不叠状态),否则默认「进行中」。

本次同时把组合筛选逻辑收敛到 applyNoteFilters()(唯一 AND 组合入口),并新增冒烟测试覆盖:我的任务 + 项目状态同时生效、四维度组合、关键词,以及无目录上下文时选择器的全库兜底。

发布附件

  • dist/main.js - 插件主程序
  • dist/manifest.json - 插件清单
  • dist/styles.css - 插件样式

AI PM Tool v0.1.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 13:23

AI PM Tool v0.1.0

English | 中文


English

Release Date: 2026-09-04

Update

v0.1.0 is the P1 feature release: "✨ Add requirement" — create a new requirement note from a requirement description (design: AI项目经理工具-P1设计.md, prototype 05):

  1. Templater really executes your requirement template — the flow calls the Templater plugin API (create_new_note_from_template) against the template path configured in Settings (e.g. 产品规范/产品需求模板.md in your vault); every frontmatter field / template default / template date math / mail-section body skeleton comes from the real template run — the plugin does not keep its own field list, so template updates are picked up automatically. 需求名称 (= file name, used by the requirement submission flow) is written back; 需求编号 is left blank for manual backfill after submission.
  2. LLM auto-generates the file name and fields from your description + content-generation rules — you only fill in one free-text requirement description (background / goals / feature points / expected value / plan / owners). The plugin creates a temporary skeleton with a placeholder file name first, then the LLM suggests the file name (= 需求名称) together with the frontmatter field values: when the content-generation SKILL is configured (Settings → "Requirement content-generation SKILL path" — the file holds your company naming rules, e.g. domestic / cross-border financial codes, department → product-line mapping, value-category conventions), those rules are injected into the prompt; without it, the review SKILL's code/category data drives generic naming guidance. Statuses / flags / enums keep their template defaults (not overwritten); date values are normalized to YYYY-MM-DD. The file is renamed to the final name on commit. The LLM never writes body text or restructures the note.
  3. Review-SKILL content review (preview only, never written to the note) — reads the review SKILL file configured in Settings ("Requirement review SKILL path", kept lenient, not rewritten) and runs three checks: ① expected-value audit (LLM, temperature 0.1), ② three-part name check (financial code + product-line/category + 4–15 char description — lenient; code-prefix tolerance such as AA01AA), ③ product-line / department / cost-bearer list checks (the company lists from the content-generation SKILL when configured, otherwise the review SKILL's lists). Results are shown as per-field badges (✓/▲/✕ + R=rule / L=LLM) with inline advice; each verdict is advisory — nothing blocks creation. Missing / unparseable SKILL → review is skipped with a one-time notice.
  4. Preview & commit are separated; after commit the dialog becomes the Requirement workbench — after creation you review the suggested file name and an editable full-field table (text fields with ✏️ LLM regenerate, list fields as chips, select/date/number/bool controls; the mail-stage flags (stages driven by the rules file) are read-only grey switches written back by the mail flow) plus the editable template body; "⬆️ Submit to SVN" renames the file to the final name and commits it (auto-add). On success the dialog switches in place into that note's Requirement workbench — it defaults to Project progress (milestone timeline / mail / progress form); a single switch button at the far right of the title row (direction chevron + action label, clear of the close ✕) reads "➤ Enter editor" and opens full-field editing + review verdicts + submit, and reads "← Back to progress" while editing to switch back; there is no separate "done" page anymore. Clicking any card in the project overview opens the same workbench, so any requirement file (committed or not) can be re-opened for editing & re-commit. Writes are key-by-key against the baseline at open time — untouched keys keep their on-disk form, so progress-form / mail write-backs are never overwritten. Closing the dialog while the edit view has unsaved changes still keeps the note file (current content saved, never deleted) for later re-open / manual commit.
  5. Entry & prerequisites — the only entry is the ✨ Add requirement button at the top of the project overview (no command palette command). Pre-checks guide you before generation starts: an active custom model (this feature hard-depends on the LLM), the Templater plugin installed & enabled, the requirement template path existing, and the requirement directory existing.

Also in this release: three new settings (Requirement template path, Requirement review SKILL path, Requirement content-generation SKILL path), parser frontmatter layout/serialization utilities (template-style write-back), and new smoke tests (frontmatter layout serialization, SKILL section extraction & rule checks incl. a company-naming content-generation SKILL case).

Requires: Templater plugin (community) for the skeleton step; both SKILL paths are optional. Everything else degrades gracefully with explicit notices.

Release Assets

  • dist/main.js - Plugin main program
  • dist/manifest.json - Plugin manifest
  • dist/styles.css - Plugin styles

Chinese / 中文

发布日期: 2026-09-04

版本更新

v0.1.0 是 P1 功能版本:「✨ 新增需求」——只需填写需求描述,自动创建新需求笔记(设计文档 AI项目经理工具-P1设计.md、原型 05):

  1. Templater 真实执行需求模板 — 流程调用 Templater 插件 API(create_new_note_from_template),模板路径为设置项「需求笔记模板路径」(如 vault 中 产品规范/产品需求模板.md);frontmatter 全字段/模板默认值/模板日期计算/正文邮件小节骨架全部来自模板真实执行产物——插件不内置字段清单,模板更新自动跟随。需求名称(= 文件名,需求提交流程使用)自动写入;需求编号 留空,提交流程后人工回填。
  2. LLM 依据描述 + 内容生成规则自动生成文件名与字段 — 唯一输入是一段自由文本需求描述(背景 / 目标 / 功能点 / 预期价值 / 计划 / 负责人等)。插件先用临时占位文件名执行模板创建骨架,再由 LLM 一次性生成建议文件名(= 需求名称)与需要填写的 frontmatter 字段值:配置了「需求内容生成 SKILL 路径」(公司口径:SKILL 文件提供贵司命名规范,如境内/跨境财务编码、业务部门→产品线映射、价值分类与达成周期等)时,该规则全文注入生成提示;未配置则命名用通用三段式说明(不回退审核 SKILL 数据)。状态/标志/枚举保留模板默认(不覆盖);日期归一化为 YYYY-MM-DD,非法值置空待人工补。提交时按最终文件名重命名。LLM 不撰写正文、不改结构。
  3. 审核规则内容审核(结果仅预览展示、不落盘) — 读取设置项「需求审核 SKILL 路径」指向的 SKILL 文件(按贵司审核规则编写——规则宽松、不改动),执行三项校验:① 预期价值审核(LLM,temperature 0.1)② 需求名称三段式校验(财务编码 + 产品线/分类 + 4-15 字描述——宽容区间,编码前缀容错如 AA01AA)③ 产品线/业务部门/成本承担方列表校验(内容生成 SKILL 配置时用其公司口径列表,未配置则该项跳过——不回退审核 SKILL 的列表)。意见按字段徽章展示(✓/▲/✕ + R=规则 / L=LLM)+ 就地建议;每条意见仅为建议,不阻塞创建。SKILL 缺失/不可解析 → 跳过审核并提示一次。
  4. 创建与提交分离;提交后弹窗转入需求工作台 — 创建完成后预览建议文件名与可编辑的全字段表(文本字段 ✏️ LLM 重写、列表 chips 直编、下拉/日期/数字/开关控件;邮件环节标志为只读灰开关、由邮件发送流程回写,环节键集由规则文件「一、项目环节」动态驱动,内置兜底仅 1 个通用环节)+ 可编辑的模板正文;点 「⬆️ 提交 SVN」 按最终文件名重命名并提交新文件(autoAdd)。成功后弹窗原地转入该需求的「需求工作台」默认展示项目进展(环节时间轴 / 邮件 / 进展表单);标题行最右侧单个切换按钮(方向箭头 + 动作文案,已为右上角关闭 ✕ 让位)——进展视图下显示「➤ 进入编辑」,点击进入全字段编辑 + 内容审核 + 提交,编辑中按钮文案变为「← 返回进展」、点击返回——不再有单独的完成页;总览中点击任一需求卡片打开的也是同一工作台,任意需求文件(已提交/未提交)都可打开编辑与再提交。写入按「打开时基线」键级写回:未改动的键保持磁盘原样,进展表单 / 邮件流程回写的字段不会被覆盖。编辑视图有未提交修改时关闭弹窗仍会保留该笔记文件(当前内容已落盘、不会删除),供稍后重开继续或手动提交。
  5. 入口与预检 — 唯一入口 = 项目总览顶部「✨ 新增需求」按钮(不做命令面板入口)。生成前预检引导:已启用自定义模型(本功能强依赖 LLM)、Templater 插件已安装并启用、需求模板路径存在、需求笔记目录存在;描述填写后才可开始生成。

本次同时新增三个设置项(需求笔记模板路径 / 需求审核 SKILL 路径 / 需求内容生成 SKILL 路径)、parser frontmatter 布局/序列化工具(模板风格写回)与新增冒烟测试(frontmatter 布局序列化、SKILL 章节提取与规则校验,含公司口径内容生成 SKILL 用例)。

依赖: 骨架步骤依赖社区插件 Templater(未启用时引导安装);两条 SKILL 路径均可选。其余情况均优雅降级并明确提示。

发布附件

  • dist/main.js - 插件主程序
  • dist/manifest.json - 插件清单
  • dist/styles.css - 插件样式

AI PM Tool v0.0.5

Choose a tag to compare

@github-actions github-actions released this 27 Aug 11:49

AI PM Tool v0.0.5

English | 中文


English

Release Date: 2026-08-27

Update

v0.0.5 fixes the obsidianmd/prefer-create-el findings from the automated Obsidian plugin review:

  1. Semantic DOM helpers — the rule requires Obsidian's semantic helpers over generic createEl: createEl("span", …) must be createSpan(…), createEl("div", …) must be createDiv(…). All 7 reported usages (Settings provider name, MailModal generation hint, StatusView header/footer/hints) were migrated accordingly.
  2. Rule enabled in local lintobsidianmd/prefer-create-el is now enforced in eslint.config.mjs, so the full rule set matches what the review bot scans; local npm run lint passes clean.

(Note: v0.0.4's release notes described this rule as only about document.createElement; the rule additionally covers createEl("span"|"div", …)createSpan/createDiv, which is what the 7 findings were about.)

Release Assets

  • dist/main.js - Plugin main program
  • dist/manifest.json - Plugin manifest
  • dist/styles.css - Plugin styles

Chinese / 中文

发布日期: 2026-08-27

版本更新

v0.0.5 修复 Obsidian 自动化插件审核的 obsidianmd/prefer-create-el 反馈:

  1. 语义化 DOM 辅助方法 — 该规则要求用 Obsidian 语义化辅助替代通用 createElcreateEl("span", …) 应写 createSpan(…)createEl("div", …) 应写 createDiv(…)。报告的 7 处(设置页 provider 名称、邮件生成提示、总览视图头部/底部/提示)已全部迁移
  2. 本地 lint 启用该规则eslint.config.mjs 现在启用 obsidianmd/prefer-create-el,本地规则集与审核 bot 一致,npm run lint 全绿

(说明:v0.0.4 的发布说明曾把该规则仅描述为「document.createElement」,实际该规则还覆盖 createEl("span"|"div", …)createSpan/createDiv——7 处反馈正是后者。)

发布附件

  • dist/main.js - 插件主程序
  • dist/manifest.json - 插件清单
  • dist/styles.css - 插件样式

AI PM Tool v0.0.4

Choose a tag to compare

@github-actions github-actions released this 27 Aug 10:01

AI PM Tool v0.0.4

English | 中文


English

Release Date: 2026-08-27

Update

v0.0.4 addresses the follow-up Source code findings from the automated Obsidian plugin review:

  1. Floating promise fixedsrc/view/FilePickerModal.ts: super.onOpen() is now awaited (await super.onOpen()), because Modal.onOpen is typed Promise<void> | void and the un-awaited call triggered the "Promises must be awaited" finding.
  2. prefer-create-el verification — the review reported 7 document.createElement usages, but none exist in this repository: git grep document.createElement returns nothing on main and on every release commit. The only such call that ever existed (one file-picker input in MailModal.ts) was migrated to Obsidian's createEl in v0.0.2; the 7 reported lines are all compliant createEl calls in the current source. This release lets the automated review re-scan and confirm.

Release Assets

  • dist/main.js - Plugin main program
  • dist/manifest.json - Plugin manifest
  • dist/styles.css - Plugin styles

Chinese / 中文

发布日期: 2026-08-27

版本更新

v0.0.4 处理 Obsidian 自动化插件审核的后续 Source code 反馈:

  1. 修复 floating promisesrc/view/FilePickerModal.tssuper.onOpen() 改为 await super.onOpen()Modal.onOpen 类型为 Promise<void> | void,未 await 触发「Promises must be awaited」检查)
  2. prefer-create-el 核验 — 审核报告 7 处 document.createElement,但本仓库不存在:git grep document.createElement 在 main 与各发布 commit 均为 0 处;历史上唯一一处(MailModal 的文件输入)已于 v0.0.2 改用 createEl;报告的 7 个行号在当前源码中均为合规的 createEl 调用。本版本发布后供自动化审核重新扫描确认

发布附件

  • dist/main.js - 插件主程序
  • dist/manifest.json - 插件清单
  • dist/styles.css - 插件样式

AI PM Tool v0.0.3

Choose a tag to compare

@github-actions github-actions released this 27 Aug 07:01

AI PM Tool v0.0.3

English | 中文


English

Release Date: 2026-08-27

Update

v0.0.3 addresses the follow-up Behavior and Source code findings from the Obsidian community plugin review:

  1. Directory-scoped file picker — the Settings file picker no longer enumerates the whole vault (vault.getFiles() removed): it now lists Markdown files only inside the current context directory (the parent folder of the configured contact-book path, or the configured template directory) via app.vault.adapter.list. README disclosure updated to match.
  2. Shell execution justification in README — added a dedicated bilingual section explaining why the plugin invokes the system svn CLI (no Obsidian API equivalent), and the exact boundaries: execFile only with static argument arrays (no shell), svn never bundled/downloaded, input validation (shell metacharacters / path traversal / comments rejected, passwords masked), 60s timeout, windowsHide, runs only on explicit user action, graceful degradation when svn is missing.
  3. createEl compliance confirmedgit grep document.createElement returns nothing on main and the current branch; the only such call ever present (file-picker input in MailModal.ts) was migrated to createEl in v0.0.2. All DOM creation in settings.ts / MailModal.ts / StatusView.ts uses Obsidian createEl / createDiv helpers.

Release Assets

  • dist/main.js - Plugin main program
  • dist/manifest.json - Plugin manifest
  • dist/styles.css - Plugin styles

Chinese / 中文

发布日期: 2026-08-27

版本更新

v0.0.3 处理 Obsidian 社区插件审核的后续 Behavior 与 Source code 反馈:

  1. 文件选择器目录级枚举 — 设置页文件选择器不再全库枚举(移除 vault.getFiles()):仅列出当前目录上下文(通讯录所在目录,或模板目录)内的 Markdown 文件,通过 app.vault.adapter.list 目录级递归;README 披露同步更新
  2. README 补充执行系统命令的论证与边界 — 新增双语小节说明为何必须调用系统 svn CLI(Obsidian API 无等价能力)及精确边界:仅 execFile + 静态参数数组(无 shell)、不捆绑/不下载 svn、输入校验(拦截 shell 元字符/路径穿越/注释、密码脱敏)、60 秒超时、windowsHide、仅用户主动触发、svn 缺失时优雅降级
  3. createEl 合规确认git grep document.createElement 在 main 与当前分支均为 0 处;仓库唯一一次出现(MailModal 文件输入)已于 v0.0.2 改用 createElsettings.ts / MailModal.ts / StatusView.ts 的 DOM 创建全部使用 Obsidian createEl / createDiv

发布附件

  • dist/main.js - 插件主程序
  • dist/manifest.json - 插件清单
  • dist/styles.css - 插件样式