@tx5dr/plugin-api 2.0.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/README.md +201 -0
  2. package/dist/__tests__/adif.test.js +67 -0
  3. package/dist/__tests__/adif.test.js.map +1 -1
  4. package/dist/__tests__/testing-utils.test.js +17 -0
  5. package/dist/__tests__/testing-utils.test.js.map +1 -1
  6. package/dist/capabilities.d.ts +2 -1
  7. package/dist/capabilities.d.ts.map +1 -1
  8. package/dist/capabilities.js +2 -0
  9. package/dist/capabilities.js.map +1 -1
  10. package/dist/compatibility.d.ts +15 -0
  11. package/dist/compatibility.d.ts.map +1 -0
  12. package/dist/compatibility.js +71 -0
  13. package/dist/compatibility.js.map +1 -0
  14. package/dist/contest-logbook-ui/assets/contest-log.css +1 -0
  15. package/dist/contest-logbook-ui/assets/contest-log.js +40 -0
  16. package/dist/contest-logbook-ui/contest-log.html +13 -0
  17. package/dist/context.d.ts +39 -7
  18. package/dist/context.d.ts.map +1 -1
  19. package/dist/definition.d.ts +25 -1
  20. package/dist/definition.d.ts.map +1 -1
  21. package/dist/definition.js.map +1 -1
  22. package/dist/ft8/StandardQSOPluginRuntime.d.ts +142 -0
  23. package/dist/ft8/StandardQSOPluginRuntime.d.ts.map +1 -0
  24. package/dist/ft8/StandardQSOPluginRuntime.js +1592 -0
  25. package/dist/ft8/StandardQSOPluginRuntime.js.map +1 -0
  26. package/dist/ft8/index.d.ts +22 -0
  27. package/dist/ft8/index.d.ts.map +1 -0
  28. package/dist/ft8/index.js +176 -0
  29. package/dist/ft8/index.js.map +1 -0
  30. package/dist/helpers.d.ts +95 -3
  31. package/dist/helpers.d.ts.map +1 -1
  32. package/dist/hooks.d.ts +2 -0
  33. package/dist/hooks.d.ts.map +1 -1
  34. package/dist/index.d.ts +13 -3
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +7 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/runtime.d.ts +377 -6
  39. package/dist/runtime.d.ts.map +1 -1
  40. package/dist/runtime.js.map +1 -1
  41. package/dist/simulation.d.ts +60 -0
  42. package/dist/simulation.d.ts.map +1 -0
  43. package/dist/simulation.js +2 -0
  44. package/dist/simulation.js.map +1 -0
  45. package/dist/testing/index.d.ts +5 -1
  46. package/dist/testing/index.d.ts.map +1 -1
  47. package/dist/testing/index.js +67 -2
  48. package/dist/testing/index.js.map +1 -1
  49. package/dist/toolkit/contest/CabrilloBuilder.d.ts +7 -0
  50. package/dist/toolkit/contest/CabrilloBuilder.d.ts.map +1 -0
  51. package/dist/toolkit/contest/CabrilloBuilder.js +11 -0
  52. package/dist/toolkit/contest/CabrilloBuilder.js.map +1 -0
  53. package/dist/toolkit/contest/ContestCategorySchema.d.ts +11 -0
  54. package/dist/toolkit/contest/ContestCategorySchema.d.ts.map +1 -0
  55. package/dist/toolkit/contest/ContestCategorySchema.js +6 -0
  56. package/dist/toolkit/contest/ContestCategorySchema.js.map +1 -0
  57. package/dist/toolkit/contest/ContestLogbook.d.ts +223 -0
  58. package/dist/toolkit/contest/ContestLogbook.d.ts.map +1 -0
  59. package/dist/toolkit/contest/ContestLogbook.js +845 -0
  60. package/dist/toolkit/contest/ContestLogbook.js.map +1 -0
  61. package/dist/toolkit/contest/ContestQsoEnvelopeAdapter.d.ts +28 -0
  62. package/dist/toolkit/contest/ContestQsoEnvelopeAdapter.d.ts.map +1 -0
  63. package/dist/toolkit/contest/ContestQsoEnvelopeAdapter.js +79 -0
  64. package/dist/toolkit/contest/ContestQsoEnvelopeAdapter.js.map +1 -0
  65. package/dist/toolkit/contest/ContestQsoProjector.d.ts +12 -0
  66. package/dist/toolkit/contest/ContestQsoProjector.d.ts.map +1 -0
  67. package/dist/toolkit/contest/ContestQsoProjector.js +13 -0
  68. package/dist/toolkit/contest/ContestQsoProjector.js.map +1 -0
  69. package/dist/toolkit/contest/ContestSessionNotifier.d.ts +9 -0
  70. package/dist/toolkit/contest/ContestSessionNotifier.d.ts.map +1 -0
  71. package/dist/toolkit/contest/ContestSessionNotifier.js +13 -0
  72. package/dist/toolkit/contest/ContestSessionNotifier.js.map +1 -0
  73. package/dist/toolkit/contest/ContestSessionRepository.d.ts +21 -0
  74. package/dist/toolkit/contest/ContestSessionRepository.d.ts.map +1 -0
  75. package/dist/toolkit/contest/ContestSessionRepository.js +27 -0
  76. package/dist/toolkit/contest/ContestSessionRepository.js.map +1 -0
  77. package/dist/toolkit/contest/DefaultContestSession.d.ts +105 -0
  78. package/dist/toolkit/contest/DefaultContestSession.d.ts.map +1 -0
  79. package/dist/toolkit/contest/DefaultContestSession.js +387 -0
  80. package/dist/toolkit/contest/DefaultContestSession.js.map +1 -0
  81. package/dist/toolkit/contest/DefaultContestWorkbench.d.ts +100 -0
  82. package/dist/toolkit/contest/DefaultContestWorkbench.d.ts.map +1 -0
  83. package/dist/toolkit/contest/DefaultContestWorkbench.js +33 -0
  84. package/dist/toolkit/contest/DefaultContestWorkbench.js.map +1 -0
  85. package/dist/toolkit/contest/FT8ContestDefinition.d.ts +83 -0
  86. package/dist/toolkit/contest/FT8ContestDefinition.d.ts.map +1 -0
  87. package/dist/toolkit/contest/FT8ContestDefinition.js +167 -0
  88. package/dist/toolkit/contest/FT8ContestDefinition.js.map +1 -0
  89. package/dist/toolkit/contest/FT8ContestModules.d.ts +178 -0
  90. package/dist/toolkit/contest/FT8ContestModules.d.ts.map +1 -0
  91. package/dist/toolkit/contest/FT8ContestModules.js +247 -0
  92. package/dist/toolkit/contest/FT8ContestModules.js.map +1 -0
  93. package/dist/toolkit/contest/FT8ContestPlugin.d.ts +55 -0
  94. package/dist/toolkit/contest/FT8ContestPlugin.d.ts.map +1 -0
  95. package/dist/toolkit/contest/FT8ContestPlugin.js +322 -0
  96. package/dist/toolkit/contest/FT8ContestPlugin.js.map +1 -0
  97. package/dist/toolkit/contest/FT8ContestTestKit.d.ts +12 -0
  98. package/dist/toolkit/contest/FT8ContestTestKit.d.ts.map +1 -0
  99. package/dist/toolkit/contest/FT8ContestTestKit.js +60 -0
  100. package/dist/toolkit/contest/FT8ContestTestKit.js.map +1 -0
  101. package/dist/toolkit/contest/contest-toolkit.test.d.ts +2 -0
  102. package/dist/toolkit/contest/contest-toolkit.test.d.ts.map +1 -0
  103. package/dist/toolkit/contest/contest-toolkit.test.js +1196 -0
  104. package/dist/toolkit/contest/contest-toolkit.test.js.map +1 -0
  105. package/dist/toolkit/contest/index.d.ts +14 -0
  106. package/dist/toolkit/contest/index.d.ts.map +1 -0
  107. package/dist/toolkit/contest/index.js +14 -0
  108. package/dist/toolkit/contest/index.js.map +1 -0
  109. package/dist/toolkit/index.d.ts +3 -0
  110. package/dist/toolkit/index.d.ts.map +1 -0
  111. package/dist/toolkit/index.js +3 -0
  112. package/dist/toolkit/index.js.map +1 -0
  113. package/dist/toolkit/parallel-qso/AuthorizationLease.d.ts +15 -0
  114. package/dist/toolkit/parallel-qso/AuthorizationLease.d.ts.map +1 -0
  115. package/dist/toolkit/parallel-qso/AuthorizationLease.js +25 -0
  116. package/dist/toolkit/parallel-qso/AuthorizationLease.js.map +1 -0
  117. package/dist/toolkit/parallel-qso/BoundedCallSessionController.d.ts +40 -0
  118. package/dist/toolkit/parallel-qso/BoundedCallSessionController.d.ts.map +1 -0
  119. package/dist/toolkit/parallel-qso/BoundedCallSessionController.js +81 -0
  120. package/dist/toolkit/parallel-qso/BoundedCallSessionController.js.map +1 -0
  121. package/dist/toolkit/parallel-qso/BoundedCallSessionController.test.d.ts +2 -0
  122. package/dist/toolkit/parallel-qso/BoundedCallSessionController.test.d.ts.map +1 -0
  123. package/dist/toolkit/parallel-qso/BoundedCallSessionController.test.js +31 -0
  124. package/dist/toolkit/parallel-qso/BoundedCallSessionController.test.js.map +1 -0
  125. package/dist/toolkit/parallel-qso/CompletionTracker.d.ts +20 -0
  126. package/dist/toolkit/parallel-qso/CompletionTracker.d.ts.map +1 -0
  127. package/dist/toolkit/parallel-qso/CompletionTracker.js +20 -0
  128. package/dist/toolkit/parallel-qso/CompletionTracker.js.map +1 -0
  129. package/dist/toolkit/parallel-qso/LaneFrequencyController.d.ts +19 -0
  130. package/dist/toolkit/parallel-qso/LaneFrequencyController.d.ts.map +1 -0
  131. package/dist/toolkit/parallel-qso/LaneFrequencyController.js +23 -0
  132. package/dist/toolkit/parallel-qso/LaneFrequencyController.js.map +1 -0
  133. package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.d.ts +134 -0
  134. package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.d.ts.map +1 -0
  135. package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.js +554 -0
  136. package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.js.map +1 -0
  137. package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.test.d.ts +2 -0
  138. package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.test.d.ts.map +1 -0
  139. package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.test.js +470 -0
  140. package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.test.js.map +1 -0
  141. package/dist/toolkit/parallel-qso/PostCompletionRecoveryLease.d.ts +20 -0
  142. package/dist/toolkit/parallel-qso/PostCompletionRecoveryLease.d.ts.map +1 -0
  143. package/dist/toolkit/parallel-qso/PostCompletionRecoveryLease.js +29 -0
  144. package/dist/toolkit/parallel-qso/PostCompletionRecoveryLease.js.map +1 -0
  145. package/dist/toolkit/parallel-qso/ProtocolLane.d.ts +50 -0
  146. package/dist/toolkit/parallel-qso/ProtocolLane.d.ts.map +1 -0
  147. package/dist/toolkit/parallel-qso/ProtocolLane.js +2 -0
  148. package/dist/toolkit/parallel-qso/ProtocolLane.js.map +1 -0
  149. package/dist/toolkit/parallel-qso/controllers.test.d.ts +2 -0
  150. package/dist/toolkit/parallel-qso/controllers.test.d.ts.map +1 -0
  151. package/dist/toolkit/parallel-qso/controllers.test.js +36 -0
  152. package/dist/toolkit/parallel-qso/controllers.test.js.map +1 -0
  153. package/dist/toolkit/parallel-qso/index.d.ts +8 -0
  154. package/dist/toolkit/parallel-qso/index.d.ts.map +1 -0
  155. package/dist/toolkit/parallel-qso/index.js +8 -0
  156. package/dist/toolkit/parallel-qso/index.js.map +1 -0
  157. package/dist/utils/adif.d.ts +1 -1
  158. package/dist/utils/adif.d.ts.map +1 -1
  159. package/dist/utils/adif.js +91 -50
  160. package/dist/utils/adif.js.map +1 -1
  161. package/package.json +27 -5
  162. package/src/bridge.d.ts +3 -0
  163. package/tokens.css +51 -0
