HyssosTech.Sdk.STP 0.4.2-preview

Prefix Reserved
This is a prerelease version of HyssosTech.Sdk.STP.
There is a newer version of this package available.
See the version list below for details.
dotnet add package HyssosTech.Sdk.STP --version 0.4.2-preview
                    
NuGet\Install-Package HyssosTech.Sdk.STP -Version 0.4.2-preview
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="HyssosTech.Sdk.STP" Version="0.4.2-preview" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="HyssosTech.Sdk.STP" Version="0.4.2-preview" />
                    
Directory.Packages.props
<PackageReference Include="HyssosTech.Sdk.STP" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add HyssosTech.Sdk.STP --version 0.4.2-preview
                    
#r "nuget: HyssosTech.Sdk.STP, 0.4.2-preview"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package HyssosTech.Sdk.STP@0.4.2-preview
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=HyssosTech.Sdk.STP&version=0.4.2-preview&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=HyssosTech.Sdk.STP&version=0.4.2-preview&prerelease
                    
Install as a Cake Tool

Sketch-thru-Plan .NET SDK

This SDK provides means to interact with Hyssos Tech's Sketch-Thru-Plan natural language Engine for map-based planning.

Sketch-Thru-Plan (STP) is a technological advance for today's warfighter that enhances cognition by implementing military doctrine driven, AI based task recognition that automatically perceives planners' implicit higher-order intentions, on the fly, generating Tasks, Task Matrix, Sync Matrix, and other OPORD products with minimal additional user input.

This is accomplished via Robust multimodal Natural Language Processing that fuses user's doctrinal speech and sketch for COA creation, seamlessly integrating plan outputs that drive simulators for tight adjudication loops and C2 systems.

Upgrading from 0.3.x

HyssosTech.Sdk.STP spans two different SDKs.

  • 0.4.0-preview and later - this SDK, a JSON-RPC client whose surface mirrors the JavaScript SDK.
  • 0.3.9-preview and earlier - the original OAA SDK, a substantially larger API.

0.4.0-preview was the changeover and is not a drop-in replacement: this client deliberately carries a smaller surface. If your code uses types such as SymbolIdCode, MilTypes, StpTaskFactory or StpOaaConnector, they are not present here - stay on 0.3.9-preview, which remains published and listed.

Resources

Supporting documentation and source code can be found in the Sketch-Thru-Plan .NET SDK Resources GitHub repository

A TypeScript/JavaScript version of the SDK can be found at the Sketch-Thru-Plan JavaScript SDK repository

API & Reference Documentation

API reference documentation is generated with DocFX from the SDK source and published to GitHub Pages.

Build and preview locally from the repository root:

dotnet tool update -g docfx
docfx docs/docfx.json --serve

MIL-STD-2525D Joint Military Symbology

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.6.0 36 9/15/2026
0.6.0-rc.1 44 9/13/2026
0.5.0 82 9/11/2026
0.5.0-rc.1 59 9/11/2026
0.4.2-preview 96 9/5/2026
0.4.1-preview 111 6/3/2026
0.3.9-preview 566 5/13/2026
0.3.8-preview 152 5/13/2026
0.3.7-preview 152 4/6/2026
0.3.6-preview 118 4/6/2026
0.3.5-preview 168 3/20/2026
0.3.4-preview 139 1/19/2026
0.3.2-preview 220 12/22/2025
0.3.0-preview.9 174 6/3/2024
0.3.0-preview.8 164 5/29/2024
0.3.0-preview.7 171 5/24/2024
0.3.0-preview.5 144 5/13/2024
0.3.0-preview.4 164 4/26/2024
0.3.0-preview.3 167 4/23/2024
Loading failed

# Sketch-Thru-Plan .NET SDK Release Notes

The Sketch-Thru-Plan (STP) .NET SDK is published to NuGet as
`HyssosTech.Sdk.STP`. This document is the unified release notes and changelog
for the SDK; notable changes to the accompanying samples, quickstart, and
plugins are folded in under the relevant versions.

## Version 0.4.2-preview

### Summary

**Fixes silent data loss.** Symbology values the engine sends were being
discarded by this SDK without any error, because its enum member names had
drifted from the engine's. Anyone on 0.4.1-preview or earlier is affected.

