VS Code authoring assistant for Microsoft.IC3.MonitoringAsCode C# definitions.
Current features:
- Dashboard link checker — validates
AddDashboardLink(...)paths against the configured Geneva dashboard tree, with diagnostics, inline decorations, hover info, autocomplete, and quick fixes. .LastModified()auto-update — optionally stamps timestamp and author on save.- Agent tools — a set of Language Model tools (
mac_listDiagnostics,mac_getSuggestedFixes,mac_applyFix,mac_verifyDiagnostics,mac_describeCapabilities) so GitHub Copilot Chat — and any other VS Code chat agent — can find, fix, and verify MaC problems on your behalf.
More MonitoringAsCode authoring helpers will be added here over time.
Install
From the Extensions view in VS Code, search for IC3 MonitoringAsCode and install. Or from the command line:
code --install-extension IC3PlatformMonitoringAsCode.ic3-monitoringascode
Marketplace listing: https://marketplace.visualstudio.com/items?itemName=IC3PlatformMonitoringAsCode.ic3-monitoringascode
Activation
No configuration is needed. The extension activates automatically when you
open a C# file inside a properly-configured MaC project — i.e. one produced
by MacConverter (or hand-set up to look the same). Everything just works.
How the Geneva source path is resolved
The extension walks up from the active C# file looking for a
MonitoringAsCode.props and reads its <MaCOutputDir> — the same value
the build uses to write Geneva JSON artifacts — so the extension and the
build can never disagree about the path. The folder must contain a
Dashboards/ subfolder for the dashboard link checker to activate.
$(MSBuildThisFileDirectory) and $(MSBuildProjectDirectory) are the
only MSBuild macros expanded; absolute and plain-relative paths also
work. Any other unresolved $(...) macro causes the props file to be
skipped (the walk continues further up the tree).
Features
Dashboard link checker
Validates AddDashboardLink("…") calls in C# against the dashboard JSON tree
under the resolved Geneva source folder's Dashboards/ subfolder.
You'll see:
- A red squiggle and
❌decoration on any path that doesn't resolve to a dashboard JSON file under the configured root. - A green
✅decoration when the path resolves. - Hover over the path to see the resolved dashboard file.
- Autocomplete inside the string literal to pick from known dashboards.
- A "Replace with: …" code action when the path differs only by case.
Toggle via ic3Mac.dashboardLinkChecker.enabled.
.LastModified() auto-update
When enabled, on save the extension rewrites the .LastModified("date", "author") argument with the current timestamp and the configured author.
Toggle via ic3Mac.autoUpdateLastModified; set the author via ic3Mac.author.
Agent tools
The extension contributes five VS Code Language Model tools that let chat agents (GitHub Copilot Chat and any other LM-tool-aware agent) discover, fix, and verify MaC problems without you having to copy-paste filenames or quick-fix titles. They are registered as soon as the extension activates — no configuration needed.
| Tool | What it does |
|---|---|
mac_describeCapabilities |
Self-describing surface: which diagnostic categories, fix kinds, and tool versions are available. Agents should call this first to avoid stale assumptions. |
mac_listDiagnostics |
Lists current MaC warnings/errors (optionally scoped to a file or category). Returns a stable id per diagnostic. |
mac_getSuggestedFixes |
Returns ranked fix candidates for the given diagnostic ids, plus a safety signal (auto / review / ask) so the agent knows whether to apply directly or ask you. |
mac_applyFix |
Applies the chosen {diagnosticId, fixId} pairs. Saves the modified files to disk by default so git diff reflects the changes immediately (pass save: false to keep buffers dirty). Always prompts for confirmation before editing. |
mac_verifyDiagnostics |
Re-runs analysis on the affected files and reports which ids are resolved, still present, or newly appeared. |
Using them from chat
In most cases you don't need to do anything special — ask in natural language and the agent will pick the right tools:
Fix the broken dashboard links in this project.
The agent will typically chain mac_listDiagnostics → mac_getSuggestedFixes → mac_applyFix → mac_verifyDiagnostics, asking you to disambiguate when a fix is safety: "review" or "ask".
You can also reference a tool explicitly with # to force the agent to use it:
#macDiagnostics what's broken under
Monitors/?#macFixes for the diagnostics above, then #macApply the top suggestion for each.
The reference names (macCapabilities, macDiagnostics, macFixes, macApply, macVerify) are listed in the chat tool picker.
Using them from a custom agent
If you're building your own agent / chat extension, invoke the tools via vscode.lm.invokeTool('mac_listDiagnostics', { input: { /* see schema */ } }, token). Every tool returns a single JSON LanguageModelTextPart with shape { ok: true, data: ... } on success or { ok: false, error: { code, message, details? } } on failure — use the diagnostic / fix ids as opaque handles across calls.
Configuration
Settings contributed under ic3Mac.*:
| Setting | Default | Description |
|---|---|---|
ic3Mac.dashboardLinkChecker.enabled |
true |
Enable dashboard link validation, hover info, autocomplete, and quick fixes. |
ic3Mac.autoUpdateLastModified |
false |
Automatically update .LastModified() timestamp and author on save. |
ic3Mac.author |
"" |
Author name for .LastModified() updates. Falls back to git config user.name. |
The Geneva source path itself is not a setting — see Activation.
Reporting issues
File a bug or feature request against the
ic3_monitoring repository.
Contributing
See CONTRIBUTING.md for build, debug, packaging, and publish instructions.