package/dist/hooks.d.ts CHANGED
@@ -56,6 +56,8 @@ export interface StrategyDecision {
56
56
  };
57
57
  /** Optional structured reason for a strategy-requested QSO failure stop. */
58
58
  qsoFailure?: QSOFailureInfo;
59
+ /** Parallel lane failures emitted by one accepted decision. */
60
+ qsoFailures?: QSOFailureInfo[];
59
61
  }
60
62
  /**
61
63
  * Metadata describing why a strategy decision is being evaluated.
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -21,22 +21,28 @@
21
21
  */
22
22
  /** Core plugin definition and lifecycle interfaces. */
23
23
  export { definePlugin } from './definition.js';
24
+ export { assertPluginApiCompatible, comparePluginApiVersions, PluginApiCompatibilityError, } from './compatibility.js';
24
25
  export { PLUGIN_COMMAND_CAPABILITY_PERMISSIONS, PLUGIN_CONTEXT_CAPABILITY_KEYS, getPluginContextCapabilityKeys, } from './capabilities.js';
25
26
  export type { PluginContextCapabilityKey, PluginContextCapabilityPermission, } from './capabilities.js';
26
27
  export type { PluginDefinition, AnyPluginDefinition } from './definition.js';
28
+ export type { SimulationMode, SimulationPeerIdentity, SimulationScenarioChoice, SimulationScenarioRule, SimulationScenarioTimeoutRule, SimulationScenarioState, SimulationAddressedRestartPolicy, SimulationScenarioDescriptor, } from './simulation.js';
27
29
  export type { PluginContext, PluginContextBase, PluginCleanupContext, PluginContextFor, RuntimePluginContext, StrategyPluginContext, PluginEligibilityContext, } from './context.js';
