Skip to content

Releases

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 08:37
c4454f2

Added

  • External solvers: register your own calculation solvers over http. A declaration (name, description, parameters, an explicit returns, endpoint, extra headers, timeout) lives in ~/.dsh-electro-lab/external-solvers.jsonl and is registered into the solver registry at engine start, so solver_info and call work on it unchanged; changes apply after a host restart. Manage them with external_solver_add / external_solver_update / external_solver_delete, by editing the archive file, or from the panel's External solvers tab. The protocol is a POST-only typed envelope, {requestId, args} → {requestId, result} or {requestId, error}, with the same error codes as local solvers (EXTERNAL_ERROR / EXTERNAL_HTTP / EXTERNAL_TIMEOUT / EXTERNAL_RESPONSE).

Changed

  • A quantity leaf — in a declaration and in a built-in solver's signature — is spelled number or complex; the word quantity is gone from signatures, failure receipts and the declaration editor. complex takes a real as well (ℝ ⊂ ℂ) and number takes reals only, refusing a complex payload instead of narrowing it, so a signature can state which of the two it needs: solver_info reads complex(resistance) where it used to read quantity(resistance), and a call that would narrow fails at the argument. Values keep their own spelling — number for a real, complex for a {re, im} / {mag, ang} payload — so records, the wire format and peers are untouched.

Fixed

  • Quantities nested in an array or object argument are converted like top-level ones. Before, a prefix or a variant word inside such an argument reached the solver untouched: equivalent_impedance on [0.1 kilo-ohm, 50 ohm] returned 50.1 instead of 150, silently, and the trace's resolved field kept the prefix it claims to have applied. Every solver taking an array or object of quantities was affected — impedance networks, transfer-function coefficients, DFT sample arrays, transient time points.
  • A failed external call now keeps the reason fetch hides in its cause: fetch failed: connect ECONNREFUSED 127.0.0.1:8787 instead of fetch failed. The log line carries it too, where it used to record only the code.

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 16 Sep 10:14
66d135d

Breaking

  • PDF compilation now needs a LaTeX driver: latexmk (TeX Live) or MiKTeX's texify. A machine with only xelatex installed no longer produces a PDF — the setup dialog says so before the run, and the .tex is written either way.

Changed

  • PDF compilation is delegated to a LaTeX driver — latexmk, else MiKTeX's texify — which decides how often the engine runs; the host never runs an engine itself. The LaTeX setup dialog checks the toolchain once per host start: without a usable driver and xelatex the Generate button is disabled with the reason shown, missing macros are only a warning, and such a request is refused before any model call.
  • A run compiles with that driver and reports the result: the PDF path, or one failure line with the .tex kept. No fallback at run time.
  • The failure line quotes the compiler when it says something, and is otherwise a localized note pointing at the log, which holds the driver's full output.

Fixed

  • The pending-restart flag is cleared at every host start, whether or not external solvers are enabled; a state file that cannot be written is logged as restart flag not cleared instead of failing the mount.

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 16:09
5c120b1

Added

  • Logging: one text line per event, on stdout and in one file per host run (~/.dsh-electro-lab/logs/<YYYY-MM-DD_HH-mm-ss.SSS>.log). DSH_ELECTRO_LAB_LOG_LEVEL (default info) is the only setting; the newest 20 files up to 50 MB are kept.

Changed

  • Plugin state is one file, ~/.dsh-electro-lab/state.json (generation settings + external-declaration restart flag), written through one owner module that replaces the file atomically.

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 12:53
7edbd72

Breaking

  • Upgrading from 0.9.0: previously saved records (records.jsonl + open-record.json) are no longer read and are not migrated — the engine now stores traces as record-index.jsonl + records/<id>.jsonl, so old records will not appear in the panel.
  • Sessions and integrations built for the old tool catalog will break: the previous tool names are gone — drive the engine with set / get / call instead (see Changed below).