- **BREAKING (source):** several enum members are renamed to match the wire.
- Six enums realigned with the engine; one previously missing member added.

### Notes

**Why values were disappearing**

The engine serialises symbology enums with `.ToString()`, so the C# member NAME
is the wire contract. The engine renamed members on 2026-07-30/31 to match its
authored symbol tables; this SDK did not follow. Because
`StpSymbol.Affiliation` and friends use `NullSafeStringEnumConverter`, whose
`ReadJson` is `try { ... } catch { return null; }`, an unrecognised name was
swallowed and became `null` - no exception, no log entry. Affected symbols
simply arrived with no affiliation, echelon or modifier.

**What changed**

| enum | was | now |
|---|---|---|
| `Affiliation` | `assumedfriend`, `suspected` | `assumed_friend`, `suspect` |
| `Echelon` | `armygroup` | `army_group` |
| `Modifier` | `dummy`, `dummy_hq`, `dummy_task_force`, `dummytask_force_hq` | `feint_dummy`, `feint_dummy_hq`, `feint_dummy_task_force`, `feint_dummy_task_force_hq` |
| `Modifier` | - | `installation` added (was missing entirely) |

A sweep of all 16 symbology enums against the engine found three more that had
drifted the same way:

| enum | members | added |
|---|---|---|
| `TaskWhat` | 79 -> 90 | `CANALIZE`, `CONTAIN`, `CONTROL`, `COUNTERRECONNAISSANCE`, `DEMONSTRATING`, `DISENGAGE`, `EXFILTRATE`, `INTERDICT`, `ISOLATE`, `REDUCE`, `SUPPRESS` |
| `Branch` | 11 -> 15 | `non_military_sea`, `non_submarine_subsurface`, `sof_naval`, `sof_support` |
| `CodingScheme` | 9 -> 10 | `mapping` |

`TaskWhat` is the most consequential: a task carrying any of those eleven types
arrived with no task type at all.

**Upgrading**

If you reference the old member names you will get compile errors - rename them
as per the table. The exercise and simulation variants
(`exerciseassumedfriend`, `exercisesuspected`, ...) are deliberately UNCHANGED;
the engine kept the old spellings for those.

**Verification**

Regression tests pin every renamed member's wire spelling in both directions,
and a live test against a running engine sends no affiliation at all and lets
the engine derive it - so the value asserted is the engine's own spelling
rather than an echo. 342 unit tests and 8 live tests pass.

### Also in this release

- Docs workflow no longer triggers on tags; the `github-pages` environment only
 permits deployments from the `main` branch, so tag runs could never deploy.
- README corrections: the package targets .NET 8 and .NET Standard 2.0 (it said
 .NET 6), and an upgrade note explains that `0.3.x` was the OAA SDK while
 `0.4.x` is this JSON-RPC client.

## Version 0.4.1-preview

### Summary

This build supports:

- **Connection fix**: corrected machine-id and session handling in the connector - two regressions from the OAA-to-JSON-RPC port that broke registration.

### Notes

**Machine id computed correctly**

The connector derived the machine id from the *first* network adapter's MAC, but that
adapter is frequently a loopback/virtual one with no MAC - yielding an empty id and an
empty session, so registration failed. It now computes a stable machine id the same way
the STP engine does (`Auth.GetMachineID`: the highest non-empty NIC MAC, formatted
`XX-XX-...`, with a host-name fallback), so .NET clients on the same host - OAA or
JSON-RPC - share the default per-machine session. (A browser can't read a MAC, so the
JS SDK uses a random id; .NET can and does compute a real one.)

**STP-assigned session is authoritative**

Registration previously discarded the session id returned by STP and returned its own
local value. It now returns the session id from the Register response (STP may
assign/normalize a default), matching the JS SDK. Pass an explicit `sessionId` to
`ConnectAndRegisterAsync` to join a specific session.

### Changelog

+ Fixes
- Connector: compute a stable machine id like the engine (highest non-empty NIC MAC; host-name fallback) instead of the first adapter's MAC - fixes empty-session registration failures
- Connector: use the STP-assigned session id from the Register response (it was being discarded)
+ Improvements
- Added live parity smoke tests (structured SIDC, JMSML rendering, add/update/delete lifecycle) exercised against a running engine

