Commit graph

4156 commits

Author SHA1 Message Date
jkdevito
c323c872fc fix: match main assembly by PackageId metadata instead of AssemblyName 2026-07-07 17:20:22 -05:00
jkdevito
1e63b10aa4 fix: report main assembly's PackageId (PepperDashEssentials) in packageManifest API 2026-07-07 17:14:34 -05:00
jkdevito
47e186d8f4 fix(config): correctly detect v1 vs v2 config and preserve versions node
- Determine config version by presence of "system" and "template" nodes
  instead of "versions", since a v2 config can also include "versions"
  and was previously being skipped from merging as a result.
- Preserve the "versions" node after merging a v1 config, since
  PortalConfigReader.MergeConfigs does not carry it forward.
2026-07-07 16:55:43 -05:00
jkdevito
2f7789b374 fix: prefer embedded PackageId assembly metadata in packageManifest API
WHAT / WHY
----------
GetPackageManifestRequestHandler previously identified a loaded plugin's
NuGet PackageId by fuzzy-matching AssemblyTitle/AssemblyName against the
config's packageId - a chain that silently fails for any plugin whose
AssemblyTitle/AssemblyName doesn't happen to match its PackageId (verified
against real shipped plugin DLLs; see FINDINGS-nuget-packageid-gaps.md).

epi-symetrix-dsp and epi-shure-mxa have already backported a
Directory.Build.props change that embeds
`<AssemblyMetadata Include="PackageId" Value="$(PackageId)" />`, giving
Essentials an unambiguous, authoritative PackageId via
AssemblyMetadataAttribute("PackageId", ...) instead of guessing. Validated
by building both plugins and inspecting the generated AssemblyInfo.cs.

Changes:
- src/Directory.Build.props: add the same AssemblyMetadata PackageId item,
  so every Essentials-owned assembly (Core, Essentials, Devices.Common,
  MobileControl, MobileControl.Messengers) now embeds its real PackageId
  too - previously none of them did.
- GetPackageManifestRequestHandler.cs:
  - PopulatePackages: read AssemblyMetadataAttribute("PackageId", ...) from
    loaded plugin assemblies and use it as the first-priority match/identity
    signal, ahead of the AssemblyTitle -> AssemblyName -> AssemblyName-minus-
    ".4Series" fallback chain. Loaded-but-unconfigured plugins that carry
    this metadata now report a PackageId in the manifest instead of null.
  - PopulateEssentials: replace the hardcoded "PepperDash.Essentials"
    fallback (which matched none of the real PackageIds) with the reflected
    value from PepperDash.Essentials.Core's own assembly metadata.

Fully backward compatible: plugins without the updated Directory.Build.props
(most existing epi-* repos today) fall through to the prior fallback chain
unchanged.

RECOMMENDATIONS - Essentials & sub-projects (this repo)
--------------------------------------------------------
- AssemblyName/AssemblyTitle drift from PackageId across sub-projects
  (confirmed via generated AssemblyInfo.cs, not assumed):
    PepperDash.Essentials.Core:                 PackageId "PepperDash.Essentials.Core"
                                                 vs AssemblyName "PepperDash_Essentials_Core"
    PepperDash.Essentials.Devices.Common:        PackageId "PepperDash.Essentials.Devices.Common"
                                                 vs AssemblyName "Essentials Devices Common"
    PepperDash.Essentials.MobileControl:         PackageId "PepperDash.Essentials.MobileControl"
                                                 vs AssemblyName "epi-essentials-mobile-control"
    PepperDash.Essentials.MobileControl.Messengers: PackageId "...Messengers"
                                                 vs AssemblyName "mobile-control-messengers"
  Only PepperDash.Essentials and PepperDash.Core happen to agree. Fixing
  AssemblyName changes the physical .dll filename for existing consumers,
  so this needs a deliberate, versioned decision - not bundled here.
- Once this ships and bakes for a release or two, consider deleting the
  now-redundant "PepperDash.Essentials" hardcoded string entirely and the
  Product/AssemblyTitle-based Name fallback, since AssemblyMetadata PackageId
  supersedes both for any assembly built after this change.

RECOMMENDATIONS - EPI plugin repos (epi-*)
-------------------------------------------
- Backport `<AssemblyMetadata Include="PackageId" Value="$(PackageId)" />`
  into every existing epi-* repo's src/Directory.Build.props (recommendation
  E from FINDINGS-nuget-packageid-gaps.md). This is opt-in and additive -
  repos that skip it keep working via the existing fallback chain, but gain
  nothing until they backport it and cut a new release.
- Land the corresponding fix in EssentialsPluginTemplate
  (src/Directory.Build.props + src/epi-make-model.4Series.csproj) so all
  *new* plugin repos get this by default, and fix the template's own
  AssemblyTitle/PackageId drift ("Plugin" vs "Plugins") while there.
- Already-published plugin versions can't be retroactively fixed - this only
  takes effect on a plugin's next release after adopting the template change.