Changed

  • The tool catalog is replaced by a deterministic calculation engine (set / get / call primitives over typed values — number/complex/string/boolean/array/object with kind, variant and prefix — plus slot references that resolve at call time and are copied on set). One engine per process, one variable table per question; failures are receipts with no side effects.
  • Engine terminology everywhere: callables are solvers (38 kernel solvers: expression algebra, series, transfer functions, DSP/DFT, signal quality, circuits, electronics, RF & Smith chart, transmission lines, noise, filter design), the docs are the ElectroLab engine manual, and the record markers bracket each solve.
  • The records UI follows the trace: Records list (indexed, 5 s refresh, incomplete badge, select mode with multi-delete) and a per-record timeline detail (collapsible writes/reads/failures/call cards, JSON tree values with zebra rows, display-all toggle, fixed toolbar/title with the timeline scrolling beneath, right-hand article rail).
  • Record storage moved to append-only traces: record-index.jsonl + records/<id>.jsonl under ~/.dsh-electro-lab (or DSH_ELECTRO_LAB_HOME), replayed — never recomputed — after a host restart.

Added

  • Self-healing receipts: missing or mistyped arguments are listed together with the expected spec and a ready-to-send typed example; @name slot strings are rejected with a migration hint; solver_info introspects any solver before its first call.
  • Article generation (Markdown and LaTeX) through the host LLM: the detail rail's two buttons open per-format setup dialogs (article language, host-driven directory browser, file name — remembered), and a cancellable background job reports phase progress in a dialog that can minimize to a corner pill surviving navigation. LaTeX output is a sanitized model body inside a XeLaTeX shell (ctexart / fontspec + unicode-math + siunitx, pure Unicode); PDF compilation is LaTeX-only (xelatex, two passes). Articles are written as the model's own calculation — never mentioning ElectroLab, solvers or the generation process.

Removed

  • The old tool catalog's declaration machinery, solve-step orchestration and the five-section record UI.

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 18:13
b5bef41

Added

  • LaTeX article generation: the record detail action rail now has one Generate button per format (Markdown / LaTeX), each opening its own dedicated setup dialog — the format never switches inside a dialog, so layouts stay stable. LaTeX articles are proper technical documents: XeLaTeX shells (ctexart for zh-CN, article for en; both with unicode-math scalable math fonts — no cmex substitution warnings), the model writes only the body, and the host sanitizes it (forbidden preamble commands, brace/dollar balance, bare-% escaping) before wrapping.
  • Compile-to-PDF checkbox (LaTeX dialog): the host finds xelatex (PATH first, then known MiKTeX install locations), runs two passes with -interaction=nonstopmode -halt-on-error -synctex=1 (plus --enable-installer on Windows so MiKTeX never shows an interactive prompt that would hang the job) and reports both the .tex and the PDF paths on completion; Open file opens the PDF. No TeX on the machine degrades gracefully to .tex only.
  • Per-project output folders for LaTeX: <output>/<name>/ holds <name>.tex, the PDF and the compiler's .aux/.log files, keeping the chosen directory clean; Markdown output stays a flat single file.
  • Markdown→PDF compilation through pandoc + xelatex when pandoc is installed (the compile checkbox works for both formats); a missing converter reports exactly what to install.
  • The compile phase in the generation progress dialog ("Compiling PDF…" / 「编译 PDF 中…」), shared GenerationPhase wire codes between host and client, and a fixed-width label column + left-aligned labels in the setup dialogs.
  • All UI icons now come from Font Awesome free (SVG core, per-icon deep imports so the bundle stays small), including the official Markdown and TeX brand logos; the sidebar entry glyph is the FA wave-square path.

Changed

  • The single Generate action was replaced by two per-format buttons with their own dialogs; the detail action rail matches the global sidebar width (55px) with full-width buttons.

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 02 Sep 11:09
ca431e5

Added

  • Cross-platform Open file / Open directory: the launcher follows the host's OS — explorer.exe on Windows, open with -R reveal on macOS, xdg-open on Linux (reveal opens the containing folder, since xdg-open has no select). Previously non-Windows returned "not supported on this platform".
  • Spawn error detection: a missing opener binary (ENOENT, with a /usr/bin fallback for xdg-open) or a nonexistent target path is now reported to the client instead of silently succeeding.

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 01 Sep 17:44
5724931