## Version 0.4.0-preview

### Summary

This build supports:

- **JSON-RPC transport**: the SDK now communicates with the STP engine over a
 WebSocket JSON-RPC interface, replacing the legacy OAA / Prolog agent protocol
- **New home**: the SDK source now lives in, and is published from, the public
 `sketch-thru-plan-sdk-net` repository as the canonical `HyssosTech.Sdk.STP`
 package
- **Drop-in for existing consumers**: the public namespace and assembly remain
 `StpSDK`; the temporary `StpSDK.JsonRpc` identity used while the JSON-RPC SDK
 matured alongside the OAA SDK has been removed
- **Vendored JMSML**: the Joint Military Symbology Library is vendored in-repo
 with full Apache-2.0 attribution
- **Symbol rendering**: `StpSymbol.Bitmap()` is wired to JMSML

### Notes

**JSON-RPC transport**

The connection to STP is now a WebSocket JSON-RPC channel
(`StpJsonRpcConnector`, default `ws://localhost:9599`) instead of the native
OAA/Prolog agent socket. The SDK no longer depends on the Prolog
feature-structure or OAA communication libraries; symbol data is exchanged as
plain JSON. The public `StpRecognizer` surface - connection, the symbol / task /
task-org / COA / speech / sketch events, commands, and metadata - is preserved.

**Drop-in for existing consumers**

The package id (`HyssosTech.Sdk.STP`), the assembly (`StpSDK.dll`), and the root
namespace (`StpSDK`) are unchanged, so applications that referenced the package
and used `using StpSDK;` compile without source changes. During development the
JSON-RPC SDK temporarily used the `StpSDK.JsonRpc` namespace so it could coexist
with the OAA SDK in the internal repository; that suffix has now been removed.

**Vendored JMSML**

The Joint Military Symbology Library (derived from Esri's open-source
`joint-military-symbology-xml`, Copyright 2014-2015 Esri, Apache License 2.0) is
vendored under `third-party/JMSML/`, with the upstream license and a NOTICE
documenting the STP modifications. Runtime symbol data (`JMS/jmsmlSTP.config`
and the `JMS/Instance` symbol set) ships inside the package.

**Symbol rendering**

`StpSymbol.Bitmap(width, height)` now resolves the symbol's SIDC through JMSML
and renders SVG-based 2525 symbology. Set `StpRecognizer.JMSSVGPath` to the SVG
graphic set before rendering. Rendering uses `System.Drawing` and is effectively
Windows-only; on other platforms (or when the SVG set is unavailable) `Bitmap`
returns `null` and hosts fall back to a default rendering.

### Changelog

+ Improvements
- JSON-RPC over WebSocket transport (`StpJsonRpcConnector`); OAA/Prolog connector retired
- SDK source relocated into the public `sketch-thru-plan-sdk-net` repository and published from there
- Namespace and assembly normalized back to `StpSDK`; existing `HyssosTech.Sdk.STP` consumers need no source changes
- JMSML vendored under `third-party/JMSML` (Esri, Apache-2.0) with `LICENSE` and `NOTICE`
- Symbol rendering wired: `StpSymbol.Bitmap` resolves the SIDC via JMSML and renders SVG symbology
- Samples, quickstart, and plugins now reference the in-repo SDK project directly (no cross-repo paths or stale package references)
- Full sample set carried over and aligned with the JavaScript SDK: Editing, Tasking, Scenario, Reactive, Speech, Roles, Session, TaskOrg, C2SIM, and a .NET Framework compatibility sample, plus the SimpleMap and Azure Speech plugins
- API documentation builds with DocFX from the new repository and publishes to GitHub Pages
+ Fixes
- Reduced JMSML conversion-status log noise: only fatal unresolved fields (status bits 0-11) are reported, suppressing benign "Not Found" diagnostics for entity sub-types and modifiers

## Version 0.3.9-preview

### Summary

This build supports:

- Expanded activity-signatures task table with doctrinal descriptions and new tasks

### Changelog

