@unotest/viewer 0.9.0 → 0.10.0

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,70 @@
2
2
 
3
3
  All notable changes to `@unotest/viewer` are documented in this file.
4
4
 
5
+ ## [0.10.0] - 2026-08-06
6
+
7
+ ### Patch Changes
8
+
9
+ - 337a31c: Visual redesign on semantic design tokens. All colors now live in one
10
+ block in `styles/index.css` as semantic roles (`canvas` / `panel` /
11
+ `raised` / `overlay`, `fg`…`fg-4`, `edge`, single blue `accent`,
12
+ `pass` / `fail` / `warn`, `syn-*`), exposed to Tailwind via
13
+ `@theme inline`. Palette is a warm gray with
14
+ a deliberate brightness hierarchy: content (editor / canvas) is the
15
+ brightest surface, chrome (trees, bars, tabs) sits dimmer. Dark theme
16
+ flips by overriding the token variables under `.dark` — components no
17
+ longer carry `dark:` variants. No behavior changes.
18
+ - Updated dependencies [7ed750c]
19
+ - Updated dependencies [574841f]
20
+ - @unotest/dsl@0.10.0
21
+ - @unotest/protocol@0.10.0
22
+
23
+ ## [0.9.2] - 2026-06-16
24
+
25
+ ### Added
26
+
27
+ - **Snapshot export & import.** Export a finished run to a portable
28
+ `*.unotest.zip` from the server, and import a teammate's bundle into a Snapshots
29
+ tree that opens each as its own read-only run tab (`SnapshotRunView`). New
30
+ export / snapshots HTTP controllers, a snapshot store + bundle service, and the
31
+ client-side download / unzip plumbing back it.
32
+ - **Reworked Inspector panel** with refreshed `Button` / `Pill` / `Tooltip`
33
+ primitives.
34
+
35
+ ### Fixed
36
+
37
+ - **Run status during console / network capture.** The run view now reads the
38
+ manifest's `capture` flags, so a live or terminal run shows the correct console /
39
+ network status instead of mistaking "capture disabled" for "no output yet".
40
+ - **Variables now persist to the config.** Editing a variable saves it back to the
41
+ user config instead of being lost on reload.
42
+
43
+ ## [0.9.1] - 2026-06-14
44
+
45
+ ### Added
46
+
47
+ - **System console.** The System inspector tab is now a Chrome-style console:
48
+ the agent's MCP tool calls stream in (name + args, then duration + ok/err, with
49
+ expandable args/result JSON, pretty-printed and syntax-highlighted), and a `>`
50
+ input lets the human run a read-only locator `probe` against the live debug
51
+ page — same result as the agent's `check_locator`.
52
+ - **Run breakpoints in the editor gutter.** The live run's active breakpoints
53
+ (including a `run_test --breakpoints` override that isn't persisted in
54
+ `.debugger.json`) now paint glyph dots, so the gutter shows where the run pauses.
55
+ - **"Copy link" in the scenario tree context menu** — copies the node's
56
+ project-relative path (`unotest/e2e/<…>`) to the clipboard for easy sharing.
57
+ - **Theme switcher** and **target/doctor** stores for app-target setup.
58
+
59
+ ### Fixed
60
+
61
+ - **Probe result no longer hangs on "probing…".** The probe row is now an
62
+ `observer`, so the runner's reply repaints it (the parent only reads the
63
+ entry's timestamp/id, so a status flip wasn't triggering a re-render).
64
+ - **Aborted-mid-step runs stop pulsing.** A step still open when a run is aborted
65
+ was left in `running` state and its dot pulsed forever; the trace now demotes
66
+ it to `aborted`, and `aggregateStatus` treats `aborted` as terminal rather than
67
+ pending (which had made the parent re-pulse).
68
+
5
69
  ## [0.9.0] - 2026-06-11
6
70
 
7
71
  ### Added
@@ -1,19 +1,28 @@
1
1
  import { IRunnerAdapter, IDslLanguageService, IProcessLauncher } from '@unotest/protocol';
2
2
 
3
+ interface RunnerEntry {
4
+ /** Short target id derived from the runner package name —
5
+ * `web`/`mobile`/`unity`. Drives the UI switcher and per-target tree
6
+ * scoping. */
7
+ readonly target: string;
8
+ readonly adapter: IRunnerAdapter;
9
+ readonly dsl: IDslLanguageService;
10
+ }
11
+
3
12
  interface StartViewerOptions {
4
13
  /** Absolute path to the project root (the dir containing `unotest/`). */
5
14
  projectRoot: string;
6
- /** Runner adapter — provides bin path + argv + env for each
7
- * `RunRequest`. Imported and passed in by whoever launches the
8
- * viewer (`@unotest/web`'s viewer-launcher passes `webRunnerAdapter`,
9
- * `@unotest/mobile`'s would pass its own). The viewer NEVER imports
10
- * a concrete adapter — DIP boundary. */
11
- adapter: IRunnerAdapter;
12
- /** DSL language service — vocab + validation for the editor. Provided
13
- * by the launcher (`@unotest/web`'s `webDslLanguageService`); the
14
- * viewer never imports a concrete service. Same DIP boundary as
15
- * `adapter`. */
16
- dsl: IDslLanguageService;
15
+ /** Explicit runner entries from the launcher. Optional — when omitted
16
+ * the viewer relies purely on auto-detection. A launcher passes its own
17
+ * entry when it carries project-specific config (e.g. `@unotest/web`'s
18
+ * viewer-launcher builds a dsl service with per-project linter
19
+ * severities). Explicit entries win per target id; auto-detected
20
+ * runners (mobile/unity, if installed) are merged in. The viewer NEVER
21
+ * statically imports a concrete runner — DIP boundary. */
22
+ runners?: readonly RunnerEntry[];
23
+ /** Target id selected at boot (`web`/`mobile`/…). Defaults to the first
24
+ * available runner. */
25
+ activeTarget?: string;
17
26
  /** Port to bind. `0` = OS picks a free port. Default 0. */
18
27
  port?: number;
19
28
  /** Host to bind. Default 'localhost' (loopback only). */
@@ -35,4 +44,4 @@ interface ViewerHandle {
35
44
  * `await import('@unotest/viewer/server').startViewerServer({...})`. */
36
45
  declare function startViewerServer(opts: StartViewerOptions): Promise<ViewerHandle>;
37
46
 
38
- export { type StartViewerOptions, type ViewerHandle, startViewerServer };
47
+ export { type RunnerEntry, type StartViewerOptions, type ViewerHandle, startViewerServer };