{"id":16874,"plugin_id":"plugins_6a6a29948a7c8191ace6787d5ae074bb","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:13:50.802Z","digest":"e8d381444474b626eeed66638ae4f4109e6bed9bcce3e76a38ea9d9d07202092","against":null,"payload":{"name":"jinko-trial-viz","description":"Create, update, inspect, sanity-check, and retrieve Jinkō TrialVisualization project items for completed or running trials. Use this skill whenever the user wants a trial visualization, trial viz, time-series plot setup, scalar result plots, scatter plots, contribution analysis, survival analysis, data overlays, or to fetch the current visualization JSON. The SDK exposes a typed TrialVisualization API: creation helpers plus a per-section subservice for every plot type.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":269},{"relative_path":"evals/evals.json","size_in_bytes":3067},{"relative_path":"references/trial-viz-typed-api.md","size_in_bytes":3577},{"relative_path":"scripts/trial_viz.py","size_in_bytes":14579}],"skill_md_contents":"---\nname: jinko-trial-viz\ndescription: >-\n  Create, update, inspect, sanity-check, and retrieve Jinkō TrialVisualization project items for completed or running trials. Use this skill whenever the user wants a trial visualization, trial viz, time-series plot setup, scalar result plots, scatter plots, contribution analysis, survival analysis, data overlays, or to fetch the current visualization JSON. The SDK exposes a typed TrialVisualization API: creation helpers plus a per-section subservice for every plot type.\ncompatibility: >-\n  Check set-up with the `jinko-sdk-setup` skill. Creating or patching trial visualizations requires write access to the Jinkō project.\nmetadata:\n  author: Nova In Silico\n  requires_sdk: \">=1.8,<2.0\"\nlicense: MIT\n---\n\n# Jinkō Trial Visualization Workflows\n\nUse this skill for TrialVisualization project items: creating a visualization for a trial, configuring plot sections, retrieving the stored visualization payload, and running visualization sanity checks.\n\nKeep trial execution and result downloads in `jinko-trial`. Use this skill after a trial exists and the user wants the Jinkō visualization artifact or its plot configuration.\n\n> **PREREQUISITE:** This skill needs an initialized `jinko-sdk` connection and an\n> SDK satisfying its `metadata.requires_sdk` range. Run the `jinko-sdk-setup` skill\n> (`../jinko-sdk-setup/SKILL.md`) and proceed only once its check passes. If that\n> skill is not found, install it from `novainsilico/jinko-skills`.\n\n## Core Workflow\n\n1. Resolve the trial: `trial = client.get_trial(trial_sid)`.\n2. After explicit user confirmation, create an empty visualization bound to the trial: `viz = trial.create_empty_trial_visualization(folder=..., name=..., description=...)`.\n3. Decide the plot sections needed and configure each through its typed subservice:\n   - `viz.timeseries` for time-course outputs.\n   - `viz.scalars` for scalar result distributions and central-location plots.\n   - `viz.scatter_plots` for X-vs-X arms or X-vs-Y variables.\n   - `viz.survival_analysis` for time-to-event visualizations.\n   - `viz.contribution_analysis` for tornado-style sensitivity/contribution views.\n   - `viz.data_overlay` / `viz.patients_overlay` when observed data or patient-level data should appear.\n   - `viz.filters` / `viz.groups` for scoping and grouping.\n   - `viz.set_selected_arms(...)`, `viz.set_equate_baseline(...)`, `viz.set_time_unit(...)` for top-level options.\n4. Run and print `viz.sanity` after every create or update. Return failure and fix the visualization when it reports errors.\n5. Reconfigure a section at any time by calling its setter again (e.g. `viz.timeseries.set_selectors([...])`) — each call patches only that section.\n\n## SDK Surface\n\n- `trial.create_empty_trial_visualization(folder=, name=, description=, version=)` and `trial.create_trial_visualization_from_json(data, ...)` — creation, bound to a trial.\n- `client.list_trial_visualizations(...)`, `client.iter_trial_visualizations(...)`, `client.get_trial_visualization(sid)` — metadata lookup.\n- `viz.content(revision=...)` — full typed content; `viz.sanity` / `viz.sanity_at(revision, only=[...])` — diagnostics (`.errors()`, `.warnings()`, `.has_errors()`, `.for_field(...)`, `.by_field()`).\n- Section subservices, each with `get()`/`clear()` plus section-specific setters: `viz.timeseries.set_selectors(...)`/`add_selectors(...)`, `viz.scalars.set_selectors(...)`/`add_selectors(...)`, `viz.survival_analysis.set_selectors(...)`/`set_observation_window_from_start_until_end(...)`/`set_observation_window_from_start_until_time(...)`/`set_confidence_interval(...)`, `viz.contribution_analysis.set_selectors(...)`/`set_quantile(...)`/`set_input_baseline_only(...)`/`set_all_baseline(...)`/`set_custom_baseline(...)`, `viz.scatter_plots.add_x_vs_x_plot(...)`/`add_x_vs_y_plot(...)`/`set_config(...)`/`set_regression(...)`, `viz.data_overlay.add_table(...)`/`set_tables(...)`/`set_ranges_enabled(...)`, `viz.filters.add_numeric(...)`/`add_categorical(...)`/`add_patient_list(...)`, `viz.groups.set_group_by_arm(...)`/`add_scalar_*_grouping(...)`/`add_categorical_grouping(...)`.\n\nRead `references/trial-viz-typed-api.md` for full examples of each subservice.\n\n## Bundled Script\n\nUse the script for repeatable create, update, get, list, and sanity operations through the typed API.\n\n```bash\npython skills/jinko-trial-viz/scripts/trial_viz.py list --limit 20\npython skills/jinko-trial-viz/scripts/trial_viz.py create --trial-sid tr-... --name \"My trial viz\" --timeseries Drug --scalar AUC\npython skills/jinko-trial-viz/scripts/trial_viz.py create --trial-sid tr-... --name \"My trial viz\" --timeseries Drug --scalar AUC --apply\npython skills/jinko-trial-viz/scripts/trial_viz.py get --trial-viz-sid tv-... --output-file viz.content.json\npython skills/jinko-trial-viz/scripts/trial_viz.py update --trial-viz-sid tv-... --scatter-xvsy \"AUC,Cmax,control,treated\" --apply\npython skills/jinko-trial-viz/scripts/trial_viz.py sanity --trial-viz-sid tv-... --only timeseries --only scatterPlots\n```\n\nFor scatter, overlay, filter, or grouping configuration beyond the script's flags, use the typed subservices directly in Python (see `references/trial-viz-typed-api.md`).\n\n## Project Folder Hygiene\n\n- Prefer creating trial visualizations in the same folder as the trial or in a dedicated analysis folder.\n- Pass a folder id or exact folder name through the bundled script's `--folder`, or `folder=folder` on `create_empty_trial_visualization(...)` directly.\n- Treat an explicit folder that cannot be resolved as an error; never silently create the visualization in the project root.\n- Reuse existing trial visualizations when the user wants an additional plot on the same analysis; call the relevant section's setter instead of creating duplicates.\n\n## Reference Routing\n\n- Read `references/trial-viz-typed-api.md` for the typed subservice API.\n\n## Output Expectations\n\nWhen creating or modifying a visualization, report:\n\n- TrialVisualization SID, core item id, snapshot id, revision when available, and URL when available.\n- Plot sections created or patched.\n- Any sanity errors or warnings, preserving the backend field names so the next fix is direct.\n\nWhen retrieving a visualization, return or save the full JSON content if the user needs to inspect, diff, or reuse plot settings.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}