@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/README.md CHANGED
@@ -62,8 +62,159 @@ export default definePlugin({
62
62
  |---------|-------------|
63
63
  | `@tx5dr/plugin-api` | `definePlugin()`, capability-derived contexts, hooks, structured command ports, and radio/message types |
64
64
  | `@tx5dr/plugin-api/testing` | Mock factories for unit testing: `createMockContext()`, `createMockSlotInfo()`, `createMockParsedMessage()`, `createMockEventBus()` |
65
+ | `@tx5dr/plugin-api/contest` | Composable FT8/FT4 exchange, completion, dupe, scoring, submission, session and plugin assembly modules |
66
+ | `@tx5dr/plugin-api/toolkit` | Advanced contest and parallel-QSO building blocks |
65
67
  | `@tx5dr/plugin-api/bridge` | Ambient type declarations for the iframe Bridge SDK (`window.tx5dr`) |
66
68
 
69
+ Release boundary: `2.0.1` is the containment release for the existing
70
+ experimental/advanced `./toolkit` surface. The stable `./contest` entry point,
71
+ root re-exports and `ft8-contest` scaffold start at `2.5.0`; the publish workflow
72
+ rejects an older version when that stable export is present.
73
+
74
+ Plugin compatibility uses the bundled `@tx5dr/plugin-api` SemVer, not the
75
+ TX-5DR product/nightly version. Marketplace plugins declare
76
+ `minPluginApiVersion`; `apiVersion: 2` remains the separate runtime ABI marker.
77
+
78
+ ## FT8 Contest Composition
79
+
80
+ Contest rules are public, replaceable modules. `composeFT8ContestPlugin()` is a
81
+ convenience entry point, not a required base class: a plugin may also import the
82
+ same modules and connect them with `definePlugin()` itself.
83
+
84
+ ```ts
85
+ import {
86
+ cabrilloSubmission,
87
+ CONTEST_LOGBOOK_PERMISSIONS,
88
+ composeFT8ContestPlugin,
89
+ defineFT8Contest,
90
+ distancePoints,
91
+ fixedWeekendEdition,
92
+ gridExchange,
93
+ requireExchangeAndFinalAck,
94
+ standardFT8ContestLogbook,
95
+ } from '@tx5dr/plugin-api/contest';
96
+ import { createContestRuntime } from './runtime.js';
97
+
98
+ const contest = defineFT8Contest({
99
+ id: 'example-ft8',
100
+ rulesetVersion: '2026.1',
101
+ edition: fixedWeekendEdition({
102
+ id: '2026',
103
+ startAt: '2026-08-29T00:00:00Z',
104
+ endAt: '2026-08-30T00:00:00Z',
105
+ }),
106
+ bands: ['80M', '40M', '20M', '15M', '10M'],
107
+ exchange: gridExchange(),
108
+ completion: requireExchangeAndFinalAck(),
109
+ scoring: distancePoints({ stepKm: 3000 }),
110
+ presentation: {
111
+ summary: 'FT8/FT4 grid exchange contest.',
112
+ scoring: 'One point plus one point per 3000 km step; grid fields provide multipliers.',
113
+ exchange: 'Four-character Maidenhead grid',
114
+ },
115
+ submission: cabrilloSubmission({
116
+ headers: () => [['CONTEST', 'EXAMPLE-FT8']],
117
+ qsoLine: (qso) => `QSO: ${qso.callsign}`,
118
+ }),
119
+ });
120
+
121
+ export default composeFT8ContestPlugin({
122
+ name: 'example-ft8',
123
+ version: '1.0.0',
124
+ minPluginApiVersion: '2.5.0',
125
+ permissions: CONTEST_LOGBOOK_PERMISSIONS,
126
+ contest,
127
+ runtime: createContestRuntime,
128
+ logbook: standardFT8ContestLogbook({ contest }),
129
+ });
130
+ ```
131
+
132
+ For fixed-point sprints, prefix/DXCC/grid multipliers, or contests that need
133
+ zero-point QSOs to remain multiplier-eligible, combine `fixedPoints()`,
134
+ `scoreBy()` and `multiplierKeysFrom()` with your own contest metadata accessor.
135
+ `distancePoints()` is the common shortcut for distance-based FT8/FT4 scoring,
136
+ not the only way to compose a contest.
137
+
138
+ The definition defaults to FT8, one QSO, one signal, human initiation and
139
+ callsign-per-band duplicate checking. Completion remains mandatory because a
140
+ plugin must choose its RF fail-closed evidence policy explicitly. The assembler
141
+ maps human initiation and QSO/simultaneous-signal limits into Host-enforced
142
+ strategy capabilities. `cycleRelation` remains a runtime-adapter responsibility
143
+ because it depends on the contest protocol's lane semantics. Optional
144
+ `defaultContestSession()` and `defaultContestWorkbench()` hide storage keys and
145
+ page routing while keeping their module interfaces replaceable. For a complete
146
+ operator-facing contest logbook, use `standardFT8ContestLogbook({ contest })`;
147
+ it supplies the standard page, panel, bridge protocol, ADIF import/export and
148
+ official submission format. The `ft8-contest` scaffold copies the canonical
149
+ page assets automatically. The definition's `presentation` metadata is shown
150
+ as collapsible rule and scoring details with a link to the official rules; when
151
+ metadata is absent, the corresponding detail is omitted.
152
+ The standard logbook also derives the FrameTable's new-callsign and contest
153
+ multiplier presentation from the independent contest session, and the composer
154
+ adds it to the strategy snapshot automatically.
155
+
156
+ Single-stream contests may add `strategyFeatures.targetQueue` explicitly.
157
+ Definitions with more than one concurrent QSO automatically require the Host's
158
+ parallel queue contract; the assembler validates the returned runtime as soon
159
+ as it is created. Contest identities, editions and rule-module entry points are
160
+ snapshotted when `defineFT8Contest()` returns.
161
+
162
+ Use `projectFT8ContestQsos()`, `scoreFT8ContestQsos()` and
163
+ `formatFT8ContestSubmission()` as the common eligibility path. They apply the
164
+ edition window, supported modes/bands, review/excluded state and dupe policy
165
+ before score or export. Allocate serials with `nextContestSerial()` inside a
166
+ session `transact()` planner so a revision retry recalculates the serial from the
167
+ latest durable QSO snapshot.
168
+
169
+ For a contest application, declare the shared session capabilities and let the
170
+ facade own Host session keys, event topics and revision-conflict retries:
171
+
172
+ ```ts
173
+ import {
174
+ CONTEST_SESSION_PERMISSIONS,
175
+ createContestQsoEnvelopeAdapter,
176
+ defaultContestSession,
177
+ } from '@tx5dr/plugin-api/contest';
178
+
179
+ const session = defaultContestSession({
180
+ create: () => ({ schemaVersion: 1, revision: 0, settings: {} }),
181
+ });
182
+ const contestEnvelope = createContestQsoEnvelopeAdapter(contest);
183
+
184
+ const contestEntry = contestEnvelope.create({
185
+ sent: { grid: 'PL04' },
186
+ received: { grid: 'FN31' },
187
+ annotations: { status: 'review' },
188
+ });
189
+
190
+ // Inside a current Host callback:
191
+ await session.access(ctx).transact(
192
+ (snapshot) => planImportMutations(parsedImport, snapshot),
193
+ { reason: 'import' },
194
+ );
195
+ ```
196
+
197
+ The facade opens the Host plugin-session on each current invocation, exposes
198
+ health/query/snapshot, retries a snapshot-planned QSO batch up to three times,
199
+ and publishes UI/event-bus notifications after commit. The plugin still parses
200
+ the file and owns its exchange, review fields and mutations. It never receives
201
+ the raw Host session handle. Use `CONTEST_SESSION_PERMISSIONS` as the plugin's
202
+ permissions when composing this default module.
203
+
204
+ Session identity includes plugin owner, station callsign, `contestId`,
205
+ `editionId` and `rulesetVersion`. The default facade is durable-only because its
206
+ cleanup context cannot destroy a runtime Host session; runtime practice/session
207
+ lifecycles must use strategy `logbookSessionEffects`. The envelope adapter
208
+ freezes the contest identity and uses the definition's typed exchange codec for
209
+ create/validation.
210
+
211
+ `defaultContestWorkbench()` exports a recommended `ContestWorkbenchCommand`
212
+ union for `get-state`, settings, QSO review, import and export action names plus
213
+ a narrow `ContestWorkbenchViewModel`. It is not a closed action DSL: plugins may
214
+ extend `ContestWorkbenchRequest` with custom actions. The plugin supplies typed
215
+ decoding, handlers and contest-specific generic fields; the SDK does not impose
216
+ a UI framework.
217
+
67
218
  ## Capability Model
68
219
 
69
220
  Privileged Host APIs use an allowlist model. A plugin must declare every
@@ -388,6 +539,9 @@ Plugin iframe pages communicate with the host via the Bridge SDK (`window.tx5dr`
388
539
  tx5dr.invoke('getState').then(function(state) {
389
540
  // Full autocomplete for tx5dr methods
390
541
  });
542
+
543
+ // Opens the system default browser in Electron, or a new tab in Web.
544
+ tx5dr.openExternal('https://example.com/rules');
391
545
  ```
392
546
 
393
547
  ## CSS Design Tokens
@@ -410,8 +564,55 @@ Then use the tokens in your plugin CSS:
410
564
  }
411
565
  ```
412
566
 
567
+ The host deliberately does not inject component classes. Plugins own their
568
+ markup and CSS, while the token layer exposes enough primitives to reproduce
569
+ the host's control variants consistently. For example, a plugin can assemble
570
+ its own flat primary button:
571
+
572
+ ```css
573
+ .button {
574
+ min-height: var(--tx5dr-control-height-sm);
575
+ padding-inline: var(--tx5dr-control-padding-x-sm);
576
+ border: 1px solid transparent;
577
+ border-radius: var(--tx5dr-radius-sm);
578
+ font-size: var(--tx5dr-control-font-size-sm);
579
+ font-weight: var(--tx5dr-control-font-weight);
580
+ transition: background-color var(--tx5dr-control-transition);
581
+ }
582
+
583
+ .button--flat-primary {
584
+ color: var(--tx5dr-primary);
585
+ background: var(--tx5dr-primary-soft);
586
+ }
587
+
588
+ .button--flat-primary:hover:not(:disabled) {
589
+ background: var(--tx5dr-primary-soft-hover);
590
+ }
591
+
592
+ .button:disabled {
593
+ opacity: var(--tx5dr-control-disabled-opacity);
594
+ }
595
+ ```
596
+
597
+ The same primitives support plugin-owned `solid`, `flat`, `bordered`, and
598
+ `light` variants. Semantic soft/foreground tokens are available for primary,
599
+ success, warning, and danger controls; compact status, table, alert, shadow,
600
+ focus, spacing, and typography primitives use the corresponding
601
+ `--tx5dr-control-*`, `--tx5dr-chip-*`, `--tx5dr-table-*`, and base tokens.
602
+
413
603
  ## Testing
414
604
 
605
+ 慢速历史扫描、缓存预热或迁移应通过 Host 的启动后任务执行:
606
+
607
+ ```ts
608
+ context.lifecycle.scheduleAfterStartup('history-prewarm', async (signal) => {
609
+ if (signal.aborted) return;
610
+ await rebuildHistory(signal);
611
+ });
612
+ ```
613
+
614
+ Host 会在 Server ready 后调度任务,并在插件实例卸载或重载时自动取消。
615
+
415
616
  ```typescript
416
617
  import { describe, it, expect } from 'vitest';
417
618
  import {
@@ -28,6 +28,73 @@ describe('ADIF QSO mode projection', () => {
28
28
  expect(parsed?.mode).toBe('SSB');
29
29
  expect(parsed?.submode).toBe('USB');
30
30
  });
31
+ it('round-trips the contest identifier used for WW Digi recovery', () => {
32
+ const adif = convertQSOToADIF(createQso({
33
+ mode: 'FT8',
34
+ submode: undefined,
35
+ contestId: 'WW-DIGI',
36
+ }));
37
+ expect(adif).toContain('<contest_id:7>WW-DIGI');
38
+ expect(parseADIFRecord(adif, 'test')?.contestId).toBe('WW-DIGI');
39
+ });
40
+ it('round-trips the atomic contest envelope with Unicode exchange data', () => {
41
+ const contestEntry = {
42
+ schemaVersion: 1,
43
+ contestId: 'FT-CHALLENGE',
44
+ editionId: '2026-weekend-1',
45
+ rulesetVersion: '2026.1',
46
+ sent: { grid: 'PL05', operatorNote: '台北<portable>' },
47
+ received: { grid: 'PM96', snr: '-12' },
48
+ annotations: { status: 'included', transmitter: 1, reviewed: false },
49
+ };
50
+ const adif = convertQSOToADIF(createQso({
51
+ contestId: contestEntry.contestId,
52
+ contestEntry,
53
+ }));
54
+ expect(adif).toContain('<contest_id:12>FT-CHALLENGE');
55
+ expect(adif).toMatch(/<app_tx5dr_contest_entry:\d+>\{"schemaVersion":1/);
56
+ expect(parseADIFRecord(adif, 'test')).toMatchObject({
57
+ contestId: contestEntry.contestId,
58
+ contestEntry,
59
+ });
60
+ });
61
+ it('parses external Unicode contest envelopes using ADIF byte lengths', () => {
62
+ const contestEntry = {
63
+ schemaVersion: 1,
64
+ contestId: 'FT-CHALLENGE',
65
+ editionId: '2026-weekend-1',
66
+ rulesetVersion: '2026.1',
67
+ sent: { grid: 'PL05', operatorNote: '台北' },
68
+ received: { grid: 'PM96', snr: '-12' },
69
+ };
70
+ const rawEnvelope = JSON.stringify(contestEntry);
71
+ const adif = '<CALL:6>N0CALL<QSO_DATE:8>20260417<TIME_ON:6>120000<MODE:3>FT8<FREQ:9>14.074000'
72
+ + '<CONTEST_ID:12>FT-CHALLENGE'
73
+ + `<APP_TX5DR_CONTEST_ENTRY:${Buffer.byteLength(rawEnvelope)}>${rawEnvelope}<EOR>`;
74
+ expect(parseADIFRecord(adif, 'test')).toMatchObject({ contestEntry });
75
+ });
76
+ it('round-trips Unicode QTH and notes with UTF-8 byte lengths', () => {
77
+ const adif = convertQSOToADIF(createQso({ qth: '台北', notes: '測試' }));
78
+ expect(adif).toContain('<qth:6>台北');
79
+ expect(adif).toContain('<notes:6>測試');
80
+ expect(parseADIFRecord(adif, 'test')).toMatchObject({ qth: '台北', notes: '測試' });
81
+ });
82
+ it('does not attach a private contest envelope that conflicts with CONTEST_ID', () => {
83
+ const encoded = convertQSOToADIF(createQso({
84
+ contestId: 'FT-CHALLENGE',
85
+ contestEntry: {
86
+ schemaVersion: 1,
87
+ contestId: 'FT-CHALLENGE',
88
+ editionId: '2026-weekend-1',
89
+ rulesetVersion: '2026.1',
90
+ sent: {},
91
+ received: {},
92
+ },
93
+ })).replace('FT-CHALLENGE', 'WW-DIGI ');
94
+ const parsed = parseADIFRecord(encoded, 'test');
95
+ expect(parsed?.contestId).toBe('WW-DIGI ');
96
+ expect(parsed?.contestEntry).toBeUndefined();
97
+ });
31
98
  });
32
99
  describe('ADIF QSO comments', () => {
33
100
  it('exports WSJT-X compatible signal reports in COMMENT', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"adif.test.js","sourceRoot":"","sources":["../../src/__tests__/adif.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adif.test.js","sourceRoot":"","sources":["../../src/__tests__/adif.test.ts"],"names":[],"mappings":"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"}
@@ -121,6 +121,7 @@ describe('plugin-api testing utilities', () => {
121
121
  expect(ctx.operator.callsign).toBe('W1AW');
122
122
  expect(ctx.operator.grid).toBe('FN31');
123
123
  expect(ctx.radio.isConnected).toBe(true);
124
+ expect(ctx.pluginApiVersion).toBe('2.5.0');
124
125
  expect(ctx.config).toEqual({});
125
126
  expect('eventBus' in ctx).toBe(false);
126
127
  });
@@ -172,6 +173,22 @@ describe('plugin-api testing utilities', () => {
172
173
  ctx.log.info('test');
173
174
  expect(ctx.log._calls).toHaveLength(1);
174
175
  });
176
+ it('exposes only plugin-owned sessions for the session permission', async () => {
177
+ const ctx = createMockContext({
178
+ permissions: ['logbook:session'],
179
+ callsign: 'BG4IAJ',
180
+ });
181
+ expect('queryQSOs' in ctx.logbook).toBe(false);
182
+ const session = await ctx.logbook.sessions.open({
183
+ sessionKey: 'contest:2026',
184
+ stationCallsign: 'BG4IAJ',
185
+ title: 'Contest 2026',
186
+ });
187
+ expect(session).toMatchObject({
188
+ id: 'plugin-session-contest:2026',
189
+ title: 'Contest 2026',
190
+ });
191
+ });
175
192
  it('includes host settings mocks', async () => {
176
193
  const ctx = createMockContext({ permissions: ['settings:ft8'] });
177
194
  await expect(ctx.settings.ft8.update({ maxSameTransmissionCount: 0 })).resolves.toMatchObject({
@@ -1 +1 @@
1
- {"version":3,"file":"testing-utils.test.js","sourceRoot":"","sources":["../../src/__tests__/testing-utils.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing-utils.test.js","sourceRoot":"","sources":["../../src/__tests__/testing-utils.test.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ export declare const PLUGIN_CONTEXT_CAPABILITY_KEYS: {
14
14
  readonly 'radio:power': readonly ["radioPowerCommands"];
15
15
  readonly 'logbook:read': readonly ["logbook"];
16
16
  readonly 'logbook:write': readonly ["logbook"];
17
+ readonly 'logbook:session': readonly ["logbook"];
17
18
  readonly 'logbook:sync': readonly ["logbookSync"];
18
19
  readonly 'settings:ft8': readonly ["settings"];
19
20
  readonly 'settings:decode-windows': readonly ["settings"];
@@ -31,7 +32,7 @@ export type PluginContextCapabilityPermission = keyof typeof PLUGIN_CONTEXT_CAPA
31
32
  /** Top-level runtime context property controlled by a manifest permission. */
32
33
  export type PluginContextCapabilityKey = (typeof PLUGIN_CONTEXT_CAPABILITY_KEYS)[PluginContextCapabilityPermission][number];
33
34
  /** Permissions that expose host-arbitrated mutation ports and therefore require API v2. */
34
- export declare const PLUGIN_COMMAND_CAPABILITY_PERMISSIONS: readonly ["operator:transmit-control", "radio:control", "radio:tuner-control", "radio:power", "logbook:write", "logbook:sync"];
35
+ export declare const PLUGIN_COMMAND_CAPABILITY_PERMISSIONS: readonly ["operator:transmit-control", "radio:control", "radio:tuner-control", "radio:power", "logbook:write", "logbook:session", "logbook:sync"];
35
36
  /** Returns the unique context-property allowlist implied by a permission list. */
36
37
  export declare function getPluginContextCapabilityKeys(permissions: readonly PluginPermission[] | undefined): PluginContextCapabilityKey[];
37
38
  //# sourceMappingURL=capabilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;CAmB8B,CAAC;AAE1E,kFAAkF;AAClF,MAAM,MAAM,iCAAiC,GAAG,MAAM,OAAO,8BAA8B,CAAC;AAC5F,8EAA8E;AAC9E,MAAM,MAAM,0BAA0B,GACpC,CAAC,OAAO,8BAA8B,CAAC,CAAC,iCAAiC,CAAC,CAAC,MAAM,CAAC,CAAC;AAErF,2FAA2F;AAC3F,eAAO,MAAM,qCAAqC,gIAOF,CAAC;AAEjD,kFAAkF;AAClF,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,GACnD,0BAA0B,EAAE,CAW9B"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;CAoB8B,CAAC;AAE1E,kFAAkF;AAClF,MAAM,MAAM,iCAAiC,GAAG,MAAM,OAAO,8BAA8B,CAAC;AAC5F,8EAA8E;AAC9E,MAAM,MAAM,0BAA0B,GACpC,CAAC,OAAO,8BAA8B,CAAC,CAAC,iCAAiC,CAAC,CAAC,MAAM,CAAC,CAAC;AAErF,2FAA2F;AAC3F,eAAO,MAAM,qCAAqC,mJAQF,CAAC;AAEjD,kFAAkF;AAClF,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,GACnD,0BAA0B,EAAE,CAW9B"}
@@ -13,6 +13,7 @@ export const PLUGIN_CONTEXT_CAPABILITY_KEYS = {
13
13
  'radio:power': ['radioPowerCommands'],
14
14
  'logbook:read': ['logbook'],
15
15
  'logbook:write': ['logbook'],
16
+ 'logbook:session': ['logbook'],
16
17
  'logbook:sync': ['logbookSync'],
17
18
  'settings:ft8': ['settings'],
18
19
  'settings:decode-windows': ['settings'],
@@ -32,6 +33,7 @@ export const PLUGIN_COMMAND_CAPABILITY_PERMISSIONS = [
32
33
  'radio:tuner-control',
33
34
  'radio:power',
34
35
  'logbook:write',
36
+ 'logbook:session',
35
37
  'logbook:sync',
36
38
  ];
37
39
  /** Returns the unique context-property allowlist implied by a permission list. */
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,2BAA2B,EAAE,CAAC,kBAAkB,CAAC;IACjD,YAAY,EAAE,CAAC,mBAAmB,EAAE,YAAY,CAAC;IACjD,eAAe,EAAE,CAAC,eAAe,CAAC;IAClC,qBAAqB,EAAE,CAAC,oBAAoB,CAAC;IAC7C,aAAa,EAAE,CAAC,oBAAoB,CAAC;IACrC,cAAc,EAAE,CAAC,SAAS,CAAC;IAC3B,eAAe,EAAE,CAAC,SAAS,CAAC;IAC5B,cAAc,EAAE,CAAC,aAAa,CAAC;IAC/B,cAAc,EAAE,CAAC,UAAU,CAAC;IAC5B,yBAAyB,EAAE,CAAC,UAAU,CAAC;IACvC,mBAAmB,EAAE,CAAC,UAAU,CAAC;IACjC,4BAA4B,EAAE,CAAC,UAAU,CAAC;IAC1C,kBAAkB,EAAE,CAAC,UAAU,CAAC;IAChC,uBAAuB,EAAE,CAAC,UAAU,CAAC;IACrC,cAAc,EAAE,CAAC,UAAU,CAAC;IAC5B,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,CAAC,UAAU,CAAC;IAChC,aAAa,EAAE,CAAC,kBAAkB,CAAC;CACoC,CAAC;AAQ1E,2FAA2F;AAC3F,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACnD,2BAA2B;IAC3B,eAAe;IACf,qBAAqB;IACrB,aAAa;IACb,eAAe;IACf,cAAc;CACgC,CAAC;AAEjD,kFAAkF;AAClF,MAAM,UAAU,8BAA8B,CAC5C,WAAoD;IAEpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAA8B,CAAC;IACnD,KAAK,MAAM,UAAU,IAAI,WAAW,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,8BAA8B,CACnD,UAA+C,CAChD,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,cAAc,IAAI,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,2BAA2B,EAAE,CAAC,kBAAkB,CAAC;IACjD,YAAY,EAAE,CAAC,mBAAmB,EAAE,YAAY,CAAC;IACjD,eAAe,EAAE,CAAC,eAAe,CAAC;IAClC,qBAAqB,EAAE,CAAC,oBAAoB,CAAC;IAC7C,aAAa,EAAE,CAAC,oBAAoB,CAAC;IACrC,cAAc,EAAE,CAAC,SAAS,CAAC;IAC3B,eAAe,EAAE,CAAC,SAAS,CAAC;IAC5B,iBAAiB,EAAE,CAAC,SAAS,CAAC;IAC9B,cAAc,EAAE,CAAC,aAAa,CAAC;IAC/B,cAAc,EAAE,CAAC,UAAU,CAAC;IAC5B,yBAAyB,EAAE,CAAC,UAAU,CAAC;IACvC,mBAAmB,EAAE,CAAC,UAAU,CAAC;IACjC,4BAA4B,EAAE,CAAC,UAAU,CAAC;IAC1C,kBAAkB,EAAE,CAAC,UAAU,CAAC;IAChC,uBAAuB,EAAE,CAAC,UAAU,CAAC;IACrC,cAAc,EAAE,CAAC,UAAU,CAAC;IAC5B,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,CAAC,UAAU,CAAC;IAChC,aAAa,EAAE,CAAC,kBAAkB,CAAC;CACoC,CAAC;AAQ1E,2FAA2F;AAC3F,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACnD,2BAA2B;IAC3B,eAAe;IACf,qBAAqB;IACrB,aAAa;IACb,eAAe;IACf,iBAAiB;IACjB,cAAc;CACgC,CAAC;AAEjD,kFAAkF;AAClF,MAAM,UAAU,8BAA8B,CAC5C,WAAoD;IAEpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAA8B,CAAC;IACnD,KAAK,MAAM,UAAU,IAAI,WAAW,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,8BAA8B,CACnD,UAA+C,CAChD,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,cAAc,IAAI,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /** Compares Plugin API semantic versions. Build metadata is intentionally ignored. */
2
+ export declare function comparePluginApiVersions(left: string, right: string): number | null;
3
+ /** Stable error returned when a plugin requires a newer Plugin API. */
4
+ export declare class PluginApiCompatibilityError extends Error {
5
+ readonly pluginApiVersion: string;
6
+ readonly minPluginApiVersion: string;
7
+ readonly pluginName?: string | undefined;
8
+ /** Machine-readable compatibility failure code. */
9
+ readonly code: "PLUGIN_API_VERSION_UNSUPPORTED";
10
+ /** Captures the available version, required floor, and optional plugin identity. */
11
+ constructor(pluginApiVersion: string, minPluginApiVersion: string, pluginName?: string | undefined);
12
+ }
13
+ /** Throws when a Host cannot prove it satisfies a plugin's Plugin API floor. */
14
+ export declare function assertPluginApiCompatible(minPluginApiVersion: string | undefined, pluginName: string | undefined, pluginApiVersion: string | undefined): void;
15
+ //# sourceMappingURL=compatibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAuCA,sFAAsF;AACtF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQnF;AAED,uEAAuE;AACvE,qBAAa,2BAA4B,SAAQ,KAAK;IAMlD,QAAQ,CAAC,gBAAgB,EAAE,MAAM;IACjC,QAAQ,CAAC,mBAAmB,EAAE,MAAM;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM;IAP9B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAG,gCAAgC,CAAU;IAE1D,oFAAoF;gBAEzE,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE,MAAM,EAC3B,UAAU,CAAC,EAAE,MAAM,YAAA;CAQ/B;AAED,gFAAgF;AAChF,wBAAgB,yBAAyB,CACvC,mBAAmB,EAAE,MAAM,GAAG,SAAS,EACvC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,gBAAgB,EAAE,MAAM,GAAG,SAAS,GACnC,IAAI,CAON"}
@@ -0,0 +1,71 @@
1
+ const SEMVER_PATTERN = /^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
2
+ function parseSemver(value) {
3
+ const match = SEMVER_PATTERN.exec(value.trim());
4
+ if (!match)
5
+ return null;
6
+ return {
7
+ major: Number(match[1]),
8
+ minor: Number(match[2]),
9
+ patch: Number(match[3]),
10
+ prerelease: match[4]?.split('.') ?? [],
11
+ };
12
+ }
13
+ function comparePrerelease(left, right) {
14
+ if (left.length === 0 || right.length === 0) {
15
+ return left.length === right.length ? 0 : left.length === 0 ? 1 : -1;
16
+ }
17
+ const length = Math.max(left.length, right.length);
18
+ for (let index = 0; index < length; index += 1) {
19
+ const a = left[index];
20
+ const b = right[index];
21
+ if (a === undefined || b === undefined)
22
+ return a === b ? 0 : a === undefined ? -1 : 1;
23
+ if (a === b)
24
+ continue;
25
+ const aNumeric = /^\d+$/.test(a);
26
+ const bNumeric = /^\d+$/.test(b);
27
+ if (aNumeric && bNumeric)
28
+ return Number(a) < Number(b) ? -1 : 1;
29
+ if (aNumeric !== bNumeric)
30
+ return aNumeric ? -1 : 1;
31
+ return a < b ? -1 : 1;
32
+ }
33
+ return 0;
34
+ }
35
+ /** Compares Plugin API semantic versions. Build metadata is intentionally ignored. */
36
+ export function comparePluginApiVersions(left, right) {
37
+ const a = parseSemver(left);
38
+ const b = parseSemver(right);
39
+ if (!a || !b)
40
+ return null;
41
+ for (const key of ['major', 'minor', 'patch']) {
42
+ if (a[key] !== b[key])
43
+ return a[key] < b[key] ? -1 : 1;
44
+ }
45
+ return comparePrerelease(a.prerelease, b.prerelease);
46
+ }
47
+ /** Stable error returned when a plugin requires a newer Plugin API. */
48
+ export class PluginApiCompatibilityError extends Error {
49
+ /** Captures the available version, required floor, and optional plugin identity. */
50
+ constructor(pluginApiVersion, minPluginApiVersion, pluginName) {
51
+ super(`PLUGIN_API_VERSION_UNSUPPORTED: ${pluginName ? `plugin ${pluginName} ` : 'plugin '}`
52
+ + `requires Plugin API >= ${minPluginApiVersion}; bundled Plugin API is ${pluginApiVersion}`);
53
+ this.pluginApiVersion = pluginApiVersion;
54
+ this.minPluginApiVersion = minPluginApiVersion;
55
+ this.pluginName = pluginName;
56
+ /** Machine-readable compatibility failure code. */
57
+ this.code = 'PLUGIN_API_VERSION_UNSUPPORTED';
58
+ this.name = 'PluginApiCompatibilityError';
59
+ }
60
+ }
61
+ /** Throws when a Host cannot prove it satisfies a plugin's Plugin API floor. */
62
+ export function assertPluginApiCompatible(minPluginApiVersion, pluginName, pluginApiVersion) {
63
+ if (!minPluginApiVersion)
64
+ return;
65
+ const currentVersion = pluginApiVersion?.trim() || 'unavailable';
66
+ const comparison = comparePluginApiVersions(currentVersion, minPluginApiVersion);
67
+ if (comparison === null || comparison < 0) {
68
+ throw new PluginApiCompatibilityError(currentVersion, minPluginApiVersion, pluginName);
69
+ }
70
+ }
71
+ //# sourceMappingURL=compatibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ :root{color-scheme:dark;font-family:var(--tx5dr-font, Inter, system-ui, sans-serif);color:var(--tx5dr-text, #fafafa);background:var(--tx5dr-bg, #18181b)}*{box-sizing:border-box}body{margin:0;min-width:320px;background:var(--tx5dr-bg, #18181b)}button,input,select{font:inherit}button,.file-button{border:1px solid var(--tx5dr-control-border, #3f3f46);border-radius:var(--tx5dr-radius-sm, 6px);background:var(--tx5dr-control-bg, #27272a);color:var(--tx5dr-control-text, #fafafa);padding:.5rem .75rem;cursor:pointer}button:hover,.file-button:hover{background:var(--tx5dr-control-bg-hover, #3f3f46)}button:focus-visible,input:focus-visible,select:focus-visible,.file-button:focus-within{outline:2px solid var(--tx5dr-primary, #006fee);outline-offset:2px}button:disabled{cursor:not-allowed;opacity:var(--tx5dr-control-disabled-opacity, .55)}button.secondary{margin-left:.5rem}.page{max-width:1280px;min-height:100vh;margin:0 auto;padding:20px}.header{display:flex;gap:16px;justify-content:space-between;align-items:flex-start;border-bottom:1px solid var(--tx5dr-border, #3f3f46);padding-bottom:16px}h1,h2,p{margin:0}h1{font-size:20px}h2{font-size:15px;margin-bottom:12px}.header p{color:var(--tx5dr-text-secondary, #a1a1aa);font-size:12px;margin-top:5px}.health{border-radius:var(--tx5dr-radius-full, 9999px);padding:5px 9px;font-size:12px;background:var(--tx5dr-success-soft, #12351f);color:var(--tx5dr-success, #17c964)}.health-degraded{background:var(--tx5dr-warning-soft, #3b2b0c);color:var(--tx5dr-warning, #f5a524)}.health-error,.health-closed{background:var(--tx5dr-danger-soft, #3b1020);color:var(--tx5dr-danger, #f31260)}.alert{border-radius:var(--tx5dr-radius-sm, 6px);padding:var(--tx5dr-alert-padding, 10px 12px);margin-top:12px;font-size:13px}.alert-error{background:var(--tx5dr-danger-soft, #3b1020);color:var(--tx5dr-danger-foreground, #fff)}.alert-warning{background:var(--tx5dr-warning-soft, #3b2b0c);color:var(--tx5dr-warning-foreground, #fef3c7)}.score-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:16px 0}.score{border:1px solid var(--tx5dr-border, #3f3f46);border-radius:var(--tx5dr-radius-sm, 6px);padding:12px;background:var(--tx5dr-bg-content, #27272a);box-shadow:var(--tx5dr-shadow-sm, none)}.score span{display:block;color:var(--tx5dr-text-secondary, #a1a1aa);font-size:12px}.score strong{display:block;font-size:21px;margin-top:5px;color:var(--tx5dr-text, #fafafa)}.score.primary{border-color:var(--tx5dr-primary, #006fee)}.score-warning strong{color:var(--tx5dr-warning, #f5a524)}.section{border-top:1px solid var(--tx5dr-border, #3f3f46);padding:16px 0}.section-toggle{display:flex;width:100%;align-items:center;justify-content:space-between;border:0;border-radius:var(--tx5dr-radius-sm, 6px);background:transparent;color:var(--tx5dr-text, #fafafa);padding:0 0 12px;font-size:15px;font-weight:600;text-align:left}.section-toggle:hover{background:transparent;color:var(--tx5dr-primary, #006fee)}.disclosure-chevron{width:8px;height:8px;margin-right:4px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg) translateY(-2px);transition:transform .14s ease}.disclosure-chevron.is-expanded{transform:rotate(225deg) translate(-1px,-1px)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.official-link{color:var(--tx5dr-primary, #006fee);font-size:12px;font-weight:600;text-decoration:none;white-space:nowrap}.official-link:hover{color:var(--tx5dr-primary-hover, #005bc4);text-decoration:underline}.rules-content,.score-details{display:grid;gap:12px}.rule-summary{color:var(--tx5dr-text, #fafafa);font-size:13px;line-height:1.55;max-width:900px}.rule-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px}.rule-fact,.detail-grid>div{display:flex;flex-direction:column;gap:4px;border:1px solid var(--tx5dr-border, #3f3f46);border-radius:var(--tx5dr-radius-sm, 6px);background:var(--tx5dr-bg-content, #27272a);padding:9px 10px}.rule-fact span,.detail-grid span{color:var(--tx5dr-text-secondary, #a1a1aa);font-size:11px}.rule-fact strong,.detail-grid strong{color:var(--tx5dr-text, #fafafa);font-size:13px;font-weight:600;overflow-wrap:anywhere}.detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}.field{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--tx5dr-text-secondary, #a1a1aa)}.field input,.field select,td select{border:1px solid var(--tx5dr-control-border, #3f3f46);border-radius:var(--tx5dr-radius-sm, 6px);background:var(--tx5dr-control-bg, #27272a);color:var(--tx5dr-control-text, #fafafa);padding:7px 8px;min-width:0}.field input[type=checkbox]{width:18px;height:18px;accent-color:var(--tx5dr-primary, #006fee)}.issues,.issue-list{margin:10px 0;color:var(--tx5dr-warning, #f5a524);font-size:12px}.issue-list div{padding:7px 0;border-bottom:1px solid var(--tx5dr-border, #3f3f46)}.import-export{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px}.file-button{display:inline-block;font-size:13px}.file-button input{display:none}.preview{margin-top:10px;border:1px solid var(--tx5dr-border, #3f3f46);border-radius:var(--tx5dr-radius-sm, 6px);padding:10px;background:var(--tx5dr-bg-content, #27272a)}.preview pre{max-height:160px;overflow:auto;font-size:11px;white-space:pre-wrap;color:var(--tx5dr-text-secondary, #a1a1aa)}.export-buttons{display:flex;flex-wrap:wrap;gap:8px}.muted,.empty,.loading{color:var(--tx5dr-text-secondary, #a1a1aa)}.loading,.error{min-height:100vh;display:grid;place-items:center;padding:20px;background:var(--tx5dr-bg, #18181b)}.error{color:var(--tx5dr-danger, #f31260)}.table-wrap{overflow-x:auto;border:1px solid var(--tx5dr-table-divider, #3f3f46);border-radius:var(--tx5dr-radius-sm, 6px)}table{width:100%;border-collapse:collapse;font-size:12px;min-width:680px}th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--tx5dr-table-divider, #3f3f46);white-space:nowrap}th{color:var(--tx5dr-text-secondary, #a1a1aa);font-weight:600;background:var(--tx5dr-table-header-bg, #27272a)}tbody tr:hover{background:var(--tx5dr-table-row-hover, rgba(255,255,255,.04))}tr:last-child td{border-bottom:0}.empty{text-align:center;padding:24px}@media(max-width:640px){.page{padding:14px}.header{flex-direction:column}.score-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.import-export{grid-template-columns:1fr;gap:10px}}