Tags: dharmab/skyeye
Tags
Add custom aircraft encyclopedia feature (#707) ## Summary Adds a `--aircraft-file` option (`aircraft-file` config key) that lets server admins extend or override SkyEye's built-in aircraft encyclopedia with a user-supplied YAML file. This makes community aircraft mods that SkyEye does not recognize work correctly — they can be categorized, threat-assessed, named on the radio, and matched to compatible tankers. Modeled on the existing custom locations feature. ## How it works - New `pkg/encyclopedia/custom.go`: an unexported `serializedAircraft` schema parses directly into `encyclopedia.Aircraft`. `LoadCustomAircraft` reads YAML (a superset of JSON, so `.json` files also work), and `AddCustomAircraft` registers entries into the lookup table. - Validation: required `acmi_short_name`, at least one reporting-name field (`nato_reporting_name`/`nickname`/`official_name`/`platform_designation`), exactly one wing tag, and recognized tag/fuel values. - Wiring: `--aircraft-file` flag in `cmd/skyeye`, `CustomAircraft` field in `conf.Configuration`, and registration in `application.NewApplication` just before the radar (its first consumer) is built. - Overrides: an entry reusing a built-in ACMI short name replaces it, logged at INFO. Each loaded aircraft logs one INFO line. ## Docs `docs/AIRCRAFT.md` documents the schema, tags, threat radius, refueling, and how to find the ACMI short name, using the A-4 Skyhawk as a worked example. Cross-linked from `docs/ADMIN.md`. ## Testing - `make test` — passes, including new `pkg/encyclopedia/custom_test.go` (YAML/JSON parsing, validation errors, tag/fuel mapping, override behavior). - `make lint vet fix format` — clean. - `make skyeye` — builds. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Fix crash loop when ACMI stream sends zero ReferenceTime DCS2ACMI sends ReferenceTime=0001-01-01T00:00:00Z as a base epoch, encoding actual mission time as a large offset. This date is also Go's zero time.Time, so the IsZero() guard that detects "reference time not yet received" fired on every time frame, causing an infinite reconnect loop against Lima Kilo. Replace the IsZero() check with a dedicated referenceTimeSet bool. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Pass location names to recognizer initial prompt (#694) ## Summary - Adds a `WithLocations` functional option to `NewWhisperRecognizer` and the OpenAI recognizers - When set, location names are appended to Whisper's initial prompt so the model biases transcription towards known place names - The application wires this up automatically from `config.Locations` Fixes #692: Whisper was transcribing location names as phonetic near-misses (e.g. "Incirlik" → "INSULIC"). Including the configured location names in the initial prompt is sufficient to correct transcription. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Fix dependency scanner findings (#648) ## Summary - Update `google.golang.org/grpc` from v1.75.0 to v1.79.3 to fix authorization bypass vulnerability (Dependabot alert #10) - Add top-level `permissions: {}` to CI workflow to deny all permissions by default - Add `permissions: { contents: read }` to all jobs that only need checkout access (lint, test, build-*, release) ## Test plan - [ ] CI passes (lint, vet, test, build) - [ ] Dependabot alert #10 auto-closes after merge - [ ] Code scanning alerts #2-8 clear after merge 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
PreviousNext