WORKFLOW RECOMMENDATIONS
-------------------------
- Extend workflow-templates' essentialsplugins-4Series-builds.yml "Check
  Package Name" step to validate the built DLL's embedded
  AssemblyMetadataAttribute("PackageId", ...) (and/or AssemblyTitle as a
  fallback) against the repo-derived expected package name - today it only
  compares the .nupkg filename, which would not have caught drift like
  epi-display-samsung-mdc's AssemblyTitle mismatch.
- Sequence this after the template + per-repo backports have landed and
  baked for a release cycle, otherwise it will fail CI for every epi-*
  repo that hasn't picked up the Directory.Build.props change yet. Gate it
  behind the existing bypassPackageCheck input for repos not yet ready.
2026-07-07 16:22:23 -05:00
jkdevito
588057f3ba feat: add packageManifest CWS API route
New GET https://{ip}/cws/app{xx}/api/packageManifest route returning a JSON
package manifest (Essentials + plugins + user interfaces) shaped to hydrate
the vsce-essentials-version-manager extension's VersionsSnapshot object.

- EssentialsConfig.cs: add [JsonProperty("versions")] to EssentialsConfig.Versions
  (was attribute-less); add NugetVersion.Name; NullValueHandling.Ignore on
  PackageId/RepoUrl/Name.
