promptfigure 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  # 安装这个技能(AI Agent Skill)
2
2
 
3
- > **版本 1.6.10**(2026-09-24)。下载页:https://promptfigure.top/skill 。查最新版:`curl -s https://promptfigure.top/downloads/promptfigure-api.version.json`;本地已装版本看 `SKILL.md` frontmatter 的 `version`。版本语义:主版本=接口不兼容改动(需重读 SKILL.md),次版本=新增能力,修订号=勘误。
3
+ > **版本 1.6.11**(2026-09-24)。下载页:https://promptfigure.top/skill 。查最新版:`curl -s https://promptfigure.top/downloads/promptfigure-api.version.json`;本地已装版本看 `SKILL.md` frontmatter 的 `version`。版本语义:主版本=接口不兼容改动(需重读 SKILL.md),次版本=新增能力,修订号=勘误。
4
4
 
5
5
  把 `promptfigure-api/` 整个文件夹放进你的 AI 工具的技能目录即可:
6
6
 
@@ -41,5 +41,5 @@ curl -s https://promptfigure.top/downloads/promptfigure-api.version.json
41
41
  ```
42
42
 
43
43
  本地 `version` 低于线上 `version` → 到下载页取最新包:https://promptfigure.top/skill
44
- (直链:https://promptfigure.top/downloads/promptfigure-api.zip ,或 GitHub Release 资产 promptfigure-api-1.6.10.zip)
44
+ (直链:https://promptfigure.top/downloads/promptfigure-api.zip ,或 GitHub Release 资产 promptfigure-api-1.6.11.zip)
45
45
  安装说明与 API 文档:https://promptfigure.top/docs/zh-CN/api
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: promptfigure-api
3
3
  description: 用 promptFigure 生成科研/学术配图(流程图、机制图、管线图、技术路线图、图形摘要),以及优化已有图表、整文批量升级(数据图本地重绘 + 示意图 AI 重构 + 可编辑矢量版 + 追溯台账)。当用户要「画一张图」「生成论文配图/示意图/机制图/graphical abstract」「把论文里的图变好看/变高级」「批量优化整篇文章的图」「要可编辑的矢量图/PPT 版」、给了 PDF/WPS/Word 文稿要配图或要主动建议插图位、或要配置 promptFigure API key、或要用 REST 接口批量出图时使用。走 https://promptfigure.top 的 /api/v1/generate,Bearer pf_ key 鉴权,返回 base64 PNG。强制学术字体规范(图内无衬线、禁手写/花体)与上下文蒸馏规则(原文段落绝不直接进 prompt,先蒸馏成实体/结构/图种三清单再组装)。网页端有多轮问询/二次确认,API 端一次性提交——所以要把用户绘图意图一次说清楚,服务端负责润色成完整示意。
4
- version: 1.6.10
4
+ version: 1.6.11
5
5
  license: MIT
6
6
  metadata:
7
- version: "1.6.10"
7
+ version: "1.6.11"
8
8
  author: promptFigure (zhangmask)
9
9
  homepage: https://promptfigure.top
10
10
  repository: https://github.com/zhangmask/promptfigure-skill
@@ -44,13 +44,13 @@ metadata:
44
44
  1. 🔴 **比赛 / 数学建模 / 学术会议竞赛**:默认建议**不做**,以速度为准——这些场景交 PNG 就够,矢量版是时间黑洞,别为它赌提交时限
45
45
  2. **时间充裕**(用户明确表示不赶、或场景是期刊/课设/长期维护的图):做。全部用**用户本地的工具或代码**完成,不调用 promptFigure API、不消耗任何额度
46
46
 
47
- **做法(三条红线 + 一条推荐路)**:
47
+ **做法(两条红线 + 一条首选路 + 一条退路)**:
48
48
 
49
- - 🔴 **禁止描摹矢量**:vtracer / potrace /「位图转 SVG 路径」之类一律不用——描摹出来的文字全是路径,不可编辑、不可搜索,越改越错。描摹矢量和「可编辑矢量」是两种东西,别拿描摹滥竽充数
50
- - 🔴 **必须是可编辑矢量**:每个元素是独立对象——PPT 形状、独立 SVG 元素/分组、Illustrator 图层都行。验收标准一句话:**用户能改,你的(宿主 AI)也能改**——后续微调是改对象属性,不是重画
51
- - 🔴 **文字保持文本**:标签必须是可编辑文本(无衬线,遵循图内字体规范),不许转路径
52
- - **推荐路**:拿最终确认版图,用本地代码/工具**照着画一遍**——如 python-pptx 生成形状化 PPTX、或写结构化 SVG(每个模块/箭头/标签一个元素),画完与确认版逐项比对、不一致就改,迭代到一致为止。参考做法:<https://github.com/icebird1998/scientific-illustifier>(宿主自行阅读,按本机工具链取舍)
53
- - 宿主没有本地矢量工具链(没有 python-pptx / 没有矢量软件 / 跑不动)时:**明示用户「做不了可编辑矢量版」**,交付确认版 PNG 收尾——仍然不许用描摹顶替
49
+ - 🔴 **必须是可编辑矢量**:每个元素是独立对象——PPT 形状、独立 SVG 元素/分组、Illustrator/Inkscape 图层都行。验收标准一句话:**用户能改,你的(宿主 AI)也能改**——后续微调是改对象属性,不是重画
50
+ - 🔴 **编辑必须用图层分离的工具**:在 PPT/WPS/Illustrator/Inkscape 里按「图层/组合」组织——每个模块、箭头、标签各自独立成层(PPT 用单独形状或组合、SVG 用 `<g>` 分组、位图软件用独立图层),禁止把所有元素糊成一个扁平对象或直接在扁平层上改像素
51
+ - **首选路——比照着重绘**:拿最终确认版图,用本地代码/工具**照着画一遍**——如 python-pptx 生成形状化 PPTX、或写结构化 SVG(每个模块/箭头/标签一个元素),画完与确认版逐项比对、不一致就改,迭代到一致为止。参考做法:<https://github.com/icebird1998/scientific-illustifier>(宿主自行阅读,按本机工具链取舍)
52
+ - **退路——描摹**:本机没有可编程矢量工具链、或时间紧时,可以用 vtracer 等把最终版描摹成矢量(`pf export svg` 即此路)。但必须**先核对再交付**:① 数值/标签与最终版一致(数据图数值差不多即可,但刻度对应关系要对);② 比例、模块对应关系正确;③ 交付时明确告知「描摹产物,文字已变为路径、不可直接编辑,改内容需回到重绘或重出图」——不许把描摹件当「可编辑矢量」宣称
53
+ - 宿主连描摹工具都没有时:**明示用户「做不了矢量版」**,交付确认版 PNG 收尾
54
54
 
55
55
  **交付物**:矢量文件 + 一句「哪些元素可以直接改」(如「每个方框、箭头、文字都是独立形状,可拖动/改字/改色」);`pf-ledger.md` 补一行,标注本地生成、零 API 消耗。
56
56
 
@@ -106,7 +106,7 @@ promptfigure-out/
106
106
  3. **定稿后问矢量图**(衔接 SKILL.md 阶段 5):
107
107
  - 提醒成本:矢量图由**用户自己的 AI 本地重绘**,token 消耗大、速度慢
108
108
  - 🔴 **比赛 / 数学建模 / 学术会议竞赛:默认不做**,速度优先;只有时间充裕才做
109
- 4. **用户确认做矢量图时**:把最终图**按元素分层重绘**为可编辑矢量(PPT 形状 / 分层 SVG 分组,每个模块、箭头、标签是独立对象),在用户偏好的应用里操作——**PPT 还是 WPS 还是其他,按用户主要偏好来**;描摹矢量(位图转路径)一律禁止
109
+ 4. **用户确认做矢量图时**:首选**比照着重绘**——拿最终版用本地工具照着画,每个模块、箭头、标签独立成对象;🔴 **必须用支持图层分离的工具编辑**:PPT/WPS 用单独形状或组合、SVG 用 `<g>` 分组、Illustrator/Inkscape 用独立图层——一把糊成扁平对象 = 不可编辑,返工。应用按用户主要偏好来(PPT / WPS / 其他)。**退路=描摹**(vtracer 等):先核对数值与比例(数值差不多即可、对应关系必须对),交付时明确告知「描摹件、文字已变路径不可直接编辑」——不许当可编辑矢量宣称
110
110
 
111
111
  ---
112
112
 
@@ -10,7 +10,7 @@
10
10
 
11
11
  | 需求 | 判据 | 路线 |
12
12
  |---|---|---|
13
- | **A1. 结果图美化**(曲线/柱状/热图/箱线…) | 图上带**精确数值**(刻度、柱高、数据点) | 🔴 **绝不走 AI 生图**。数据溯源 + 本地重绘(§3)——AI 画图模型必画错数字,坐标必须是真数据 |
13
+ | **A1. 结果图美化**(曲线/柱状/热图/箱线…) | 图上带**精确数值**(刻度、柱高、数据点) | 照最终结果重绘(§3):以我们最终给出的成图为基准重绘——期刊图大多也不是 MATLAB 原生生成的;**验收 = 数值与基准一致(差不多即可)+ 比例/对应关系正确**。能拿到原始数据就优先溯源(更稳),拿不到就以最终版成图逐点核对 |
14
14
  | **A2. 示意图升级**(用户已画的结构/流程/机制图,嫌丑) | 图上只有方块、箭头、标签,无数值 | AI 升级:结构照搬 + 视觉升级指令(§4.2),可选参考图 |
15
15
  | **A3. 结构组合**(多张小图合并成一张大图) | 多张 A1 或 A2 要拼版 | A1 部分本地 matplotlib subplot 拼版;A2 部分合并成一个多 panel prompt(§4.1) |
16
16
  | **B. 代码画不出的图**(流程图/机制图/神经网络图/算法示意) | 用户只能嘴上说 | promptFigure API(§4),本技能的主场 |
@@ -19,7 +19,7 @@
19
19
 
20
20
  > 🔴 **每轮结束必须交付台账**:新建 `promptfigure-out/vN/round-vN.md`——本轮清单(图种/档位/版本/本机路径/插入位置)、每张图的插入位置(上段末句 + …… + 下段首句)、所用上下文(只放首尾句)、数据文件只给引用链接;「优化前 → 优化后」对比也落在这里。全文协议见 `deliverables-ledger.md`。
21
21
 
22
- > 🔴 **「把终稿变成可编辑矢量/PPT 版」不属于以上任何一类**——那不是 matplotlib 的活,也不是出图 API 的活。走 `SKILL.md` **阶段 5**:终稿交付后先问用户要不要,比赛/数模默认不做(速度优先),时间充裕才由**宿主 AI 用本地的矢量工具/代码照着重绘**(禁止描摹,必须每个元素可编辑)。§3 的 matplotlib 只负责 A1 数据图的真数据重绘(防数字造假),不碰任何矢量转换。
22
+ > 🔴 **「把终稿变成可编辑矢量/PPT 版」不属于以上任何一类**——走 `SKILL.md` **阶段 5**:终稿交付后先问用户要不要,比赛/数模默认不做(速度优先),时间充裕才做。**首选**宿主 AI 比照最终版用本地工具重绘(每元素独立对象、用图层分离工具编辑);**退路**可描摹,但须先核对数值/比例并告知「描摹件文字不可编辑」。§3 的本地重绘 = 数据图的美化路径,不碰矢量转换。
23
23
 
24
24
  ---
25
25
 
@@ -81,9 +81,14 @@ SKILL.md 的「零反问」铁律**约束的是对 API 的出图过程**——
81
81
 
82
82
  ---
83
83
 
84
- ## 3. 代码图数据溯源(A1 类的唯一正路)
84
+ ## 3. 数据图美化(照最终结果重绘)
85
85
 
86
- > 本节 = **A1 数据图专用**(曲线/柱状/热图等带真数值的图)。用 matplotlib 的唯一理由是「坐标必须是真数据」;它不是通用美化手段,更不是矢量转换手段——「照终稿做可编辑矢量版」见 `SKILL.md` 阶段 5。
86
+ > 本节 = **A1 数据图专用**(曲线/柱状/热图等带真数值的图)。2026-09-25 松口(原规则太死):
87
+ > **数据图照我们最终给出的成图重绘即可**——期刊图大多也不是 MATLAB 原生生成的,只要
88
+ > **① 数值与最终版一致(差不多即可)② 比例与对应关系正确**,就达标。能拿到原始数据
89
+ > (脚本/数据文件)时优先按真数据画(更稳、更精确);拿不到就以最终版成图为基准逐点
90
+ > 核对,核对记录写进 round-vN.md。matplotlib 只是美化手段,不是矢量转换手段——
91
+ > 「照终稿做可编辑矢量版」见 `SKILL.md` 阶段 5。
87
92
 
88
93
  **为什么必须溯源**:结果图上的文字往往很小,视觉模型抄轴刻度、抄数据点**必然出错**;靠 OCR 抄数出来的图是假的。唯一可靠路径是找到原始数据,用真数据重绘。
89
94
 
@@ -81,10 +81,10 @@ pf doctor # 体检:TeX 引擎 / API key / 本地服务 / 当前
81
81
  pf audit # 审计一键可查:绕门记录(craft.forced/gate_bypass/review.forced)+ 计费兜底
82
82
  # 每条带理由;接手别人项目/怀疑历史版本可信度时先跑它
83
83
  pf export svg <figId> # 最新版 PNG → 可缩放 SVG(vtracer 描摹,draft/high 两档)
84
- # ⚠️ 描摹 ≠ 可编辑矢量:文字全变路径,不可编辑不可搜索
85
- # 要「每个元素都能改」的可编辑矢量版(PPT 形状/独立 SVG 元素),
86
- # 让宿主 AI 用本地工具照终稿重绘(如 python-pptx/结构化 SVG,
87
- # 参考 github.com/icebird1998/scientific-illustifier)——禁止拿本命令的输出顶替
84
+ # ⚠️ 描摹件:文字全变路径、不可直接编辑——仅作退路。交付前必须核对
85
+ # 数值与比例(数值差不多即可、对应关系必须对),并告知用户是描摹件
86
+ # 首选:让宿主 AI 比照终稿用本地工具重绘(python-pptx 形状 / 结构化 SVG),
87
+ # 每元素独立成对象,用图层分离的工具编辑(参考 github.com/icebird1998/scientific-illustifier)
88
88
  # 首次用报缺依赖时:npm i @visioncortex/vtracer(纯 WASM 可商用)
89
89
  ```
