genexus-mcp 3.16.0 → 4.0.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/README.md CHANGED
@@ -117,29 +117,38 @@ does not claim the same feature parity as the native SDK contract for GeneXus
117
117
 
118
118
  ## Experimental `gx-engine` (Rust SDK Replacement Project)
119
119
 
120
- `src/gx-engine` is an experimental, independent Rust compiler and runtime designed to progressively replace the proprietary GeneXus SDK with an open, high-performance native toolchain ([Plan 129](plans/129-independent-rust-toolchain.md)).
120
+ `src/gx-engine` is an independent, high-performance Rust compiler and runtime designed to completely replace the proprietary GeneXus SDK, eliminate the legacy 32-bit STA worker, and deliver sub-20s builds ([Plan 130](plans/130-direct-udm-kb-engine.md), [Plan 129](plans/129-independent-rust-toolchain.md)).
121
121
 
122
122
  ### 🎮 Decompilation / Parity Progress
123
123
 
124
- Similar to video game decompilation projects, progress is measured capability-by-capability against verified differential runs of the official GeneXus SDK in clean Knowledge Bases.
124
+ Progress is measured against recorded SDK differential inputs and observable results, not the number of implemented modules or passing unit tests. On the disposable `KBTeste` KB, a whole-KB Rebuild All now generates and compiles every targeted object (**346/346, 0 skipped, 0 refused**) and the C# the SDK writes for that KB is reproduced **byte for byte (328/328 files)**, together with the web scripts, `gxcfg.js`, messages and runtime configuration. **Full SDK replacement is not verified** for arbitrary KBs: unsupported forms are still refused by name, and only one KB is the oracle. gx-engine is the **default backend** (`Engine.Backend=gxengine`: admitted builds and field-limited type-only queries; reads/edits and other shapes use SDK fallback; `auto` = builds only, `sdk` = engine off); see [engine routing](docs/engine_backend.md).
125
125
 
126
- ```text
127
- Overall SDK Replacement: [🟩🟩🟩🟩🟩⬜⬜⬜⬜⬜] 50.0% weighted (69.6% total areas touched: 39/56)
128
- ```
126
+ ### What builds today
127
+
128
+ | Lane | Verified evidence | Boundary |
129
+ | :--- | :--- | :--- |
130
+ | Package build | `build.ps1` built Gateway, Worker, gxwire and gx-engine; local publish/backend engine hashes match. | Building the MCP distribution is not building every object in a KB. |
131
+ | Selected-object build | Five alternating local SDK/engine pairs regenerated and compiled `DCM37961700`; core APIs and actual CLI output matched. SDK median **14.756s**, engine **0.230s** (**64.19×**). | Synthetic warm fixture; AUTO_CLOSE=OFF on both sides, original ON restored. The packaged binary was not benchmarked; it passed a separate build/run smoke. |
132
+ | Full native KB build (`KBTeste`) | `rebuild-all`: **346 generated / 346 compiled, 0 skipped, 0 refused**. Against the SDK's own output for the same KB: **328/328 C# files byte-identical, 0 missing**; 24/24 web `.js`, `gxcfg.js`, `messages.eng.txt/.js`, `log.config`, `log.console.config` (+ `bin/` copies) and `CloudServices.config` byte-identical. | One oracle KB. The engine also writes 18 files the SDK's current output lacks (13 SDT classes identical to an earlier SDK generation, sidebar/program-name SDTs it reaches, 2 assembly-info files). Developer Menu not written (its object selection is not established). |
133
+
134
+ Use the SDK for required workflows outside validated engine coverage. See
135
+ [Plan 131](plans/131-sdk-performance-benchmark.md) for the exact binary, commands,
136
+ samples and caveats; [engine routing](docs/engine_backend.md) for default/explicit backend behavior.
129
137
 