Added

  • Article generation through the host LLM: the record detail page gains a Generate action; the setup dialog picks the output directory through a host-driven lazy directory browser (pure HTTP — works locally and remotely), the file name (default electro-lab-<record-id>.md) and the article language; the host writes a proper technical article (exact H1/author line, H2 section headings, formulas and calculations on their own lines, numbers only from tool outputs) to disk.
  • Explicit article language in the generation setup: follow the question (default), Simplified Chinese, or English — a forced language is pinned in both the system and the user prompt; the choice is remembered together with the output directory (state.json, migrated from the legacy plain-text file).
  • Progress dialog with stage text and an elapsed timer, cancel while running, and Open file (default application) / Open directory (Explorer reveal) actions on completion.
  • Minimizable generation progress: the dialog collapses into a corner status pill (running / done / error) that survives any navigation — the records list, the session chat, even closing the panel. Generation state lives in a module-level client store rendered in a body-level overlay root, so the job keeps polling and stays visible anywhere.
  • Fixed-size (380×190) progress dialog with both-axis centered content; generation errors display in the same dialog; the setup dialog shows inline validation for an empty output directory.
  • Unified dialog shell and button language across the records page: a right action rail starting at the title row, an inline SVG icon set (no emoji or system glyphs), and reusable ghost/primary button components.
  • Cross-panel center-column eviction: opening ElectroLab closes the SSH and task-board views and their controllers (and vice versa).

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 30 Aug 17:31
66ba28c

Added

  • Markdown export of a record (save-file picker with a download fallback): a localized H1, the id and timestamps as separate paragraphs, the five steps as unnumbered H2 sections, and each tool call as an H3 block with Parameters / Result H4 headings — value objects render in compact mathematical notation (100 Ω, 100 + 25j Ω, 1 ∠ 0 rad) and the outermost JSON braces are dropped.
  • Compact mathematical display for value objects in the records page: rect/polar inputs and serialized outputs ({re, im, kind, …}) render as one math line with the unit from kind and no expansion; numbers use standard notation (6 significant digits, scientific for extreme magnitudes).
  • Tool calls and results merged into one collapsible panel per call in the detail page (name → parameters → result); strings that embed JSON unwrap into trees.
  • Record cards show the record id beneath the title (11 px monospace).
  • Multi-select mode: a select button toggles selection of settled records — selected cards get the accent border plus a tint heavier than hover; a delete button batch-deletes the selection through a confirm dialog.
  • Visible scrollbars in both themes (label-colored thumbs with the padding-box rounding trick) now that the page-level blur root cause is gone.
  • Persona hard rules: value parameters must be value objects, never stringified JSON or bare numbers; the model must read the electro-lab-template skill before any tool call; record_analyse must precede the first calculation tool and hold only the conditions and the approach — every computed value belongs in record_answer.

Changed

  • The in-chat five-part template is dropped — records carry the structure, the chat answer stays natural; the template skill is now the record protocol.
  • Circuit network leaves are complex value objects ({form, re, im, kind} with kind resistance | inductance | capacitance); the bare-number {kind, value} leaf DSL is rejected by validation.
  • Records page polish: the Config tab and the header hint are gone (a single tab remains, styled like the dsh-ssh panel tabs); record cards are borderless ghosts that highlight only their border on hover; buttons and hover borders use solid label colors visible in both themes.
  • Exported blocks switch from json to text fences, since value objects are rendered as math lines rather than raw JSON.

Removed

  • The single-record delete button on cards — batch delete covers deletion.

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 29 Aug 14:33
0922c3d

Added

  • Dual-language UI: every panel and records-page string moves into zh/en dictionaries registered into the DSH locale service; components re-render when the user switches language.
  • Collapsible result panels in the detail page, matching the tool-call sections: one panel per result (titled by the matching call), outputs as a recursive collapsible JSON tree when parseable.
  • Record error messages translate with the UI; error codes and tool error identifiers stay raw.

Changed

  • The angle key is ang everywhere — input and output — since the phase angle is always radians (SI); the old angRad name is gone.
  • The preset persona and skills no longer force Simplified Chinese — the model follows the user language.

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 29 Aug 13:10
2824fe4

Added

  • Record detail as a tab-covering page: a back header with the record title, id and timestamps, a left table of contents that jumps to each section heading, and ONE shared scroll area where the five part headings stick to the top while scrolling (plain text only, no nested scrollbars).
  • Collapsible tool-call panels in the detail page: one panel per call (expanded by default), arguments rendered as a recursive collapsible JSON tree.

Changed

  • Detail texts use the session-chat font size; id/timestamps, the table of contents and the record-card title/timestamp use the navbar size. The back-to-record button matches the back-to-session button, with the title on its own line beneath; the panel back button now reads 返回会话.