30
+ export type { PluginAfterStartupTask, PluginLifecyclePort } from './context.js';
28
31
  export type { HostDependencies, HamlibHostDependency, HamlibRotator, HamlibRotatorConstructor, HamlibSupportedRotatorInfo, HamlibRotatorConnectionInfo, HamlibRotatorPosition, HamlibRotatorStatus, HamlibRotatorDirection, HamlibRotatorResetType, HamlibConfigFieldDescriptor, HamlibPortCaps, HamlibRotatorCaps, } from './host-dependencies.js';
29
32
  export type { PluginHooks, AutoCallProposal, AutoCallExecutionRequest, AutoCallExecutionPlan, SlotActivityEvent, FrequencyChangeState, ScoredCandidate, StrategyDecision, StrategyDecisionMeta, LastMessageInfo, QSOFailureInfo, } from './hooks.js';
30
- export type { StrategyRuntime, StrategyRuntimeContext, StrategyRuntimeSnapshot, StrategyRuntimeSlot, StrategyRuntimeSlotContentUpdate, StrategyRuntimeCheckpoint, StrategyDecisionMetaV2, StrategyDecisionResult, StrategyDecisionSource, StrategyQSOCompletionEffect, StrategyQSOCompletionSettlement, AssistedQueueDisplayState, AssistedQueuePauseReason, AssistedQueueTone, AssistedQueueIcon, AssistedQueueRow, AssistedQueueSnapshot, QueuedStrategyObservationMeta, QueuedStrategyTargetRequest, QueuedStrategyMutationResult, QueuedStrategyRuntime, } from './runtime.js';
33
+ export type { StrategyRuntime, StrategyRuntimeContext, StrategyRuntimeSnapshot, StrategyMessagePresentationTone, StrategyMessagePresentationBadge, StrategyMessagePresentationClass, StrategyMessagePresentationProjection, StrategyMessagePresentationNoveltyRule, StrategyMessagePresentationTagRule, StrategyTransmitGate, StrategyStateOption, StrategyActionDescriptor, StrategyActionInput, StrategyActionTone, StrategyActionPresentation, StrategyAttention, StrategyCompletionProjection, StrategyActionTarget, StrategyActionInvocation, StrategyActionResult, StrategyLogbookSessionEffect, StrategyStreamSnapshot, StrategyStreamStateUpdate, StrategyTransmission, StreamPhysicalReceipt, StrategyRuntimeSlot, StrategyRuntimeSlotContentUpdate, StrategyRuntimeCheckpoint, StrategyOperatorTransmitCyclesChanged, StrategyDecisionMetaV2, StrategyDecisionResult, StrategyDecisionSource, StrategyQSOCompletionEffect, StrategyQSOCompletionSettlement, AssistedQueueDisplayState, AssistedQueuePauseReason, AssistedQueueTone, AssistedQueueIcon, AssistedQueueRow, AssistedQueueSnapshot, QueuedStrategyObservationMeta, QueuedStrategyTargetRequest, QueuedStrategyMutationResult, QueuedStrategyRuntime, } from './runtime.js';
31
34
  export { isQueuedStrategyRuntime } from './runtime.js';
32
35
  export type { HostSettingsControl, HostSettingsNamespace, HostFrequencyPresetsSettingsNamespace, HostFT8Settings, HostFT8SettingsPatch, HostFrequencyPresetsSettings, HostStationInfoPatch, HostPSKReporterSettingsPatch, } from './settings.js';
33
36
  /** Host-provided helper interfaces available through {@link PluginContext}. */
34
- export type { KVStore, PluginLogger, PluginTimers, OtherOperatorSnapshot, OperatorSnapshot, OperatorCommandPort, PluginOperatorCommand, PluginOperatorCommandResult, RadioView, RadioOperatingMode, RadioCapabilitiesView, RadioCommandPort, PluginRadioCommand, RadioTunerCommandPort, PluginRadioTunerCommand, RadioPowerView, RadioPowerCommandPort, PluginRadioPowerCommand, RadioPowerSetOptions, LogbookAccess, LogbookReadAccess, LogbookCommandPort, CallsignLogbookAccess, CallsignLogbookReadAccess, CallsignLogbookCommandPort, QSOQueryFilter, BandAccess, IdleTransmitFrequencyOptions, AutoTargetEligibilityReason, AutoTargetEligibilityDecision, UIBridge, PanelMeta, PluginUIHandler, PluginUIRequestContext, PluginUIRequestUser, PluginUIBoundResource, PluginUIInstanceTarget, PluginUIPageSessionInfo, PluginUIPageContext, PluginFileStore, PluginNetworkControl, PluginEventBus, PluginEventBusMessage, PluginUdpControl, PluginUdpSocket, PluginUdpSocketOptions, PluginUdpBindOptions, PluginUdpRemoteInfo, } from './helpers.js';
37
+ export type { KVStore, DigitalMessagePreflight, DigitalMessagePreflightRequest, DigitalMessagePreflightResult, PluginLogger, PluginTimers, OtherOperatorSnapshot, OperatorSnapshot, OperatorCommandPort, PluginOperatorCommand, PluginOperatorCommandResult, RadioView, RadioOperatingMode, RadioCapabilitiesView, RadioCommandPort, PluginRadioCommand, RadioTunerCommandPort, PluginRadioTunerCommand, RadioPowerView, RadioPowerCommandPort, PluginRadioPowerCommand, RadioPowerSetOptions, LogbookAccess, LogbookReadAccess, LogbookCommandPort, CallsignLogbookAccess, CallsignLogbookReadAccess, CallsignLogbookCommandPort, PluginLogbookSessionDescriptor, PluginLogbookSessionAccess, PluginLogbookSessions, QSOQueryFilter, BandAccess, IdleTransmitFrequencyOptions, AutoTargetEligibilityReason, AutoTargetEligibilityDecision, UIBridge, PanelMeta, PluginUIHandler, PluginUIHandlerRegistration, PluginUIRequestContext, PluginUIRequestUser, PluginUIBoundResource, PluginUIInstanceTarget, PluginUIPageSessionInfo, PluginUIPageContext, PluginFileStore, PluginNetworkControl, PluginEventBus, ReadonlyKVStore, PluginEventBusMessage, PluginUdpControl, PluginUdpSocket, PluginUdpSocketOptions, PluginUdpBindOptions, PluginUdpRemoteInfo, } from './helpers.js';
38
+ export type { LogbookBatchMutation, LogbookBatchOptions, LogbookBatchOutcome, LogbookBatchResult, LogbookQsoSnapshot, } from '@tx5dr/core';
39
+ /** Atomic contest-QSO contract and its durable private-field codec. */
40
+ export { CONTEST_QSO_ENVELOPE_MAX_BYTES, ContestQsoEnvelopeSchema, parseContestQsoEnvelope, serializeContestQsoEnvelope, } from '@tx5dr/contracts';
35
41
  /** Callsign and DXCC helpers available to plugins. */
36
42
  export { getCallsignInfo, listDXCCEntities, resolveDXCCEntity, } from '@tx5dr/core';
37
43
  export type { CallsignInfo, DXCCEntity, DXCCResolutionResult, } from '@tx5dr/core';