130
- | Subsystem | Progress | Status | Covered / Total |
131
- | :--- | :---: | :---: | :---: |
132
- | **Language & Runtime Core** (Math, Decimals, Text, Dates, Calendar) | `[🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩] 100.0%` | Native Parity | 8 / 8 areas |
133
- | **Control Flow & Procedure Pipeline** (`If`, `Iif`, `For`, `For In`, `Exit`, `Case`, `Sub`/`Do`, `Call`/`.UDP`, `IsEmpty`/`SetEmpty`/`Nullvalue`) | `[🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩] 100.0%` | Native Parity | 6 / 6 areas |
134
- | **Structured Data & Collections** (SDT, `Add`, `Remove`, `Clear`, `IndexOf`, `Item`, `ToJson`, `FromJson`, `ToXml`, `FromXml`) | `[🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩] 100.0%` | Native Parity | 5 / 5 areas |
135
- | **Portable KB Catalog & XML Projection** (Procedures, SDT, Domain, Attribute, Transaction, Rules in `ExportFile` XML and portable catalog) | `[🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩] 100.0%` | Native Parity | 6 / 6 areas |
136
- | **Specifier & SQL Navigation** (Physical Tables, DDL, Navigation, `For Each`) | `[🟩🟩🟩🟩🟩🟩🟩🟩⬜⬜] 75.0%` | Navigation & Query Plan | 6 / 8 areas |
137
- | **Native KB Database Storage** (`.gxi`, `GXLOCK`, `DATA*`) | `[⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 0.0%` | Unsupported (SDK-only) | 0 / 5 areas |
138
- | **Full GeneXus Surface** (UI, Events, Generators) | `[⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 0.0%` | Unsupported | 0 / 18 areas |
138
+ | Subsystem | Evidence boundary / remaining work |
139
+ | :--- | :--- |
140
+ | Language, runtime, control flow, SDTs and collections | Bounded native differential corpora; not exhaustive GeneXus semantics. |
141
+ | Portable catalog and XML projection | Fixture-backed support; does not establish native KB round-trip parity. |
142
+ | Specifier, SQL navigation and datastore behavior | Portable tests do not prove complete live SDK navigation or database behavior. |
143
+ | Native UDM storage | Live read evidence and targeted tests; not a general SDK persistence replacement. |
144
+ | C# generation and Rebuild All | Live generated-object checks pass within a bounded set; refusals, missing objects and SDK-oracle gaps remain. |
145
+ | Web UI, Transactions, Reports and BCs | Partial implementations; a successful compile is not end-to-end product parity. |
146
+
147
+ See the [current acceptance/evidence ledger](plans/129-implementation-progress.md#current-acceptance-status--2026-10-18) for the tested binary, scope, failures and next actions.
139
148
 
140
149
  #### Gateway Capability Registry Gates
141
150
 
142
- The MCP Gateway exposes a strict capability gate (`EngineCapabilityRegistry`) where operations are classified by measured parity before any traffic can be routed:
151
+ The MCP Gateway exposes a capability gate (`EngineCapabilityRegistry`). The `Parity` labels below describe registered, bounded evidence, not complete SDK equivalence; routing boundaries and fallbacks are documented in [engine_backend.md](docs/engine_backend.md):
143
152
 
144
153
  | Capability | Status | Evidence & Performance |
145
154
  | :--- | :---: | :--- |
@@ -150,7 +159,7 @@ The MCP Gateway exposes a strict capability gate (`EngineCapabilityRegistry`) wh
150
159
  | `text_extended_functions` | 🟩 **Parity** | `LTrim`/`RTrim`/`PadL`/`PadR`/`Space`/`Concat`/`StartsWith`/`EndsWith`/`Contains`/`StrSearch`: 95 native `StringUtil` oracle rows verified (exact ASCII space trim, left/right pad truncation, single-sided concat trim, ordinal comparisons, 1-based index clamping). |
151
160
  | `numeric_math_functions` | 🟩 **Parity** | `Int`/`Round`/`Trunc`/`Val`/`Left`/`Right`/`Asc`/`Chr`/`NotNumeric`/`LTrimStr`: 107 native `NumberUtil` and `StringUtil` oracle rows verified (`Math.Floor`, `AwayFromZero` with negative digit support, truncation toward zero, numeric string parsing, ASCII char conversions). |
152
161
  | `collection_operations` | 🟩 **Parity** | `Add`/`Remove`/`Clear`/`IndexOf`, `For In` iteration and `Exit`: 24 native `GxSimpleCollection` and `GXBaseCollection` oracle rows verified (1-based indexing, insertion, out-of-bounds silent removal, element aliasing in loops, loop exit). |
153
- | `calendar_operations` | 🟩 **Parity** | `Day`/`Month`/`Year`/`Hour`/`Minute`/`Sec`/`Dow`, `AddYr`/`AddMth`/`DAdd`/`TAdd`, `DDiff`/`TDiff`, `Age`, `EndOfMonth`, `ResetTime`, and `.ToString()`: 83 native `DateTimeUtil` oracle rows verified (1=Sunday DOW, leap clamping, second rollover, whole-day truncated DDiff, completed years Age). |
162
+ | `calendar_operations` | 🟩 **Parity** | `Day`/`Month`/`Year`/`Hour`/`Minute`/`Sec`/`Dow`, `AddYr`/`AddMth`/`DAdd`/`TAdd`, `DDiff`/`TDiff`, `Age`, `EndOfMonth`, `ResetTime`, `CToD`/`DToC`/`TToC`, and `.ToString()`: 133 native `DateTimeUtil` oracle rows verified (1=Sunday DOW, leap clamping, second rollover, whole-day truncated DDiff, completed years Age, measured `CToD` parse grammar with the environment two-digit-year window, ISO `yyyy-MM-dd` and `yyyy-MM-ddTHH:mm:ss` exchange pictures). |
154
163
  | `subroutine_control_flow` | 🟩 **Parity** | `Sub 'Name' ... EndSub` and `Do 'Name'`: 13 native-verified tests (procedure-scoped variable mutation, case-insensitive resolution, quote styles, nested subroutine calls, early `Return` propagation via `returnInSub` semantics, depth limit 128). |
155
164
  | `conditional_and_state_operations` | 🟩 **Parity** | `Iif(cond, trueExpr, falseExpr)` short-circuit conditional, universal `.IsEmpty()`/`IsEmpty()` and `.SetEmpty()` across all types, `Nullvalue(&var)`, `.UDP(...)` calls, and `Format`/`NewLine`/`Replicate`/`CharAt`/`StrSearchRev`/`.LastIndexOf`/`BoolToStr`/`ToBoolean`/`StrToBool`: 57 native `StringUtil` and state oracle rows verified. |
156
165
  | `sdt_and_collection_json` | 🟩 **Parity** | `&sdt.ToJson()`, `&sdt.FromJson()`, `&col.ToJson()`, `&col.FromJson()`: 32 native `GxUserType` and `GXBaseCollection<T>` oracle rows verified (compact representation, escaped strings, `"0000-00-00"` empty dates, case-insensitive keys, partial updates, and safe array repopulation). |
@@ -161,18 +170,24 @@ The MCP Gateway exposes a strict capability gate (`EngineCapabilityRegistry`) wh
161
170
  | `transaction_control` | 🟩 **Parity** | Database transaction control procedural statements (`Commit` and `Rollback`, bare keywords or call syntax `Commit()`, `Rollback()` with optional semicolons): 7 native-verified integration tests (conditionals, loops, subroutines, while loops, format_version 1 fail-closed rejection, compiled executable execution, and ExportFile XML exchange). |
162
171
  | `physical_table_ddl` | 🟩 **Parity** | Physical Table schema normalization and multi-dialect SQL DDL generation (`CREATE TABLE`, primary keys, parent-child and cross-transaction foreign keys, indexes, ANSI/SQL Server/PostgreSQL/Oracle data types): 9 native-verified integration tests without database writes. |
163
172
  | `sql_navigation` | 🟩 **Parity** | Specifier, base table inference, For Each navigation, extended table joins, and multi-dialect SQL query planning (ANSI, SQL Server, PostgreSQL, Oracle): 10 native-verified integration tests, 13 frontend tests, fail-closed diagnostics (`spc0004`, `spc0005`), and zero SQL writes. |
164
- | `numeric_core`, `text_core`, `calendar_values`, `records_collections`, `procedure_pipeline`, `xml_projection`, `kb_catalog` | 🟨 **Partial** | Independently implemented in portable compiler and tested with synthetic or bounded fixtures; pending full parity claims. |
165
- | `native_kb_read`, `general_gx_surface` | ⬜ **Unsupported** | Not yet implemented in Rust. Always served 100% by the GeneXus SDK / Worker. |
166
-
173
+ | `numeric_core`, `text_core`, `calendar_values`, `records_collections`, `procedure_pipeline`, `xml_projection`, `kb_catalog` | 🟩 **Parity** | Foundational runtime capabilities behind the four Native Parity subsystems above; each `EngineCapabilityRegistry` entry lists its native differential corpus or bounded portable fixture (`decimal_oracle`, `numeric_math`, `text_extended`, `calendar_ops`, `date_conversions`, `collection_ops`, `subroutines`, `exchange`, `sdt_xml`, `catalog`). |
174
+ | `udm_storage_access` | 🟩 **Parity** (bounded reads) | Direct native UDM reads without COM/STA Worker (`knowledgebase.connection`, SQL Server, LocalDB); registered read/query consumers. Live engine writes are not implemented: `genexus_edit` remains SDK-backed or is refused under strict engine verification. Portable writer/lock tests are not live persistence evidence. |
175
+ | `csharp_emitter` | **Bounded coverage** | C# generation and Roslyn compilation tests for supported object forms; unsupported native forms still fail closed. Compilation alone does not establish SDK behavior parity. |
176
+ | `parallel_rebuild_all` | **Bounded coverage** | Parallel specification, C# emission and compilation; consumers `genexus_lifecycle.build` / `rebuild`. `KBTeste` Rebuild All: 346/346 compiled, 0 skipped/refused; paired speed ratios below are `KBTeste`-only and do not establish full SDK parity. |
167
177
 
168
178
  ### ⚡ Performance Benchmarks (gx-engine vs. GeneXus SDK)
169
179
 
170
- Every performance comparison requires **exact output parity** verified before measuring timings (zero mismatches, identical hash/byte output). The initial differential benchmarks measured on local Windows x86_64 hardware:
180
+ A speed comparison requires the same input workload, target, dependency closure, observable results and success criteria. Independent generators need not emit byte-identical source or assemblies. Keep full SDK specify/generate/compile timings separate from compile-only MSBuild timings and bounded runtime microbenchmarks. On the disposable `KBTeste`, a whole-KB Rebuild All with a full compile measures 51.7× against the SDK's specify + generate alone (median of a paired run); the selected-object result meets 50× only within its stated warm-fixture scope. Historical microbenchmarks do not establish a whole-KB speed goal:
171
181
 
172
182
  | Benchmark Workload | GeneXus SDK (.NET / MSBuild) | `gx-engine` (Rust) | Speedup / Gain | Verification & Oracle |
173
183
  | :--- | :---: | :---: | :---: | :--- |
184
+ | **Warm selected-object C# build** (`DCM37961700`) | **14,755.9 ms** *(local specify + generate + Rebuild/Publish)* | **229.9 ms** *(live read + emit + guarded compiler replay, setup included)* | **64.19×** | Five alternating pairs; bounded API and direct CLI checks, stable sources. Synthetic fixture, AUTO_CLOSE=OFF; not cold/full-KB or packaged-binary performance. [Protocol](plans/131-sdk-performance-benchmark.md). |
174
185
  | **`Str()` Numeric Picture Formatting** (Microbenchmark) | 274 – 286 ns / row *(1.75 ms / pass)* | **121 – 130 ns / row** *(0.75 ms / pass)* | **~2.25x faster** | 6,152 rows (`str_matrix.tsv`), 80,235 chars, identical FNV-1a UTF-16 hash (`0xb9e1b48fb72067b0`), 0 mismatches against official `GeneXus.Classes.Core` runtime. |
175
- | **End-to-end Procedure Compilation & Build** | 10,930 ms *(SDK stages)*<br>16,366 ms *(MSBuild total)* | **223 ms** *(Rust parse + emit + rustc link)* | **~49x faster** | Synthetic `RustTimingProbe` in authorized `KBTeste` (`21 * 2 = 42`). Identical exit 0 and stdout `42`. |
186
+ | **Live KB Metadata & Part Hydration** | 12,000 – 18,000 ms *(serial COM STA)* | **320 ms** *(direct TDS queries)* | **> 35x faster** | Verified on live LocalDB `GX_KB_KBTeste` (`test_udm_real_kb_live_read_procedure`). |
187
+ | **Whole-KB generation** (`KBTeste`, specify + generate, no compile; earlier engine binary) | **33.4 – 39.9 s** *(MSBuild `SpecifyAllOnly` + `GenerateOnly`, 3 runs)* | **0.61 – 0.68 s** *(`rebuild-all --skip-compile`, 3 runs alternating with the SDK runs; ~0.45 s of it is the KB catalog read)* | **~58× (median pair)** | Paired, one machine, 2026-10-21; neither side compiles; engine output unchanged after the SDK runs. Not a 50× claim: output parity is 328/328 C# identical with 20 extra files and no Developer Menu, so full SDK parity is unverified. The previous engine binary measured 1.29 – 1.40 s (12 alternating runs). |
188
+ | **Whole-KB Rebuild All, nothing changed** (`KBTeste`, 346 classes) | **42.2 s** median *(32.3 – 46.2 s; MSBuild `SpecifyAllOnly` + `GenerateOnly`, no compile, 3 runs)* | **289 ms** median *(271 – 306 ms, 9 runs: catalog ~150 ms + emit ~70 ms; compile skipped as up to date)* | **~146× (median)** | Paired and alternating, one machine, 2026-10-21, database held open by an idle connection as an opened KB holds it. The SDK side does not compile, the engine side does (or proves its outputs current). Output parity: 328/328 C# identical, 20 extra files, 0 missing; full SDK parity unverified. Script `bench-s42.py`. |
189
+ | **Whole-KB Rebuild All, forced full compile** (`KBTeste`, 346 classes) | **42.2 s** median *(same SDK runs, no compile)* | **816 ms** median *(739 – 989 ms, 9 runs: direct `csc` with `/shared` and `/skipanalyzers+`, ~0.6 – 0.7 s)* | **~51.7× (median)** | Same paired run; the compile record is removed before each sample so all 346 classes compile again. The ratio is a median of medians: against the fastest SDK run (32.3 s) and slowest engine run it is ~33×. A first build into a new folder takes ~1.9 s (`dotnet build`); a cold compiler server was measured once at ~22.8 s. The former 480,000 ms / 1,250 ms (>380×) comparison had no matched IDE measurement and stays withdrawn. |
190
+ | **Historical arithmetic fixture build** | 10,930 ms *(SDK stages)*<br>16,366 ms *(MSBuild process wall)* | **223 ms** *(Rust CLI + rustc build)* | **Not a whole-SDK speed ratio** | `RustTimingProbe` (`21 * 2 = 42`), three recorded samples, exit/output checked. Different pipelines and targets; the former ~49× stage/build ratio applies only to that tiny fixture. [Evidence and caveats](src/gx-engine/VALIDATION.md#verified-custom-msbuild--sdk-pipeline). |
176
191
  | **Generated Artifact Startup & Execution** | 123.06 ms *(CLR bootstrap + run)* | **5.75 ms** *(native binary bootstrap)* | **~21x faster** | Cold process launch and console output for the compiled arithmetic procedure artifact. |
177
192
 
178
193
  #### 📈 Benchmark Protocol & How to Record Improvements
@@ -189,21 +204,21 @@ As new capabilities reach parity and additional optimizations land, follow this
189
204
  ### Activation Flag & Safety Seam
190
205
 
191
206
  > [!IMPORTANT]
192
- > **Zero Automatic Routing:** By default, `Engine.Backend` is `"sdk"`. The Gateway serves 100% of tool calls through the official GeneXus SDK. Even when `gxengine` is enabled, the router fails closed: only capabilities with measured `Parity` and an explicitly registered consumer can route to the engine; everything else stays on the SDK.
207
+ > **Engine-first:** `Engine.Backend` defaults to `"gxengine"`. Blocking `genexus_lifecycle` builds/rebuilds inside the admitted space use gx-engine, and so do admitted type-only `genexus_query` calls selecting only `name`/`type` fields. A directed `build` with `mode=compile_check`, explicit `callers=false` and transitive callees also uses gx-engine, building only the target closure. Edits, async/other directed builds, all reads, `usedby:` searches, ranked fuzzy queries and unsupported request shapes fall back to the SDK. Capability and argument gates still apply. Build errors or uncertain outcomes after engine start never trigger automatic SDK replay. `"auto"` routes only builds to the engine; `"sdk"` keeps every operation on the SDK and never invokes the engine.
193
208
 
194
- To test or benchmark the engine from a source checkout, configure `config.json`:
209
+ No backend setting is needed. To narrow routing to builds (`"auto"`) or turn the engine off (`"sdk"`), configure `config.json`:
195
210
 
196
211
  ```json
197
212
  {
198
213
  "Engine": {
199
- "Backend": "gxengine",
214
+ "Backend": "auto",
200
215
  "Fallback": "sdk",
201
216
  "TimeoutSeconds": 120
202
217
  }
203
218
  }
204
219
  ```
205
220
 
206
- - **`Engine.Backend`**: `"sdk"` (default) or `"gxengine"` (opt-in).
221
+ - **`Engine.Backend`**: `"gxengine"` (default: admitted builds and field-limited type-only queries; reads/edits use SDK fallback), `"auto"` (admitted builds only), or `"sdk"` (SDK only, engine never invoked).
207
222
  - **`Engine.Fallback`**: `"sdk"` (fallback to GeneXus SDK when not at parity) or `"error"` (fails closed with `EngineCapabilityNotParity` for strict verification).
208
223
  - **Diagnostics**: `genexus_doctor` inspects the engine via `--version` handshake and reports an `engine` status block with `backend`, `available`, `version`, `capabilities`, and `routedOperations`.
209
224
 
@@ -284,7 +299,7 @@ A quick map of what the agent can do against your real KB through the **60 tools
284
299
  | Area | What the agent can do |
285
300
  |---|---|
286
301
  | 🔎 **Explore** | Search & list objects, read any part (source, rules, events, structure, docs, pattern XML), inspect metadata & callers, regex-search source, view the navigation report |
287
- | 🧭 **Orient & trace** | Rank the objects a task touches, list direct and transitive callers, trace the shortest call path between two objects, check blast radius and safe-delete, follow one variable's data flow. Runs on exported sources through `genexus_wire` (read-only, token-budgeted) |
302
+ | 🧭 **Orient & trace** | Rank the objects a task touches, list direct and transitive callers, trace the shortest call path between two objects, check blast radius and safe-delete, follow one variable's data flow. Runs on exported sources through `genexus_wire` (read-only, token-budgeted); `pack_task` also works directly on the open native KB |
288
303
  | ✏️ **Edit code** | Edit any object part (`full`/`patch`/`ops` modes), variables CRUD, format, create & delete objects, scaffold a Procedure from a **curl command**, edit + rebuild callers in one shot |
289
304
  | 🗄️ **Author the data model** | Transaction structure (DSL), **unique/non-unique indexes** (create & drop), **attribute formulas & subtypes**, level Description/Image attributes, **Domain enum values**, folders & modules, table↔transaction relations & redundant-attribute detection |
290
305
  | 🧩 **Author other objects** | External Object methods & properties, Menu options, REST API objects, WorkWithPlus / WorkWith patterns, typed .NET generator references |
@@ -551,7 +566,7 @@ The worker exposes **60 tools** to the MCP router, grouped by capability below.
551
566
  **Architecture discovery & call graph**
552
567
  - `genexus_wire` — read-only, token-budgeted call-graph engine (bundled `gxwire.exe`). Actions: `pack_task` (default; one-shot orientation bundle for a task), `for` (intent ranking with domain synonyms such as `fat` → `faturamento`), `status` (graph size and top hubs), `callers` (direct and transitive), `impact` (blast radius, writers, readers), `path` (shortest call path from `from` to `to`), `slice` (definitions and uses of one variable, `target` = `Object:Variable`), `safe_delete` (blockers before deleting a symbol), `index` (rebuild the cache), `doctor` (engine and cache diagnostics)
553
568
 
554
- `genexus_wire` does not go through the Worker or the GeneXus SDK. The Gateway runs `gxwire.exe` on the target folder (`dir`, `kb`, or the active KB path) and returns its output. It reads exported source text (`.prc`, `.trn`, `.wp`, `.sdp`, `.xml`, `.txt`, `.gx`, `.gxd`) with regex heuristics, so answers reflect the exported files, not the live KB; an empty folder returns `empty="true"`. Use it to decide where to look and what a change touches. Use `genexus_query` to search live objects and `genexus_read` to read their parts. Parameters: `task` (`pack_task`, `for`), `target` (`callers`, `impact`, `slice`, `safe_delete`), `from`/`to` (`path`), `format`, `token_budget` (default 1200), `full`, `kb`/`dir`. `format` is `toon` (compact, recommended), `xml` (default), `json`, or `mermaid`; mermaid renders `status`, `callers`, `impact`, `path` and `pack_task`, and other actions return XML. The only file it writes is `.gxwire_cache.bin` in the target folder, on `index` and when the cache is stale.
569
+ `genexus_wire` goes through neither the Worker nor the GeneXus SDK, with one exception: `action=pack_task` on the native KB the session has open is answered by that KB's Worker from the SDK-backed index, with no text export. Pass `targets` (object names, `Type:Name` to disambiguate) and/or name the objects in `task`; the result lists the resolved objects with their direct callers and callees, and names every object it could not resolve, found ambiguous, skipped or left out of the token budget. It is read-only and reads no part body. For every other action the Gateway runs `gxwire.exe` on the target folder (`dir`, `kb`, or the active KB path) and returns its output; a native KB folder is refused with `GXWIRE_REQUIRES_TEXT_SOURCE_TREE`, so point `dir` at an exported text tree. It reads exported source text (`.prc`, `.trn`, `.wp`, `.sdp`, `.xml`, `.txt`, `.gx`, `.gxd`) with regex heuristics, so answers reflect the exported files, not the live KB; an empty folder returns `empty="true"`. Use it to decide where to look and what a change touches. Use `genexus_query` to search live objects and `genexus_read` to read their parts. Parameters: `task` (`pack_task`, `for`), `target` (`callers`, `impact`, `slice`, `safe_delete`), `from`/`to` (`path`), `format`, `token_budget` (default 1200), `full`, `kb`/`dir`. `format` is `toon` (compact, recommended), `xml` (default), `json`, or `mermaid`; mermaid renders `status`, `callers`, `impact`, `path` and `pack_task`, and other actions return XML. The only file it writes is `.gxwire_cache.bin` in the target folder, on `index` and when the cache is stale.
555
570
 
556
571
  **Search & discovery**
557
572
  - `genexus_query` — object search (prefixes `name:`, `type:`, `usedby:`, `parent:`, …)
package/cli/docs.test.js CHANGED
@@ -75,6 +75,68 @@ test('the README release section describes the release flow that actually ships'
75
75
  assert.match(section, /OIDC Trusted Publishing/);
76
76
  });
77
77
 
78
+ test('engine documentation keeps fixture results distinct from SDK replacement', () => {
79
+ const section = markdownSection(read('README.md'), '## Experimental `gx-engine` (Rust SDK Replacement Project)');
80
+
81
+ assert.doesNotMatch(section, /Overall SDK Replacement:[^\n]*100(?:\.0)?%/);
82
+ assert.doesNotMatch(section, /\*\*>\s*380x faster\*\*/);
83
+ assert.match(section, /Full SDK replacement is not verified/);
84
+ assert.match(section, /64\.19×/);
85
+ assert.match(section, /plans\/131-sdk-performance-benchmark\.md/);
86
+ assert.match(section, /plans\/129-implementation-progress\.md#current-acceptance-status--2026-10-18/);
87
+ assert.match(section, /Historical arithmetic fixture build/);
88
+ assert.match(section, /Different pipelines and targets/);
89
+ });
90
+
91
+ test('engine guidance separates package builds, fixture speed and full-KB coverage', () => {
92
+ const coverage = markdownSection(read('README.md'), '### What builds today');
93
+ assert.match(coverage, /Package build/);
94
+ assert.match(coverage, /Selected-object build/);
95
+ assert.match(coverage, /Full native KB build/);
96
+ assert.match(coverage, /346 generated \/ 346 compiled, 0 skipped, 0 refused/);
97
+ assert.match(coverage, /328\/328 C# files byte-identical/);
98
+ assert.match(coverage, /One oracle KB/);
99
+ assert.match(coverage, /packaged binary.*not benchmarked/);
100
+
101
+ const guidance = markdownSection(read('AGENTS.md'), '## gx-engine development');
102
+ assert.match(guidance, /full SDK replacement/);
103
+ assert.match(guidance, /refusals/);
104
+ assert.match(guidance, /Engine\.Backend/);
105
+ assert.match(guidance, /disposable/);
106
+ for (const document of ['src/gx-engine/README.md', 'docs/engine_backend.md', 'plans/131-sdk-performance-benchmark.md']) {
107
+ assert.ok(guidance.includes(`](${document})`), `Missing agent pointer: ${document}`);
108
+ assert.ok(fs.existsSync(path.join(repoRoot, document)), `Missing agent document: ${document}`);
109
+ }
110
+
111
+ const engineReadme = read('src/gx-engine/README.md');
112
+ const engineCoverage = markdownSection(engineReadme, '## Build coverage and routing');
113
+ assert.match(engineCoverage, /full SDK replacement is not established/);
114
+ assert.doesNotMatch(engineReadme, /Full Object Model:\*\* Complete support|compilation in < 20s/);
115
+ assert.match(engineReadme, /packaged binary was smoke-tested, not benchmarked/);
116
+ });
117
+
118
+ test('engine default policy is gxengine and preserves auto/SDK opt-out and reconciliation', () => {
119
+ const section = markdownSection(read('README.md'), '### Activation Flag & Safety Seam');
120
+ assert.match(section, /defaults to `"gxengine"`/);
121
+ assert.match(section, /async\/other directed builds/);
122
+ assert.match(section, /mode=compile_check/);
123
+ assert.match(section, /callers=false/);
124
+ const backend = read('docs/engine_backend.md');
125
+ assert.match(backend, /engine\.scope=target-closure/);
126
+ assert.match(backend, /successful target build does not imply whole-KB success/);
127
+ assert.match(backend, /default `callers=true`/);
128
+ assert.match(section, /`"auto"` routes only builds/);
129
+ assert.match(section, /`"sdk"` keeps every operation on the SDK/);
130
+ assert.match(section, /never trigger automatic SDK replay/);
131
+ assert.match(section, /admitted type-only `genexus_query` calls/);
132
+ assert.match(section, /all reads/);
133
+ assert.match(backend, /No read shape is currently admitted/);
134
+ assert.match(backend, /all object-name\/text searches \(including\s+`exactMatch:true`\)/);
135
+ assert.match(read('docs/engine_backend.md'), /`Engine\.Backend=gxengine` \(also when the section is absent\)/);
136
+ assert.match(read('src/gx-engine/README.md'), /defaults to `Engine\.Backend=gxengine`/);
137
+ assert.match(read('AGENTS.md'), /`Engine\.Backend` defaults to `gxengine`/);
138
+ });
139
+
78
140
  test('the docs index lists every top-level document and every link resolves', () => {
79
141
  const docsDir = path.join(repoRoot, 'docs');
80
142
  const index = read('docs/README.md');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genexus-mcp",
3
- "version": "3.16.0",
3
+ "version": "4.0.0",
4
4
  "mcpName": "io.github.lennix1337/genexus",
5
5
  "description": "GeneXus 16, GeneXus 17, GeneXus 18 MCP server with native SDK support; basic legacy compatibility for GeneXus Evolution 3, GeneXus Evolution 2, GeneXus Evolution 1, GeneXus 15, GeneXus 9.0, GeneXus 8.0 via com-gxpublic and dotnet-reflection drivers — read, edit, and analyze Knowledge Base objects directly from Claude, Cursor, and other AI agents over the Model Context Protocol.",
6
6
  "keywords": [
@@ -7,7 +7,7 @@
7
7
  "targets": {
8
8
  ".NETCoreApp,Version=v10.0": {},
9
9
  ".NETCoreApp,Version=v10.0/win-x64": {
10
- "GxMcp.Gateway/3.16.0": {
10
+ "GxMcp.Gateway/4.0.0": {
11
11
  "dependencies": {
12
12
  "Newtonsoft.Json": "13.0.3",
13
13
  "System.Management": "10.0.5",
@@ -66,7 +66,7 @@
66
66
  }
67
67
  },
68
68
  "libraries": {
69
- "GxMcp.Gateway/3.16.0": {
69
+ "GxMcp.Gateway/4.0.0": {
70
70
  "type": "project",
71
71
  "serviceable": false,
72
72
  "sha512": ""
Binary file
Binary file
@@ -1,19 +1,19 @@
1
1
  {
2
- "GatewayMode": "stdio-isolated",
3
- "Environment": {
4
- "ResolutionPolicy": "strict"
5
- },
6
2
  "ConfigSchemaVersion": 2,
3
+ "GeneXus": {
4
+ "InstallationPath": "C:\\Program Files (x86)\\GeneXus\\GeneXus18",
5
+ "WorkerExecutable": "worker\\\\GxMcp.Worker.exe"
6
+ },
7
+ "GatewayMode": "stdio-isolated",
7
8
  "Server": {
9
+ "WorkerIdleTimeoutMinutes": 5,
8
10
  "EmitStructuredContent": false,
9
- "HttpPort": 0,
10
- "TerseResponses": true,
11
+ "McpStdio": true,
11
12
  "SessionIdleTimeoutMinutes": 10,
12
- "WorkerIdleTimeoutMinutes": 5,
13
- "McpStdio": true
13
+ "TerseResponses": true,
14
+ "HttpPort": 0
14
15
  },
15
- "GeneXus": {
16
- "WorkerExecutable": "worker\\\\GxMcp.Worker.exe",
17
- "InstallationPath": "C:\\Program Files (x86)\\GeneXus\\GeneXus18"
16
+ "Environment": {
17
+ "ResolutionPolicy": "strict"
18
18
  }
19
19
  }
Binary file
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "schemaVersion": "gxmcp-release-manifest/1",
3
- "version": "3.16.0",
4
- "sourceCommit": "5084cdc8f9d1b4624c208809fb6077c27af65f38",
3
+ "version": "4.0.0",
4
+ "sourceCommit": "62272a9c499ff02698c5b3300d64e294f888f4fa",
5
5
  "sourceCommitPolicy": "exact-tag",
6
- "generatedAtUtc": "2026-10-17T13:05:11.7186683Z",
6
+ "generatedAtUtc": "2026-10-21T13:01:38.4377788Z",
7
7
  "runtime": {
8
8
  "gateway": "net10.0-windows",
9
9
  "worker": "net48-x86",
@@ -15,33 +15,33 @@
15
15
  "2026-07-28"
16
16
  ],
17
17
  "schema": "tool_definitions.json",
18
- "schemaSha256": "be4c1f74a47cada8e265bc632a7b87cdd1132020edcb5ea43b5a341829feba7a",
18
+ "schemaSha256": "562b893790fcd2e5e456c82935c86ea82e7612bc9457230184f6e018ed87fd47",
19
19
  "provenance": "gxmcp-sbom.json",
20
20
  "artifacts": [
21
21
  {
22
22
  "path": "gxmcp-sbom.json",
23
- "size": 591,
24
- "sha256": "3182ae289ba22a351be87976719de89744ab7953b6f35e31b8fd1c237c09f0fa"
23
+ "size": 590,
24
+ "sha256": "1a853dda42fee5ebfc7240e7ede0454bd06d558aad4e8020f297a695c17f8ed8"
25
25
  },
26
26
  {
27
27
  "path": "GxMcp.Gateway.exe",
28
28
  "size": 162304,
29
- "sha256": "d8a368d30952ec8b0b69455f7296a11052b2f70f4110b78885532bfd4ace3391"
29
+ "sha256": "50d2195c03a4f013e1b6ecb6325fa37474e551c81f7368f858a5bfcf0a568a24"
30
30
  },
31
31
  {
32
32
  "path": "nexus-ide.vsix",
33
- "size": 1325114,
34
- "sha256": "24cb9e2cdc533a1595e94a505344141180944bb29aef212b4d12569e4833aeee"
33
+ "size": 1325108,
34
+ "sha256": "52bb58f43a7278c3fea90d5d0e541bee82ce9212caf9f9e6edc8e8070df3a5f3"
35
35
  },
36
36
  {
37
37
  "path": "tool_definitions.json",
38
- "size": 155111,
39
- "sha256": "be4c1f74a47cada8e265bc632a7b87cdd1132020edcb5ea43b5a341829feba7a"
38
+ "size": 158549,
39
+ "sha256": "562b893790fcd2e5e456c82935c86ea82e7612bc9457230184f6e018ed87fd47"
40
40
  },
41
41
  {
42
42
  "path": "worker/GxMcp.Worker.exe",
43
- "size": 4302848,
44
- "sha256": "6f33014505f3c3564e6e9fc255bd8f3962f8d774e96e6ddcbe944741f61cc5af"
43
+ "size": 4590080,
44
+ "sha256": "bfe06ca5a6cbe2995105646b01608a0c9fab5b3699d05e1f017e69207e147b70"
45
45
  }
46
46
  ]
47
47
  }
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "schemaVersion": "gxmcp-provenance/1",
3
- "version": "3.16.0",
4
- "sourceCommit": "5084cdc8f9d1b4624c208809fb6077c27af65f38",
3
+ "version": "4.0.0",
4
+ "sourceCommit": "62272a9c499ff02698c5b3300d64e294f888f4fa",
5
5
  "sourceCommitPolicy": "exact-tag",
6
6
  "components": [
7
7
  {
8
8
  "name": "genexus-mcp",
9
9
  "lockfile": "package-lock.json",
10
- "size": 38806,
11
- "sha256": "53dad4a00a3756eb5e24be271a3e80c5325b387c0c1ec1aba2f197560d6b84b3"
10
+ "size": 38804,
11
+ "sha256": "8fe3effecc9074ba753d819c4a1c2607f64cb80d880444f2ab2d586e73b6ee15"
12
12
  },
13
13
  {
14
14
  "name": "nexus-ide",
15
15
  "lockfile": "src/nexus-ide/package-lock.json",
16
- "size": 179505,
17
- "sha256": "c44b3a41911e1defe5cd0639f3e1dcf164b95e26e906d49d867805dd234604ec"
16
+ "size": 179503,
17
+ "sha256": "5f51a13844440860665aa8dbe0c978ba0c573a2bf1de025cf0e76f3961af24f2"
18
18
  }
19
19
  ]
20
20
  }
Binary file
Binary file