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 上的 64 位 CPython 3.10–3.12。通过外部
originpro支持 Origin/OriginPro 2021 及更高版本;此路线不支持 Origin 2020b 及更早版本。完全验证的实时基线是 CPython 3.10 + Origin 2024b / 10.15。将其他 2021+ 版本视为功能受限,在通过烟雾测试和完整制品验证之前,不自动视为已验证。明确指出 macOS(Intel/Apple Silicon)、Linux、WSL、Wine/CrossOver、Parallels 和其他虚拟机在 V1 中不受支持。doctor无法可靠检测每个虚拟机,因此在未知主机类型时,请要求用户确认是物理 Windows 主机。 - 在已安装的技能目录中找到
editaplot.cmd;当从克隆的仓库工作时,使用仓库根目录下的editaplot.cmd。在命令中使用绝对启动器路径。不要让初学者选择 Python 可执行文件或直接调用scripts/editaplot.py。 - 首次安装需要完整仓库。运行仓库根目录下的
editaplot.cmd setup;切勿指导用户只复制skill/editaplot,因为这会遗漏运行时。阅读references/runtime.md以了解安装、发现和命令的详细信息。 - 重用现有兼容的 Python。如果没有,则用中文解释安装 Python 是一项系统级更改。先运行
winget show并解释确切的发布者、来源和协议。只有在用户明确确认后,才允许稍后非交互式安装Python.Python.3.12(用户范围、x64 架构)。如果 winget 不可用,则提供官方的 python.org Windows 安装说明并等待用户;切勿使用不受信任的镜像或静默安装 Python。 - 为每个新工作流运行
editaplot.cmd doctor。仅允许doctor --repair用于修复报告的项目本地 Python 依赖项。将所有 Python 包保留在.editaplot-venv中。将 Origin 视为本地安装的用户管理应用程序;在修复期间绝不安装或修改它。 - 为新数据表运行
editaplot.cmd start <data-file>。当用户说明目标时,添加--intent "<user 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 中。 从ready_for_render中分别读取经过编辑的origin_execution_context。codex_sandbox状态要求在调用 COM 之前进行上述精确命令批准交接;只有批准的请求才能重新运行。自动审查评估单个请求,并不预先授予 Origin 访问权限。unknownWindows 执行上下文是故障闭合且不是批准请求:在 COM 之前停止,并报告无法验证当前 Windows 标识。 - 使用
launch_isolated运行editaplot.cmd origin-smoke --output-dir <unique-smoke-directory>:启动并拥有一个专用的 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 工作器仅在单个已登录的 Windows 会话中序列化其活跃的origin-smoke/renderOrigin 部分;数据检查、推荐和规划可以保持并发。尊重origin_job_queue进度,该进度在等待时立即发出,然后大约每 30 秒发出一次。不保证严格的 FIFO 顺序。30 分钟的限制仅适用于等待的任务:它停止该等待者而不杀死或中断活动持有者。当存在队列消息时,不要提交重复项。手动脚本、旧版 EditaPlot 版本和不相关的程序在此协调边界之外。 - 只有在烟雾测试通过后,才使用
editaplot.cmd render <plan>渲染允许的模板路线。除非用户要求,否则在成功后保持 EditaPlot 拥有的 Origin 实例打开。默认情况下,让运行时创建源文件的直接同级目录,命名为<source_stem>_EditaPlot_YYYYMMDD_HHMMSS;将所有正式制品保留在该文件夹中。不要将普通运行重定向到仓库、技能目录、当前工作目录或共享的全局输出文件夹。仅当用户明确请求其他位置时,才使用--output-dir。
…
[为翻译截断]