38
44
  /** Common radio/message/settings types re-exported for plugin author convenience. */
39
- export type { FT8Message, FT8MessageBase, FT8MessageCQ, FT8MessageCall, FT8MessageSignalReport, FT8MessageRogerReport, FT8MessageRRR, FT8MessageSeventyThree, FT8MessageFoxRR73, FT8MessageCustom, FT8MessageUnknown, ParsedFT8Message, LogbookAnalysis, SlotInfo, SlotPack, FrequencyState, QSORecord, FrameMessage, ModeDescriptor, OperatorSlots, DxccStatus, TargetSelectionPriorityMode, PluginType, PluginInstanceScope, PluginPermission, PluginSettingType, PluginSettingDescriptor, PluginSettingScope, PluginQuickAction, PluginQuickSetting, PluginCapability, PluginPanelDescriptor, PluginPanelComponent, PluginPanelWidth, PluginPanelOpenMode, PluginPanelUISize, PluginUIPanelContributionGroup, PluginUIPanelContributionTarget, PluginObjectArrayField, PluginKeyedStringArrayKey, PluginSettingCondition, PluginSettingConditionalDescription, PluginSettingOption, PluginStorageScope, PluginStorageConfig, PluginManifest, PluginStatus, PluginUIPageDescriptor, PluginUIConfig, CapabilityList, CapabilityState, CapabilityDescriptor, CapabilityValue, WriteCapabilityPayload, RadioPowerRequest, RadioPowerResponse, RadioPowerState, RadioPowerStateEvent, RadioPowerSupportInfo, RadioPowerTarget, DecodeWindowSettings, RealtimeSettings, RealtimeSettingsResponseData, PresetFrequency, StationInfo, PSKReporterConfig, NtpServerListSettings, UpdateNtpServerListRequest, } from '@tx5dr/contracts';
45
+ export type { FT8Message, FT8MessageBase, FT8MessageCQ, FT8MessageCall, FT8MessageSignalReport, FT8MessageRogerReport, FT8MessageRRR, FT8MessageSeventyThree, FT8MessageFoxRR73, FT8MessageCustom, FT8MessageUnknown, ParsedFT8Message, LogbookAnalysis, SlotInfo, SlotPack, FrequencyState, QSORecord, ContestQsoEnvelope, FrameMessage, ModeDescriptor, OperatorSlots, DxccStatus, TargetSelectionPriorityMode, PluginType, PluginInstanceScope, PluginPermission, PluginSettingType, PluginSettingDescriptor, PluginSettingScope, PluginQuickAction, PluginQuickSetting, PluginCapability, PluginPanelDescriptor, PluginPanelComponent, PluginPanelWidth, PluginPanelOpenMode, PluginPanelUISize, PluginUIPanelContributionGroup, PluginUIPanelContributionTarget, PluginObjectArrayField, PluginKeyedStringArrayKey, PluginSettingCondition, PluginSettingConditionalDescription, PluginSettingOption, PluginStorageScope, PluginStorageConfig, PluginManifest, PluginStatus, PluginUIPageDescriptor, PluginUIConfig, CapabilityList, CapabilityState, CapabilityDescriptor, CapabilityValue, WriteCapabilityPayload, RadioPowerRequest, RadioPowerResponse, RadioPowerState, RadioPowerStateEvent, RadioPowerSupportInfo, RadioPowerTarget, DecodeWindowSettings, RealtimeSettings, RealtimeSettingsResponseData, PresetFrequency, StationInfo, PSKReporterConfig, NtpServerListSettings, UpdateNtpServerListRequest, } from '@tx5dr/contracts';
40
46
  /** Logbook sync provider interfaces. */
41
47
  export type { LogbookSyncProvider, LogbookSyncRegistrar, SyncAction, SyncFailure, SyncFailureInput, SyncFailureOperation, SyncFailureSource, SyncTestResult, SyncUploadProgress, SyncUploadOptions, SyncUploadPreflightOptions, SyncUploadResult, SyncPreflightIssue, SyncUploadPreflightResult, SyncDownloadProgress, SyncDownloadResult, SyncDownloadOptions, } from './sync.js';
42
48
  export { createSyncFailure, errorToSyncFailure, failureMessage, sanitizeSyncFailureText, } from './sync.js';