90
90
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "promptfigure",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "promptFigure 本地插件:为论文配科研图(锚点定位 + 出图 + 审批闭环),随包附带 promptfigure-api / promptfigure-local 两个 skill",
5
5
  "skills": "./skills/"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  # 安装这个技能(AI Agent Skill)
2
2
 
3
- > **版本 1.6.10**(2026-09-24)。下载页:https://promptfigure.top/skill 。查最新版:`curl -s https://promptfigure.top/downloads/promptfigure-api.version.json`;本地已装版本看 `SKILL.md` frontmatter 的 `version`。版本语义:主版本=接口不兼容改动(需重读 SKILL.md),次版本=新增能力,修订号=勘误。
3
+ > **版本 1.6.11**(2026-09-24)。下载页:https://promptfigure.top/skill 。查最新版:`curl -s https://promptfigure.top/downloads/promptfigure-api.version.json`;本地已装版本看 `SKILL.md` frontmatter 的 `version`。版本语义:主版本=接口不兼容改动(需重读 SKILL.md),次版本=新增能力,修订号=勘误。
4
4
 
5
5
  把 `promptfigure-api/` 整个文件夹放进你的 AI 工具的技能目录即可:
6
6
 
@@ -41,5 +41,5 @@ curl -s https://promptfigure.top/downloads/promptfigure-api.version.json
41
41
  ```
42
42
 
43
43
  本地 `version` 低于线上 `version` → 到下载页取最新包:https://promptfigure.top/skill
44
- (直链:https://promptfigure.top/downloads/promptfigure-api.zip ,或 GitHub Release 资产 promptfigure-api-1.6.10.zip)
44
+ (直链:https://promptfigure.top/downloads/promptfigure-api.zip ,或 GitHub Release 资产 promptfigure-api-1.6.11.zip)
45
45
  安装说明与 API 文档:https://promptfigure.top/docs/zh-CN/api
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: promptfigure-api
3
3
  description: 用 promptFigure 生成科研/学术配图(流程图、机制图、管线图、技术路线图、图形摘要),以及优化已有图表、整文批量升级(数据图本地重绘 + 示意图 AI 重构 + 可编辑矢量版 + 追溯台账)。当用户要「画一张图」「生成论文配图/示意图/机制图/graphical abstract」「把论文里的图变好看/变高级」「批量优化整篇文章的图」「要可编辑的矢量图/PPT 版」、给了 PDF/WPS/Word 文稿要配图或要主动建议插图位、或要配置 promptFigure API key、或要用 REST 接口批量出图时使用。走 https://promptfigure.top 的 /api/v1/generate,Bearer pf_ key 鉴权,返回 base64 PNG。强制学术字体规范(图内无衬线、禁手写/花体)与上下文蒸馏规则(原文段落绝不直接进 prompt,先蒸馏成实体/结构/图种三清单再组装)。网页端有多轮问询/二次确认,API 端一次性提交——所以要把用户绘图意图一次说清楚,服务端负责润色成完整示意。
4
- version: 1.6.10
4
+ version: 1.6.11
5
5
  license: MIT
6
6
  metadata:
7
- version: "1.6.10"
7
+ version: "1.6.11"
8
8
  author: promptFigure (zhangmask)
9
9
  homepage: https://promptfigure.top
10
10
  repository: https://github.com/zhangmask/promptfigure-skill
@@ -44,13 +44,13 @@ metadata:
44
44
  1. 🔴 **比赛 / 数学建模 / 学术会议竞赛**:默认建议**不做**,以速度为准——这些场景交 PNG 就够,矢量版是时间黑洞,别为它赌提交时限
45
45
  2. **时间充裕**(用户明确表示不赶、或场景是期刊/课设/长期维护的图):做。全部用**用户本地的工具或代码**完成,不调用 promptFigure API、不消耗任何额度
46
46
 
47
- **做法(三条红线 + 一条推荐路)**:
47
+ **做法(两条红线 + 一条首选路 + 一条退路)**:
48
48
 
49
- - 🔴 **禁止描摹矢量**:vtracer / potrace /「位图转 SVG 路径」之类一律不用——描摹出来的文字全是路径,不可编辑、不可搜索,越改越错。描摹矢量和「可编辑矢量」是两种东西,别拿描摹滥竽充数
50
- - 🔴 **必须是可编辑矢量**:每个元素是独立对象——PPT 形状、独立 SVG 元素/分组、Illustrator 图层都行。验收标准一句话:**用户能改,你的(宿主 AI)也能改**——后续微调是改对象属性,不是重画
51
- - 🔴 **文字保持文本**:标签必须是可编辑文本(无衬线,遵循图内字体规范),不许转路径
52
- - **推荐路**:拿最终确认版图,用本地代码/工具**照着画一遍**——如 python-pptx 生成形状化 PPTX、或写结构化 SVG(每个模块/箭头/标签一个元素),画完与确认版逐项比对、不一致就改,迭代到一致为止。参考做法:<https://github.com/icebird1998/scientific-illustifier>(宿主自行阅读,按本机工具链取舍)
53
- - 宿主没有本地矢量工具链(没有 python-pptx / 没有矢量软件 / 跑不动)时:**明示用户「做不了可编辑矢量版」**,交付确认版 PNG 收尾——仍然不许用描摹顶替
49
+ - 🔴 **必须是可编辑矢量**:每个元素是独立对象——PPT 形状、独立 SVG 元素/分组、Illustrator/Inkscape 图层都行。验收标准一句话:**用户能改,你的(宿主 AI)也能改**——后续微调是改对象属性,不是重画
50
+ - 🔴 **编辑必须用图层分离的工具**:在 PPT/WPS/Illustrator/Inkscape 里按「图层/组合」组织——每个模块、箭头、标签各自独立成层(PPT 用单独形状或组合、SVG 用 `<g>` 分组、位图软件用独立图层),禁止把所有元素糊成一个扁平对象或直接在扁平层上改像素
51
+ - **首选路——比照着重绘**:拿最终确认版图,用本地代码/工具**照着画一遍**——如 python-pptx 生成形状化 PPTX、或写结构化 SVG(每个模块/箭头/标签一个元素),画完与确认版逐项比对、不一致就改,迭代到一致为止。参考做法:<https://github.com/icebird1998/scientific-illustifier>(宿主自行阅读,按本机工具链取舍)
52
+ - **退路——描摹**:本机没有可编程矢量工具链、或时间紧时,可以用 vtracer 等把最终版描摹成矢量(`pf export svg` 即此路)。但必须**先核对再交付**:① 数值/标签与最终版一致(数据图数值差不多即可,但刻度对应关系要对);② 比例、模块对应关系正确;③ 交付时明确告知「描摹产物,文字已变为路径、不可直接编辑,改内容需回到重绘或重出图」——不许把描摹件当「可编辑矢量」宣称
53
+ - 宿主连描摹工具都没有时:**明示用户「做不了矢量版」**,交付确认版 PNG 收尾
54
54
 
55
55
  **交付物**:矢量文件 + 一句「哪些元素可以直接改」(如「每个方框、箭头、文字都是独立形状,可拖动/改字/改色」);`pf-ledger.md` 补一行,标注本地生成、零 API 消耗。
56
56
 
@@ -106,7 +106,7 @@ promptfigure-out/
106
106
  3. **定稿后问矢量图**(衔接 SKILL.md 阶段 5):
107
107
  - 提醒成本:矢量图由**用户自己的 AI 本地重绘**,token 消耗大、速度慢
108
108
  - 🔴 **比赛 / 数学建模 / 学术会议竞赛:默认不做**,速度优先;只有时间充裕才做
109
- 4. **用户确认做矢量图时**:把最终图**按元素分层重绘**为可编辑矢量(PPT 形状 / 分层 SVG 分组,每个模块、箭头、标签是独立对象),在用户偏好的应用里操作——**PPT 还是 WPS 还是其他,按用户主要偏好来**;描摹矢量(位图转路径)一律禁止
109
+ 4. **用户确认做矢量图时**:首选**比照着重绘**——拿最终版用本地工具照着画,每个模块、箭头、标签独立成对象;🔴 **必须用支持图层分离的工具编辑**:PPT/WPS 用单独形状或组合、SVG 用 `<g>` 分组、Illustrator/Inkscape 用独立图层——一把糊成扁平对象 = 不可编辑,返工。应用按用户主要偏好来(PPT / WPS / 其他)。**退路=描摹**(vtracer 等):先核对数值与比例(数值差不多即可、对应关系必须对),交付时明确告知「描摹件、文字已变路径不可直接编辑」——不许当可编辑矢量宣称
110
110
 
111
111
  ---
112
112
 
@@ -10,7 +10,7 @@
10
10
 
11
11
  | 需求 | 判据 | 路线 |
12
12
  |---|---|---|
13
- | **A1. 结果图美化**(曲线/柱状/热图/箱线…) | 图上带**精确数值**(刻度、柱高、数据点) | 🔴 **绝不走 AI 生图**。数据溯源 + 本地重绘(§3)——AI 画图模型必画错数字,坐标必须是真数据 |
13
+ | **A1. 结果图美化**(曲线/柱状/热图/箱线…) | 图上带**精确数值**(刻度、柱高、数据点) | 照最终结果重绘(§3):以我们最终给出的成图为基准重绘——期刊图大多也不是 MATLAB 原生生成的;**验收 = 数值与基准一致(差不多即可)+ 比例/对应关系正确**。能拿到原始数据就优先溯源(更稳),拿不到就以最终版成图逐点核对 |
14
14
  | **A2. 示意图升级**(用户已画的结构/流程/机制图,嫌丑) | 图上只有方块、箭头、标签,无数值 | AI 升级:结构照搬 + 视觉升级指令(§4.2),可选参考图 |
15
15
  | **A3. 结构组合**(多张小图合并成一张大图) | 多张 A1 或 A2 要拼版 | A1 部分本地 matplotlib subplot 拼版;A2 部分合并成一个多 panel prompt(§4.1) |
16
16
  | **B. 代码画不出的图**(流程图/机制图/神经网络图/算法示意) | 用户只能嘴上说 | promptFigure API(§4),本技能的主场 |
@@ -19,7 +19,7 @@
19
19
 
20
20
  > 🔴 **每轮结束必须交付台账**:新建 `promptfigure-out/vN/round-vN.md`——本轮清单(图种/档位/版本/本机路径/插入位置)、每张图的插入位置(上段末句 + …… + 下段首句)、所用上下文(只放首尾句)、数据文件只给引用链接;「优化前 → 优化后」对比也落在这里。全文协议见 `deliverables-ledger.md`。
21
21
 
22
- > 🔴 **「把终稿变成可编辑矢量/PPT 版」不属于以上任何一类**——那不是 matplotlib 的活,也不是出图 API 的活。走 `SKILL.md` **阶段 5**:终稿交付后先问用户要不要,比赛/数模默认不做(速度优先),时间充裕才由**宿主 AI 用本地的矢量工具/代码照着重绘**(禁止描摹,必须每个元素可编辑)。§3 的 matplotlib 只负责 A1 数据图的真数据重绘(防数字造假),不碰任何矢量转换。
22
+ > 🔴 **「把终稿变成可编辑矢量/PPT 版」不属于以上任何一类**——走 `SKILL.md` **阶段 5**:终稿交付后先问用户要不要,比赛/数模默认不做(速度优先),时间充裕才做。**首选**宿主 AI 比照最终版用本地工具重绘(每元素独立对象、用图层分离工具编辑);**退路**可描摹,但须先核对数值/比例并告知「描摹件文字不可编辑」。§3 的本地重绘 = 数据图的美化路径,不碰矢量转换。
23
23
 
24
24
  ---
25
25
 
@@ -81,9 +81,14 @@ SKILL.md 的「零反问」铁律**约束的是对 API 的出图过程**——
81
81
 
82
82
  ---
83
83
 
84
- ## 3. 代码图数据溯源(A1 类的唯一正路)
84
+ ## 3. 数据图美化(照最终结果重绘)
85
85
 
86
- > 本节 = **A1 数据图专用**(曲线/柱状/热图等带真数值的图)。用 matplotlib 的唯一理由是「坐标必须是真数据」;它不是通用美化手段,更不是矢量转换手段——「照终稿做可编辑矢量版」见 `SKILL.md` 阶段 5。
86
+ > 本节 = **A1 数据图专用**(曲线/柱状/热图等带真数值的图)。2026-09-25 松口(原规则太死):
87
+ > **数据图照我们最终给出的成图重绘即可**——期刊图大多也不是 MATLAB 原生生成的,只要
88
+ > **① 数值与最终版一致(差不多即可)② 比例与对应关系正确**,就达标。能拿到原始数据
89
+ > (脚本/数据文件)时优先按真数据画(更稳、更精确);拿不到就以最终版成图为基准逐点
90
+ > 核对,核对记录写进 round-vN.md。matplotlib 只是美化手段,不是矢量转换手段——
91
+ > 「照终稿做可编辑矢量版」见 `SKILL.md` 阶段 5。
87
92
 
88
93
  **为什么必须溯源**:结果图上的文字往往很小,视觉模型抄轴刻度、抄数据点**必然出错**;靠 OCR 抄数出来的图是假的。唯一可靠路径是找到原始数据,用真数据重绘。
89
94
 
@@ -81,10 +81,10 @@ pf doctor # 体检:TeX 引擎 / API key / 本地服务 / 当前
81
81
  pf audit # 审计一键可查:绕门记录(craft.forced/gate_bypass/review.forced)+ 计费兜底
82
82
  # 每条带理由;接手别人项目/怀疑历史版本可信度时先跑它
83
83
  pf export svg <figId> # 最新版 PNG → 可缩放 SVG(vtracer 描摹,draft/high 两档)
84
- # ⚠️ 描摹 ≠ 可编辑矢量:文字全变路径,不可编辑不可搜索
85
- # 要「每个元素都能改」的可编辑矢量版(PPT 形状/独立 SVG 元素),
86
- # 让宿主 AI 用本地工具照终稿重绘(如 python-pptx/结构化 SVG,
87
- # 参考 github.com/icebird1998/scientific-illustifier)——禁止拿本命令的输出顶替
84
+ # ⚠️ 描摹件:文字全变路径、不可直接编辑——仅作退路。交付前必须核对
85
+ # 数值与比例(数值差不多即可、对应关系必须对),并告知用户是描摹件
86
+ # 首选:让宿主 AI 比照终稿用本地工具重绘(python-pptx 形状 / 结构化 SVG),
87
+ # 每元素独立成对象,用图层分离的工具编辑(参考 github.com/icebird1998/scientific-illustifier)
88
88
  # 首次用报缺依赖时:npm i @visioncortex/vtracer(纯 WASM 可商用)
89
89
  ```