- New GetPackageManifestRequestHandler: deep-copies the config's VersionData
  (never mutates the live config object), then enriches it via reflection:
  - essentials: version from Global.AssemblyVersion, repoUrl/name from the
    RepositoryUrl AssemblyMetadata + AssemblyProduct of
    PepperDash.Essentials.Core's own assembly (PluginLoader.EssentialsAssembly.Assembly
    is null at runtime due to a pre-existing name-matching bug, so this route
    reads its own loaded assembly instead), packageId from config or a constant.
  - packages[]: merges PluginLoader.EssentialsPluginAssemblies (matched to config
    packages by packageId via AssemblyTitle -> AssemblyName -> AssemblyName minus
    a trailing .4Series suffix) with reflection supplying version and filling
    missing repoUrl/name; unmatched loaded assemblies are emitted without a
    packageId; configured-but-not-loaded packages pass through unchanged.
  - userInterfaces/touchpanelWrapperApp are passed through from config as-is.
  - Entries with no resolvable version are skipped (the extension's parser drops
    entries whose version isn't a string).
- EssentialsWebApi.cs: register the new packageManifest route next to versions.

Build verified clean (Core + Essentials program, 0 errors). Not yet tested on
hardware.
2026-07-05 20:57:05 -05:00
jkdevito
64d60dacc2 feat: update version object
Add touchpanelWrapperApp, userInterfaces, and repoUrl to VersionData config schema

VersionData/NugetVersion previously only modeled the essentials and
packages entries under the versions node. This adds support for the
touchpanelWrapperApp (single object) and userInterfaces (array) nodes,
plus a repoUrl property on NugetVersion so it round-trips instead of
being silently dropped, matching the schema produced by the
vsce-essentials-version-manager extension.
2026-07-02 17:13:26 -05:00
Neil Dorin
f34d7223e0
Merge pull request #1438 from PepperDash/set-secrets-formatting 2026-07-02 14:08:32 -06:00
Andrew Welker
68c44e46ae fix: string formatting for console responses was incorrect in some cases and causing exceptions 2026-07-02 15:06:51 -05:00
Neil Dorin
4f1eb979d3
Merge pull request #1436 from PepperDash/claude/deprecate-imobilecontrolmessengerwithsubscriptions 2026-06-26 18:11:17 -06:00
anthropic-code-agent[bot]
8ac4eb7584
refactor: marked mobile control subscription items as obsolete
Co-authored-by: ndorin <18535240+ndorin@users.noreply.github.com>
2026-06-26 22:32:56 +00:00
Neil Dorin
0240887d93
Clarify summary for EnableMessengerSubscriptions property
Updated the summary comment for EnableMessengerSubscriptions property to clarify its purpose.
2026-06-26 15:57:52 -06:00
copilot-swe-agent[bot]
640bd7a8a7
Update XML summary for EnableMessengerSubscriptions to reflect obsolete status 2026-06-26 21:55:49 +00:00
Neil Dorin
2fac0ca926
Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-26 14:32:22 -06:00
anthropic-code-agent[bot]
af5611e403
Mark IMobileControlMessengerWithSubscriptions and EnableMessengerSubscriptions as obsolete
All messengers are now subscription based in v3.x, making these
constructs no longer necessary.

Closes #1435

Agent-Logs-Url: https://github.com/PepperDash/Essentials/sessions/bda64c9c-5343-412b-801f-5e60816bc38d

Co-authored-by: ndorin <18535240+ndorin@users.noreply.github.com>
2026-06-26 20:11:48 +00:00
anthropic-code-agent[bot]
3286d27898
Initial plan 2026-06-26 20:09:32 +00:00
erikdred
a63da82cc3
Merge pull request #1432 from PepperDash/fix/web-debug-url
Fix/web debug url
2026-06-12 17:15:05 -04:00
Neil Dorin
3974455337 fix: add port forward timeout handling in DebugSessionRequestHandler 2026-06-12 15:08:34 -06:00
Neil Dorin
782bb6c057 fix: improve CS LAN IP handling and update fallback debug session URL in DebugSessionRequestHandler 2026-06-12 14:52:35 -06:00
Neil Dorin
907eb2f397 fix: add csIp handling and update debug session URL in DebugSessionRequestHandler 2026-06-12 14:29:49 -06:00
Neil Dorin
72a4c63a06
Merge pull request #1430 from PepperDash/feature/add-escape-handling-for-devjson
Feature/add escape handling for devjson
2026-06-12 11:31:24 -06:00
Neil Dorin
5f26cb98fd
Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-12 11:28:39 -06:00
Neil Dorin
75587c361f
Merge pull request #1428 from PepperDash/tieline-mapping
Fix cache clearing for impossibleRoutes
2026-06-09 09:25:42 -06:00
Andrew Welker
c3511cd1a6 fix: remove impossibleRoutes cache
The cache wasn't being cleared correctly, and was an unnecessary
add.
2026-06-09 10:18:25 -05:00
Neil Dorin
1ce86dab29 fix: add escape handling for port forwarding in DebugSessionRequestHandler 2026-06-02 14:10:33 -06:00
Neil Dorin
77c700c565 fix: add escape handling for byte arrays and strings in DeviceJsonApi 2026-06-02 11:25:48 -06:00
Neil Dorin
aa050121ae
Merge pull request #1424 from PepperDash/fix/videoCodec-routing-issues
fix: update routing logic
2026-05-22 10:18:53 -06:00
Neil Dorin
abef1d095f fix: prevent processing of null or empty midpoint keys in RoutingFeedbackManager 2026-05-22 09:48:12 -06:00
Neil Dorin
f658fdf363 fix: update routing logic and enhance logging in Extensions and MockVC classes
closes #1423
2026-05-21 16:21:03 -06:00
Neil Dorin
469999b6f7
Merge pull request #1422 from PepperDash/fix/fix-eControlMethod-enum-values
Fix/fix e control method enum values
2026-05-20 16:30:22 -06:00
Neil Dorin
08aba35334 fix: addresses #1421 2026-05-20 16:17:21 -06:00
Neil Dorin
68fe205504 fix: assign explicit values to eControlMethod enum members and add UdpClient entry as last value 2026-05-20 15:58:46 -06:00
Neil Dorin
e1a5c32c1f
Merge pull request #1420 from PepperDash/hotfix-udpClient-clean
feat: add support for UdpClient in communication methods
2026-05-18 09:45:34 -06:00
Jonathan Arndt
18f7000d76 fix: add udpClient behavior to throttle receive errors and reset upon valid traffic arrival 2026-05-15 13:45:50 -07:00
Jonathan Arndt
d47cfd5e62
fix: Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-15 13:13:24 -07:00
copilot-swe-agent[bot]
4f2d2ca746
fix: log udp client send failures when disconnected
Agent-Logs-Url: https://github.com/PepperDash/Essentials/sessions/761a7a78-c51f-474b-9000-baa9a232c0d0

Co-authored-by: jonnyarndt <21110580+jonnyarndt@users.noreply.github.com>
2026-05-15 20:09:53 +00:00
Jonathan Arndt
e6583f7824
fix: Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-15 13:06:25 -07:00
Jonathan Arndt
e57bc43a10
fix: Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-15 13:04:28 -07:00
Jonathan Arndt
b83af26b77
fix: Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-15 13:01:08 -07:00
Jonathan Arndt
c9f5af184b feat: add support for UdpClient in communication methods and implement GenericUdpClient class 2026-05-14 17:22:38 -07:00
Neil Dorin
beb77ec468
Merge pull request #1418 from PepperDash/fix/devtools-fixex
Fix/devtools fixex
2026-05-11 10:59:58 -06:00
Neil Dorin
b318e7f365 fix: validate certificate for private key presence in DebugWebsocketSink
Co-authored-by: Copilot <copilot@github.com>
2026-05-11 09:55:27 -06:00
Neil Dorin
a9dd57fdaf refactor: remove Password from LoginResponse and related token assignment 2026-05-11 09:51:48 -06:00
Neil Dorin
d879430616 feat: update LoginResponse structure to include Password in the token response 2026-05-11 09:50:39 -06:00
Neil Dorin
1a5840c29a
Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-11 09:48:12 -06:00
Neil Dorin
6fbdaa9ca0 Merge remote-tracking branch 'origin/main' into fix/devtools-fixex 2026-05-10 20:48:10 -06:00
Neil Dorin
e5e1802da9 feat: enhance LoginRequestHandler to include detailed LoginResponse structure
Co-authored-by: Copilot <copilot@github.com>
2026-05-10 20:48:05 -06:00
Neil Dorin
17adac639e
Merge pull request #1417 from PepperDash/maintenance/add-deprecations 2026-05-08 16:50:02 -06:00
Neil Dorin
2607180ab5
Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-08 13:20:03 -06:00
Neil Dorin
f1ef479301
Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-08 13:19:46 -06:00
Neil Dorin
8ba993ed66
Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-08 13:19:04 -06:00