@@ -49,6 +55,10 @@ export { parseADIFContent, parseADIFRecord, parseADIFFields, convertQSOToADIF, g
49
55
  /** Plugin page scope path utilities. */
50
56
  export { getPluginPageFileScopePath, getPluginPageScopePath, getPluginPageScopeSegments, getPluginPageStorePath, } from './utils/page-scope.js';
51
57
  export type { PluginPageBoundResource } from './utils/page-scope.js';
58
+ /** Composable FT8/FT4 contest rules, assembler and framework-neutral test kit. */
59
+ export * from './toolkit/contest/index.js';
60
+ /** Reusable standard FT8/FT4 QSO runtime for external strategy plugins. */
61
+ export * from './ft8/index.js';
52
62
  /** QSO text field utilities. */
53
63
  export { buildSignalReportComment, parseQsoTextFields, parseLegacyComment, parseMessageHistoryText, resolveQsoComment, buildCommentFromMessageHistory, normalizeMessageHistory, sanitizeAdifFieldValue, } from './utils/qso-text-fields.js';
54
64
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,qCAAqC,EACrC,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,0BAA0B,EAC1B,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,cAAc,EACd,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,+BAA+B,EAC/B,gCAAgC,EAChC,gCAAgC,EAChC,qCAAqC,EACrC,sCAAsC,EACtC,kCAAkC,EAClC,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,EACjB,4BAA4B,EAC5B,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,4BAA4B,EAC5B,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,gCAAgC,EAChC,yBAAyB,EACzB,qCAAqC,EACrC,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,+BAA+B,EAC/B,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,qCAAqC,EACrC,eAAe,EACf,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AAEvB,+EAA+E;AAC/E,YAAY,EACV,OAAO,EACP,uBAAuB,EACvB,8BAA8B,EAC9B,6BAA6B,EAC7B,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,EAC1B,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,4BAA4B,EAC5B,2BAA2B,EAC3B,6BAA6B,EAC7B,QAAQ,EACR,SAAS,EACT,eAAe,EACf,2BAA2B,EAC3B,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,uEAAuE;AACvE,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAG1B,sDAAsD;AACtD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,YAAY,EACZ,UAAU,EACV,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,qFAAqF;AACrF,YAAY,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,UAAU,EACV,2BAA2B,EAC3B,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,8BAA8B,EAC9B,+BAA+B,EAC/B,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,mCAAmC,EACnC,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,4BAA4B,EAC5B,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAE1B,wCAAwC;AACxC,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,uBAAuB,GACxB,MAAM,WAAW,CAAC;AAEnB,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,4CAA4C;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,wDAAwD;AACxD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,wCAAwC;AACxC,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,kFAAkF;AAClF,cAAc,4BAA4B,CAAC;AAE3C,2EAA2E;AAC3E,cAAc,gBAAgB,CAAC;AAE/B,gCAAgC;AAChC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -21,8 +21,11 @@
21
21
  */
22
22
  /** Core plugin definition and lifecycle interfaces. */
23
23
  export { definePlugin } from './definition.js';
24
+ export { assertPluginApiCompatible, comparePluginApiVersions, PluginApiCompatibilityError, } from './compatibility.js';
24
25
  export { PLUGIN_COMMAND_CAPABILITY_PERMISSIONS, PLUGIN_CONTEXT_CAPABILITY_KEYS, getPluginContextCapabilityKeys, } from './capabilities.js';
25
26
  export { isQueuedStrategyRuntime } from './runtime.js';
27
+ /** Atomic contest-QSO contract and its durable private-field codec. */
28
+ export { CONTEST_QSO_ENVELOPE_MAX_BYTES, ContestQsoEnvelopeSchema, parseContestQsoEnvelope, serializeContestQsoEnvelope, } from '@tx5dr/contracts';
26
29
  /** Callsign and DXCC helpers available to plugins. */
27
30
  export { getCallsignInfo, listDXCCEntities, resolveDXCCEntity, } from '@tx5dr/core';
28
31
  export { createSyncFailure, errorToSyncFailure, failureMessage, sanitizeSyncFailureText, } from './sync.js';
@@ -34,6 +37,10 @@ export { normalizeCallsign } from './utils/callsign.js';
34
37
  export { parseADIFContent, parseADIFRecord, parseADIFFields, convertQSOToADIF, generateADIFFile, formatADIFDate, formatADIFTime, parseADIFDateTime, } from './utils/adif.js';
35
38
  /** Plugin page scope path utilities. */
36
39
  export { getPluginPageFileScopePath, getPluginPageScopePath, getPluginPageScopeSegments, getPluginPageStorePath, } from './utils/page-scope.js';
40
+ /** Composable FT8/FT4 contest rules, assembler and framework-neutral test kit. */
41
+ export * from './toolkit/contest/index.js';
42
+ /** Reusable standard FT8/FT4 QSO runtime for external strategy plugins. */
43
+ export * from './ft8/index.js';
37
44
  /** QSO text field utilities. */
38
45
  export { buildSignalReportComment, parseQsoTextFields, parseLegacyComment, parseMessageHistoryText, resolveQsoComment, buildCommentFromMessageHistory, normalizeMessageHistory, sanitizeAdifFieldValue, } from './utils/qso-text-fields.js';
39
46
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACL,qCAAqC,EACrC,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,mBAAmB,CAAC;AAkE3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAiEvD,sDAAsD;AACtD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAoGrB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,uBAAuB,GACxB,MAAM,WAAW,CAAC;AAEnB,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,4CAA4C;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,wDAAwD;AACxD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,wCAAwC;AACxC,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAG/B,gCAAgC;AAChC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,qCAAqC,EACrC,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,mBAAmB,CAAC;AAoG3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAgFvD,uEAAuE;AACvE,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAG1B,sDAAsD;AACtD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAqGrB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,uBAAuB,GACxB,MAAM,WAAW,CAAC;AAEnB,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,4CAA4C;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,wDAAwD;AACxD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,wCAAwC;AACxC,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAG/B,kFAAkF;AAClF,cAAc,4BAA4B,CAAC;AAE3C,2EAA2E;AAC3E,cAAc,gBAAgB,CAAC;AAE/B,gCAAgC;AAChC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC"}
package/dist/runtime.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import type { ParsedFT8Message, FrameMessage, SlotInfo, QSORecord } from '@tx5dr/contracts';
2
2
  import type { StrategyDecision } from './hooks.js';
3
3
  /**
4
- * Logical FT8 transmit slot identifiers used by the built-in automation model.
4
+ * Legacy identifiers for the six selectable FT8 transmit messages.
5
5
  *
6
- * These labels correspond to the six sequential transmit messages in a typical
7
- * FT8 QSO flow and are used for status snapshots and UI updates.
6
+ * These labels describe message choices, not T/R time slots or parallel QSO
7
+ * streams. User-facing interfaces should call them Tx messages.
8
8
  */
9
9
  export type StrategyRuntimeSlot = 'TX1' | 'TX2' | 'TX3' | 'TX4' | 'TX5' | 'TX6';
10
10
  /**
@@ -39,15 +39,316 @@ export interface StrategyRuntimeSnapshot {
39
39
  slots?: Partial<Record<StrategyRuntimeSlot, string>>;
40
40
  /** Current conversation metadata tracked by the runtime. */
41
41
  context?: StrategyRuntimeContext;
42
- /** Optional list of user-visible next states, modes or branch hints. */
42
+ /** Optional legacy list of user-visible next Tx messages or branch hints. */
43
43
  availableSlots?: string[];
44
44
  /** Host correlation token for QSO persistence; it is not an RF decision epoch. */
45
45
  qsoLifecycleEpoch?: number;
46
+ /** Active protocol lanes owned by a parallel-capable strategy. */
47
+ streams?: StrategyStreamSnapshot[];
46
48
  /** Optional compact projection exposed by queue-capable strategies. */
47
49
  queue?: AssistedQueueSnapshot;
50
+ /** Plugin-declared operator controls rendered without business interpretation. */
51
+ actions?: StrategyActionDescriptor[];
52
+ /** Plugin-declared operator attention items. */
53
+ attentions?: StrategyAttention[];
54
+ /** Optional strategy-owned presentation for decoded message history. */
55
+ messagePresentation?: StrategyMessagePresentationProjection;
56
+ /** Strategy-owned operator-start gate, enforced by both Host UI and Server. */
57
+ transmitGate?: StrategyTransmitGate;
58
+ }
59
+ /** Semantic tone requested by strategy-owned message presentation rules. */
60
+ export type StrategyMessagePresentationTone = 'neutral' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger';
61
+ /** Compact label and semantic tone rendered beside a decoded message. */
62
+ export interface StrategyMessagePresentationBadge {
63
+ /** Literal label or plugin locale key. */
64
+ label: string;
65
+ /** Host-themed semantic tone; plugins cannot provide CSS. */
66
+ tone: StrategyMessagePresentationTone;
67
+ }
68
+ /** Bounded token matcher evaluated by the Host against normalized message tokens. */
69
+ export interface StrategyMessagePresentationTokenMatch {
70
+ /** Exact, case-insensitive token matching; arbitrary regular expressions are not accepted. */
71
+ firstTokenIn?: string[];
72
+ /** Matches when any normalized message token equals one of these values. */
73
+ anyTokenIn?: string[];
74
+ }
75
+ /** Named visual class assigned by a strategy presentation projection. */
76
+ export interface StrategyMessagePresentationClass {
77
+ /** @deprecated Use `badges`; retained for API v2 snapshot compatibility. */
78
+ badge?: {
79
+ label: string;
80
+ tone: StrategyMessagePresentationTone;
81
+ };
82
+ /** Badges revealed when the optional emphasis matcher succeeds. */
83
+ badges?: StrategyMessagePresentationBadge[];
84
+ /** Semantic row treatment; Host maps tones to its theme and never accepts plugin CSS. */
85
+ row?: {
86
+ tone: StrategyMessagePresentationTone;
87
+ background?: 'none' | 'soft';
88
+ accent?: boolean;
89
+ };
90
+ /**
91
+ * Only expose badges and soft row emphasis when any matcher succeeds.
92
+ * The accent, text decoration and opacity remain visible when none match.
93
+ */
94
+ emphasisWhen?: StrategyMessagePresentationTokenMatch[];
95
+ /** Optional semantic strike-through for completed or excluded rows. */
96
+ textDecoration?: 'line-through';
97
+ /** Optional semantic opacity treatment. */
98
+ opacity?: 'normal' | 'muted';
99
+ }
100
+ /** Assigns a class when a Host-extracted fact is new within a partition. */
101
+ export interface StrategyMessagePresentationNoveltyRule {
102
+ /** Canonical message fact extracted by Host before comparing plugin-owned known values. */
103
+ fact: 'grid-field-2';
104
+ /** Plugin-owned known values keyed by the configured partition. */
105
+ knownValuesByPartition: Record<string, string[]>;
106
+ /** Presentation class used when the extracted fact is not known. */
107
+ classId: string;
108
+ }
109
+ /** Adds a badge when a bounded token matcher accepts the decoded message. */
110
+ export interface StrategyMessagePresentationTagRule {
111
+ /** Stable rule identity for diagnostics and replacement. */
112
+ id: string;
113
+ /** Host-evaluated token matcher. */
114
+ match: StrategyMessagePresentationTokenMatch;
115
+ /** Badge rendered when the matcher succeeds. */
116
+ badge: StrategyMessagePresentationBadge;
117
+ }
118
+ /** Complete strategy-owned, data-only presentation projection for decoded messages. */
119
+ export interface StrategyMessagePresentationProjection {
120
+ /** Monotonic plugin revision used to replace stale projections. */
121
+ revision: number;
122
+ /** Whether the projection replaces logbook presentation or augments it. */
123
+ mode: 'replace-logbook' | 'augment';
124
+ /** Canonical message subject classified by the projection. */
125
+ subject: 'sender-callsign';
126
+ /** Partition used for assignments and novelty checks. */
127
+ partitionBy: 'band' | 'mode' | 'none';
128
+ /** Optional partition allowlist. */
129
+ eligiblePartitions?: string[];
130
+ /** Class applied when no assignment or rule selects another class. */
131
+ defaultClass?: string;
132
+ /** Strategy-defined presentation classes keyed by stable ID. */
133
+ classes: Record<string, StrategyMessagePresentationClass>;
134
+ /** Explicit subject-to-class assignments. */
135
+ assignments: Array<{
136
+ subject: string;
137
+ partition?: string;
138
+ classId: string;
139
+ }>;
140
+ /** Optional Host-evaluated novelty rules. */
141
+ noveltyRules?: StrategyMessagePresentationNoveltyRule[];
142
+ /** Optional Host-evaluated tag rules. */
143
+ tagRules?: StrategyMessagePresentationTagRule[];
144
+ }
145
+ /** Strategy-owned reason that prevents an operator from starting transmission. */
146
+ export interface StrategyTransmitGate {
147
+ /** Always false while the gate is present. */
148
+ allowed: false;
149
+ /** Literal message or plugin locale key shown to the operator. */
150
+ reason: string;
151
+ /** Optional strategy action that can resolve the gate. */
152
+ actionId?: string;
153
+ }
154
+ /** Semantic tone used for strategy-owned operator actions. */
155
+ export type StrategyActionTone = 'default' | 'primary' | 'success' | 'warning' | 'danger';
156
+ /** Host layout requested for a strategy-owned action. */
157
+ export type StrategyActionPresentation = 'primary' | 'secondary' | 'menu' | 'segmented';
158
+ /** Optional value editor attached to a strategy-owned action. */
159
+ export type StrategyActionInput = {
160
+ kind: 'text';
161
+ label?: string;
162
+ value?: string;
163
+ placeholder?: string;
164
+ maxLength?: number;
165
+ } | {
166
+ kind: 'number' | 'audio-frequency';
167
+ label?: string;
168
+ value?: number;
169
+ min?: number;
170
+ max?: number;
171
+ step?: number;
172
+ unit?: string;
173
+ spectrumPick?: boolean;
174
+ };
175
+ /** One context-sensitive command wholly owned by a strategy plugin. */
176
+ export interface StrategyActionDescriptor {
177
+ /** Stable action identifier passed back to the owning runtime. */
178
+ id: string;
179
+ /** Literal label or plugin locale key. */
180
+ label: string;
181
+ /** Optional literal description or plugin locale key. */
182
+ description?: string;
183
+ /** Host icon identifier. */
184
+ icon?: string;
185
+ /** Semantic action tone. */
186
+ tone?: StrategyActionTone;
187
+ /** Preferred Host layout for this command. */
188
+ presentation?: StrategyActionPresentation;
189
+ /** Optional group identity used by menus and segmented controls. */
190
+ groupId?: string;
191
+ /** Whether a toggle-like action is currently selected. */
192
+ selected?: boolean;
193
+ /** Explanation shown while the action is disabled. */
194
+ disabledReason?: string;
195
+ /** Optional exact transmission preview. */
196
+ previewText?: string;
197
+ /** Confirmation dialog requested before invocation. */
198
+ confirmation?: {
199
+ title: string;
200
+ description?: string;
201
+ confirmLabel?: string;
202
+ cancelLabel?: string;
203
+ };
204
+ /** Optional text, number, or audio-frequency editor. */
205
+ input?: StrategyActionInput;
206
+ /** Host-validated navigation to a page declared by the owning plugin. */
207
+ navigation?: {
208
+ kind: 'plugin-page';
209
+ pageId: string;
210
+ };
211
+ }
212
+ /** Strategy-owned operator attention item with optional actions and notification. */
213
+ export interface StrategyAttention {
214
+ /** Stable identity used to replace or dismiss the item. */
215
+ id: string;
216
+ /** Semantic severity rendered by the Host. */
217
+ tone: 'info' | 'warning' | 'danger' | 'success';
218
+ /** Literal title or plugin locale key. */
219
+ title: string;
220
+ /** Optional literal description or plugin locale key. */
221
+ description?: string;
222
+ /** Locale interpolation parameters. */
223
+ params?: Record<string, string | number>;
224
+ /** Whether the Host may surface an out-of-page notification. */
225
+ notify?: boolean;
226
+ /** Epoch milliseconds after which the Host may discard the item. */
227
+ expiresAt?: number;
228
+ /** Strategy action IDs offered with the item. */
229
+ actionIds?: string[];
230
+ }
231
+ /** Durable QSO completion state projected by one strategy stream. */
232
+ export interface StrategyCompletionProjection {
233
+ /** Current preparation or commit phase. */
234
+ state: 'not-ready' | 'ready' | 'committing' | 'committed' | 'failed';
235
+ /** Optional literal label or plugin locale key. */
236
+ label?: string;
237
+ /** Durable record ID once the Host commits the QSO. */
238
+ recordId?: string;
239
+ }
240
+ /** One user-selectable state exposed by a strategy-owned state machine. */
241
+ export interface StrategyStateOption {
242
+ /** Stable state identifier understood only by the owning strategy. */
243
+ id: string;
244
+ /** Literal label or plugin locale key shown by the Host UI. */
245
+ label?: string;
246
+ /** Exact transmission produced when this state is selected, when applicable. */
247
+ transmitText?: string;
248
+ }
249
+ /** One independently progressing parallel QSO inside an operator strategy. */
250
+ export interface StrategyStreamSnapshot {
251
+ /** Stable identity within the owning strategy runtime. */
252
+ streamId: string;
253
+ /** Current lane state selected by the protocol implementation. */
254
+ currentState: string;
255
+ /** Target station currently owned by this lane. */
256
+ targetCallsign?: string;
257
+ /** Last accepted target grid, when known. */
258
+ targetGrid?: string;
259
+ /** Audio carrier used by this lane in hertz. */
260
+ audioFrequencyHz: number;
261
+ /** Lane-local lifecycle epoch used to correlate durable QSO effects. */
262
+ qsoLifecycleEpoch: number;
263
+ /** Protocol-approved states that the operator may select for this lane. */
264
+ stateOptions?: StrategyStateOption[];
265
+ /** Context-sensitive actions owned by this lane. */
266
+ actions?: StrategyActionDescriptor[];
267
+ /** Operator attention items owned by this lane. */
268
+ attentions?: StrategyAttention[];
269
+ /** Durable QSO completion projection for this lane. */
270
+ completion?: StrategyCompletionProjection;
271
+ /** Most recent accepted inbound protocol text. */
272
+ lastReceivedText?: string;
273
+ /** Exact text this lane plans to transmit next. */
274
+ nextTransmitText?: string;
275
+ }
276
+ /** Optimistic target for a strategy action invocation. */
277
+ export type StrategyActionTarget = {
278
+ kind: 'runtime';
279
+ } | {
280
+ kind: 'stream';
281
+ streamId: string;
282
+ lifecycleEpoch: number;
283
+ } | {
284
+ kind: 'queue-entry';
285
+ entryId: string;
286
+ queueVersion: number;
287
+ };
288
+ /** Host-validated invocation of one strategy-owned action. */
289
+ export interface StrategyActionInvocation {
290
+ /** Runtime, stream, or queue entry that owns the action. */
291
+ target: StrategyActionTarget;
292
+ /** Action identifier from the current strategy projection. */
293
+ actionId: string;
294
+ /** Untrusted action input that the strategy must validate. */
295
+ payload?: unknown;
296
+ }
297
+ /** Host-managed plugin logbook session effect returned by an accepted action or decision. */
298
+ export type StrategyLogbookSessionEffect = {
299
+ operation: 'open';
300
+ sessionKey: string;
301
+ title: string;
302
+ retention?: 'durable' | 'runtime';
303
+ } | {
304
+ operation: 'destroy';
305
+ sessionKey: string;
306
+ };
307
+ /** Declarative effects returned after invoking a strategy-owned action. */
308
+ export interface StrategyActionResult {
309
+ /** Requests a fresh speculative decision after the action commits. */
310
+ requestDecision?: boolean;
311
+ /** Start this operator through the Host's normal automation path after a direct user action. */
312
+ requestOperatorStart?: boolean;
313
+ /** QSO effects prepared and committed by the Host. */
314
+ qsoCompletions?: StrategyQSOCompletionEffect[];
315
+ /** Host-managed plugin logbook session operations caused by this explicit action. */
316
+ logbookSessionEffects?: StrategyLogbookSessionEffect[];
317
+ /** Stable action outcome for UI feedback and diagnostics. */
318
+ outcome?: {
319
+ code: string;
320
+ message?: string;
321
+ };
322
+ }
323
+ /** Optimistic request to move one strategy-owned lane to a user-selectable state. */
324
+ export interface StrategyStreamStateUpdate {
325
+ /** Lane to update. */
326
+ streamId: string;
327
+ /** Strategy-approved target state. */
328
+ stateId: string;
329
+ /** Optimistic lane lifecycle epoch from the current projection. */
330
+ expectedLifecycleEpoch: number;
331
+ }
332
+ /** One independently encoded transmission contributed by a strategy. */
333
+ export interface StrategyTransmission {
334
+ /** Stable lane identity within one operator. */
335
+ streamId: string;
336
+ /** Exact FT8/FT4 text to encode. */
337
+ text: string;
338
+ /** Audio carrier frequency in hertz. */
339
+ audioFrequencyHz: number;
340
+ }
341
+ /** Physical confirmation for one transmitted lane in an atomic frame. */
342
+ export interface StreamPhysicalReceipt extends StrategyTransmission {
343
+ /** Host physical-frame identity. */
344
+ frameId: string;
345
+ /** Monotonic physical-frame revision. */
346
+ revision: number;
347
+ /** Literal proof that this lane reached physical transmission. */
348
+ physicalConfirmed: true;
48
349
  }
