@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.
- package/README.md +201 -0
- package/dist/__tests__/adif.test.js +67 -0
- package/dist/__tests__/adif.test.js.map +1 -1
- package/dist/__tests__/testing-utils.test.js +17 -0
- package/dist/__tests__/testing-utils.test.js.map +1 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +2 -0
- package/dist/capabilities.js.map +1 -1
- package/dist/compatibility.d.ts +15 -0
- package/dist/compatibility.d.ts.map +1 -0
- package/dist/compatibility.js +71 -0
- package/dist/compatibility.js.map +1 -0
- package/dist/contest-logbook-ui/assets/contest-log.css +1 -0
- package/dist/contest-logbook-ui/assets/contest-log.js +40 -0
- package/dist/contest-logbook-ui/contest-log.html +13 -0
- package/dist/context.d.ts +39 -7
- package/dist/context.d.ts.map +1 -1
- package/dist/definition.d.ts +25 -1
- package/dist/definition.d.ts.map +1 -1
- package/dist/definition.js.map +1 -1
- package/dist/ft8/StandardQSOPluginRuntime.d.ts +142 -0
- package/dist/ft8/StandardQSOPluginRuntime.d.ts.map +1 -0
- package/dist/ft8/StandardQSOPluginRuntime.js +1592 -0
- package/dist/ft8/StandardQSOPluginRuntime.js.map +1 -0
- package/dist/ft8/index.d.ts +22 -0
- package/dist/ft8/index.d.ts.map +1 -0
- package/dist/ft8/index.js +176 -0
- package/dist/ft8/index.js.map +1 -0
- package/dist/helpers.d.ts +95 -3
- package/dist/helpers.d.ts.map +1 -1
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/index.d.ts +13 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime.d.ts +377 -6
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/simulation.d.ts +60 -0
- package/dist/simulation.d.ts.map +1 -0
- package/dist/simulation.js +2 -0
- package/dist/simulation.js.map +1 -0
- package/dist/testing/index.d.ts +5 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +67 -2
- package/dist/testing/index.js.map +1 -1
- package/dist/toolkit/contest/CabrilloBuilder.d.ts +7 -0
- package/dist/toolkit/contest/CabrilloBuilder.d.ts.map +1 -0
- package/dist/toolkit/contest/CabrilloBuilder.js +11 -0
- package/dist/toolkit/contest/CabrilloBuilder.js.map +1 -0
- package/dist/toolkit/contest/ContestCategorySchema.d.ts +11 -0
- package/dist/toolkit/contest/ContestCategorySchema.d.ts.map +1 -0
- package/dist/toolkit/contest/ContestCategorySchema.js +6 -0
- package/dist/toolkit/contest/ContestCategorySchema.js.map +1 -0
- package/dist/toolkit/contest/ContestLogbook.d.ts +223 -0
- package/dist/toolkit/contest/ContestLogbook.d.ts.map +1 -0
- package/dist/toolkit/contest/ContestLogbook.js +845 -0
- package/dist/toolkit/contest/ContestLogbook.js.map +1 -0
- package/dist/toolkit/contest/ContestQsoEnvelopeAdapter.d.ts +28 -0
- package/dist/toolkit/contest/ContestQsoEnvelopeAdapter.d.ts.map +1 -0
- package/dist/toolkit/contest/ContestQsoEnvelopeAdapter.js +79 -0
- package/dist/toolkit/contest/ContestQsoEnvelopeAdapter.js.map +1 -0
- package/dist/toolkit/contest/ContestQsoProjector.d.ts +12 -0
- package/dist/toolkit/contest/ContestQsoProjector.d.ts.map +1 -0
- package/dist/toolkit/contest/ContestQsoProjector.js +13 -0
- package/dist/toolkit/contest/ContestQsoProjector.js.map +1 -0
- package/dist/toolkit/contest/ContestSessionNotifier.d.ts +9 -0
- package/dist/toolkit/contest/ContestSessionNotifier.d.ts.map +1 -0
- package/dist/toolkit/contest/ContestSessionNotifier.js +13 -0
- package/dist/toolkit/contest/ContestSessionNotifier.js.map +1 -0
- package/dist/toolkit/contest/ContestSessionRepository.d.ts +21 -0
- package/dist/toolkit/contest/ContestSessionRepository.d.ts.map +1 -0
- package/dist/toolkit/contest/ContestSessionRepository.js +27 -0
- package/dist/toolkit/contest/ContestSessionRepository.js.map +1 -0
- package/dist/toolkit/contest/DefaultContestSession.d.ts +105 -0
- package/dist/toolkit/contest/DefaultContestSession.d.ts.map +1 -0
- package/dist/toolkit/contest/DefaultContestSession.js +387 -0
- package/dist/toolkit/contest/DefaultContestSession.js.map +1 -0
- package/dist/toolkit/contest/DefaultContestWorkbench.d.ts +100 -0
- package/dist/toolkit/contest/DefaultContestWorkbench.d.ts.map +1 -0
- package/dist/toolkit/contest/DefaultContestWorkbench.js +33 -0
- package/dist/toolkit/contest/DefaultContestWorkbench.js.map +1 -0
- package/dist/toolkit/contest/FT8ContestDefinition.d.ts +83 -0
- package/dist/toolkit/contest/FT8ContestDefinition.d.ts.map +1 -0
- package/dist/toolkit/contest/FT8ContestDefinition.js +167 -0
- package/dist/toolkit/contest/FT8ContestDefinition.js.map +1 -0
- package/dist/toolkit/contest/FT8ContestModules.d.ts +178 -0
- package/dist/toolkit/contest/FT8ContestModules.d.ts.map +1 -0
- package/dist/toolkit/contest/FT8ContestModules.js +247 -0
- package/dist/toolkit/contest/FT8ContestModules.js.map +1 -0
- package/dist/toolkit/contest/FT8ContestPlugin.d.ts +55 -0
- package/dist/toolkit/contest/FT8ContestPlugin.d.ts.map +1 -0
- package/dist/toolkit/contest/FT8ContestPlugin.js +322 -0
- package/dist/toolkit/contest/FT8ContestPlugin.js.map +1 -0
- package/dist/toolkit/contest/FT8ContestTestKit.d.ts +12 -0
- package/dist/toolkit/contest/FT8ContestTestKit.d.ts.map +1 -0
- package/dist/toolkit/contest/FT8ContestTestKit.js +60 -0
- package/dist/toolkit/contest/FT8ContestTestKit.js.map +1 -0
- package/dist/toolkit/contest/contest-toolkit.test.d.ts +2 -0
- package/dist/toolkit/contest/contest-toolkit.test.d.ts.map +1 -0
- package/dist/toolkit/contest/contest-toolkit.test.js +1196 -0
- package/dist/toolkit/contest/contest-toolkit.test.js.map +1 -0
- package/dist/toolkit/contest/index.d.ts +14 -0
- package/dist/toolkit/contest/index.d.ts.map +1 -0
- package/dist/toolkit/contest/index.js +14 -0
- package/dist/toolkit/contest/index.js.map +1 -0
- package/dist/toolkit/index.d.ts +3 -0
- package/dist/toolkit/index.d.ts.map +1 -0
- package/dist/toolkit/index.js +3 -0
- package/dist/toolkit/index.js.map +1 -0
- package/dist/toolkit/parallel-qso/AuthorizationLease.d.ts +15 -0
- package/dist/toolkit/parallel-qso/AuthorizationLease.d.ts.map +1 -0
- package/dist/toolkit/parallel-qso/AuthorizationLease.js +25 -0
- package/dist/toolkit/parallel-qso/AuthorizationLease.js.map +1 -0
- package/dist/toolkit/parallel-qso/BoundedCallSessionController.d.ts +40 -0
- package/dist/toolkit/parallel-qso/BoundedCallSessionController.d.ts.map +1 -0
- package/dist/toolkit/parallel-qso/BoundedCallSessionController.js +81 -0
- package/dist/toolkit/parallel-qso/BoundedCallSessionController.js.map +1 -0
- package/dist/toolkit/parallel-qso/BoundedCallSessionController.test.d.ts +2 -0
- package/dist/toolkit/parallel-qso/BoundedCallSessionController.test.d.ts.map +1 -0
- package/dist/toolkit/parallel-qso/BoundedCallSessionController.test.js +31 -0
- package/dist/toolkit/parallel-qso/BoundedCallSessionController.test.js.map +1 -0
- package/dist/toolkit/parallel-qso/CompletionTracker.d.ts +20 -0
- package/dist/toolkit/parallel-qso/CompletionTracker.d.ts.map +1 -0
- package/dist/toolkit/parallel-qso/CompletionTracker.js +20 -0
- package/dist/toolkit/parallel-qso/CompletionTracker.js.map +1 -0
- package/dist/toolkit/parallel-qso/LaneFrequencyController.d.ts +19 -0
- package/dist/toolkit/parallel-qso/LaneFrequencyController.d.ts.map +1 -0
- package/dist/toolkit/parallel-qso/LaneFrequencyController.js +23 -0
- package/dist/toolkit/parallel-qso/LaneFrequencyController.js.map +1 -0
- package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.d.ts +134 -0
- package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.d.ts.map +1 -0
- package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.js +554 -0
- package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.js.map +1 -0
- package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.test.d.ts +2 -0
- package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.test.d.ts.map +1 -0
- package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.test.js +470 -0
- package/dist/toolkit/parallel-qso/ParallelQSOCoordinator.test.js.map +1 -0
- package/dist/toolkit/parallel-qso/PostCompletionRecoveryLease.d.ts +20 -0
- package/dist/toolkit/parallel-qso/PostCompletionRecoveryLease.d.ts.map +1 -0
- package/dist/toolkit/parallel-qso/PostCompletionRecoveryLease.js +29 -0
- package/dist/toolkit/parallel-qso/PostCompletionRecoveryLease.js.map +1 -0
- package/dist/toolkit/parallel-qso/ProtocolLane.d.ts +50 -0
- package/dist/toolkit/parallel-qso/ProtocolLane.d.ts.map +1 -0
- package/dist/toolkit/parallel-qso/ProtocolLane.js +2 -0
- package/dist/toolkit/parallel-qso/ProtocolLane.js.map +1 -0
- package/dist/toolkit/parallel-qso/controllers.test.d.ts +2 -0
- package/dist/toolkit/parallel-qso/controllers.test.d.ts.map +1 -0
- package/dist/toolkit/parallel-qso/controllers.test.js +36 -0
- package/dist/toolkit/parallel-qso/controllers.test.js.map +1 -0
- package/dist/toolkit/parallel-qso/index.d.ts +8 -0
- package/dist/toolkit/parallel-qso/index.d.ts.map +1 -0
- package/dist/toolkit/parallel-qso/index.js +8 -0
- package/dist/toolkit/parallel-qso/index.js.map +1 -0
- package/dist/utils/adif.d.ts +1 -1
- package/dist/utils/adif.d.ts.map +1 -1
- package/dist/utils/adif.js +91 -50
- package/dist/utils/adif.js.map +1 -1
- package/package.json +27 -5
- package/src/bridge.d.ts +3 -0
- package/tokens.css +51 -0
package/dist/definition.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { PluginSettingDescriptor, PluginQuickAction, PluginQuickSetting, Pl
|
|
|
2
2
|
import type { PluginCleanupContext, PluginContextFor, PluginEligibilityContext, StrategyPluginContext } from './context.js';
|
|
3
3
|
import type { PluginHooks } from './hooks.js';
|
|
4
4
|
import type { StrategyRuntime } from './runtime.js';
|
|
5
|
+
import type { SimulationScenarioDescriptor } from './simulation.js';
|
|
5
6
|
/**
|
|
6
7
|
* Describes a TX-5DR plugin module.
|
|
7
8
|
*
|
|
@@ -99,6 +100,13 @@ export interface PluginDefinition<Permissions extends readonly PluginPermission[
|
|
|
99
100
|
* valid semver string makes diagnostics and upgrades much easier.
|
|
100
101
|
*/
|
|
101
102
|
version: string;
|
|
103
|
+
/**
|
|
104
|
+
* Oldest bundled `@tx5dr/plugin-api` version that can safely load this plugin.
|
|
105
|
+
*
|
|
106
|
+
* This is independent from the TX-5DR product/nightly version. Marketplace
|
|
107
|
+
* artifacts must declare it and match their catalog entry.
|
|
108
|
+
*/
|
|
109
|
+
minPluginApiVersion?: string;
|
|
102
110
|
/**
|
|
103
111
|
* Declares how the host should schedule and combine this plugin.
|
|
104
112
|
*
|
|
@@ -112,7 +120,19 @@ export interface PluginDefinition<Permissions extends readonly PluginPermission[
|
|
|
112
120
|
strategyFeatures?: {
|
|
113
121
|
/** Declares the `QueuedStrategyRuntime` assisted-target queue contract. */
|
|
114
122
|
targetQueue?: 1;
|
|
123
|
+
/** Declares support for more than one active target lane. */
|
|
124
|
+
parallelTargetQueue?: 1;
|
|
125
|
+
/** Controls whether enqueueing may start a stopped operator. */
|
|
126
|
+
queueActivation?: 'immediate' | 'operator-toggle';
|
|
127
|
+
/** Blocks unscoped plugin commands; the strategy may consume its own audited operator authorization. */
|
|
128
|
+
manualInitiation?: 1;
|
|
129
|
+
/** Strategy-specific cap applied in addition to the operator cap. */
|
|
130
|
+
maxConcurrentStreams?: number;
|
|
131
|
+
/** Maximum signals that may be emitted in one physical frame. */
|
|
132
|
+
maxSimultaneousSignals?: number;
|
|
115
133
|
};
|
|
134
|
+
/** Development-only virtual-radio peer scenarios. The Host owns execution and RF safety. */
|
|
135
|
+
simulationScenarios?: SimulationScenarioDescriptor[];
|
|
116
136
|
/**
|
|
117
137
|
* Controls whether the host creates one instance per operator or a single
|
|
118
138
|
* shared instance for the whole station.
|
|
@@ -174,12 +194,16 @@ export interface PluginDefinition<Permissions extends readonly PluginPermission[
|
|
|
174
194
|
*
|
|
175
195
|
* Each panel has a `slot` that controls where it renders: `'operator'` (the
|
|
176
196
|
* default, shown in the operator card), `'automation'` (shown in the
|
|
177
|
-
* top-right automation popover), `'
|
|
197
|
+
* top-right automation popover), `'operator-action'` (an icon-and-text page
|
|
198
|
+
* action beside the operator logbook button), `'main-right'` (the optional far-right main
|
|
178
199
|
* pane), `'voice-left-top'` (above the voice frequency card),
|
|
179
200
|
* `'voice-right-top'` (the tabbed top area of the voice right panel),
|
|
180
201
|
* `'cw-left-top'` (above the CW frequency card),
|
|
181
202
|
* `'cw-right-top'` (the tabbed top area of the CW right panel), or
|
|
182
203
|
* `'radio-control-toolbar'` (a global utility iframe button in RadioControl).
|
|
204
|
+
* An `operator-action` panel must use `component: 'iframe'` and
|
|
205
|
+
* `openMode: 'page'`; the Host binds it to that operator and opens the
|
|
206
|
+
* referenced custom UI as a standalone page.
|
|
183
207
|
* Panels may also declare a preferred `width`, such as `'full'`, so hosts can
|
|
184
208
|
* promote more important live panels.
|
|
185
209
|
*/
|
package/dist/definition.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"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"}
|
package/dist/definition.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"AA8UA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAE1B,UAAyC;IACzC,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { PluginLogger } from '../helpers.js';
|
|
2
|
+
import type { QSOContext, ParsedFT8Message, QSORecord, FrameMessage, SlotInfo, OperatorSlots, OperatorConfig } from '@tx5dr/contracts';
|
|
3
|
+
import type { StrategyRuntime, StrategyRuntimeCheckpoint, StrategyRuntimeContext, StrategyRuntimeSlot, StrategyRuntimeSnapshot, StrategyRuntimeSlotContentUpdate } from '../runtime.js';
|
|
4
|
+
import type { StrategyDecision, QSOFailureInfo } from '../hooks.js';
|
|
5
|
+
import type { StrategyDecisionMetaV2, StrategyDecisionResult } from '../runtime.js';
|
|
6
|
+
export declare const STANDARD_QSO_TX6_MESSAGE_OVERRIDE_SETTING = "tx6MessageOverride";
|
|
7
|
+
export type StandardQSOOperatorConfig = OperatorConfig & {
|
|
8
|
+
autoReplyToDirectCallWhenStopped?: boolean;
|
|
9
|
+
skipTx1?: boolean;
|
|
10
|
+
distinguishWorkedStationsByBand?: boolean;
|
|
11
|
+
tx6MessageOverride?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function normalizeStandardQSOTx6MessageOverride(content: unknown, defaultMessage: string): string;
|
|
14
|
+
export declare function buildStandardQSODefaultTx6Message(config: Pick<OperatorConfig, 'myCallsign' | 'myGrid'>): string;
|
|
15
|
+
type SlotsIndex = 'TX1' | 'TX2' | 'TX3' | 'TX4' | 'TX5' | 'TX6';
|
|
16
|
+
type Slots = {
|
|
17
|
+
[key in SlotsIndex]: string;
|
|
18
|
+
};
|
|
19
|
+
export interface StandardQSOPluginOperator {
|
|
20
|
+
readonly config: StandardQSOOperatorConfig;
|
|
21
|
+
hasWorkedCallsign(callsign: string, options?: {
|
|
22
|
+
anyBand?: boolean;
|
|
23
|
+
}): Promise<boolean>;
|
|
24
|
+
isTargetBeingWorkedByOthers(targetCallsign: string): boolean;
|
|
25
|
+
notifySlotsUpdated?(slots: OperatorSlots): void;
|
|
26
|
+
notifyStateChanged?(state: string): void;
|
|
27
|
+
}
|
|
28
|
+
export interface StandardQSOActivationRequest {
|
|
29
|
+
callsign: string;
|
|
30
|
+
lastMessage?: {
|
|
31
|
+
message: FrameMessage;
|
|
32
|
+
slotInfo: SlotInfo;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface StandardQSOActivationResult {
|
|
36
|
+
accepted: boolean;
|
|
37
|
+
lifecycleEpoch: number;
|
|
38
|
+
initialSlot?: StrategyRuntimeSlot;
|
|
39
|
+
}
|
|
40
|
+
interface Post73RetryContext {
|
|
41
|
+
targetCallsign: string;
|
|
42
|
+
targetGrid?: string;
|
|
43
|
+
reportSent?: number;
|
|
44
|
+
reportReceived?: number;
|
|
45
|
+
actualFrequency?: number;
|
|
46
|
+
completedQSO?: QSORecord;
|
|
47
|
+
expiresAt: number;
|
|
48
|
+
}
|
|
49
|
+
export declare class StandardQSOPluginRuntime implements StrategyRuntime {
|
|
50
|
+
readonly operator: StandardQSOPluginOperator;
|
|
51
|
+
private state;
|
|
52
|
+
private slots;
|
|
53
|
+
private _context;
|
|
54
|
+
private tx6MessageOverride;
|
|
55
|
+
private lastConfigTx6MessageOverride;
|
|
56
|
+
private timeoutCycles;
|
|
57
|
+
callAttempts: number;
|
|
58
|
+
qsoStartTime?: number;
|
|
59
|
+
tx5TransmissionQueued: boolean;
|
|
60
|
+
private completedQSORecord?;
|
|
61
|
+
private pendingQSOCompletion?;
|
|
62
|
+
private qsoLifecycleEpoch;
|
|
63
|
+
private speculativeDecisionDepth;
|
|
64
|
+
post73RetryContext?: Post73RetryContext;
|
|
65
|
+
private qsoContextHistory;
|
|
66
|
+
private readonly MAX_CONTEXT_CACHE;
|
|
67
|
+
foxHash?: string;
|
|
68
|
+
readonly logger: PluginLogger;
|
|
69
|
+
constructor(operator: StandardQSOPluginOperator, logger?: PluginLogger);
|
|
70
|
+
private syncOperatorConfig;
|
|
71
|
+
get context(): QSOContext;
|
|
72
|
+
buildNoReplyFailure(reason: string, unansweredTransmissions: number, targetCallsign?: string | undefined): QSOFailureInfo | undefined;
|
|
73
|
+
buildProtocolTimeoutFailure(stage: 'TX2' | 'TX3' | 'TX4'): QSOFailureInfo | undefined;
|
|
74
|
+
changeState(state: SlotsIndex): Promise<void>;
|
|
75
|
+
prepareCompletedQSOEffect(): void;
|
|
76
|
+
private beginQsoLifecycle;
|
|
77
|
+
hasUnsettledQSOCompletion(): boolean;
|
|
78
|
+
beginQsoWithTarget(callsign: string, reason: string): void;
|
|
79
|
+
settleQSOCompletion(settlement: import('@tx5dr/plugin-api').StrategyQSOCompletionSettlement): void;
|
|
80
|
+
handleReceivedAndDicideNext(messages: ParsedFT8Message[], options?: {
|
|
81
|
+
isReDecision?: boolean;
|
|
82
|
+
}): Promise<StrategyDecision>;
|
|
83
|
+
handleTransmitSlot(): string | null;
|
|
84
|
+
onTransmissionQueued(transmission: string): void;
|
|
85
|
+
getInitialOutboundCallState(): SlotsIndex;
|
|
86
|
+
activateTarget(request: StandardQSOActivationRequest): StandardQSOActivationResult;
|
|
87
|
+
requestCall(callsign: string, lastMessage: {
|
|
88
|
+
message: FrameMessage;
|
|
89
|
+
slotInfo: SlotInfo;
|
|
90
|
+
} | undefined): boolean;
|
|
91
|
+
private requestCallInternal;
|
|
92
|
+
checkpoint(): StrategyRuntimeCheckpoint;
|
|
93
|
+
restore(checkpoint: StrategyRuntimeCheckpoint): void;
|
|
94
|
+
decide(messages: ParsedFT8Message[], meta: StrategyDecisionMetaV2): Promise<StrategyDecisionResult>;
|
|
95
|
+
getTransmitText(): string | null;
|
|
96
|
+
getIdleCQText(): string | null;
|
|
97
|
+
getSnapshot(): StrategyRuntimeSnapshot;
|
|
98
|
+
patchContext(patch: Partial<StrategyRuntimeContext>): void;
|
|
99
|
+
private canAcceptTargetCallsign;
|
|
100
|
+
setState(state: SlotsIndex): void;
|
|
101
|
+
setSlotContent(update: StrategyRuntimeSlotContentUpdate): void;
|
|
102
|
+
reset(reason?: string): void;
|
|
103
|
+
/**
|
|
104
|
+
* 获取当前所有时隙的内容
|
|
105
|
+
*/
|
|
106
|
+
getSlots(): Slots;
|
|
107
|
+
/**
|
|
108
|
+
* 获取当前状态
|
|
109
|
+
*/
|
|
110
|
+
getCurrentState(): SlotsIndex;
|
|
111
|
+
private updateTargetSlotsForSpecialCallsign;
|
|
112
|
+
updateSlots(): void;
|
|
113
|
+
/**
|
|
114
|
+
* 保存当前QSO上下文到历史缓存
|
|
115
|
+
*/
|
|
116
|
+
private saveCurrentContext;
|
|
117
|
+
/**
|
|
118
|
+
* 从历史缓存恢复QSO上下文
|
|
119
|
+
*/
|
|
120
|
+
restoreContext(targetCallsign: string): boolean;
|
|
121
|
+
armPost73RetryContext(): void;
|
|
122
|
+
clearPost73RetryContext(reason: string): void;
|
|
123
|
+
getActivePost73RetryContext(): Post73RetryContext | undefined;
|
|
124
|
+
restorePost73RetryContext(context: Post73RetryContext): void;
|
|
125
|
+
/**
|
|
126
|
+
* 清空QSO上下文
|
|
127
|
+
* 在QSO结束时调用,确保干净的下一次通联
|
|
128
|
+
*/
|
|
129
|
+
clearQSOContext(): void;
|
|
130
|
+
resetRuntime(reason?: string): void;
|
|
131
|
+
private changeStateSafely;
|
|
132
|
+
/**
|
|
133
|
+
* 通知slots更新
|
|
134
|
+
*/
|
|
135
|
+
private notifySlotsUpdated;
|
|
136
|
+
/**
|
|
137
|
+
* 通知状态变化
|
|
138
|
+
*/
|
|
139
|
+
private notifyStateChanged;
|
|
140
|
+
}
|
|
141
|
+
export {};
|
|
142
|
+
//# sourceMappingURL=StandardQSOPluginRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StandardQSOPluginRuntime.d.ts","sourceRoot":"","sources":["../../src/ft8/StandardQSOPluginRuntime.ts"],"names":[],"mappings":"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"}
|