Releases: ClarionLive/ClarionAssistant
Release list
Clarion Assistant 5.6.0
Clarion Assistant 5.6
Documentation search is the headline: PDF text extraction now works on every machine instead of only ones that happened to have a third-party tool installed, the extracted text is more accurate, and it is indexed so that a question is answered by the first result rather than the fifth query. Alongside that, a cycle of fixes across the diagnostics path, completion scoping, and the CA Editor's Monaco overlay — plus a build fix that restores Clarion 10 to the shipped set.
PDF documentation actually imports — and is correct (#167)
Importing a folder of PDFs reported "No documentation files found", naming pdf as supported in the very message saying nothing was there. The files were found. Text extraction shelled out to an external pdftotext.exe that CA never bundled and nothing it requires installs — not Git for Windows, contrary to what the code's own probe paths assumed. So PDF import worked only on machines where a developer happened to have put one, and silently produced nothing everywhere else.
Extraction is now in-process (PdfPig, Apache-2.0), so it works everywhere with no external dependency.
The bigger surprise was accuracy. Where the old path did run, it misaligned multi-column tables: in the Language Reference's date-picture table it paired @D6 (dd/mm/yyyy) with 10/1959 — which is @D14's value, and cannot be a dd/mm/yyyy rendering of any date — while dropping other cells entirely. Every row now reads correctly. Those tables are exactly what a Clarion developer searches the documentation for, so the old path was not merely unavailable; where it ran, it was indexing wrong answers.
Re-import your own PDFs. Anything already in a personal DocGraph was indexed through the old path and keeps the old text. The bundled documentation shipped with this release is already rebuilt.
Documentation search answers the question, not the index (#167)
Extraction being correct is not the same as the answer being findable. Asking which three categories ASCIIFileClass's non-virtual methods divide into took five queries; it now takes one, and the answer is the first result.
Four things were wrong at once. Nothing identified the owning class — every chunk in the ABC Library Reference was labelled with the book's name, and since every ABC class has an identically-named "Occasional Use" subsection, results from five different classes interleaved with nothing to tell them apart. Table-of-contents pages outranked real content: 28.7% of the index was dot-leader lines, which are almost pure keyword, so searching a class name returned page-number lists ahead of prose. Clarion keywords lifted out of example code became headings — 486 chunks titled ACCEPT, PROGRAM or RETURN, including the one holding the ASCIIFileClass text. And subsection labels were splitting sections apart, so the three categories landed in three different chunks and no single result could answer the question.
Chunks now carry their real class, contents pages rank below prose, headings read ASCIIFileClass > GetLastLineNo, and a section stays whole. Property references in the Language Reference (PROP:NumTabs and the rest) get their own headings too, so the definition outranks a passing mention in an example.
Verified against a fixed set of eight retrieval tests, kept with the code at docs/DocGraph-Chunking-Verification.md, including a guard on the date-picture table above so a future chunking change cannot quietly undo the extraction fix.
Index-noise suppression currently covers documentation whose contents pages put the title and page number on one line — SoftVelocity's and CapeSoft's. BoxSoft's manuals wrap them across two lines and are not yet recognised.
Spot which libraries need re-importing
The Documentation Graph panel (Settings → Data → Info) gains a Type column showing each library's source format, and every column header — Library, Type, Vendor, Chunks — is now a sort toggle. Click Type to group the PDFs together, which is the fastest way to see what wants a re-import after this release.
The installer remembers where your Clarion actually is (#142)
Setup derived each Clarion path fresh on every run, registry first, and discarded whatever you corrected in the wizard. If your Clarion isn't where SoftVelocity's installer registered it — a second copy, or one launched with /Configdir= against its own settings folder — you had to re-enter the path on every release, and forget once.
That failure is quiet: the addin lands in a tree you don't launch, the IDE keeps loading the old one, and the symptoms get reported against a build replaced weeks ago. Paths a run actually installs to are now remembered and offered next time, and validated on read so a tree that has since moved falls back to detection.
Diagnostics stop reporting false corruption (#168)
Clarion source is saved as Windows-1252/ANSI with no BOM, but four File.ReadAllText calls on the LSP text-sync path read it with no encoding argument — and .NET only auto-detects via BOM. Every single-byte high-bit character (a copyright symbol, say) silently became U+FFFD before the text reached the language server, which then correctly flagged the replacement character it had been handed. The result was waves of "this character will corrupt the file" warnings — dozens per file — on files that are perfectly valid on disk. All four sites now read through EncodingHelper.DetectFileEncoding, the same helper the diff viewer got in #94.
Squiggles stop vanishing (#170)
The squiggle overlay could render nothing at all for a file that the diagnostics pill correctly reported an error for moments later. Four defects, one symptom, all rooted in treating "no information yet" as "authoritatively zero": a premature empty LSP republish was trusted as final (the server publishes progressively, and a slower cross-file check can land in a later batch); a timed-out round-trip was folded into an empty marker list, which erased every existing squiggle and its gutter mark rather than merely failing to add one; the client's timeout sat below the host's own worst case, discarding slow-but-successful analyses; and the settle loop parked a thread-pool thread per request. Empty results now get a short settle window before being believed, a timeout leaves the rendered markers alone, the diagnostics call gets its own longer budget while completion and hover keep their short interactive one, and the wait is properly async.
Diagnostics window follows the CA Editor's theme — and appears at all (#169)
The LSP status bar and the diagnostics popup rendered in the chat pane's theme, which is a separate setting from the CA Editor's own. They now follow the active editor's theme, tracked per Monaco surface rather than read from a process-wide mirror that only ever recorded whichever page spoke last.
Three correctness bugs surfaced in the same code path and are fixed here too. The status bar pill never appeared when the IDE's own ClarionLsp addin was the active client — the visibility check asked the bundled LspClient, which in that configuration is never started, so the pill was hidden on every tick and the window it opens was unreachable. Both the liveness check and the cache read now go through SharedLspBridge, and the target file is resolved from the active editor instead of "the last file any LSP tool touched". The pill also stopped claiming a green OK for files nothing had ever been published about — unknown now renders as its own muted state rather than being flattened into "clean" during exactly the window when results are still arriving, and the status bar asks for diagnostics when it finds none cached instead of reporting "unknown" indefinitely at a cache nothing else was going to fill. And severity colours now survive a live dark⇆light switch instead of keeping the previous theme's palette until the rows next rebuilt.
Rounding it out: owner-drawn column headers and grid lines that actually follow the theme, a selection highlight that no longer overrides each row's severity colour, a dark-mode-aware native title bar, and no more hover flicker.
Completion stops leaking other procedures' locals (#172)
Follow-up to #159. The CodeGraph backfill in bare-prefix completion matched symbol names across the whole indexed solution with no scope awareness, so a variable declared private to some unrelated procedure in a different file was offered exactly like a genuine global — typing Include at the top of a PROGRAM file could surface an IncludeAddress local from elsewhere entirely. Symbols the indexer already tags as procedure-private are now filtered out of that merge. Locals in the procedure you're actually standing in are unaffected: those come from a live-buffer parse, not the database.
DO completes routines, and only routines
DO takes a ROUTINE label and nothing else, so it is now its own completion context answered from routines alone. Routine names are read from the live buffer, scoped to the enclosing procedure — which is a routine's real visibility in Clarion — so a routine you just typed and haven't saved completes too. Previously DO was answered from the general symbol set: typing DO ref offered methods from an unrelated Reflection class while missing the RefreshWindow routine a few lines up.
Ctrl+X in the CA Editor reaches the clipboard (#173)
Clarion-style Ctrl+X posted the cut text to the host before deleting it from the buffer — and the CA Editor never implemented its half of that contract, so Ctrl+X deleted the line without putting anything on the Windows clipboard. Both stubs left inert since the original overlay spike a...
Clarion Assistant 5.5.0
Clarion Assistant 5.5
5.5 turns two read-only surfaces into working ones: CA Compare becomes an editable diff with apply-change arrows, and the Data pad gains master/detail plus drag-and-drop of fields straight into an editor. Underneath, the CodeGraph indexer stops confusing same-named procedures — a fix that finds 59% more call edges and indexes about 40% faster. The editor picks up horizontal splits, outline sorting, and a long list of parity and reliability work.
Supported: Clarion 10, 11, 11.1, and 12 (32‑bit IDE). The installer lets you pick which version(s) to install.
Highlights
🔀 CA Compare — editable diffs
The diff viewer becomes a working surface rather than a read-only one. Both panes unlock for editing, and each hunk gets a single apply-change arrow that copies it to the other side; copy direction is chosen per-compare, not per-hunk. Each side saves independently through a write-back path that can't clobber an edit made on the other, Ctrl+S saves every changed side at once, and closing the tab — not just the Close button — prompts when either side is dirty.
🗂️ CA Explorer — Files tab restructure
The omnibox is rebuilt around a split-button Open plus a single search field, joined by a type dropdown, scope pills, and a header Trace with mouse-pickable targets, sticky headers, and an actionable trace log. Compare pairs are remembered — re-run, swap, or pin a pair straight from the Files tab. The environment banner names the active .red, and view state round-trips so the tab comes back the way you left it.
🧬 Data pad — master/detail and field drag-and-drop
Variable rows and the table tree both gain master/detail: type-icon slide-down panels for variables, and table/key/column/relation panels for the tree. Column detail now comes from the live dictionary in full, including auto-number and exclude chips on keys. Fields can be dragged from the pad into an editor — Monaco surfaces and legacy ICSharpCode editors both accept a point-drop, with visible drop feedback while you drag.
🗺️ CodeGraph — overloaded and shadowed names attribute correctly (#165)
"What does this procedure call?" used to collapse every same-named procedure onto one arbitrary winner — genuine parameter-type overloads, case variants (Setup alongside SetUp), and a local ROUTINE sharing its enclosing PROCEDURE's name all folded together. In one production module an entire procedure body was credited to a routine defined 50 lines below the code in question. Resolution is now keyed on each procedure's own definition line.
Measured across a 1,659-file production solution: no call sites lost, 19,774 gained (calls rows up 59%), and 6,240 procedures that never appeared as a caller at all now do. Removing four O(symbols) reverse-scans from the inner loop also cut full-index time by roughly 40%.
⚠️ Re-index your solutions after upgrading. This changes what the indexer writes, so every existing.codegraph.dbkeeps returning the old answers until it's rebuilt. Use Reindex (full) — Update is not enough, because the incremental path compares source timestamps and your code hasn't changed.
⬍ Horizontal split panes (#157)
Right-click the editor Split button for Vertical (side by side) or Horizontal (top / bottom). Changing orientation while already split repositions the panes in place — content, scroll, and cursor preserved. The choice persists across sessions.
🔤 Editor and completion
- Sort the Document Structure outline (#153) — orders symbols A–Z independently at each level, hierarchy intact.
- Field-equate completion on
?(#159/#160) — typing?triggers completion directly, and bare-prefix globals no longer outrank the equate you were reaching for. - Contract all / Expand all (#147) — a fold button whose icon shows which action the next click performs, read from the live folding model each time.
- Snippet parameter splitting (#154) —
${SELECTED:N}takes the Nth comma-separated part of the selection. - Hover placement and size (#164) — hovers render below the line, clear of the label column, one pixel under the editor font.
🧭 Zero-reload error navigation
Clicking a row in the IDE's Errors pane used to close and reopen the embeditor. Navigation is now dispatched into the live overlay, repositioning it in place — and unsaved overlay edits survive Clarion's own embed re-open.
⌨️ Native embeditor parity
Ctrl+Q mimics the native save-and-exit gesture (#137). The as-you-type aids are individually switchable (#138). OMIT/COMPILE blocks fold (#133). Indentation follows Options → Text Editor → Behavior instead of assuming 4 (#126).
🐞 Fixed
Editor & Embeditor
- Hover inside a string or comment showed an unrelated symbol (#166) — hovering
'Total'surfaced a local variable of the same name. The CodeGraph fallback now bails on strings and!comments the way the language server already did. - Hover and completion respect procedure scope (#152) — a local declared in the current buffer outranks a same-named symbol elsewhere; typing
PROwhere a localPROexists no longer commitsPROCEDURE. - Fold triangles on ordinary statement lines (#158) — structure keywords inside string literals opened phantom folds; one production 9,000-line file contained 64 such literals.
- Phantom "END has no matching structure" warnings (#156) — bare screen
GROUPcontrols and anonymousRECORD, PRE()structures no longer desync the balance checker. - More keyword-as-label misreads (#132/#136/#150) —
MENU,SHEET,TAB,OPTION,TOOLBARas plain variable names. - Duplicate entries in member completion (#151).
- Go-to-definition no longer jumps to itself (#143).
Reliability
- Output pane deafness (#140) — the IDE's Output pane couldn't be clicked into while a Monaco editor was active.
- Cold-open navigation lands on the right line (#162) — Errors-pane clicks, bookmarks, and Find Next targeting a not-yet-open file.
- Cross-instance WebView2 crashes (#141) — each Clarion process gets an isolated WebView2 profile.
- CA Editor watches its file for external read-only and content changes (#146), saves dirty tabs before a build (#134), and Reload now actually works (#135) — it was a no-op since day one.
- CA Find theme and first-Ctrl+F focus (#148, #139).
- Errors-pane caret mirroring (#144).
⚠️ Known issues
- Check the install folder if you have two installs of the same Clarion version (#142). Setup derives each Clarion root from the registry (
HKLM\SOFTWARE\SoftVelocity\Clarion<version>\root) on every run and does not remember a folder you picked by hand. If the registry points at one Clarion 11 install and you launch a different one, setup defaults to the registry's copy and installs where you don't run it. The symptom is confusing: the IDE loads an older addin and behaves like the bugs you just upgraded to fix. Verify the path on the install page — and if you correct it, expect to correct it again next time. If you're unsure which build you're running, the CA panel reports the version of the DLL Clarion actually loaded. A proper fix is queued for the next cycle.
🙏 Thanks
This cycle's community contributions:
Clarion Assistant 5.4
Clarion Assistant 5.4
5.4 is the biggest community cycle yet — find & replace grows into a full suite, the editor gains a Document Structure outline, signature help, and go-to-implementation, the CodeGraph parser gets a ~20-fix accuracy campaign driven by real production code, and dark-mode users get a long list of polish. Clarion 11.1 joins the supported lineup as a distinct install target.
Supported: Clarion 10, 11, 11.1, and 12 (32‑bit IDE). The installer lets you pick which version(s) to install.
Highlights
🔍 CA Find & Replace suite (#66)
Find & Replace grows from an editor widget into a first-class subsystem:
- CA Find pad — a dockable IDE pad (the default UI for Ctrl+F / Ctrl+H) that follows whichever CA editor tab is active.
- In-editor overlay — prefer the classic top-right find box? Pick it under Options → Clarion Assistant → Find / Replace.
- Find-All — a results column in the editor, and results can open in their own editor tab with surrounding context, click-through navigation, and filtering (#113, #114).
- One shared history — find/replace terms are shared across the pad, the overlay, the CA Editor, and the CA Embeditor, with a per-procedure recent group on top.
🧭 Document Structure outline
A fly-out outline for the current buffer: procedures, routines, classes and data in a tree with VS Code's own symbol icons, a Class ▸ Methods regrouping, filtering, and expand/collapse-all. Click a symbol to jump there — and Navigate Back returns you to where you were (#110).
✍️ Parameter hints, go-to-implementation, and real-scope embeds
- Signature help — parameter hints as you type a call, in both the CA Editor and CA Embeditor (#75).
- Ctrl+F12 go-to-implementation in both Monaco surfaces (#78).
- Embeds live in your app's real scope — the embed buffer is presented to the language server as a real MEMBER module of your PROGRAM, so completion, hover, and F12 inside an embed see your global data and prefixed structures (#74, #56).
:triggers completion like.does (#52).- Dictionary- and CodeGraph-aware completion in the CA Embeditor — file columns and solution symbols in the suggestion list (#99).
- No completion popups inside string literals or comments.
🧭 Navigation history that keeps its promises
Back/Forward (Alt+Left / Alt+Right) now reliably return you to:
- the position the editor opened at (the restored cursor),
- any symbol you jumped to from the Document Structure outline,
- go-to-definition origins and targets, host-driven jumps (debugger, breakpoint list, search results), and Data-pad routine go-tos.
Explicit jump targets are pinned — a small follow-up click no longer silently erases them from the history.
🌒 Dark mode & accessibility
- No more white flash opening the CA Embeditor in dark mode — the transition cover now matches your editor theme.
- Readable toolbar text on dark IDE chrome — Reload/Save and the title get a contrast-guarded color whatever theme combination you run.
- High Contrast sticks — Monaco's right-click "Toggle High Contrast Theme" is now persisted and restored across sessions, and read-only (generated) sections stay visibly shaded under both Monaco HC themes and Windows High Contrast (#129).
- CA Explorer tooltips are drawn in-page — fixes a stuck native tooltip that could linger on screen until the IDE closed (#108).
🗺️ CodeGraph accuracy campaign
A sustained, production-code-driven fix series for the solution indexer — INCLUDE discovery, PROCEDURE parameters as typed symbols, cross-file class-member call resolution, trailing-comment declarations, GROUP/QUEUE/CLASS capture in all their single-line/attribute/named-type spellings, calls through inherited members, method names that collide with Clarion built-ins, and more (#79–#93, #97, #112, #118). The repro solution behind many of these is now a vendored regression fixture, so the fixes stay fixed.
🏗️ Clarion 11.1, VS2026, portable installs (#91)
Clarion 11.1 is now a distinct build/deploy/install target (its binding DLLs are version-specific — it never shares 11's), the build supports VS2026 Build Tools, and installer paths are portable.
🩻 Diff & terminal
show_diffcan diff the live editor buffer directly, in-process — and detects file encoding instead of assuming UTF-8 (#94).- Optional current-line comparison panel in the Monaco diff viewer (#96).
- Paste a clipboard image into the terminal as an @-reference file (#95).
🐞 Fixed
Editor & Embeditor
- Tab-away/tab-back no longer reloads the overlay — unsaved embed edits survive switching tabs, and closing a file opened via F12 returns you to the embed exactly where you were (#76).
- Overlay-mode embed close now consistently releases the find broker and the LSP module shadow — stale hover/definition answers and dead search-results clicks after closing an embed are gone (#113, #115, #119).
open_fileline navigation lands on the right line, centered (#111).- Find accelerators no longer leak to the hidden native editor; initial-open focus lands in the editor.
Reliability
- WebView2 crash cleanup — a crashed browser process tree is reaped via a kill-on-close job (#109, #120).
- Bundled language server re-pinned to Clarion-Extension v1.0.0 (#77) — headline: per-configuration redirection sections are no longer dropped (previously ~99% of a redirection-heavy solution's files could fail to resolve), plus a major startup/responsiveness overhaul and persisted indexes.
- The bundled server re-roots when you switch solutions (#106).
- Diff viewer tabs are view-only — Save can't crash them (#103).
- MCP tools:
select_rangeno longer throws on ambiguous matches (#83);get_open_files/is_modifiedwork against non-public editor members (#82).
🙏 Thanks
This cycle's community contributions:
- Mark Sarson — signature help (#75), go-to-implementation (#78), real-scope embeds (#74), Find-All results tab (#114), LSP re-root (#107), overlay shadow revert (#117), WebView2 crash reaping (#120) — plus the Clarion-Extension v1.0.0 release the bundled server now rides on.
- geircodes — much of the CodeGraph accuracy campaign (fixes #92, #93, #112, #118 and the repro reports behind #79–#90), the vendored regression fixture, diff/terminal features (#94, #95, #96, #100, #101, #103, #111).
- Andrew Santarelli — dictionary/CodeGraph-aware completion (#99).
- OkayPlunk — Clarion 11.1 target, VS2026 Build Tools, portable installer paths (#91).
- **Bo...
Clarion Assistant 5.3
Clarion Assistant 5.3
5.3 is a refinement release — it sharpens the Monaco editor, Smart Formatter, and completion that landed in 5.1/5.2, adds editor personalization and one-click surface toggles, and folds in a round of community fixes.
Supported: Clarion 10, 11, and 12 (32‑bit IDE). The installer lets you pick which version(s) to install.
Highlights
🎚️ Editor & Embeditor toggles on the IDE toolbar
Two new buttons on the main Clarion IDE toolbar flip the CA Editor and CA Embeditor overlays on or off without opening Settings — handy when you want to drop back to the native editor for a moment (#58).
🎨 Editor personalization
The gear panel gains two long‑requested settings:
- Font family — pick the typeface for the Monaco source editor and CA Embeditor (#60).
- Occurrence highlighting — toggle the highlight of other instances of the symbol under the cursor (#62).
🧠 Richer completion
Bare‑prefix completion now also surfaces module‑level data (variables declared outside any procedure) and module‑local procedures (declared in the module MAP or as in‑buffer sibling implementations), each with type/signature detail — on top of the globals, classes, and procedure locals added in 5.1.
🐞 Fixed
Smart Formatter & editor
- Built‑in functions in call position are cased correctly by Ctrl+I and as you type (#61).
- Keyword‑named data labels no longer open a phantom structure during formatting.
- MAP formatting and keyword‑first completion behave correctly.
- Case commands with no selection now act on the character at the cursor (#63).
- Find matches track live buffer edits — F3 and replace land at the correct positions after you've edited the buffer (#65).
- Commit‑on‑insert‑key works for keyword completions, with
{added as a commit key. - CA Embeditor overlay navigates to the native caret position when it attaches (#71).
- Legacy 'CA Embeditor' button removed from the native embeditor toolbar.
Reliability
- MCP HTTP listener no longer deadlocks when the IDE UI thread is busy (#57).
- Windows PowerShell 5.1 can parse the bundled scripts (UTF‑8 BOM), and the indexer's SQLite reference is fixed (#59).
- Force‑push hook regex no longer matches flags in chained commands (#67).
🙏 Thanks
Community contributions in this release from Andrew Santarelli (#71), Mark Sarson (#68), bdinko (#59), and Aarhusdk (#57).
📦 Install
- Download
ClarionAssistant-5.3-Setup.exebelow (code‑signed). - Close the Clarion IDE.
- Run the installer and pick your Clarion version(s) (10 / 11 / 12).
- Start Clarion — the Clarion Assistant pane docks automatically (Tools → Clarion Assistant, or Ctrl+Alt+C).
Upgrading from 5.1/5.2 installs cleanly over the top.
Clarion Assistant is an AI‑powered coding assistant embedded in the Clarion IDE. See the bundled User Guide (Help) for the full walkthrough.
Clarion Assistant 5.2
Clarion Assistant 5.2 — download the signed installer below (ClarionAssistant-5.2-Setup.exe) and run it; pick the Clarion version(s) to install. Supports Clarion 10, 11, and 12.
✨ Highlights
Native "Embeditor Source" auto-overlay
The Monaco embeditor now rides on Clarion's own "Embeditor Source" command — open an embed the normal way and the modern editor overlays it automatically. The old right-click menu-injection layer (RightClickHookService) is gone, so it's simpler and more robust. Embed navigation and the Source/Design switch ride along for free.
Code Snippets in the editor
A full snippet workflow lands in the Monaco editor:
- Ctrl+J snippet picker — theme-aware, with a live expansion preview so you see the resulting code (tab-stops visible) before you insert.
- Snippets in the completion list — type a trigger and press Enter to expand (Clarion Ctrl+J parity).
- "trigger + space" expansion — Clarion-style, independent of completion commit.
- Gear-panel management — edit snippets, examples/help, tab-stop mirroring, case-insensitive extension scoping.
Pure upstream language server (v0.9.8)
The bundled LSP is now stock upstream msarson/Clarion-Extension v0.9.8 — CodeGraph intelligence moved fully to the C# side, so there's no patched server to drift out of date. A new tag-anchored sync mechanism keeps future upstream releases a clean one-step re-pin (#40).
🐛 Fixes
- Read-only files are now honored in the Monaco source editor — no more silent edit-then-fail on save (#50, thanks @geircodes).
- CodeGraph correctly resolves
variable.Method()callers and attributes class-method calls (#54). - Monaco save no longer writes a UTF-8 BOM, which Clarion rejected (#34).
- Snippet pipeline hardening — mirror correctness, read-only guard, save flush, and a dismissable Ctrl+J picker (#49 follow-up).
🔧 Build / packaging
- Installer reconciled to ship the pure v0.9.8 LSP and the vendored indexer (retired the stale external sources).
- Added a per-config freshness gate so a release can't silently package a stale addin build.
Thanks to @msarson for the ongoing LSP collaboration and to everyone who filed issues.
Clarion Assistant 5.1
Clarion Assistant 5.1
The first stable (non‑preview) release. 5.1 makes the modern Monaco editor the default for Clarion source, adds a one‑key Smart Formatter, upgrades the data pad into CA Explorer, brings richer in‑editor language intelligence, and fixes an editor‑load error that affected clean installs on Clarion 12.
Supported: Clarion 10, 11, and 12 (32‑bit IDE). The installer lets you pick which version(s) to install.
Highlights
🖊️ Monaco is now the default Clarion source editor
Open a .clw or .inc and it lands in a fast Monaco/WebView2 editor with Clarion syntax highlighting, code folding, F12 / Ctrl+Click go‑to‑definition, inline diagnostics, and completion — while keeping the same save and navigation behavior as the native editor. Prefer the classic editor? Turn it off (or scope it to specific extensions) under Options → Clarion Assistant → Editor Surfaces.
⌨️ Smart Formatter (Ctrl+I)
Press Ctrl+I in the Monaco source editor or CA Embeditor to reformat Clarion code — consistent indentation for IF/LOOP/CASE/ACCEPT structures, aligned data declarations, and normalized statements. Behavior is configurable from its settings panel.
🧭 CA Explorer (formerly CA Data Pad)
The docked data pad is now CA Explorer and does more than show the active procedure's Local / Module / Global data, tables, keys, columns, and relations:
- Drag a field to the editor or designer — drop a column or variable onto the Monaco editor or the native Window designer to create a bound control.
- Native‑style variable copy/paste for quick reuse.
- Cheat Sheet tab — a built‑in reference of Monaco editor shortcuts.
🧠 Richer language intelligence in the editor
The Monaco surfaces now surface live diagnostics (squiggles), completion (PROP: / EVENT: and member‑access like oInstance.Method), and F12 / Ctrl+Click go‑to‑definition directly — not just via chat.
🐞 Fixed
- "Cannot create object: MonacoClarionEditorDisplayBinding" on opening a
.clw— clean installs on Clarion 12 builds other than the one the addin was compiled against threw this error and fell back to the native editor. Root cause was a strong‑name version lock on a SoftVelocity editor assembly (CommonSources.dll); the editor now loads against any Clarion 12 build. - Installer packaging — the Monaco editor assets (Clarion language + formatter scripts, source/diff pages) and the LSP contracts assembly are now shipped, so the editor renders correctly on a fresh install.
📦 Install
- Download
ClarionAssistant-5.1-Setup.exebelow (code‑signed). - Close the Clarion IDE.
- Run the installer and pick your Clarion version(s) (10 / 11 / 12).
- Start Clarion — the Clarion Assistant pane docks automatically (Tools → Clarion Assistant, or Ctrl+Alt+C).
Upgrading from the 5.0 Preview installs cleanly over the top.
Clarion Assistant is an AI‑powered coding assistant embedded in the Clarion IDE. See the bundled User Guide (Help) for the full walkthrough.
Clarion Assistant v5.0 (Preview)
Preview edition. v5.0 is an early look for developers to test — the headline features below work but are not yet feature-complete. Feedback welcome.
The headline of v5.0 is the CA Embeditor and its companion CA Data Pad.
CA Embeditor — right-click a procedure to open it instantly
Right-click any procedure in the Clarion application tree and choose Open in CA Embeditor — it opens directly in a fast Monaco/WebView2 editor, no Tools-menu or picker round-trip.
- One-click from the app tree — the procedure you click is the one that opens.
- Multiple procedures as tabs — each opens in its own CA Embeditor tab.
- Classic entry points still work — Tools → CA Embeditor (open procedures)… and the CA Embeditor toolbar button.
CA Data Pad
A docked pad (Tools → CA Data Pad or Ctrl+Alt+D) that follows the active CA Embeditor tab and shows the data behind the procedure you're editing:
- Local, Module & Global Data
- Declared Tables & Other Files — with their Keys, Columns, and Relations
Renamed
Modern Embeditor / Modern Data → CA Embeditor / CA Data.
Also in this build
- LSP redirection handshake fix (PR #37, @msarson) — the language server now resolves the project
.redcorrectly and loads projects (previously loaded zero), fixing cross-file LSP features.
Install: download ClarionAssistant-5.0-Preview-Setup.exe below — code-signed (EV, Kennewick Computer Company). Supports Clarion 10, 11, and 12; pick which versions to install. Close the Clarion IDE before running.
Clarion Assistant v4.6.2
LSP CodeGraph fix + Settings polish + /clarion knowledge updates
v4.6.2 fixes the LSP CodeGraphBridge self-disable on end-user installs and folds in the v4.6.1 Settings UI work that hadn't shipped as a public release.
LSP CodeGraph fix (issue #33)
better-sqlite3 was missing from the bundled lsp-server/node_modules in both the installer and the from-source deploy path. The LSP server's CodeGraphBridge would log [CodeGraphBridge] ❌ ERROR: better-sqlite3 not available — CodeGraph features disabled at boot and fall back to the disabled state. Core LSP features (definition / references / hover / diagnostics / rename) still worked; only the in-LSP CodeGraph integration was off.
- The installer now ships
better-sqlite3plus its two runtime deps (bindings,file-uri-to-path) for each Clarion-version install (C10/C11/C12). ClarionAssistant/deploy.ps1$LspNodeModuleswas extended to match, so contributor builds also pick them up.- Cold-verified against the deployed install:
require('better-sqlite3')resolves, the prebuilt native binding loads under Node v24.13.0 (no ABI mismatch), DB roundtrip works (SQLite 3.51.3).
Reported by Dinko while smoke-testing a from-source build on a clean machine.
Settings UI polish (rolled in from v4.6.1)
- Persist Version dropdown across IDE reload (#32) — the Clarion version selector on the Launch tab now remembers your last selection between IDE sessions.
- Align Plan label / dropdown with Backend on Launch tab (#31) — visual alignment fix.
/clarion knowledge additions
The bundled /clarion and /stringtheory skills picked up three new entries from community-reported gotchas:
#ATcannot be nested inside#IFin template authoring — parser rejects with#ENDIF expected. The fix is to invert the nesting (#IFgoes inside the#ATbody). (issue #25)OMITTED()only works in the scope where the parameter is declared — silently returns 1 (TRUE = omitted) from inside nested ABC class methods even when the parameter was passed. Workaround: stash params at procedure top-level via#AT(%BeforeWindowManagerRun). (issue #25)StringTheory.MakeGuid()is destructive — it overwrites the receiver's value as a side effect, destroying any payload (JSON, PDF binary, etc.) the instance was holding. Detection heuristic + dedicated-GUID-instance fix pattern documented in thestringtheoryskill. (issue #23)
Installer
ClarionAssistant-4.6.2-Setup.exe is EV-signed (Kennewick Computer Company / Sectigo) with an RFC 3161 timestamp countersignature, so SmartScreen reputation transfers immediately.
Clarion Assistant v4.6.0
Custom MCP servers in the IDE pane (issue #26) + Codex config self-heal
v4.6 lets you expose your own MCP servers to the in-IDE Claude tabs without modifying the addin, and fixes a duplicate-key crash that could prevent the Codex backend from launching.
Custom MCP Servers in the IDE Pane
Plug your own MCP servers into the in-IDE Claude tabs alongside the three built-ins (clarion-assistant, project-hub, browser).
- Sidecar file —
%APPDATA%\ClarionAssistant\mcp-extra.jsonis a standardmcpServersJSON object. Entries are merged into the generatedmcp-config.jsoneach time a Claude tab launches, so edits take effect on the next tab spawn without restarting the IDE. - Settings → MCP Server page has a new "Custom MCP Servers in the IDE Pane" section with an Open button that creates the file from a commented template if missing, then shell-opens it. Always visible regardless of the External MCP Access toggle.
- Auto-approve —
mcp__<server>__*is appended to--allowedToolsfor every sidecar entry, so user tools don't trigger permission prompts inside the IDE pane. - Reserved-key protection — an
mcp-extra.jsonentry that collides with a built-in key (clarion-assistant,project-hub,browser) is silently skipped; the addin's real entry always wins. - Malformed-JSON resilience — a corrupted sidecar (trailing comma, stray brace, etc.) is logged and ignored. The tab still launches with the three built-ins.
- Empty-state safe — if the file doesn't exist, behavior is identical to v4.5: just the three built-ins, no errors.
Smoke-tested end-to-end with @modelcontextprotocol/server-everything against all four corners: happy path, collision, malformed JSON, missing file.
Codex config self-heal
Fixes a corruption mode where launching a Codex tab would error with duplicate key [mcp_servers.clarion-assistant] and refuse to start.
Codex CLI's TOML serializer silently drops trailing comments when it appends state tables (e.g. [tui.model_availability_nux]), which removed the addin's <<< end >>> marker comment. The next Clarion.Assistant launch then saw a begin marker with no matching end and appended a second managed block, producing duplicate [mcp_servers.clarion-assistant] tables.
- Self-healing rewrite — on every Codex launch CA now strips all CA markers (paired or orphan) and all
[mcp_servers.clarion-assistant.*]sections anywhere in the file, lifts foreign tables out of any broken managed region, and appends one fresh canonical block. Even a config that's already broken (two begin markers, one end, duplicate tables) is cleaned up automatically on the next launch. - No user action required — just relaunch a Codex tab and the file is repaired in place.
User Guide
The bundled User Guide is bumped to v1.2 and now documents the mcp-extra.json sidecar and the Codex CLI backend (added in v4.4, hardened in v4.6). Open from Help → User Guide or docs\ClarionAssistant-Guide.html.
Installer
ClarionAssistant-4.6.0-Setup.exe is EV-signed (Kennewick Computer Company / Sectigo) with an RFC 3161 timestamp countersignature, so SmartScreen reputation transfers immediately.
Closes #26.
Clarion Assistant v4.5.0
External MCP client access (issue #24)
Lets external tools (Claude Desktop, Cline, custom mcp-remote setups) authenticate against ClarionAssistant's local MCP server using a stable user-managed token instead of the per-session token that rotates each IDE start.
What's new
- New "MCP Server" Settings page with a "Most users can skip this page" intro callout — the toggle is opt-in for users who want CA's IDE tools surfaced in tools outside the IDE.
- Allow external MCP clients toggle persists across IDE restarts. Off by default.
- Generate button mints a 64-character hex bearer token, stored in
settings.txt. Idempotent: regenerating invalidates any external configs already using the previous token. - Live endpoint URL display shows
http://localhost:<port>/mcp(port is dynamically chosen at startup). - Pre-filled mcp-remote config snippet with Copy config button — ready to paste into the external tool's MCP config.
- Add to Claude Desktop button — one-click integration: writes the
clarion-assistantentry directly into%APPDATA%\Claude\claude_desktop_config.json, backs up the original to.clarionassistant.bak, atomic write. Idempotent (re-click after rotating token to push the update). - Dual-token authentication — the per-session token still authenticates in-IDE Claude Code / Copilot / Codex tabs; the static external token is checked additionally when external access is enabled. Both compared in constant time. Settings re-read on every request so toggle/rotation takes effect immediately.
Security posture
- Server still binds to loopback only — Windows networking refuses connections from any non-loopback IP. The token is unusable without the ability to send a packet to your machine.
- Host and Origin header validation continues to defend against DNS rebinding and browser drive-bys.
- Token lives in plain text in
settings.txtand (if you use the Add to Claude Desktop button)claude_desktop_config.json. Treat both files as you would any other secrets-bearing config.
SettingsService cross-process hardening (collateral)
Strengthening the settings store to support the External MCP feature surfaced multiple latent issues that affect every settings save:
- Static lock + named mutex (
Local\ClarionAssistant.SettingsService.v1) serializes settings writes across all SettingsService instances within a process AND across multiple ClarionAssistant processes (the addin supports multi-IDE). - Reload-before-write merge — rotating Mcp.ExternalToken in one place no longer gets reverted when an unrelated control later saves an unrelated setting.
- Atomic file replace via temp-file +
File.Replace(ReplaceFileW on NTFS) so concurrent readers always see either the old file or the new file, never a half-written one. - Reload preserves in-memory state when the file is missing or the read fails — transient delete-then-rename from sync tools / antivirus no longer wipes settings on the next save.
SettingsLockedExceptionis thrown when another CA process holds the cross-process mutex past the 5s budget; the settings dialog catches it and surfaces an actionable message instead of silently degrading.
Setup
Same mcp-remote install requirement as the Codex backend (v4.4.0):
npm install -g mcp-remote@0.1.38
Then: Settings → MCP Server → Allow external MCP clients → Generate → Add to Claude Desktop. Restart Claude Desktop.
Closes #24.