90
90
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "promptfigure",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "promptFigure 本地插件:在你的 AI 宿主(Codex / Claude Code 等)里为论文配科研图。开文档(LaTeX 本地编译)、画锚点、本地规则层组装提示词、调出图、收审批。npm 安装即附带 promptfigure-local / promptfigure-api 两个 Agent Skill。",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  # 安装这个技能(AI Agent Skill)
2
2
 
3
- > **版本 1.6.10**(2026-09-24)。下载页:https://promptfigure.top/skill 。查最新版:`curl -s https://promptfigure.top/downloads/promptfigure-api.version.json`;本地已装版本看 `SKILL.md` frontmatter 的 `version`。版本语义:主版本=接口不兼容改动(需重读 SKILL.md),次版本=新增能力,修订号=勘误。
3
+ > **版本 1.6.11**(2026-09-24)。下载页:https://promptfigure.top/skill 。查最新版:`curl -s https://promptfigure.top/downloads/promptfigure-api.version.json`;本地已装版本看 `SKILL.md` frontmatter 的 `version`。版本语义:主版本=接口不兼容改动(需重读 SKILL.md),次版本=新增能力,修订号=勘误。
4
4
 
5
5
  把 `promptfigure-api/` 整个文件夹放进你的 AI 工具的技能目录即可:
6
6
 
@@ -41,5 +41,5 @@ curl -s https://promptfigure.top/downloads/promptfigure-api.version.json
41
41
  ```
42
42
 
43
43
  本地 `version` 低于线上 `version` → 到下载页取最新包:https://promptfigure.top/skill
44
- (直链:https://promptfigure.top/downloads/promptfigure-api.zip ,或 GitHub Release 资产 promptfigure-api-1.6.10.zip)
44
+ (直链:https://promptfigure.top/downloads/promptfigure-api.zip ,或 GitHub Release 资产 promptfigure-api-1.6.11.zip)
45
45
  安装说明与 API 文档:https://promptfigure.top/docs/zh-CN/api
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: promptfigure-api
3
3
  description: 用 promptFigure 生成科研/学术配图(流程图、机制图、管线图、技术路线图、图形摘要),以及优化已有图表、整文批量升级(数据图本地重绘 + 示意图 AI 重构 + 可编辑矢量版 + 追溯台账)。当用户要「画一张图」「生成论文配图/示意图/机制图/graphical abstract」「把论文里的图变好看/变高级」「批量优化整篇文章的图」「要可编辑的矢量图/PPT 版」、给了 PDF/WPS/Word 文稿要配图或要主动建议插图位、或要配置 promptFigure API key、或要用 REST 接口批量出图时使用。走 https://promptfigure.top 的 /api/v1/generate,Bearer pf_ key 鉴权,返回 base64 PNG。强制学术字体规范(图内无衬线、禁手写/花体)与上下文蒸馏规则(原文段落绝不直接进 prompt,先蒸馏成实体/结构/图种三清单再组装)。网页端有多轮问询/二次确认,API 端一次性提交——所以要把用户绘图意图一次说清楚,服务端负责润色成完整示意。
4
- version: 1.6.10
4
+ version: 1.6.11
5
5
  license: MIT
6
6
  metadata:
7
- version: "1.6.10"
7
+ version: "1.6.11"
8
8
  author: promptFigure (zhangmask)
9
9
  homepage: https://promptfigure.top
10
10
  repository: https://github.com/zhangmask/promptfigure-skill
@@ -44,13 +44,13 @@ metadata:
44
44
  1. 🔴 **比赛 / 数学建模 / 学术会议竞赛**:默认建议**不做**,以速度为准——这些场景交 PNG 就够,矢量版是时间黑洞,别为它赌提交时限
45
45
  2. **时间充裕**(用户明确表示不赶、或场景是期刊/课设/长期维护的图):做。全部用**用户本地的工具或代码**完成,不调用 promptFigure API、不消耗任何额度
46
46
 
47
- **做法(三条红线 + 一条推荐路)**:
47
+ **做法(两条红线 + 一条首选路 + 一条退路)**:
48
48
 
49
- - 🔴 **禁止描摹矢量**:vtracer / potrace /「位图转 SVG 路径」之类一律不用——描摹出来的文字全是路径,不可编辑、不可搜索,越改越错。描摹矢量和「可编辑矢量」是两种东西,别拿描摹滥竽充数
50
- - 🔴 **必须是可编辑矢量**:每个元素是独立对象——PPT 形状、独立 SVG 元素/分组、Illustrator 图层都行。验收标准一句话:**用户能改,你的(宿主 AI)也能改**——后续微调是改对象属性,不是重画
51
- - 🔴 **文字保持文本**:标签必须是可编辑文本(无衬线,遵循图内字体规范),不许转路径
52
- - **推荐路**:拿最终确认版图,用本地代码/工具**照着画一遍**——如 python-pptx 生成形状化 PPTX、或写结构化 SVG(每个模块/箭头/标签一个元素),画完与确认版逐项比对、不一致就改,迭代到一致为止。参考做法:<https://github.com/icebird1998/scientific-illustifier>(宿主自行阅读,按本机工具链取舍)
53
- - 宿主没有本地矢量工具链(没有 python-pptx / 没有矢量软件 / 跑不动)时:**明示用户「做不了可编辑矢量版」**,交付确认版 PNG 收尾——仍然不许用描摹顶替
49
+ - 🔴 **必须是可编辑矢量**:每个元素是独立对象——PPT 形状、独立 SVG 元素/分组、Illustrator/Inkscape 图层都行。验收标准一句话:**用户能改,你的(宿主 AI)也能改**——后续微调是改对象属性,不是重画
50
+ - 🔴 **编辑必须用图层分离的工具**:在 PPT/WPS/Illustrator/Inkscape 里按「图层/组合」组织——每个模块、箭头、标签各自独立成层(PPT 用单独形状或组合、SVG 用 `<g>` 分组、位图软件用独立图层),禁止把所有元素糊成一个扁平对象或直接在扁平层上改像素
51
+ - **首选路——比照着重绘**:拿最终确认版图,用本地代码/工具**照着画一遍**——如 python-pptx 生成形状化 PPTX、或写结构化 SVG(每个模块/箭头/标签一个元素),画完与确认版逐项比对、不一致就改,迭代到一致为止。参考做法:<https://github.com/icebird1998/scientific-illustifier>(宿主自行阅读,按本机工具链取舍)
52
+ - **退路——描摹**:本机没有可编程矢量工具链、或时间紧时,可以用 vtracer 等把最终版描摹成矢量(`pf export svg` 即此路)。但必须**先核对再交付**:① 数值/标签与最终版一致(数据图数值差不多即可,但刻度对应关系要对);② 比例、模块对应关系正确;③ 交付时明确告知「描摹产物,文字已变为路径、不可直接编辑,改内容需回到重绘或重出图」——不许把描摹件当「可编辑矢量」宣称
53
+ - 宿主连描摹工具都没有时:**明示用户「做不了矢量版」**,交付确认版 PNG 收尾
54
54
 
55
55
  **交付物**:矢量文件 + 一句「哪些元素可以直接改」(如「每个方框、箭头、文字都是独立形状,可拖动/改字/改色」);`pf-ledger.md` 补一行,标注本地生成、零 API 消耗。
56
56
 
@@ -106,7 +106,7 @@ promptfigure-out/
106
106
  3. **定稿后问矢量图**(衔接 SKILL.md 阶段 5):
107
107
  - 提醒成本:矢量图由**用户自己的 AI 本地重绘**,token 消耗大、速度慢
108
108
  - 🔴 **比赛 / 数学建模 / 学术会议竞赛:默认不做**,速度优先;只有时间充裕才做
109
- 4. **用户确认做矢量图时**:把最终图**按元素分层重绘**为可编辑矢量(PPT 形状 / 分层 SVG 分组,每个模块、箭头、标签是独立对象),在用户偏好的应用里操作——**PPT 还是 WPS 还是其他,按用户主要偏好来**;描摹矢量(位图转路径)一律禁止
109
+ 4. **用户确认做矢量图时**:首选**比照着重绘**——拿最终版用本地工具照着画,每个模块、箭头、标签独立成对象;🔴 **必须用支持图层分离的工具编辑**:PPT/WPS 用单独形状或组合、SVG 用 `<g>` 分组、Illustrator/Inkscape 用独立图层——一把糊成扁平对象 = 不可编辑,返工。应用按用户主要偏好来(PPT / WPS / 其他)。**退路=描摹**(vtracer 等):先核对数值与比例(数值差不多即可、对应关系必须对),交付时明确告知「描摹件、文字已变路径不可直接编辑」——不许当可编辑矢量宣称
110
110
 
111
111
  ---
112
112
 
@@ -10,7 +10,7 @@
10
10
 
11
11
  | 需求 | 判据 | 路线 |
12
12
  |---|---|---|
13
- | **A1. 结果图美化**(曲线/柱状/热图/箱线…) | 图上带**精确数值**(刻度、柱高、数据点) | 🔴 **绝不走 AI 生图**。数据溯源 + 本地重绘(§3)——AI 画图模型必画错数字,坐标必须是真数据 |
13
+ | **A1. 结果图美化**(曲线/柱状/热图/箱线…) | 图上带**精确数值**(刻度、柱高、数据点) | 照最终结果重绘(§3):以我们最终给出的成图为基准重绘——期刊图大多也不是 MATLAB 原生生成的;**验收 = 数值与基准一致(差不多即可)+ 比例/对应关系正确**。能拿到原始数据就优先溯源(更稳),拿不到就以最终版成图逐点核对 |
14
14
  | **A2. 示意图升级**(用户已画的结构/流程/机制图,嫌丑) | 图上只有方块、箭头、标签,无数值 | AI 升级:结构照搬 + 视觉升级指令(§4.2),可选参考图 |
15
15
  | **A3. 结构组合**(多张小图合并成一张大图) | 多张 A1 或 A2 要拼版 | A1 部分本地 matplotlib subplot 拼版;A2 部分合并成一个多 panel prompt(§4.1) |
16
16
  | **B. 代码画不出的图**(流程图/机制图/神经网络图/算法示意) | 用户只能嘴上说 | promptFigure API(§4),本技能的主场 |
@@ -19,7 +19,7 @@
19
19
 
20
20
  > 🔴 **每轮结束必须交付台账**:新建 `promptfigure-out/vN/round-vN.md`——本轮清单(图种/档位/版本/本机路径/插入位置)、每张图的插入位置(上段末句 + …… + 下段首句)、所用上下文(只放首尾句)、数据文件只给引用链接;「优化前 → 优化后」对比也落在这里。全文协议见 `deliverables-ledger.md`。
21
21
 
22
- > 🔴 **「把终稿变成可编辑矢量/PPT 版」不属于以上任何一类**——那不是 matplotlib 的活,也不是出图 API 的活。走 `SKILL.md` **阶段 5**:终稿交付后先问用户要不要,比赛/数模默认不做(速度优先),时间充裕才由**宿主 AI 用本地的矢量工具/代码照着重绘**(禁止描摹,必须每个元素可编辑)。§3 的 matplotlib 只负责 A1 数据图的真数据重绘(防数字造假),不碰任何矢量转换。
22
+ > 🔴 **「把终稿变成可编辑矢量/PPT 版」不属于以上任何一类**——走 `SKILL.md` **阶段 5**:终稿交付后先问用户要不要,比赛/数模默认不做(速度优先),时间充裕才做。**首选**宿主 AI 比照最终版用本地工具重绘(每元素独立对象、用图层分离工具编辑);**退路**可描摹,但须先核对数值/比例并告知「描摹件文字不可编辑」。§3 的本地重绘 = 数据图的美化路径,不碰矢量转换。
23
23
 
24
24
  ---
25
25
 
@@ -81,9 +81,14 @@ SKILL.md 的「零反问」铁律**约束的是对 API 的出图过程**——
81
81
 
82
82
  ---
83
83
 
84
- ## 3. 代码图数据溯源(A1 类的唯一正路)
84
+ ## 3. 数据图美化(照最终结果重绘)
85
85
 
86
- > 本节 = **A1 数据图专用**(曲线/柱状/热图等带真数值的图)。用 matplotlib 的唯一理由是「坐标必须是真数据」;它不是通用美化手段,更不是矢量转换手段——「照终稿做可编辑矢量版」见 `SKILL.md` 阶段 5。
86
+ > 本节 = **A1 数据图专用**(曲线/柱状/热图等带真数值的图)。2026-09-25 松口(原规则太死):
87
+ > **数据图照我们最终给出的成图重绘即可**——期刊图大多也不是 MATLAB 原生生成的,只要
88
+ > **① 数值与最终版一致(差不多即可)② 比例与对应关系正确**,就达标。能拿到原始数据
89
+ > (脚本/数据文件)时优先按真数据画(更稳、更精确);拿不到就以最终版成图为基准逐点
90
+ > 核对,核对记录写进 round-vN.md。matplotlib 只是美化手段,不是矢量转换手段——
91
+ > 「照终稿做可编辑矢量版」见 `SKILL.md` 阶段 5。
87
92
 
88
93
  **为什么必须溯源**:结果图上的文字往往很小,视觉模型抄轴刻度、抄数据点**必然出错**;靠 OCR 抄数出来的图是假的。唯一可靠路径是找到原始数据,用真数据重绘。
89
94
 
@@ -81,10 +81,10 @@ pf doctor # 体检:TeX 引擎 / API key / 本地服务 / 当前
81
81
  pf audit # 审计一键可查:绕门记录(craft.forced/gate_bypass/review.forced)+ 计费兜底
82
82
  # 每条带理由;接手别人项目/怀疑历史版本可信度时先跑它
83
83
  pf export svg <figId> # 最新版 PNG → 可缩放 SVG(vtracer 描摹,draft/high 两档)
84
- # ⚠️ 描摹 ≠ 可编辑矢量:文字全变路径,不可编辑不可搜索
85
- # 要「每个元素都能改」的可编辑矢量版(PPT 形状/独立 SVG 元素),
86
- # 让宿主 AI 用本地工具照终稿重绘(如 python-pptx/结构化 SVG,
87
- # 参考 github.com/icebird1998/scientific-illustifier)——禁止拿本命令的输出顶替
84
+ # ⚠️ 描摹件:文字全变路径、不可直接编辑——仅作退路。交付前必须核对
85
+ # 数值与比例(数值差不多即可、对应关系必须对),并告知用户是描摹件
86
+ # 首选:让宿主 AI 比照终稿用本地工具重绘(python-pptx 形状 / 结构化 SVG),
87
+ # 每元素独立成对象,用图层分离的工具编辑(参考 github.com/icebird1998/scientific-illustifier)
88
88
  # 首次用报缺依赖时:npm i @visioncortex/vtracer(纯 WASM 可商用)
89
89
  ```