+ Improvements
- AS_Table_compact: added a Description column (FM 3-90 doctrinal text) and 8 new tasks (SuppressEnemy, SuppressEnemyOnObjective, AttackByFireToSuppress, AttackInZoneToIsolate, ContainEnemy, AttackByFireToContain, CanalizeEnemy, InterdictEnemy)
- StpTaskFactory: added a Description property to ASCompactTaskDefinition, populated from the table
+ Fixes
- Stripped an orphan "1" suffix from ConductAMovingFlankScreen, ConductAMovingFlankScreenToSecure, and UnmannedAerialSystemIsrOrderableActivity entries

## Version 0.3.8-preview

### Summary

This build supports:

- COA lifecycle API, richer symbol designation properties, and safer enum deserialization

### Changelog

+ Improvements
- StpSymbol: added `SymbolDesignation`, `Abbr`, and `ShortForm` properties
- Added `UnitDesignationGenerator` for doctrinal short-form designations
- COA: lifecycle events and command API
- MilTypes: `NullSafeStringEnumConverter` for safer JSON deserialization of enums
- nuget.config: forward-slash paths for cross-platform (Linux/macOS) restore
+ Fixes
- StpOaaConnector: removed an erroneous `auth:` prefix on new_scenario messages (the single parameter is a full Auth feature structure)

## Version 0.3.4

### Changelog

+ Improvements
- Added `ExternalId` to StpSymbol to retain 3rd-party system ids through import/export
- Added a TaskFactory constructor that takes the root path of the task metadata tables
+ Fixes
- Fixed delivery of MOOTW symbol update notifications

## Version 0.3.3

### Changelog

+ Improvements
- Added `battery` and `troop` as `company` echelon alternative names
- Added task description as a task creation parameter
- Now building .NET 6, .NET 8, and .NET Standard 2.0
+ Fixes
- Unwrapped nullables to recover the underlying type during deserialization
- Fixed delivery of MOOTW symbol update notifications

## Version 0.3.2

### Changelog

+ Improvements
- Expanded SIDC parsing for additional coding schemes
- Extended the API to operate on STP object sets directly, not just serialized versions
- Added tests

## Version 0.3.1

### Changelog

+ Improvements
- Enhanced SIDC parsing with initial 2525D handling
- Task factory class driven by the STP recognizer's metadata
- Task creation validation

## Version 0.3.0

### Summary

This build supports:

- Extensive updates to align with STP v5.9: sessions, scenario synchronization, TO/ORBAT, role switching, and C2SIM

### Changelog

+ Improvements
- Ability to connect to a Session
- Scenario synchronization - reconciles application content with a Session context
- TO/ORBAT import / export / selection API; TO Service fixes; `SpeechPhrases` TO-unit property
- Tasks: ability to toggle task confirmation and to enable/disable Auto Tasking
- Role switching API
- C2SIM: configuration of parameters (server endpoints, generation options), API to generate Orders and Initialization and to retrieve Initialization from a server, additional symbol properties (DIS code, federate, resource), and a rules-of-engagement task property

## Version 0.2.6

### Changelog

+ Improvements
- Added support for connections over WebSockets
- Added a standalone app sample that embeds a cloud speech transcription service
- Cleaned up speech-related interfaces
- Reactive Extensions (Rx) sample documentation

## Version 0.2.5

### Changelog

+ Improvements
- Removed the hard NLog dependency from the JMSML library (updated the open-source code to use ILogger instead)
- Added Reactive Extensions (Rx) capabilities (preview)

## Version 0.2.4

### Changelog

+ Improvements
- Improvements to globalization

## Version 0.2.3

### Changelog

+ Improvements
- Added higher-level scenario management methods
- Improved long-duration operation handling

## Version 0.2.2

### Changelog

+ Fixes
- Fixed assemblies that were packed incorrectly in the previous version

## Version 0.2.1

### Changelog

+ Improvements
- Exposed additional audio and sketch events for finer-grained user feedback
- Renamed some methods and changed parameter types for consistency and clarity
- Added JMSML SVG artifacts to support simple symbol rendering

## Version 0.2.0

### Changelog

+ Improvements
- Added Task Org / ORBAT handling
- Improved documentation, fixed XML doc tags
+ Fixes
- Fixed occasional failure to detect a failed connection (STP not running)

## Version 0.1.1

### Changelog

+ Fixes
- Fixed documentation links

## Version 0.1.0

### Summary

- Initial public release