diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/.gitignore b/Agents/AI ERP Agents/StoreMonitoringAgent/.gitignore
index 0da642ca..38bf60e0 100644
--- a/Agents/AI ERP Agents/StoreMonitoringAgent/.gitignore
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/.gitignore
@@ -99,3 +99,12 @@ docs/SMA V2 cost estimate.html
docs/copilot-studio-agent-review.md
docs/cost-estimate-v2.md
docs/auto-mitigation-with-azure-arc.md
+docs/pos-business-process-catalog.md
+scripts/auto-mitigation-actions.ps1
+scripts/invoke-arc-clear-store-commerce-event-log.ps1
+scripts/invoke-arc-run-command-pilot.ps1
+scripts/invoke-arc-store-commerce-version.ps1
+kql-queries/pos-all-user-sessions-process-mining.kql
+kql-queries/pos-user-session-process-mining.kql
+kql-queries/pos-user-sessions-by-device.kql
+scripts/New-RetailHardwareStationCertificate.ps1
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/README.md b/Agents/AI ERP Agents/StoreMonitoringAgent/README.md
index 3952a433..2ea734aa 100644
--- a/Agents/AI ERP Agents/StoreMonitoringAgent/README.md
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/README.md
@@ -90,7 +90,7 @@ The solution connects POS devices to Azure via **Azure Arc** and **Azure Monitor
- See [Quick start](docs/quick-start-portal.md)
3. **Import the Agent**
- - Import the Copilot Studio agent into your Power Platform environment using the solution zip file `StoreMonitoringAgent_1_0_0_25.zip` provided in the root of this repository. See [Step 7 in the Quick Start guide](docs/quick-start-portal.md#step-7-setup-copilot-studio-agent-5-minutes) for detailed instructions.
+ - Import the Copilot Studio agent into your Power Platform environment using the solution zip file `StoreMonitoringAgent_1_0_0_26.zip` provided in the root of this repository. See [Step 7 in the Quick Start guide](docs/quick-start-portal.md#step-7-setup-copilot-studio-agent-5-minutes) for detailed instructions.
## Documentation
@@ -101,7 +101,8 @@ The solution connects POS devices to Azure via **Azure Arc** and **Azure Monitor
| [Device Onboarding Guide](docs/device-onboarding.md) | Connect POS devices to Azure Arc and configure AMA |
| [Capturing Database Metrics to Log Analytics](docs/database-metrics-log-analytics.md) | Configure offline SQL database metrics collection |
| [Store Commerce App Update Procedure](docs/store-commerce-update.md) | Procedure for updating Store Commerce on monitored devices |
-| [Alert-Triggered Agent](docs/alert-triggered-agent.md) | Alert-triggered investigation pattern using Azure Monitor and Teams |
-| [Autonomous / Proactive Monitoring Setup](docs/autonomous-proactive-monitoring.md) | Configure the Recurring Store Monitoring Agent Flow |
+| [Model Support](docs/model-support.md) | Supported generative AI models for the Copilot Studio agent |
+| [Alert-Triggered Agent](docs/alert-triggered-agent.md) | Alert-triggered investigation pattern using Azure Monitor and Teams |
+| [Autonomous / Proactive Monitoring Setup](docs/autonomous-proactive-monitoring.md) | Configure the Recurring Store Monitoring Agent Flow |
| [Known Limitations](docs/known-limitations.md) | Current known limitations and workarounds |
| [Periodic Maintenance Guide](docs/periodic-maintenance.md) | Periodic rotation and expiration checks for secrets and certificates |
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/StoreMonitoringAgent_1_0_0_25.zip b/Agents/AI ERP Agents/StoreMonitoringAgent/StoreMonitoringAgent_1_0_0_26.zip
similarity index 64%
rename from Agents/AI ERP Agents/StoreMonitoringAgent/StoreMonitoringAgent_1_0_0_25.zip
rename to Agents/AI ERP Agents/StoreMonitoringAgent/StoreMonitoringAgent_1_0_0_26.zip
index cdf68423..c6e460fd 100644
Binary files a/Agents/AI ERP Agents/StoreMonitoringAgent/StoreMonitoringAgent_1_0_0_25.zip and b/Agents/AI ERP Agents/StoreMonitoringAgent/StoreMonitoringAgent_1_0_0_26.zip differ
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/docs/alert-triggered-agent.md b/Agents/AI ERP Agents/StoreMonitoringAgent/docs/alert-triggered-agent.md
index 0ced5059..6de65b3f 100644
--- a/Agents/AI ERP Agents/StoreMonitoringAgent/docs/alert-triggered-agent.md
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/docs/alert-triggered-agent.md
@@ -23,6 +23,20 @@ flowchart TD
H[Function App settings] -.-> D
I[Common Alert Schema] -.-> C
I -.-> E
+
+ classDef telemetry fill:#DFF3FF,stroke:#0078D4,color:#0B2942,stroke-width:2px
+ classDef monitor fill:#FFF4CE,stroke:#C19C00,color:#3B3000,stroke-width:2px
+ classDef compute fill:#F3E8FF,stroke:#7B2CBF,color:#2D123F,stroke-width:2px
+ classDef copilot fill:#E8F5E9,stroke:#2E7D32,color:#173A19,stroke-width:2px
+ classDef notification fill:#E8EAFD,stroke:#4F5BD5,color:#20265C,stroke-width:2px
+ classDef supporting fill:#F2F2F2,stroke:#616161,color:#242424,stroke-width:1.5px,stroke-dasharray:5 3
+
+ class A telemetry
+ class B,C monitor
+ class D compute
+ class E,F copilot
+ class G notification
+ class H,I supporting
```
## Request Flow
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/docs/image1.png b/Agents/AI ERP Agents/StoreMonitoringAgent/docs/image1.png
new file mode 100644
index 00000000..33abb02f
Binary files /dev/null and b/Agents/AI ERP Agents/StoreMonitoringAgent/docs/image1.png differ
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/docs/known-limitations.md b/Agents/AI ERP Agents/StoreMonitoringAgent/docs/known-limitations.md
index 2d3da88c..e6aa1063 100644
--- a/Agents/AI ERP Agents/StoreMonitoringAgent/docs/known-limitations.md
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/docs/known-limitations.md
@@ -21,6 +21,7 @@
## Copilot Studio Agent
- **Non-deterministic response generation** — the AI may produce inaccurate summaries or miss relevant details for complex or ambiguous questions.
+- **Large telemetry result sets may produce a no-information response** — when the selected time range returns a large volume of telemetry data, the agent may return "No information was found that could help answer this." Restrict the time range and run the query again to reduce the number of returned records.
- **Predefined topics only** — queries outside Application Errors, Hardware Station Errors, Retail Server Errors, Database Metrics, and Device Online/Offline require custom topic authoring.
- **Single Log Analytics workspace** — cross-workspace queries are not supported.
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/docs/model-support.md b/Agents/AI ERP Agents/StoreMonitoringAgent/docs/model-support.md
new file mode 100644
index 00000000..a6500e0f
--- /dev/null
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/docs/model-support.md
@@ -0,0 +1,16 @@
+# Model Support
+
+The D365 Commerce Store Monitoring Agent supports the following generative AI models in Microsoft Copilot Studio:
+
+| Model | Support status |
+| ----------------- | -------------- |
+| GPT-5 Chat | Supported |
+| Claude Sonnet 4.6 | Supported |
+
+## Model Selection
+
+Select one of the supported models in the Copilot Studio agent settings. Model availability can vary by environment, region, licensing, and Microsoft Copilot Studio release channel.
+
+After changing the model, test the agent's monitoring, diagnostic, and alert-investigation topics before publishing it to production. Validate response accuracy, KQL workflow invocation, formatting, and AI-generated content disclosures.
+
+Models not listed in this document have not been validated for this solution and are not currently supported.
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/docs/quick-start-portal.md b/Agents/AI ERP Agents/StoreMonitoringAgent/docs/quick-start-portal.md
index c2d12fc9..dac931af 100644
--- a/Agents/AI ERP Agents/StoreMonitoringAgent/docs/quick-start-portal.md
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/docs/quick-start-portal.md
@@ -136,6 +136,10 @@ Steps:
```
_(Store Commerce Event ID 40102 — used for Retail Server performance diagnostics)_
```xpath
+ Application!*[System[Provider[@Name='Microsoft Dynamics - Retail Hardware Station'] and EventID=7103]]
+ ```
+ _(Retail Hardware Station Event ID 7103 — shared Hardware Station errors)_
+ ```xpath
Application!*[System[Provider[@Name='DatabaseMetricsService'] and (EventID=3000)]]
```
_(Database Metrics Service — used by DatabaseMetrics topic)_
@@ -335,7 +339,7 @@ Default settings in `appsettings.json`:
3. Go to [Copilot Studio](https://copilotstudio.microsoft.com)
4. Click **Solutions** in the left menu
5. Click **Import solution**
-6. Browse to the `StoreMonitoringAgent_1_0_0_25.zip` file provided in the root of this repository.
+6. Browse to the `StoreMonitoringAgent_1_0_0_26.zip` file provided in the root of this repository.
7. On the **Connections** page, map the **Azure Monitor Logs** connection reference to an existing connection or create one. Sign in with an account that has permission to query the Log Analytics workspace.
8. If prompted for the optional `SMAAlertObjectId` environment variable, keep the imported value or enter a temporary GUID. This value is not a secret and is only used by the optional alert-triggered flows. Replace it with the correct object ID when completing [Step 8](#step-8-optional---enable-autonomous-alert-capabilities).
9. Click **Next** → **Import** and wait for the import to complete.
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/installer-eventlogsink/WixProject/EventLogSinkConfigService.Installer.wixproj b/Agents/AI ERP Agents/StoreMonitoringAgent/installer-eventlogsink/WixProject/EventLogSinkConfigService.Installer.wixproj
index 328be7e9..e0a18efc 100644
--- a/Agents/AI ERP Agents/StoreMonitoringAgent/installer-eventlogsink/WixProject/EventLogSinkConfigService.Installer.wixproj
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/installer-eventlogsink/WixProject/EventLogSinkConfigService.Installer.wixproj
@@ -26,6 +26,7 @@
INSTALLFOLDER
true
var.PublishDir
+ ExcludeServiceExecutable.xsl
-
+
\ No newline at end of file
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/installer-eventlogsink/WixProject/ExcludeServiceExecutable.xsl b/Agents/AI ERP Agents/StoreMonitoringAgent/installer-eventlogsink/WixProject/ExcludeServiceExecutable.xsl
new file mode 100644
index 00000000..d70db021
--- /dev/null
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/installer-eventlogsink/WixProject/ExcludeServiceExecutable.xsl
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/installer-eventlogsink/WixProject/Product.wxs b/Agents/AI ERP Agents/StoreMonitoringAgent/installer-eventlogsink/WixProject/Product.wxs
index 54d3dbdb..ff911d0d 100644
--- a/Agents/AI ERP Agents/StoreMonitoringAgent/installer-eventlogsink/WixProject/Product.wxs
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/installer-eventlogsink/WixProject/Product.wxs
@@ -72,9 +72,9 @@
Value=""icacls" "C:\Program Files\Microsoft Dynamics 365\10.0\Store Commerce\Microsoft\contentFiles\Pos\config.json" /grant "NT SERVICE\EventLogSinkConfigService:M" /Q" />
-
+
-
+
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-error-trend.kql b/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-error-trend.kql
index 21ec8194..02f301bf 100644
--- a/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-error-trend.kql
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-error-trend.kql
@@ -6,7 +6,7 @@ let WindowEnd = now();
Event
| where TimeGenerated between (WindowStart .. WindowEnd)
| where EventLog == "Application"
-| where EventID == 40450
+| where EventID == 40450 or (EventID == 7103 and Source =~ "Microsoft Dynamics - Retail Hardware Station")
| extend DeviceName = Computer
| summarize ErrorCount = count(), CriticalCount = countif(EventLevelName == "Critical"), ErrorCountOnly = countif(EventLevelName == "Error"), Sources = make_set(Source), SampleMessage = take_any(RenderedDescription) by TimeBucket = bin(TimeGenerated, 1h), DeviceName
| project Hour = format_datetime(TimeBucket, "yyyy-MM-dd HH:mm"), DeviceName, ErrorCount, CriticalCount, ErrorCountOnly, Sources, SampleMessage
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-errors-count.kql b/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-errors-count.kql
index 5e1eb5eb..05953116 100644
--- a/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-errors-count.kql
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-errors-count.kql
@@ -3,7 +3,7 @@ Event
| where TimeGenerated > ago(1d)
| where EventLog == "Application"
| where EventLevelName in ("Error", "Critical")
-| where EventID == 40450
+| where EventID == 40450 or (EventID == 7103 and Source =~ "Microsoft Dynamics - Retail Hardware Station")
| extend DeviceName = Computer
| summarize
ErrorCount = count(),
diff --git a/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-errors.kql b/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-errors.kql
index a491a621..dc93efef 100644
--- a/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-errors.kql
+++ b/Agents/AI ERP Agents/StoreMonitoringAgent/kql-queries/hardware-station-errors.kql
@@ -3,8 +3,14 @@ Event
| where TimeGenerated > ago(1d)
| where EventLog == "Application"
| where EventLevelName in ("Error", "Critical")
-| where EventID == 40450
-| extend DeviceName = Computer, ErrorMessage = RenderedDescription
-| project TimeGenerated, DeviceName, EventID, Source, ErrorMessage
+| where EventID == 40450 or (EventID == 7103 and Source =~ "Microsoft Dynamics - Retail Hardware Station")
+| extend SplitMarker = iff(EventID == 7103, "ExceptionMessage", "The activityId")
+| extend SplitStart = indexof(tolower(RenderedDescription), tolower(SplitMarker))
+| extend StackStart = iff(EventID == 7103, SplitStart + strlen(SplitMarker), SplitStart)
+| extend RawStackTrace = iff(SplitStart >= 0, trim_start(@'[\s:=''\.]+', substring(RenderedDescription, StackStart)), "")
+| extend StackTrace = replace_string(replace_string(replace_string(replace_string(replace_string(RawStackTrace, "\\\\r\\\\n", "\n"), "\\\\n", "\n"), "\\r\\n", "\n"), "\\n", "\n"), "\\t", "\t")
+| extend DeviceName = Computer,
+ ErrorMessage = iff(SplitStart >= 0, trim_end(@'[\s,;:\.]+', substring(RenderedDescription, 0, SplitStart)), RenderedDescription)
+| project TimeGenerated, DeviceName, EventID, Source, ErrorMessage, StackTrace
| order by TimeGenerated desc
| limit 100