├── Protocols.md
├── frontend
├── src
│ ├── index.css
│ ├── main.tsx
│ ├── App.css
│ ├── types.ts
│ ├── components
│ │ ├── StationRow.tsx
│ │ ├── SlicePanel.tsx
│ │ └── Settings.tsx
│ ├── assets
│ │ └── react.svg
│ └── App.tsx
├── postcss.config.js
├── tsconfig.json
├── vite.config.ts
├── tailwind.config.js
├── .gitignore
├── index.html
├── eslint.config.js
├── tsconfig.node.json
├── tsconfig.app.json
├── package.json
└── public
│ └── vite.svg
├── src
├── state
│ ├── index.ts
│ └── types.ts
├── logbook
│ └── index.ts
├── dashboard
│ ├── index.ts
│ └── DashboardManager.ts
├── utils
│ ├── logger.ts
│ └── CqTargeting.ts
├── wsjtx
│ ├── types.ts
│ ├── UdpListener.ts
│ ├── UdpRebroadcaster.ts
│ ├── ProcessManager.ts
│ ├── QsoStateMachine.ts
│ ├── WindowManager.ts
│ └── UdpSender.ts
├── flex
│ ├── FlexClient.ts
│ ├── FlexDiscovery.ts
│ └── Vita49Client.ts
├── index.ts
├── SettingsManager.ts
└── web
│ └── server.ts
├── tsconfig.json
├── .gitignore
├── templates
└── wsjtx-template - old.ini
├── config.json
├── .github
└── workflows
│ └── security.yml
├── LICENSE
├── package.json
├── test.ps1
├── MCP-AI-usage-guide.md
├── test-log4om-adif.js
├── Log-Control.md
├── install.cmd
├── Rig Control.md
└── README.md
/Protocols.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SensorsIot/FT8-MCP/main/Protocols.md
--------------------------------------------------------------------------------
/frontend/src/index.css:
--------------------------------------------------------------------------------
1 | @import "tailwindcss";
2 |
3 | body {
4 | background-color: #111827;
5 | color: white;
6 | }
7 |
--------------------------------------------------------------------------------
/frontend/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | '@tailwindcss/postcss': {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/frontend/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/src/state/index.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * State module exports
3 | */
4 |
5 | export * from './types';
6 | export { StateManager, StateManagerConfig } from './StateManager';
7 | export { ChannelUdpManager } from './ChannelUdpManager';
8 |
--------------------------------------------------------------------------------
/src/logbook/index.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Logbook module - exports LogbookManager and related types
3 | */
4 |
5 | export {
6 | LogbookManager,
7 | LogbookManagerConfig,
8 | QsoRecord,
9 | WorkedEntry,
10 | frequencyToBand,
11 | } from './LogbookManager';
12 |
--------------------------------------------------------------------------------
/frontend/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | export default {
3 | content: [
4 | "./index.html",
5 | "./src/**/*.{js,ts,jsx,tsx}",
6 | ],
7 | theme: {
8 | extend: {},
9 | },
10 | plugins: [],
11 | }
12 |
--------------------------------------------------------------------------------
/frontend/src/main.tsx:
--------------------------------------------------------------------------------
1 | import { StrictMode } from 'react'
2 | import { createRoot } from 'react-dom/client'
3 | import './index.css'
4 | import App from './App.tsx'
5 |
6 | createRoot(document.getElementById('root')!).render(
7 |
51 | {formatDialFrequency(slice.dialFrequency)} 52 |
53 |69 | Instance: {slice.name} 70 |
71 |No stations decoded yet
78 |Waiting for decodes...
79 |No active slices. Waiting for WSJT-X connections...
133 | 139 |186 | {config.mode === 'STANDARD' 187 | ? 'Manual instance management with direct rig connection' 188 | : 'Automatic instance management based on SmartSDR slices'} 189 |
190 |Used for autonomous QSO execution
218 |257 | Used as WSJT-X instance identifier (--rig-name parameter) 258 |
259 |