EditaPlot
Turn a scientific question and a read-only table into an auditable, editable Origin figure. Keep the beginner experience conversational; use the deterministic engine for inspection, planning, rendering, exporting, and readback.
Decide which path to take first (New for Doubao Works version)
When the user arrives, first assess what they have, then decide how to proceed. Do not start guessing chart types without a direction from the user.
| What the user provided | Which path to take | How to proceed |
|---|---|---|
| A reference image ("Draw it like this" / "Replicate this style") | Reference image mode | Follow the original workflow, starting from step 10 reference-inspect. The reference image only affects graphic grammar and safe styles that the confirmed data can support; it does not add new evidence or hide essential elements. |
| A specific chart type ("Draw a raincloud plot" / "ROC curve") | Direct mode | Follow the original workflow. First, check references/not-covered.md; if the user's requested chart type is in that table, clearly state that this route is not available, do not force it. |
| Data only, no chart type specified, or they explicitly say "I don't know which to draw" | Selector mode | See below. This is the new path added in this version and the most common scenario. |
Selector mode
When the user doesn't know which chart to use, letting them see and pick is far more accurate than making them describe it.
- Run
python selector/selector.py. It opens a local page showing 45 real Origin example charts generated by genuine runs, categorized by direction. When the user clicks one, the right side displays which data columns that chart requires and automatically assembles a complete request.- If the host has a built-in browser panel, use
python selector/selector.py --print-pathinstead, open the path using that panel, and avoid popping up a separate window.
- If the host has a built-in browser panel, use
- The user clicks "Send to Doubao" on the page; the script captures the assembled request and outputs it to stdout. If they click "Copy", the content goes to their clipboard; ask them to paste it. Both routes work, do not wait for only one.
- After receiving this request, return to step 6 of the original workflow and continue (
start→understand→ confirm →plan→ render → verify). The selector is only responsible for clarifying the requirements; it does not change any plotting behavior or skip any confirmation steps.
The "which columns are needed" suggestion from the selector is a hint, not a conclusion. Whether the user's data actually has those columns is still verified by step 7 understand, which checks column by column. If columns are missing, inform the user as usual what is missing; do not assume the data is complete just because they clicked something on the page.
If selector.py cannot start (all ports occupied, no graphical interface), do not block: provide the page path to the user, let them double-click to open it, click "Copy", and paste back; the process continues as normal.
Request only scoped Windows permissions
- Read the complete repository, selected table, and optional local reference image.
- Write only to the EditaPlot repository, the current user's skill directory (Doubao Works or Codex), and the selected source file's parent folder for source-adjacent deliverables.
- Run the local launcher, PowerShell/Python subprocesses, and an EditaPlot-owned Origin instance in the same active interactive Windows user session.
- A normal host command may first run under an isolated account. If the Origin worker returns
origin_codex_sandbox_context, submit a formal, narrowly scoped local-execution request for that exactorigin-smokeorrendercommand. Rerun it only if that exact request is approved, either by the user when prompted or by the host's configured auto-reviewer. Approval is not guaranteed, and this handoff is not a sandbox bypass. Never ask the user to copy the command into a separate PowerShell window or broaden the request to administrator or system-configuration access. - Use network access only for repository download/update and locked dependency retrieval. Treat a user-scope winget Python installation as a separate system change that still requires explicit consent.
- Do not request administrator rights, mouse control, whole-drive write access, cloud upload of private inputs, or DCOM, registry, firewall, user-group, or Origin-installation changes. When Controlled Folder Access, an organization policy, cloud sync, or a read-only location blocks writes, request access only to the affected folder or ask for an explicit alternate output folder.
Start with the beginner path
- Reject unsupported platforms before installing anything. Support the CLI/dependency layer only
on physical Windows 10/11 x64 with 64-bit CPython 3.10–3.12. Target Origin/OriginPro 2021 and
later through external
originpro; Origin 2020b and earlier are unsupported by this route. The fully verified live baseline is CPython 3.10 + Origin 2024b / 10.15. Treat another 2021+ version as capability-gated, not automatically verified, until its smoke and complete artifacts pass. State plainly that macOS (Intel/Apple Silicon), Linux, WSL, Wine/CrossOver, Parallels, and other VMs are unsupported in V1.doctorcannot reliably detect every VM, so ask the user to confirm a physical Windows host when that fact is unknown. - Locate
editaplot.cmdin the installed Skill directory; when working from a cloned repository, use the repository-rooteditaplot.cmd. Use an absolute launcher path in commands. Do not make beginners select a Python executable or invokescripts/editaplot.pydirectly. - Require the complete repository for first installation. Run repository-root
editaplot.cmd setup; never instruct users to copy onlyskill/editaplot, because that omits the runtime. Readreferences/runtime.mdfor setup, discovery, and command details. - Reuse an existing compatible Python. If none exists, explain in Chinese that installing Python
is a system-level change. Run
winget showfirst and explain the exact publisher, source, and agreements. Only explicit user confirmation permits a later non-interactive installation ofPython.Python.3.12with user scope and x64 architecture. If winget is unavailable, provide the official python.org Windows installation instructions and wait for the user; never use an untrusted mirror or silently install Python. - Run
editaplot.cmd doctorfor each new workflow. Allowdoctor --repaironly for the reported project-local Python dependency repair. Keep all Python packages in.editaplot-venv. Treat Origin as a locally installed user-managed application; never install or modify it during repair. - Run
editaplot.cmd start <data-file>for a new table. Add--intent "<user intent>"when the user states a goal. Treat its inspection and recommendation payload as internal working state. Use the original local source path exposed by the attachment. If the host provides only a temporary copied attachment and the original folder cannot be recovered, ask once for the intended local source/output folder before rendering; never guess an unrelated workspace destination. - After selecting a candidate template, run
editaplot.cmd understand <data-file> --template-id <id>with the same confirmed mapping that will be used for planning. Group its result into a short checklist: data type; columns to draw; columns used only for support or validation; columns retained but not drawn; proposed figure elements; and calculations that will not be performed. Every source column must appear exactly once. If any item isuncertain, ask for a corrected mapping and rununderstandagain; do not confirm or plan it. - Tell a beginner only: what was recognized, the best one to three chart choices, why they fit,
and the smallest scientific decision still required. Do not dump an
inspect → recommend → understand → planpipeline or raw JSON unless they ask for technical detail. - Ask the user to confirm both a one-sentence scientific purpose and the concise element checklist.
Freeze the exact
proposal_hash, approved derived-item IDs, and resolved ambiguity choices in--semantic-confirmation-json. Never reuse a confirmation after the source, mapping, purpose, or proposal hash changes. When confidence is low, candidate margins are small, roles or units are ambiguous, or a display transformation is proposed, ask only the additional focused questions needed. - If the user supplies a reference figure, first run
reference-inspect. You may then describe only its panel/mark/encoding/layout/style grammar in the strict ReferenceFigureSpec JSON and runreference-review; the runtime performs no OCR or model inference. Show the adopted and rejected features, bind every essential mark to confirmed renderable user data, and obtain a separate hash-bound confirmation. Never copy reference values, labels, fits, phase assignments, author text, logos, watermarks, or the bitmap into the Origin project. Prefer verifiedtemplate_adaptation; keepcontrolled_compositionblocked until that exact composition has passed the full Origin evidence gate. A reference cannot add missing evidence or change the confirmed scientific element list. Treat style inferred from the reference as a suggestion, not as the user's instruction. Ask the user to choose one of three modes: keep the verified template default; use a confirmed, allow-listed approximation suggested by the reference; or provide exact custom values. For the exact mode, ask separately for colors, physical line width, fill transparency, page size, and legend visibility, frame, or position. An explicit user choice has precedence over a conflicting reference token. Freeze each reference suggestion asapplied,retained_template_default, orrejected; never claim a request was applied unless the selected template has the same verified preview/Origin route and the required Origin object readback. - When color is user-selectable, run
editaplot.cmd palettes, showassets/palettes/palette-selector-public.zh-CN.png, and recommend no more than two compatiblepalette_idvalues. Readreferences/palettes.mdbefore freezing one. - Internally freeze the confirmed choice with
editaplot.cmd plan; never hand-edit a plan or write a decision back to the source file. For an exact XPS request, write the confirmed values to a separate JSON object and pass its path with--visual-style-json. The supported exact fields areseries_colors,line_width_pt,fill_transparency_percent,page_size_cm,legend_visible,legend_position, andlegend_frame. Invalid explicit fields or values must fail fast and be corrected with the user; never silently discard them or fall back to a reference/default style. The render command copies this approved plan into the final output folder asrender-plan.json. - Treat Origin readiness as technical state only. Doctor performs read-only discovery of
Origin.Application,Origin.ApplicationSI, installed candidates, Python,originpro, andOriginExt; it never launches Origin andready_for_rendernever means a live connection succeeded. If the default launch registration is present, proceed to the real pre-render smoke without asking the user to open Origin or confirm it again. Keep beginner output to one to three plain-language sentences; leave CLSIDs, registry views, candidates, and stages in JSON. Read the redactedorigin_execution_contextseparately fromready_for_render. Acodex_sandboxstatus requires the exact-command approval handoff above before COM is called; only an approved request may be rerun. Auto-review evaluates that individual request and does not pre-grant Origin access. AnunknownWindows execution context is fail-closed and is not an approval request: stop before COM and report that the current Windows identity could not be verified. - Run
editaplot.cmd origin-smoke --output-dir <unique-smoke-directory>withlaunch_isolated: start and own a dedicated Origin instance, perform the live smoke and version handshake, then apply the template capability decision. This command is mandatory after planning and before formal rendering.attach_existingis an explicit advanced mode only; never reset, overwrite, or close a user-owned project, and detach instead of exiting. Report failures by technical stage and next step without speculation. Never use mouse automation or provide application patches or bypass instructions. The runtime must attempt to clean a partial EditaPlot-owned activation and may try one fresh isolated instance for a retryable startup code only if cleanup succeeds. Cleanup failure returnsorigin_activation_cleanup_failedand stops. It must then wait withsec -poc 30and confirmrun.isOCready()before reading the version or creating a project. Never loop, switch toApplicationSI, edit DCOM/registry permissions, or tell a beginner to run the whole workflow as administrator. After the automatic attempt is exhausted, request approval for at most one retry in the same active Windows-user context and use a fresh empty sibling smoke directory so the first report remains intact.origin_com_class_not_registeredandorigin_com_activation_access_deniedstop without automatic retry. Do not force-terminate a Python worker merely because it has run for a long time: it may own a hidden Origin instance. Preserve diagnostics and report the last progress stage before proposing any user-controlled cancellation. Keep the sandbox approval handoff distinct from an activation retry: the former happens before COM, while the latter is available only after the bounded activation/cleanup policy has run. When primary activation and cleanup both fail, expose onlyprimary_activation_code,primary_activation_stage,cleanup_error_code, andcleanup_error_stage. Never include a Windows account name, local path, raw HRESULT, or raw COM text in that structured diagnostic payload, and never retry because both pairs are present. Current EditaPlot workers serialize only their activeorigin-smoke/renderOrigin section within one signed-in Windows session; data inspection, recommendation, and planning may remain concurrent. Respectorigin_job_queueprogress, which is emitted immediately when waiting and then about every 30 seconds. Ordering is not guaranteed to be strict FIFO. The 30-minute limit applies only to the waiting job: it stops that waiter without killing or interrupting the active holder. Do not submit a duplicate while a queue message is visible. Manual scripts, older EditaPlot releases, and unrelated programs are outside this coordination boundary. - Only after that smoke passes, render an allowed template route with
editaplot.cmd render <plan>. Keep an EditaPlot-owned Origin instance open after success unless the user requests otherwise. By default, let the runtime create a direct sibling of the source file named<source_stem>_EditaPlot_YYYYMMDD_HHMMSS; keep all formal artifacts in that folder. Do not redirect ordinary runs to the repository, Skill directory, current working directory, or a shared global output folder. Use--output-dironly when the user explicitly requests another location.
…
[truncated for translation]