49
350
  /** User-facing phase shown for one row in a queue-capable strategy. */
50
- export type AssistedQueueDisplayState = 'TX1' | 'TX2' | 'TX3' | 'TX4' | 'TX5' | 'engaged' | 'closing' | 'paused' | 'no-response' | 'later' | 'review';
351
+ export type AssistedQueueDisplayState = 'TX1' | 'TX2' | 'TX3' | 'TX4' | 'TX5' | 'engaged' | 'closing' | 'paused' | 'no-response' | 'later' | 'review' | 'candidate' | 'authorized' | 'dupe';
51
352
  /** Why a queued target is temporarily paused instead of being selected. */
52
353
  export type AssistedQueuePauseReason = 'target-busy' | 'stale';
53
354
  /** Semantic color treatment requested for an assisted queue row. */
@@ -80,6 +381,16 @@ export interface AssistedQueueRow {
80
381
  lastSnr?: number;
81
382
  /** Receive cycles elapsed since this target was last decoded. */
82
383
  lastHeardCyclesAgo?: number;
384
+ /** Cycle in which the target was most recently decoded transmitting. */
385
+ lastHeardCycle?: 0 | 1;
386
+ /** Active strategy stream currently processing this entry. */
387
+ streamId?: string;
388
+ /** Reserved audio carrier when the entry owns a stream. */
389
+ audioFrequencyHz?: number;
390
+ /** Audited operator authorization associated with this entry. */
391
+ authorizationId?: string;
392
+ /** Plugin-declared row actions. Omission preserves legacy queue controls. */
393
+ actions?: StrategyActionDescriptor[];
83
394
  }
