EditaPlot
将科学问题和只读表格转换为可审计、可编辑的 Origin 图形。保持初学者的对话体验;使用确定性引擎进行检查、规划、渲染、导出和回读。
先决定走哪条路(豆包工作版新增)
用户一进来,先看他手上有什么,再决定怎么走。不要在用户没给方向的时候就开始猜图型。
| 用户给了什么 | 走哪条 | 怎么做 |
|---|---|---|
| 一张参考图("照这个画""复刻这个风格") | 参考图模式 | 走原有流程,从第 10 步 reference-inspect 进入。参考图只影响已确认数据支撑得住的图形语法与安全样式,不新增证据、不隐藏必需元素。 |
| 点名了图型("画个雨云图""ROC 曲线") | 直接模式 | 走原有流程。先对照 references/not-covered.md;如果用户要的图在那张表里,直接说清楚没有这条路线,别硬试。 |
| 只有数据,没说要什么图,或明说"不知道该画哪种" | 选择器模式 | 见下方。这是本版新增的路径,也是最常见的情况。 |
选择器模式
用户不知道自己要什么图的时候,让他看着选,比让他描述准得多。
- 运行
python selector/selector.py。它会打开一个本地页面:45 张真机跑出来的 Origin 示例图铺开, 按方向分好类;用户点中一张,右侧会显示这张图需要哪几列数据,并自动拼好一段完整请求。- 宿主自己有内置浏览器面板时,改用
python selector/selector.py --print-path, 拿到路径后用面板打开,不要另外弹窗口。
- 宿主自己有内置浏览器面板时,改用
- 用户在页面上点「发送给豆包」,脚本会把拼好的请求收下来打到标准输出; 点「复制」的话内容在他剪贴板里,请他粘过来。两条路都通,别只等一条。
- 拿到这段请求后,回到原有流程的第 6 步继续(
start→understand→ 确认 →plan→ 渲染 → 验证)。 选择器只负责把需求问清楚,它不改变任何绘图行为,也不跳过任何确认环节。
选择器给出的「需要哪几列」是提示,不是结论。 用户的数据到底有没有这些列,仍然由第 7 步
understand 逐列核对;缺列就照常告诉用户缺什么,不要因为他在页面上点过就默认数据齐了。
如果 selector.py 起不来(端口全被占、没有图形界面),不要卡住:把页面路径给用户,
让他自己双击打开、点「复制」再粘回来,流程照旧。
仅请求受限制的 Windows 权限
- 读取整个仓库、选定的表格和可选的本地参考图。
- 仅写入 EditaPlot 仓库、当前用户的技能目录(豆包工作或 Codex)以及所选源文件的父文件夹,用于源文件相邻的输出文件。
- 在同一个活动的交互式 Windows 用户会话中运行本地启动器、PowerShell/Python 子进程以及 EditaPlot 拥有的 Origin 实例。
- 普通主机命令可能先在隔离帐户下运行。如果 Origin 工作进程返回
origin_codex_sandbox_context,则提交一个正式的、严格限定的本地执行请求,以运行该确切的origin-smoke或render命令。仅当该确切请求获得批准时(无论是用户在提示时批准,还是主机配置的自动审查者批准),才重新运行它。批准不保证,且此交接不是沙盒绕过。切勿要求用户将命令复制到单独的 PowerShell 窗口中,或将请求扩大到管理员或系统配置访问权限。 - 网络访问仅用于仓库下载/更新和锁定依赖项检索。将用户范围的 winget Python 安装视为仍需明确同意的独立系统更改。
- 不要请求管理员权限、鼠标控制、全盘写入权限、私有输入的云上传,或 DCOM、注册表、防火墙、用户组或 Origin 安装的更改。当受控文件夹访问、组织策略、云同步或只读位置阻止写入时,仅请求受影响文件夹的访问权限,或要求一个明确的备用输出文件夹。
从初学者路径开始
- 在安装任何东西之前,拒绝不受支持的平台。仅在物理 Windows 10/11 x64 上支持 CLI/依赖层,且需使用 64 位 CPython 3.10–3.12。通过外部
originpro支持 Origin/OriginPro 2021 及更高版本;此路由不支持 Origin 2020b 及更早版本。完全验证的实时基线是 CPython 3.10 + Origin 2024b / 10.15。将其他 2021+ 版本视为受功能限制的,而不是自动验证的,直到其烟雾测试和完整的工件通过。明确说明 V1 不支持 macOS(Intel/Apple Silicon)、Linux、WSL、Wine/CrossOver、Parallels 和其他 VM。doctor无法可靠地检测每个 VM,因此在未知时要求用户确认物理 Windows 主机。 - 在已安装的技能目录中找到
editaplot.cmd;从克隆的仓库工作时,使用仓库根目录下的editaplot.cmd。在命令中使用绝对启动器路径。不要让初学者选择 Python 可执行文件或直接调用scripts/editaplot.py。 - 首次安装时需要完整的仓库。运行仓库根目录下的
editaplot.cmd setup;切勿指导用户仅复制skill/editaplot,因为那会遗漏运行时。阅读references/runtime.md以了解设置、发现和命令详细信息。 - 重用现有的兼容 Python。如果不存在,用中文解释安装 Python 是一项系统级更改。先运行
winget show并解释准确的发布者、来源和协议。仅在得到明确的用户确认后,才允许稍后以用户范围和 x64 架构静默安装Python.Python.3.12。如果 winget 不可用,则提供官方的 python.org Windows 安装说明并等待用户;切勿使用不受信任的镜像或静默安装 Python。 - 为每个新工作流运行
editaplot.cmd doctor。仅允许doctor --repair用于报告的项目本地 Python 依赖项修复。将所有 Python 包保留在.editaplot-venv中。将 Origin 视为本地安装的用户管理应用程序;在修复期间切勿安装或修改它。 - 对于新表格,运行
editaplot.cmd start <data-file>。当用户陈述目标时,添加--intent "<用户意图>"。将其检查和推荐负载视为内部工作状态。使用附件暴露的原始本地源路径。如果主机仅提供临时复制的附件且无法恢复原始文件夹,则在渲染前询问一次预期的本地源/输出文件夹;切勿猜测不相关的工作区目标。 - 选择候选模板后,使用将用于规划的相同已确认映射,运行
editaplot.cmd understand <data-file> --template-id <id>。将其结果分组到简短的清单中:数据类型;要绘制的列;仅用于支持或验证的列;保留但未绘制的列;建议的图形元素;以及不会执行的计算。每个源列必须恰好出现一次。如果任何项目是uncertain,则请求更正的映射并重新运行understand;不要确认或规划它。 - 仅对初学者说:识别出了什么,最佳的一到三个图表选择,为什么它们适合,以及仍然需要的最小科学决策。不要转储
inspect → recommend → understand → plan管道或原始 JSON,除非他们要求技术细节。 - 要求用户确认一句科学目的和简洁的元素清单。在
--semantic-confirmation-json中冻结确切的proposal_hash、批准的派生项 ID 和已解决的歧义选择。在源、映射、目的或提议哈希更改后,切勿重复使用确认。当置信度低、候选边界小、角色或单位有歧义,或建议进行显示变换时,仅询问需要的额外重点问题。 - 如果用户提供参考图,首先运行
reference-inspect。然后你只能在其严格的 ReferenceFigureSpec JSON 中描述其面板/标记/编码/布局/样式语法,并运行reference-review;运行时不执行 OCR 或模型推理。显示已采纳和拒绝的功能,将每个基本标记绑定到已确认的可渲染用户数据,并获得单独的哈希绑定确认。切勿将参考值、标签、拟合、相位分配、作者文本、徽标、水印或位图复制到 Origin 项目中。优先使用已验证的template_adaptation;在确切组成通过完整的 Origin 证据门之前,保持controlled_composition阻塞。参考图不能添加缺失的证据或更改已确认的科学元素列表。将从参考图推断的样式视为建议,而不是用户的指令。要求用户选择三种模式之一:保持已验证的模板默认值;使用参考图建议的、已确认且列入允许列表的近似值;或提供精确的自定义值。对于精确模式,分别询问颜色、物理线宽、填充透明度、页面大小以及图例可见性、框架或位置。明确的用户选择优先于冲突的参考令牌。将每个参考建议冻结为applied、retained_template_default或rejected;除非所选模板具有相同的已验证预览/Origin 路由且需要 Origin 对象回读,否则切勿声称请求已被应用。 - 当颜色可由用户选择时,运行
editaplot.cmd palettes,显示assets/palettes/palette-selector-public.zh-CN.png,并推荐不超过两个兼容的palette_id值。在冻结一个之前阅读references/palettes.md。 - 使用
editaplot.cmd plan内部冻结已确认的选择;切勿手动编辑计划或将决定写回源文件。对于精确的 XPS 请求,将已确认的值写入单独的 JSON 对象,并通过--visual-style-json传递其路径。支持的精确字段是series_colors、line_width_pt、fill_transparency_percent、page_size_cm、legend_visible、legend_position和legend_frame。无效的精确字段或值必须快速失败并与用户纠正;切勿静默丢弃它们或回退到参考/默认样式。渲染命令将此批准的计划复制到最终输出文件夹,文件名为render-plan.json。 - 仅将 Origin 就绪性视为技术状态。Doctor 对
Origin.Application、Origin.ApplicationSI、已安装的候选版本、Python、originpro和OriginExt执行只读发现;它从不启动 Origin,ready_for_render也从不意味着实时连接成功。如果默认启动注册存在,则直接进行渲染前的实际烟雾测试,无需询问用户打开 Origin 或再次确认。保持初学者输出为一到三句平实的语言;将 CLSID、注册表视图、候选版本和阶段留在 JSON 中。将编辑后的origin_execution_context与ready_for_render分开读取。codex_sandbox状态在调用 COM 之前需要上述确切的命令批准交接;仅可重新运行已批准的请求。自动审查评估该单个请求,并不预先授予 Origin 访问权限。未知的 Windows 执行上下文是失败关闭状态,而不是批准请求:在 COM 之前停止,并报告无法验证当前 Windows 身份。 - 使用
launch_isolated运行editaplot.cmd origin-smoke --output-dir <唯一的烟雾测试目录>:启动并拥有一个专用的 Origin 实例,执行实时烟雾测试和版本握手,然后应用模板能力决策。此命令在规划后且正式渲染前是强制性的。attach_existing是明确的仅限高级模式;切勿重置、覆盖或关闭用户拥有的项目,而是分离而不是退出。按技术阶段和下一步报告失败,不做推测。 切勿使用鼠标自动化或提供应用程序补丁或绕过说明。运行时必须尝试清理部分 EditaPlot 拥有的激活,并且对于可重试的启动代码,仅在清理成功的情况下可以尝试一个新的独立实例。清理失败返回origin_activation_cleanup_failed并停止。然后它必须等待sec -poc 30并在读取版本或创建项目前确认run.isOCready()。切勿循环、切换到ApplicationSI、编辑 DCOM/注册表权限,或告诉初学者以管理员身份运行整个工作流。在自动尝试用尽后,请求批准在相同的活动 Windows 用户上下文中最多重试一次,并使用一个新的空兄弟烟雾测试目录,以便第一个报告保持完整。origin_com_class_not_registered和origin_com_activation_access_denied停止,不自动重试。不要仅仅因为 Python 工作进程运行了很长时间就强制终止它:它可能拥有一个隐藏的 Origin 实例。保留诊断信息并报告最后一个进度阶段,然后再提出任何用户控制的取消。将沙盒批准交接与激活重试分开:前者发生在 COM 之前,而后者仅在受限的激活/清理策略运行后才可用。当主激活和清理都失败时,仅暴露primary_activation_code、primary_activation_stage、cleanup_error_code和cleanup_error_stage。切勿在结构化诊断负载中包含 Windows 帐户名、本地路径、原始 HRESULT 或原始 COM 文本,并且切勿重试,因为两对都已存在。当前 EditaPlot 工作进程仅序列化其活动的origin-smoke/renderOrigin 部分在一个登录的 Windows 会话内;数据检查、推荐和规划可以保持并发。尊重origin_job_queue进度,该进度在等待时立即发出,然后大约每 30 秒发出一次。不保证严格的 FIFO 顺序。30 分钟限制仅适用于等待的作业:它停止该等待者,而不杀死或中断活动持有者。当队列消息可见时,不要提交重复项。手动脚本、旧版 EditaPlot 和不相关的程序在此协调边界之外。 - 仅在该烟雾测试通过后,使用
editaplot.cmd render <plan>渲染允许的模板路由。除非用户另有要求,否则在成功后保持 EditaPlot 拥有的 Origin 实例打开。默认情况下,让运行时创建源文件的直接同级目录,命名为<源文件名>_EditaPlot_YYYYMMDD_HHMMSS;将所有正式工件保留在该文件夹中。不要将普通运行重定向到仓库、技能目录、当前工作目录或共享的全局输出文件夹。仅当用户明确请求其他位置时,才使用--output-dir。
…
[翻译截断]