SyteLine Dev Hub
The code-layer hub for SyteLine middle-tier development, and the connective tissue between the
sibling extensions across the whole SyteLine lifecycle:
| Layer |
Extension |
| REST / IDO request testing |
MG REST Client (jeking.mg-rest-client) |
| IDO metadata (XML) |
MG IDO Pro Editor (jeking.mg-ido-pro-editor) |
| IDS forms (JSON) |
SL IDS Form Designer (jeking.sl-ids-form-designer) |
| C# ExtensionClasses (code) |
SyteLine Dev Hub (this extension) |
It indexes the C# ExtensionClasses tree and gives a perspective the generic editors can't: the
dependency relationship graph, navigable both ways —
- Look Down — for an interface / class / IDO method, the tree of implementations and
constructor-injected dependencies, resolved through
CompositionRoot.cs and *ModuleRegistrar.cs.
- Look Up — who injects / consumes a given service, including the IDO entry points that reach it.
From any IDO entry point you can jump straight into the sibling tools: Open IDO (IDO Editor),
Test in MG REST Client, and Open Form (IDS Form Designer).
Features
- Commands launcher (top of the activity-bar panel) — a curated set of the most valuable commands
from Dev Hub and every installed sibling extension (MG IDO Pro Editor, SL IDS Form Designer, MG
REST Client), grouped by extension; click to run. Only commands that run with no parameters (a
picker/prompt or a global action) are listed, so every click does something — view-toolbar plumbing
and context-only commands are excluded (use the Command Palette for the full surface). Refreshed on
install/uninstall.
- Dependencies view (activity bar) with an up/down toggle.
- Trace an interface/class from the palette, or the symbol under the cursor in a
.cs file.
- Flat, de-duplicated file list for any trace (copy paths / export a Markdown report).
- Cross-extension jumps to IDO Editor, REST Client, and Form Designer (shown when installed).
- Validate IDO Methods — reconcile a C# entry class's
[IDOMethod] surface against the IDO's
metadata methods (via the IDO Editor) and flag code-only / dangling / kind mismatches.
- List VB Entry Points — static scan for VB
<IDOExtensionClass> classes (not covered by the
C#-driven tree), reported by module with IDO and [IDOMethod] counts.
- Diagnose All Layers — runs the cross-layer scan (IDO metadata + IDS form + C# DI issues into one
normalized, IDO-grouped model) and opens the interactive Diagnostics Matrix seeded with the fresh
result (DI Health view toolbar). The Markdown/HTML, JSON, and CSV report is produced from the Matrix
toolbar's Export — no separate report step. Dev Hub orchestrates and correlates — each layer's
validation stays in its own extension.
- Diagnostics Matrix (interactive) — an interactive webview over the same cross-layer aggregation
with a merged IDO / Forms / DI availability+view switcher: the IDO view lists standard and
_IDS
IDOs as separate objects (with a Merged toggle), colored severity cells, a category dropdown,
module/layer filters, sort, expand-to-issues, and per-row codicon actions — Open IDO, Open C# entry
point, Forms, Test in REST, and Import (deploy). The DI view lists captive/unregistered DI issues with
a Trace jump; the Forms view tags each form .ids/.iv2 (with a type filter), lists its dependent
IDOs on expand, and offers Open / Build-import / Run, plus a COUI Readiness % per .iv2 form (from
the Form Designer's slIds.validateAllFormsData). All three grids (IDO / Forms / DI) have sortable
column headers. A trend view compares each scan to the last
(▲ worsened / ▼ improved, new/fixed IDOs, pinnable baseline). Rescan and export (MD/JSON/CSV) from the
toolbar. Unavailable row actions are disabled (not hidden) so columns align, and an opt-in "show all"
mode lists every IDO / form (not just those with issues). Themed with VS Code variables
(light/dark/high-contrast), strict nonce-CSP.
- Analyze Middle-Tier Logic (coded → code-based Data Rules) — "decompile" an IDO's C# extension
class into output structurally compatible with
ido_analyze_datarules (rules[],
propertyValidators[], seedPlan, messages[]; shared set|state|in-list|in-collection|method
effect vocabulary; operationType; confidence; uiOnly) so the MG REST Client generator +
coverage analyzer consume it with zero new matching logic. Detects SetContext event hooks
(PreItemInsert→insert, PostLoadCollection→load, …), follows one level of DI into handler/dispatcher
impls, and enumerates a dispatcher switch (e.g. ItemFieldValidate) into one property validator per
case. Pure stored-procedure/legacy methods are excluded; computed/cross-method values are honestly
inferred/restTestable:false, never guessed. Human report command + data command
(slDevHub.api.analyzeMiddleTier) + MCP tool (see below).
- IDO Method Parameter API (
slDevHub.api.getIdoMethodParameters, + batch
slDevHub.api.getIdoMethodContracts) — a hidden, read-only data command that backs the MG IDO Pro
Editor's "Refresh Parameters": it locates the C#/VB [IDOMethod] entry point (with one level of
base-class lookup) and returns each parameter's C# type, sequence, message (Infobar) flag, and a
best-effort advisory direction (naming-prefix → keyword) with per-field evidence + confidence,
plus parameterStatus, sourceInfo freshness, a changes summary (from a caller-supplied
existingParameters snapshot — Dev Hub never reads the IDO XML), capabilities, a
contractFingerprint, and a CLM outputContract matching Custom-Load result columns to IDO
properties under strict safety rules. The IDO Editor does the mechanical XML mapping.
- Bundled MCP server exposing the same engine to Kiro:
trace_down, trace_up, trace_ido,
list_files, find_registration, index_status, plus list_entry_points, entry_point_for_ido,
di_health, list_methods, list_types, and the Forms↔IDO tools forms_using_ido /
idos_for_form / trace_backend_for_form, plus diagnostics_all (normalized DI-layer rollup;
the full IDO/forms aggregation is a UI feature), and analyze_middle_tier /
describe_middle_tier_spec_format (an IDO's coded middle-tier logic "decompiled" into code-based
Data Rules — rules[]/propertyValidators[]/seedPlan/messages[], structurally compatible with
ido_analyze_datarules — for AI test generation and coverage), plus analyze_middle_tier_ai /
kiro_cli_status (optional, deterministic-first AI fallback that fills only the residual gaps[] via
the locally-authenticated kiro-cli — no token stored; conflicts lose to the deterministic result;
degrades gracefully when kiro-cli is absent/not logged in).
Settings
| Setting |
Purpose |
slDevHub.extensionClassesRoots |
ExtensionClasses root folder(s) to index (may live outside the workspace). |
slDevHub.formRoots |
Folder(s) to scan for IDS/IV2 forms (Forms↔IDO + MCP forms tools); blank = scan the open workspace, plus the folder of any form you point a command at. |
slDevHub.referenceScope |
Resolve references within the current module or across all roots. |
slDevHub.reportFormat |
Output format for generated reports: markdown (default) opens a Markdown document, html opens a rendered HTML webview. |
slDevHub.mcpNodePath |
Optional Node path for the MCP server (blank = self-contained launcher). |
MCP
Run “SyteLine: Register MCP Server with Kiro” to add the bundled server to
~/.kiro/settings/mcp.json, then reload Kiro. The server reads SL_HUB_ROOTS and reuses the exact
same engine as the UI, so agents and humans see one source of truth. After an upgrade the registration
self-heals on activation (the bundled launcher path is version-stamped), so you no longer need to
re-run the command on every version bump — reload Kiro when prompted.
Build
npm install
npm run build # esbuild → dist/extension.js + dist/mcp/server.js
npm run typecheck # tsc --noEmit
npm test # node --test on the pure engine
npm run package # vsce package
How it works
A pure, vscode-free engine (src/model/) does a syntax/regex parse of the tree (no compiler):
DI registrations, [IDOExtensionClass] entry points, GetService<T> calls, and constructor
dependencies. The extension wraps it with a tree view and cross-extension commands; the MCP server
wraps the same engine for Kiro. Lambda-factory registrations are resolved by reading a new X( in
the registration statement.
| |