What's New in FWH 26.06
This page summarizes the changes and additions in FiveWin for Harbour/xHarbour version 26.06 (June 2026), relative to the previous release 26.05 (May 2026).
New Sample: XBrowse with Tree & Search
A new sample samples\xbrowses\xbrwtre.prg demonstrates XBrowse with
Tree mode and incremental search. Features:
- Switches between normal XBrowse and Tree view (grouped by a selected field).
- Combo box to select the search/group field (First, Last, Street, City, State).
- Search works in both normal and tree modes via
XbrTreeSeek(). - Tree nodes are expandable/collapsible with visual grouping.
New Sample: Resource Dialog with Proportional Zoom
A new sample samples\dialog\resdlg.prg demonstrates resource-based dialogs
with proportional zoom. When the dialog is resized, all controls (labels, edits, buttons)
resize proportionally, including positions, widths, heights and font sizes.
- DPI-aware scaling — initial dialog size adapts to the system DPI
using
GetDeviceCaps(LOGPIXELSX). - Uniform zoom — scale factors
nSX = nW / 300andnSY = nH / 180are applied to all control properties. - Font scaling — font size is recreated at scaled size via
SetFont()on every resize. - RC resource — dialog template defined in
resdlg.rcwith#definedirectives for control IDs.
XBrowse Bar GET Action Buttons — Fix
The action button shown on header-bar GETs (oBrw:lGetBar with
:cBarGetBmp and :bBarGetAction) appeared tiny at the
GET's top-left corner instead of square, full GET height and flush on the
right side. Fixed in source\classes\xbrowse.prg.
- Cause.
TBtnBmp:Display()callsCalcSize()on every paint, which restored the button to its bitmap-derived design size (~10×10, top-left) stored inaSizeRect, silently undoing any prior placement. Only a stray late repaint occasionally left it correct. - Fix.
TXBrwColumn:CreateBarGet()now builds the GET without a button and creates the button once afterwards, then clearsoBtn:aSizeRectto disable the paint-time auto-resize so the assigned geometry sticks. A new methodTXBrwColumn:PlaceBarGetBtn()sizes the button square (nGetBarHeight - 4), flush right, and is called fromCheckBarGet()on every check so it also survives scrolling and column-width changes. - Note.
:cBarGetBmpmust reference a bitmap that actually loads (a real linked resource name or a.bmpfile path). If it fails to load FiveWin falls back to the nativeTButtonBmp, which does not render reliably. Thexbgetbtnsample now points at..\..\..\bitmaps\16back.bmp.
TSmartButton — Fixes
The TSmartButton control (source\classes\smartbtn.prg) had two
action-handling bugs, both fixed:
- Enabled buttons did not fire their ACTION. The
LButtonDown,LButtonUpandKeyCharmethods had an inverted disabled guard (IF ! ::lDisabled RETURN 0), so the capture/click path was skipped on active buttons. Corrected toIF ::lDisabled. - Disabled buttons still executed their ACTION.
New()defaultedbWhen := {||.t.}. Because the owner'sAEvalWhen()re-enables any control with a non-nilbWhenon every event (calling::Enable(), which clears::lDisabled), a button disabled via:lDisabled/:Disable()was silently re-activated. ThebWhendefault was removed so the disabled state persists. - Removed a leftover debug
MsgInfo()popup fromSetImage(). - Sample
samples\ui\testsmart.prgshows the four shapes (rectangular, rounded, pill, circle) across normal / hover / pressed / disabled states.
Related build fix: vitem.prg was missing
#define BDR_RAISEDOUTER (0x0001) and BDR_SUNKENOUTER (0x0002);
the EDGE_* macros referenced these undefined symbols, raising W0001
ambiguous-reference warnings that aborted the FiveH.lib build under
-es1.
Agent Class — Major Improvements
The Agent class (source\classes\agent.prg) received substantial upgrades
since its introduction in 26.05:
- Streaming SSE —
Step()now sends"stream": truewithstream_options.include_usagefor real-time token metrics. Response is parsed from SSE data chunks viaAG_SseParse(). - Tool_Shell() — fully implemented: executes via
cmd.exe(Windows) or/bin/sh(Unix), captures stdout+stderr, truncates at 30 KB, reports exit code. Previously a stub. - Tool_Python() — fully implemented: finds python3/python/py interpreter, writes temp .py file, executes, captures output. Previously delegated to the stub Tool_Shell().
- Tool_WebSearch() — implemented: curl to DuckDuckGo HTML, extracts
result snippets via
AG_ExtractDdgResults(). Previously a stub. - Tool_WebFetch() — implemented: curl to URL, strips HTML tags via
AG_StripHtml(), truncates at 40 KB. Previously a stub. - ExecTool() error handling —
BEGIN SEQUENCE / RECOVERwraps every tool call so a failing tool doesn't crash the agent loop. - Run() interrupt/inject —
bInterruptcodeblock checked before each step and each tool call;bInjectcodeblock injects user messages mid-run. Enables external cancellation and user interjections. - BuildToolsArray() — now includes description and parameters schema for every built-in tool (previously only had name).
- ToggleSkill() — bug fixed: ASort filter didn't remove items; now
uses
hb_ADel()with.T.for in-place deletion. - ExecUserTool() — fixed:
sys.argvconstruction now properly tokenizes space-separated args into a Python list. - SendToLLM() — synchronized with Step(): streaming + SSE parse.
New helper functions: AG_SseParse(), AG_UrlEncode(),
AG_ExtractDdgResults(), AG_StripHtml(),
AG_ToolDesc(), AG_ToolParams().
AgenticAI — GUI Desktop Sample
A full-featured desktop GUI for the ccharbour agentic engine, ported from the
Agents Web version to a native
FiveWin app using an embedded Edge WebView2 (TWebView2):
- Live reasoning ("thinking mode") —
reasoning_deltaevents stream into a purple glass box while the model thinks (e.g./model deepseek-reasoner). - Status chip — header shows elapsed time, session token flow (up/down) and tok/s, updated 5 times per second.
- Live markdown — assistant bubbles render markdown WHILE streaming (throttled re-parse via marked.js), not only at turn end.
- /goal /plan /run — action-plan system.
/planasks the model for 3-6 JSON steps and shows them as an editable "Action Plan" card (cycle each step's state, edit titles in place, delete/add steps);/runexecutes the plan one step per agent turn. - /btw — interject "what are you doing?" while the agent works;
delivered between agent actions without interrupting the run. Uses the new
CC_AgentRunhOpts["inject"]hook. - /cost — session metrics card with cache-aware DeepSeek pricing
(
prompt_cache_hit_tokensbilled at 98% off). - /compact + context-window monitor — past 85% of the 128k window
a "Critical Context Window" card offers Compress / Clear;
/compactfolds the middle of the history into one summary message. - /init + AGENTS.md — the agent writes the project rules file; AGENTS.md (fallback CLAUDE.md) is injected into the system prompt on every turn.
- New cards — aborted-execution (Stop), step-limit reached with a "Continue" button, /help as a grid of clickable command buttons.
- Permit/reject — per-action card for mutating tools (shell/write/edit) when "Auto-approve" is off; the agent turn blocks until you decide.
- ask_user — multiple-choice card wired to the webview.
- Diff viewer — "Code generated" bar with a "View Changes (Diff)" toggle showing red/green lines.
- UX — Up/Down prompt history, Esc stops, Ctrl+K clears, prompt
stays enabled while running so /btw can be typed. In-app
/keyto set the LLM key at runtime.
Transport is in-process libcurl (hbcurl), the same path as TOpenAI:SendStream,
plugged into ccharbour via hOpts["transport"].
Sample: samples\AgenticAI\ (multi-module build with agenticai.hbp + build.bat).
ccharbour Engine & Console
- CC_AgentRun — accepts an optional
hOpts["inject"]codeblock, polled at the start of every iteration; when it returns a non-empty string it is appended as a user message before the next model request (mid-run interjection that does not interrupt the loop). - Console cards (cc.exe) — responses now render as GUI-style "cards": background-tinted rows like the AgenticAI bubbles. Replies on slate, live reasoning on a purple glass box, errors on dark red, /cost on an emerald metrics card with cache-aware DeepSeek pricing. Plain output is unchanged when color is off.
New Classes
TGit — Git Integration
source\classes\tgit.prg + source\winapi\git.c wrap
git.exe via CreateProcess with anonymous pipe capture
(no hb_processRun, no external libs). Requires only git in PATH.
C backend (source/winapi/git.c):
| Function | Signature |
|---|---|
GIT_EXEC() | (cCmd) → cStdout |
GIT_RUN() | (cCmd, @cOut, @cErr) → nExit |
GIT_EXITCODE() | () → nLastExitCode |
GIT_STDERR() | () → cLastStderr |
GIT_HASGIT() | () → lAvailable |
TGit class methods:
| Category | Methods |
|---|---|
| Repository | New(), Init(), Clone(), IsRepo(), RootDir(), HasGit() |
| Status | Status(), IsClean() |
| Staging | Add(), AddAll(), Reset(), Rm() |
| Commit | Commit() |
| Remote | RemoteList(), RemoteAdd(), RemoteRemove(), RemoteGetURL(), RemoteSetURL() |
| Push/Pull | Push(), Pull(), Fetch() |
| Branch | BranchList(), BranchCreate(), BranchDelete(), BranchRename(), BranchSwitch(), CurrentBranch(), Merge(), Rebase() |
| History | Log(), LogRaw() |
| Diff | Diff(), Show() |
| Blame | Blame() |
| Stash | StashList(), StashSave(), StashPop(), StashApply(), StashDrop() |
| Tag | TagList(), TagCreate(), TagDelete() |
| Checkout | Checkout() |
| Config | Config(), ConfigList() |
Sample: samples\misc\tgit.prg. Include: include\tgit.ch.
TSSH — SSH Client
source\classes\tssh.prg + source\winapi\ssh.c wrap
ssh.exe / scp.exe (Windows 10+ OpenSSH) via
CreateProcess with pipe capture. Supports key authentication,
custom port, SCP file transfer, and host key scanning.
C backend (source/winapi/ssh.c):
| Function | Signature |
|---|---|
SSH_EXEC() | (cHost, cUser, cCmd, cKeyFile, nPort, @cOut, @cErr) → nExit |
SCP_SEND() | (cHost, cUser, cLocal, cRemote, cKeyFile, nPort, @cErr) → nExit |
SCP_RECV() | (cHost, cUser, cRemote, cLocal, cKeyFile, nPort, @cErr) → nExit |
SSH_HASSSH() | () → lAvailable |
TSSH class methods:
| Category | Methods |
|---|---|
| Connection | New(), Connect(), IsAvailable() |
| Remote exec | Exec(), ExecQuiet(), Shell() |
| File transfer | SendFile(), GetFile(), SendFiles(), GetFiles() |
| Key mgmt | KeyGen(), KeyScan(), SetKnownHosts() |
Sample: samples\misc\tssh.prg.
Transformer Class — Multi-Head, GELU, LR Scheduler & Padding
- LRScheduler — new class implementing Transformer paper warmup +
inverse sqrt decay:
lr = d_model^(-0.5) * min(step^(-0.5), step*warmup^(-1.5)). Methods:New(d_model, warmup_steps, base_lr),GetLR(step),Update(optimizer, step). - MultiHeadAttention — validates
d_model % n_heads == 0at construction withALERT()if not divisible. Uses exact integer division forhead_diminstead ofInt()to avoid truncation. - FeedForward — GELU activation replaces ReLU (tanh approximation:
0.5*x*(1+tanh(√(2/π)*(x+0.044715*x³)))). GELU derivative uses CDF+PDF formula for correct gradient flow.ff_dimnow configurable (default4*d_model). Validatesd_model > 0andff_dim > 0. - EmbeddingLookup — PAD token (index 0) now returns a zero
vector instead of crashing with
"Bound error: array access"onaVocab[0]. - Backward — skips gradient accumulation for PAD tokens
(index 0 in both
src_indicesandpos_indices). Fixes training with variable-length sequences padded tomax_seq_len. - transxbrowse.prg sample now uses
nHeads=2andLRSchedulerto demonstrate multi-head attention with warmup scheduling.
Remote View — Multi-Client & Login
- Multi-client — each viewer gets its own server on its own port,
fully isolated, so several browsers can watch/drive the same window at once.
Per-thread state via TLS (sockets, frame diff, viewport, cursor) — no shared globals.
- Single client, NO multithread (no
-mt):RemoteViewStart()/Stop()pumped by a hidden WM_TIMER on the GUI thread. - Multi client, multithread (
-mt): launch one Harbour thread per port withhb_threadStart, each calling the blockingRemoteViewServe(); stop them all withRemoteViewStopAll().
- Single client, NO multithread (no
- New API:
RemoteViewServe([hWnd], [nPort], [nOffX], [nOffY]),RemoteViewStopAll(). - Custom page title —
RemoteViewStart([hWnd], [nPort], [cTitle])now accepts an optional title parameter. Default "FWH Remote View". - Login sample —
samples\RemoteView\testrvauth.prgshows how to authenticate a remote user before the app UI opens. Login is a normal FiveWin dialog owned by the served window, composited by RemoteView on top. Key gotcha: do NOT launch modal UI inside ON INIT (the window hasn't painted yet). The sample defers login with a one-shot TTimer. - Zero-init fix — VC98/xHarbour CRT does not zero
__declspec(thread)variables; per-thread capture state is now reset explicitly inCaptureInitand the monitor rect falls back to the primary screen on failure. - Visual polish — trims invisible Win10/11 resize borders, draws a soft synthetic drop shadow, and synthesizes title-bar button hover.
build_new.bat: set FW_MT=1 to link the Harbour MT VM (hbvmmt)
for apps that use hb_threadStart; without it the single-thread VM
(hbvm) is linked.
Build System
Compiler Warning Sweep
Every compiler warning emitted by the GCC32, GCC64, MSVC32 and MSVC64 library builds (~170 sites) has been cleared while preserving behavior on all supported toolchains (BCC32/64, MSVC32/64, GCC32/64, Harbour and xHarbour). Covers:
-Wcast-function-type— GetProcAddress/FARPROC casts now use the portable( void (*)( void ) )intermediate.-Wdangling-else,-Wimplicit-fallthrough,-Wsign-compare,-Wunused-function(32-bit-only COM IDataObject vtable callbacks guarded with#ifndef _WIN64),-Wold-style-declaration,-Wmisleading-indentation.- Redefined macros and MSVC C4996.
Two real bugs found: a buffer overflow in BlankQuotes()
(vstrfun1.prg) when its 2nd argument exceeds 3 chars, and a 3-byte
over-read of the GIF graphic-control block in fwgif.c. All nine library
variants now build warning-free.
xHarbour Commercial Restored
The xHB Commercial (xhbc) target — which had been abandoned since 2016 — now builds, links and runs again with the VC98 toolchain:
- The C library (
Fivehcm.lib) went from an empty stub to the full FiveWin C engine; the PRG library (Fivehmx.lib) was rebuilt complete. source/internal/xhbcompat.c+include/xhbcompat.h: Harbour-3.x array "vector" C API implemented over what xHarbour provides.- Per-file VC98/xHarbour compile fixes (themes, msgs, files, elevation, winsock,
calendar, scintilc, richedit, brushes, ribbon, odbc32x, ...), each behind an
__XHARBOUR__guard. - All shims guarded by
__XHARBOUR__— Harbour builds compile byte-for-byte as before.
Build scripts: makes/build_fivehcm.ps1 + makes/build_fivehmx.ps1.
makes/ Test Projects
Every makes/<compiler>/ folder now builds, links and runs a minimal
FiveWin app for its Harbour/xHarbour + C-compiler combo (11 variants confirmed).
Two missing variants were added (xhb_bcc64, xhb_msvc32). Each go.bat
honours FW_NORUN=1 and uses the VS 18 toolchain.
Notable Fixes
TGet ANSI Characters (Turkish, CP1250-1258)
Keyboard input of ANSI characters with Unicode codepoint above 255
(Turkish ş-cedilla, ğ-breve, dotted İ; Polish, Czech, Baltic,
Cyrillic and Greek letters) showed "?" in non-Unicode applications
(FW_SetUnicode(.F.)) using single-byte codepages CP1250–CP1258.
Regression introduced when is2byteansi() started treating all 2-byte
sequences as ANSI pairs on those codepages: WideKey2Asc() built genuine
UTF-8 from the WM_CHAR wide code but fw_Utf8ToStr()'s
isutf8() heuristic refused to convert it, so the keystroke was rejected.
WideKey2Asc() now converts with explicit codepages via
FW_CdpTranslate(cUtf8, 65001, -1), bypassing the heuristic.
is2byteansi() display behavior is unchanged.
New samples: samples\test\trwincdp.prg (conversion-chain check) and
samples\test\trwinget.prg (sends ş ğ İ WM_CHAR codes
to a GET and checks the buffer receives CP1254 bytes FE F0 DD).
TGraph ADD SERIE / SET Y LABELS
Both #xcommand rules expanded to a hard-coded oGraph: instead
of the <oGraph> matchmarker, so ADD SERIE TO oMyGraph
/ SET Y LABELS OF oMyGraph called a non-existent oGraph
variable unless the object happened to be named oGraph. They now expand to
<oGraph>:AddSerie() / <oGraph>:SetYVals().
New Features
TRichEdit5 & TRichEdit — SetTextColor()
SetTextColor(nColor) applies text color to the current selection
(SCF_WORD | SCF_SELECTION) using only the CFM_COLOR mask,
preserving all other character formatting (bold, italic, underline, font face, size).
If no text is selected, the color is applied to the word under the caret.
Works on both TRichEdit5 (RichEdit 5.0) and TRichEdit
(RichEdit 2.0 via riched20.dll).
Samples: samples\test\testchclr.prg (Blue/Red/Black + Bold/Italic),
samples\test\testreclr.prg (same for RichEdit 2.0).
TRichEdit5 — Dark Mode
New METHOD SetDarkMode(nClrText, nClrBack), cascaded automatically by
TDialog:SetDarkMode / FW_SetDarkMode like other controls.
Uses the same dark palette as TMultiGet/TGet.
TURLLink — Text Alignment
New DATA nAlign and METHOD AlignText(nAlign).
Method Default() now auto-detects alignment from window styles
(SS_RIGHT, SS_CENTER) when ::nAlign is nil.
Method EraseBkGnd() now accepts the hDC parameter.
Thanks to Carlos Sincuir.
TX8 (TComboMetro drop-down) — Now Subclassable
The TX8 class (the TXBrowse-based drop-down list used by
TComboMetro, source\classes\combom.prg) is no longer declared
STATIC, so applications can subclass it or OVERRIDE its methods
(drop-down direction, selection colors, etc.) without keeping a private copy of
combom.prg. No behavior change.
fwhxhb.h — Harbour/xHarbour C Compatibility
include/fwhxhb.h maps Harbour-only C API
(hb_parvc/parvni/parvnl/parvnll/parvnd/parvl,
hb_storvc/storvni/storvnl/storvnll/storvnd/storvl,
hb_vmCDP, hb_retclen_buffer, hb_rettdt,
hb_timeStampStrGetDT) to primitives common to both VMs.
A single set of C object files links against Harbour or xHarbour.
New Samples
transxbrowse — Transformer Text Classifier in XBrowse
samples\ai\transxbrowse.prg trains a Transformer neural network to classify
Spanish phrases into 6 categories (Saludo, Despedida, Agradecimiento, Pregunta,
Comando, Respuesta) using a 25-token vocabulary. Displays all predictions in an
XBrowse grid with confidence percentage and OK/FAIL status. Window title shows
accuracy. Uses LRScheduler for warmup scheduling.
transsave — Transformer Save/Load Roundtrip
samples\ai\transsave.prg demonstrates the full model lifecycle: trains a
Transformer classifier, saves it to disk via Save() (hb_Serialize),
loads it back via Load(), and verifies that predictions match.
Results displayed in XBrowse.
transgen — Transformer Text Generation
samples\ai\transgen.prg trains a Transformer on character sequences
and generates new text autoregressively from seed tokens. Uses
Generate() with temperature sampling. Results displayed in XBrowse
with confidence scores.
githubdb — githubDB + XBrowse
samples\githubdb\githubdb.prg browses a githubDB fork
(SQL+vector database on GitHub Actions) from FiveWin using two HTTP paths:
- Fast read (CDN) — fetches
data/<db>.jsonfromraw.githubusercontent.com, sub-second, no token needed. - Action query — sends SQL via
repository_dispatch, polls for result, 10-30 s, needs a GitHub token with Contents R/W.
HTTP transport via WinHttp COM object (no curl/DLL dependency).
Built with build_new.bat (all compiler variants). Docs at
githubdb.
testrsz — Flicker-Free XBrowse Resize
samples\testrsz.prg demonstrates how to resize an XBrowse at runtime
without flickering. The correct method: add WS_CLIPCHILDREN to the
dialog style, freeze the dialog with WM_SETREDRAW around the resize,
then repaint both dialog and browse. Includes "old method" buttons side by side
for comparison. Also documented in the TXBrowse HTML docs.
seqedit & xbrseqed — Sequential XBrowse Edit
samples\seqedit.prg and samples\ui\xbrowse\xbrseqed.prg
demonstrate sequential keyboard-driven edit for Array data sources in XBrowse.
Press ENTER on a row to start editing the first column in the sequence; each
subsequent ENTER validates the current column and auto-advances; ESC cancels.
Fully configurable via aEditSeq static array (default {3,5,7}).
Uses PostMessage-based column advance (zero timers).
Bug Fixes
- TFolder crash "No exported method: MOVE" —
AdjustRect()calledoDlg:Move()on elements of::aDialogswithout checking for NIL. Added nil guard for::aDialogs[1]and eachoDlgin the AEval callback, consistent with the pattern used elsewhere in the same class. - TGet:KeyDown bKeyDown reads stale variable — On xHarbour,
TGet:KeyDownevaluatedbKeyDownbefore syncing the edit buffer to the bound variable. Callbacks that read the variable (e.g. Enter key handlers) saw a stale/empty value. Fixed: syncoGet:bufferfromGetWindowText/GetText(), then callVarPut(UnTransform())orVarPut(GetText())beforeEval(bKeyDown)without resettingoGet:Original/oGet:Changed. Sample:samples\getkdwn.prg. - FWMariaConnection hardcoded English error dialog —
ShowError()calledMsg_Alert()unconditionally, showing a hardcoded English MessageBox even withlShowErrors := .F.. Fixed:ShowError()now checkslShowErrors .or. lShowMessagesbefore callingMsg_Alert(). Connect errors can be localised viaMARIA_ONCONNECTERROR( nError, cErrMsg, oCn )or:bOnConnectError; the lost-server suffix usesFWString(). Sample:samples\fwmalost.prg. - FWMariaConnection silent reconnect no hook — When the connection
dropped (KILL,
wait_timeout, network oscillation), the client-library optionMYSQL_OPT_RECONNECTletmysql_real_query()re-open the session and retry the statement internally: no error, no callback, and allSET SESSIONstate (time_zone,sql_mode,lc_time_names, etc.) silently reverted to server defaults. Fixed: driver-level auto-reconnect is now disabled; a dead session always surfaces as an error and only the controlled C helpermysql_ping_reconnect()revives it, flagging the reconnect viamysql_thread_id()change. The PRG layer then firesbOnLostServer, re-applies tracked session vars (RestoreSessionState()) and retries the failed statement — both on the explicitReConnect()path and on the automatic path (plainExecute()on a dropped connection). Sample:samples\fwmatz.prg; unit tests:samples\fwmaria_ut.prg. - FWMariaConnection transaction silently split on auto-reconnect —
If the socket died with
START TRANSACTIONopen,mysql_pingretried the next statement on a fresh autocommit session with no error. Fixed: client-sidelInTransactiontracking;HandleLostTxn()blocks ping-retry in C and PRG while a transaction is open, firesbOnLostServer, and surfaces error 2013 with a localised message. Sample:samples\fwmatx.prg. - FWMariaConnection schema metadata cache — Restored
hMetaCacheforDbExists,TableExists,FKeyColumnsandListViews. DDL invalidates the cache;ClearMetaCache()clears it explicitly.CurrentDB()short-circuits when::cDBis set;SelectDB()forces a re-read. Unit tests:samples\fwmaria_ut.prg. - FWMariaConnection xHarbour BASE/1066 on Execute_Sql —
FWMARIA_WAS_RECONNECTED()could return NIL under xHarbour. Fixed:MariaWasReconnected()wrapper; init-command and multi-result sets drained aftermysql_real_connectand at end ofExecute_Sql. - FWMariaConnection Connect hang on SHOW variables —
Bootstrap
SHOW variablesduringConnectcould hang when reconnect/clear logic ran on the first post-connect query. Fixed:lInConnectskips that path during connect bootstrap.
Development Tools
- VS Code tasks —
vscode/tasks.jsonwith five tasks: Clean, Format (hbformat), Resources (PellesC RC editor), Build64, and Run. All with Harbour problem matcher and statusbar labels. Thanks to Jose Vte. Cheto. - xm64 build variant — xHarbour 64-bit + MSVC 64-bit now available
via
build_new.bat <prog> xm64. Requires xHarbour 64-bit atc:\xharbour64and VS 64-bit C compiler. Libraries:Fivehxh64.lib+FiveHC64.lib.
Summary
FWH 26.06 delivers major Agent class maturity (streaming SSE, real tool implementations, error handling, interrupt/inject), two new system-integration classes (TGit, TSSH), the AgenticAI GUI desktop port, Remote View multi-client support, a full compiler warning sweep (~170 sites, two real bugs found and fixed), restoration of the xHarbour Commercial target, and significant documentation expanding to 36+ HTML pages.