84
395
  /** Versioned queue projection embedded in `StrategyRuntimeSnapshot.queue`. */
85
396
  export interface AssistedQueueSnapshot {
@@ -87,6 +398,12 @@ export interface AssistedQueueSnapshot {
87
398
  version: number;
88
399
  /** Entry currently owned by the active QSO lifecycle, when any. */
89
400
  activeEntryId?: string;
401
+ /** Entries currently owned by parallel QSO lifecycles. */
402
+ activeEntryIds?: string[];
403
+ /** Maximum number of entries that may be active at once. */
404
+ maxActiveStreams?: number;
405
+ /** User-requested stream count before Host radio-frequency policy is applied. */
406
+ requestedMaxActiveStreams?: number;
90
407
  /** Queue rows in display order. */
91
408
  rows: AssistedQueueRow[];
92
409
  }
@@ -117,6 +434,8 @@ export interface QueuedStrategyMutationResult {
117
434
  reason?: 'queue_full' | 'invalid_target' | 'entry_not_found' | 'entry_not_retryable' | 'active_entry' | 'version_conflict';
118
435
  /** Authoritative queue state after the attempted mutation. */
119
436
  snapshot: AssistedQueueSnapshot;
437
+ /** Requests a normal operator start after this explicit manual queue mutation. */
438
+ requestOperatorStart?: boolean;
120
439
  }
121
440
  /** Optional capability implemented by strategies that own a target queue. */
122
441
  export interface QueuedStrategyRuntime extends StrategyRuntime {
@@ -166,30 +485,65 @@ export interface StrategyDecisionMetaV2 {
166
485
  * capabilities, functions, promises or external resource handles.
167
486
  */
168
487
  export type StrategyRuntimeCheckpoint = unknown;
488
+ /** Operator transmit-cycle selection observed by an active strategy runtime. */
489
+ export interface StrategyOperatorTransmitCyclesChanged {
490
+ /** Previous Host-selected transmit cycles. */
491
+ previousTransmitCycles: number[];
492
+ /** Current Host-selected transmit cycles. */
493
+ transmitCycles: number[];
494
+ /** Source of the accepted cycle change. */
495
+ source?: 'manual' | 'plugin' | 'late-decode' | 'slot-auto';
496
+ }
169
497
  /** Declarative request for the Host to durably commit one completed QSO. */
170
498
  export interface StrategyQSOCompletionEffect {
171
499
  /** Complete QSO record to validate and persist. */
172
500
  record: QSORecord;
173
501
  /** Stable within one strategy runtime generation; distinct from RF decision epochs. */
174
502
  lifecycleEpoch: number;
503
+ /** Lane that produced the completion; omitted by legacy single-lane strategies. */
504
+ streamId?: string;
505
+ /** Host persistence behavior requested by the strategy. */
506
+ persistencePolicy?: 'merge-nearby' | 'preserve-distinct';
507
+ /** Optional Host-issued destination. Omitted effects use the operator's primary logbook. */
508
+ destination?: {
509
+ kind: 'plugin-session';
510
+ sessionId: string;
511
+ } | {
512
+ kind: 'plugin-session-key';
513
+ sessionKey: string;
514
+ };
515
+ /** Structured-cloneable source metadata returned with post-commit delivery. */
516
+ metadata?: Record<string, unknown>;
175
517
  }
176
518
  /** Host acknowledgement for a previously returned QSO completion effect. */
177
519
  export interface StrategyQSOCompletionSettlement {
178
520
  /** Lifecycle epoch copied from the effect being settled. */
179
521
  lifecycleEpoch: number;
180
- /** Record ID from the accepted completion effect after Host persistence settles. */
522
+ /** Record ID from the accepted completion effect, used for correlation. */
181
523
  recordId: string;
524
+ /** Final durable record ID; differs when the Host merged into an existing QSO. */
525
+ persistedRecordId?: string;
182
526
  /** Whether the Host committed the record or the durable operation failed. */
183
527
  status: 'committed' | 'failed';
528
+ /** Lane copied from the accepted completion effect. */
529
+ streamId?: string;
530
+ /** Detached source metadata copied from the accepted completion effect. */
531
+ metadata?: Record<string, unknown>;
184
532
  }
185
533
  /** Complete output of one speculative strategy decision. */
186
534
  export interface StrategyDecisionResult extends StrategyDecision {
187
535
  /** Exact text to queue next, or `null` when this decision should not transmit. */
188
536
  transmission: string | null;
537
+ /** Parallel transmissions. New strategies use this instead of `transmission`. */
538
+ transmissions?: StrategyTransmission[];
189
539
  /** UI/diagnostic snapshot produced from the same post-decision state. */
190
540
  snapshot: StrategyRuntimeSnapshot;
191
541
  /** Optional QSO persistence effect executed by the Host after acceptance. */
192
542
  qsoCompletion?: StrategyQSOCompletionEffect;
543
+ /** Parallel QSO effects committed in the same accepted decision. */
544
+ qsoCompletions?: StrategyQSOCompletionEffect[];
545
+ /** Host-managed plugin logbook lifecycle effects accepted with this decision. */
546
+ logbookSessionEffects?: StrategyLogbookSessionEffect[];
193
547
  /** Optional cycle selected from the triggering RX frame; applied by the host after target reservation. */
194
548
  requestedTransmitCycle?: number;
195
549
  }
@@ -205,6 +559,11 @@ export interface StrategyRuntime {
205
559
  checkpoint(): StrategyRuntimeCheckpoint;
206
560
  /** Restores a previously captured checkpoint after a decision is discarded. */
207
561
  restore(checkpoint: StrategyRuntimeCheckpoint): void;
562
+ /**
563
+ * Observes an already-applied Host transmit-cycle selection. Returning true
564
+ * asks the Host to publish the resulting runtime projection.
565
+ */
566
+ onOperatorTransmitCyclesChanged?(change: StrategyOperatorTransmitCyclesChanged): boolean;
208
567
  /**
209
568
  * Optional acknowledgement for a declarative QSO effect. Implementations may
210
569
  * use it to prevent a completed contact from leaking into the next lifecycle.
@@ -227,6 +586,12 @@ export interface StrategyRuntime {
227
586
  * transmission should be queued.
228
587
  */
229
588
  getTransmitText(): string | null;
589
+ /**
590
+ * Returns every lane that should contribute to the next physical frame.
591
+ * Legacy runtimes may omit this method; the Host then maps getTransmitText()
592
+ * to the `default` stream at the operator's configured audio frequency.
593
+ */
594
+ getTransmissions?(): StrategyTransmission[];
230
595
  /**
231
596
  * Requests that the runtime initiate or resume a call to a target station.
232
597
  *
@@ -251,6 +616,10 @@ export interface StrategyRuntime {
251
616
  * Switches the runtime to a specific logical transmit slot/state.
252
617
  */
253
618
  setState(state: StrategyRuntimeSlot): void;
619
+ /** Switches one independently progressing lane to a strategy-approved state. */
620
+ setStreamState?(update: StrategyStreamStateUpdate): void;
621
+ /** Executes one plugin-declared runtime, stream or queue-entry action. */
622
+ invokeAction?(invocation: StrategyActionInvocation): StrategyActionResult | void | Promise<StrategyActionResult | void>;
254
623
  /**
255
624
  * Updates the human-readable content associated with a logical slot.
256
625
  */
@@ -267,5 +636,7 @@ export interface StrategyRuntime {
267
636
  * Use this to mirror queued text into internal state when needed.
268
637
  */
269
638
  onTransmissionQueued?(transmission: string): void;
639
+ /** Physical success notification for a complete parallel frame. */
640
+ onTransmissionsCompleted?(receipts: StreamPhysicalReceipt[]): void;
270
641
  }
271
642
  //# sourceMappingURL=runtime.d.ts.map