90
90
 
package/src/craft.mjs CHANGED
@@ -547,6 +547,8 @@ export function craftPrompt(input = {}) {
547
547
 
548
548
  // —— 5.5) 多轮精修块:上一版核验出的缺陷逐条拼接为硬性修正(2026-09-21 定规)——
549
549
  // 不重掷骰子:上一版画对的部分原样保留,本块只钉死上一版的失败点。
550
+ // 🔴 2026-09-25 双智能体实测:修正文本此前无护栏,被图模型当卡面文字印上图
551
+ // (实测 "Q2/Baseline" 字样上图;宿主被迫整体弃用 --fixes)。护栏=显式声明非图面文字。
550
552
  const fixList = String(fixes || "")
551
553
  .split(/[;;]/)
552
554
  .map((s) => s.trim())
@@ -554,8 +556,8 @@ export function craftPrompt(input = {}) {
554
556
  if (fixList.length) {
555
557
  promptParts.push(
556
558
  lang === "zh"
557
- ? `上一版修正(逐条都是硬性要求,必须全部满足):${fixList.map((f, i) => `(${i + 1}) ${f}`).join(";")}。`
558
- : `Corrections from the previous attempt — each is a HARD requirement, satisfy all of them: ${fixList.map((f, i) => `(${i + 1}) ${f}`).join("; ")}.`
559
+ ? `上一版修正(以下全部是生成约束,**不是图面文字,严禁印到图上**;逐条必须满足):${fixList.map((f, i) => `(${i + 1}) ${f}`).join(";")}。`
560
+ : `Corrections from the previous attempt — these are GENERATION CONSTRAINTS ONLY, **never print them onto the figure**; each is a HARD requirement, satisfy all of them: ${fixList.map((f, i) => `(${i + 1}) ${f}`).join("; ")}.`
559
561
  );
560
562
  }
561
563
 
package/src/server.mjs CHANGED
@@ -121,6 +121,24 @@ export function startServer({ port, registerDaemon = true }) {
121
121
  const body = await readBody(req);
122
122
  if (body.token !== guiToken) return json(res, 403, { error: "bad session token" });
123
123
  const doc = u.searchParams.get("doc");
124
+ // 🔴 QA 门禁对齐 CLI(2026-09-25 双智能体实测发现的放水后门):
125
+ // GUI 通过审批此前不查 QA——AI 可以自己先点通过再补 QA,CLI 的硬闸被 GUI 绕过。
126
+ // 现在 approve 与 CLI 同尺:最新版 QA 通过 + 量化依据 + 图文件存在,缺一拒绝。
127
+ // 驳回/反馈不受限(它们不是放水动作)。
128
+ if (body.status === "approved") {
129
+ const meta = readMeta(doc);
130
+ const fig = meta?.figures?.[body.figureId];
131
+ if (fig) {
132
+ const { qaState, isQuantifiedNote } = await import("./quality.mjs");
133
+ const qs = qaState(fig);
134
+ if (!qs.fresh || qs.verdict !== "pass" || !isQuantifiedNote(qs.qa?.note)) {
135
+ return json(res, 409, {
136
+ error: "qa_required",
137
+ message: `图 ${body.figureId} 还没有通过的 QA 核验记录——先在终端跑 pf qa ${body.figureId} 亲眼核验并 --pass 写回,再来通过审批`,
138
+ });
139
+ }
140
+ }
141
+ }
124
142
  const r = setStatus(doc, body.figureId, body.status, body.note, "user");
125
143
  return json(res, 200, { ok: true, review: r });
126
144
  }
package/web/app.js CHANGED
@@ -435,7 +435,7 @@ function reviewControls(f) {
435
435
  body: JSON.stringify({ token: TOKEN, figureId: f.figureId, status, note }),
436
436
  });
437
437
  const data = await resp.json();
438
- if (!resp.ok) return toast("提交失败:" + (data.error || resp.status));
438
+ if (!resp.ok) return toast((data.message || data.error) ? "提交失败:" + (data.message || data.error) : "提交失败:" + resp.status);
439
439
  toast(act === "approve" ? "已通过,AI 会接着出高清版" : act === "feedback" ? "反馈已提交,AI 会读到" : "已驳回,AI 会按你的意见重画");
440
440
  await loadState(); paintAll();
441
441
  // 审批队列开着 → 这张已离开队列,原位自动落到下一张