Машинний переклад, не перевірений носієм мови. Еталоном є англійська версія.

Розробникам

Один рушій. Кожні двері відчинено.

Один рушій на Rust для стійкості GNSS (глобальна навігаційна супутникова система) і PNT (позиціонування, навігація та час): інтерфейс командного рядка (CLI), пакети Rust, Python і JavaScript, Kshana Studio у браузері, плагін для JetBrains IDE (інтегроване середовище розробки) і сервер MCP (Model Context Protocol), щоб асистент зі штучним інтелектом (AI) запускав перевірений рушій, а не вгадував математику. Відкритий код за AGPL-3.0 (GNU Affero General Public License, версія 3) або комерційна ліцензія.

Термінал · kshana v0.40.0 Записаний прогін
The recorded session plays here with JavaScript.
Реальні команди, реальний вивід, відтворені так, як записано. У виводі: SVs — космічні апарати (супутники); J/S — співвідношення потужностей завадного передавача і сигналу; thr — поріг; RAIM — автономний контроль цілісності приймача; SQM — моніторинг якості сигналу; p95 — 95-й процентиль.

Випуск v0.40.0 92 видів сценаріїв 49 Інструменти MCP AGPL-3.0 або комерційна ліцензія Згенеровано з репозиторію
01Встановлення · асистенти зі штучним інтелектом

Встановлення одним рядком. Або без нього.

Згенеровано з маніфестів репозиторію і перехресно перевірено за його README, тож кожна команда відповідає v0.40.0. kshana-mcp надає вашому асистентові зі штучним інтелектом той самий рушій: на вході сценарій TOML (Tom's Obvious, Minimal Language), на виході JSON (JavaScript Object Notation) і CSV (значення, розділені комами).

ВстановленняЗ маніфестів

Для всіх, нічого встановлювати не потрібно.

Рушій працює локально як WebAssembly; нічого не вивантажується.

Рушій на RustAGPL-3.0 або комерційна ліцензіяСпецифікація складу програмного забезпечення і походження збірки для кожного випуску

Асистент зі штучним інтелектом + kshana-mcp Записаний сеанс

Повідомлення, якими асистент обмінюється з kshana-mcp, записані із сервера.

Записаний сеанс відтворюється тут крок за кроком.

Той самий прогін у Studio: рушій v0.40.0 · clock-holdover.toml · seed 42Відкрити в Kshana StudioЗвіт

49 інструментів поверх публічного API Kshana (прикладний програмний інтерфейс) в офіційному реєстрі MCP як io.github.ashfordeOU/kshana-mcp. Експорти орбіт: SP3 (Standard Product 3) та CCSDS (Консультативний комітет із космічних даних) OMM і OEM (повідомлення із середніми елементами орбіти та з ефемеридами, TEME: True Equator, Mean Equinox frame). Зареєструйте його в розділі Асистент зі штучним інтелектом (сервер MCP) або Образ Docker. Документація сервера MCP

run_scenario

Запускає сценарій стійкості PNT Kshana за визначенням TOML і повертає його показники якості. Повертає зрозуміле людині резюме, а за ним повний JSON результату (FoM, криві). Kshana перевіряє SGP4/SDP4, системи відліку IAU, девіації Аллана, доступність/DOP ГНСС (GNSS), рівні захисту ARAIM, злиття GNSS/INS та моделі квантових датчиків за опублікованими еталонами. Кожен вид запускається через цей один інструмент, зокрема spectrum (радіочастотний спектр і водоспад), solar-system, constellation-design та body-pnt (орбітальні угруповання навколо будь-якого тіла), campaign (послідовні фази, перебори параметрів, ансамблі Монте-Карло та складені сценарії) і навігаційні види для низької навколоземної орбіти leo-signal, leo-pass, leo-navmsg, leo-pvt, leo-ppp, ntn-positioning та leo-pnt-chain. Вміст передається вбудовано: поле сценарію, що називає файл, відхиляється, а сценарій має бути не більшим за 4 МіБ. Спершу викличте list_scenario_kinds, щоб дізнатися про типи сценаріїв і їхні поля, а list_example_scenarios / get_example_scenario — щоб отримати повний сценарій певного виду, готовий до запуску.

list_scenario_kinds

Перелічує кожен вбудований вид сценарію Kshana з його описом і обов'язковими/необов'язковими полями TOML як масив JSON. Використовуйте це, щоб дізнатися, які сценарії можна запустити і як скласти коректний TOML сценарію для run_scenario.

validate_scenario

Попередня перевірка TOML сценарію Kshana: перевіряє, що він розбирається як TOML, і визначає вид сценарію, не запускаючи його. Повертає визначений вид або описову помилку для некоректного TOML. (run_scenario виконує повну перевірку, виконуючи сценарій.)

assess_receiver_log

Оцінює довіру до журналу реального приймача ГНСС (GNSS): читає журнал u-blox UBX, RINEX 3 (за потреби з широкомовною навігацією, що додає власне визначення рушія, RAIM і монітор з допомогою годинника), Android GnssLogger або NMEA, запускає монітори довіри (падіння відношення несівна/шумова густина, AGC, індикатор глушіння, втрата захоплення, стрибок положення, RAIM, годинник) щодо калібрувального базового рівня і повертає, коли і чому приймач перестав бути довірчим. Необов'язкові [[events]] з початками та прогнозованими падіннями C/N0 оцінюються щодо допусків, заявлених у сценарії: виявлено, пізно чи пропущено, а також збігається чи розходиться. Повертає підсумок і повний JSON результату (діаграма та CSV на запит; CSV прогону судна починається з рядка коментаря #, що містить консультативне твердження, який читачі CSV пропускають своєю опцією коментарів). Байти журналу передаються вбудовано в TOML як text або base64 (лише вбудовано, не більше 4 МіБ). Таблиця [platform] kind = "vessel" вибирає морські монітори (кінематична узгодженість, курс щодо шляху, лаг швидкості, висота антени, розкид C/N0, узгодженість часу) і додає оцінку довіри 0–100 для кожної епохи з моніторами, що зробили відрахування. Кожна епоха також містить свою супутникову geometry (good; degraded для малої кількості супутників чи високого PDOP або HDOP; або unknown, коли в журналі немає висот супутників чи DOP); кожна епоха має label (good, fair, poor); для судна до оцінки долучається монітор geometry, що відраховує бали лише коли геометрія погана (щонайбільше 15 балів: degraded, ніколи untrusted), і кожне відрахування має клас: geometry (небо), environment або inconsistency (схоже на атаку). Для уривка потоку із шлюзом використовуйте assess_vessel_stream. Лише консультативно; рівень доказів MODELLED.

list_example_scenarios

Перелічує вбудовані еталонні сценарії як JSON: count і scenarios — масив name, kind та about (перше речення власного заголовкового коментаря файлу). Кожен із них є повним сценарієм, що запускається як є, тож це найшвидший шлях до коректного TOML для виду: оберіть назву, отримайте її через get_example_scenario, відредагуйте, запустіть. Передайте kind, щоб перелічити лише приклади одного виду (наприклад spectrum, solar-system, constellation-design, campaign, leo-signal, leo-pass, leo-navmsg, leo-pvt).

get_example_scenario

Повертає текст TOML одного вбудованого еталонного сценарію, побайтово файл, який репозиторій постачає в scenarios/. Передайте текст (відредагований чи ні) у run_scenario, report_scenario, animate_scenario або інструмент експорту. Назви беруться з list_example_scenarios. Сценарій, що існує в репозиторії, але не вбудований, відхиляється з поясненням причини.

report_scenario

Запускає сценарій Kshana і повертає його звіт: підсумок для керівництва, вхідні дані, кожен показник результату з його одиницею та позначкою VALIDATED або MODELLED, події, рядки можливостей, які задіяв прогін, і запис відтворюваності (версія рушія, дайджести SHA-256 сценарію та результату, зерно (seed), команда, що його відтворює). format — це json (за замовчуванням; машиночитний report.json) або html (друкований самодостатній report.html із вбудованою діаграмою). Звіт кампанії також містить її таблицю перебору або розподіл Монте-Карло. Звіт є чистою функцією сценарію: годинник не читається.

animate_scenario

Запускає сценарій Kshana і повертає його часовий ряд як анімацію. format — це svg (за замовчуванням: один анімований SVG без скрипта), html (одна самодостатня сторінка програвача) або frames (пронумеровані статичні кадри SVG плюс manifest.json, не більше 120 кадрів у відповіді). Необов'язкові fps (від 1 до 60, за замовчуванням 12), duration_s (від 0,5 до 600, за замовчуванням 8) та width (від 480 до 3840 пікселів, за замовчуванням 960). Перший елемент вмісту — зведення JSON того, що намальовано: діапазон часу та одиниця, заголовки діаграм, кількість фаз і подій, чи є водоспад спектра, шляхи результатів, з яких зчитано криві, будь-які пропущені ряди та імена файлів. Далі йдуть файли, по одному елементу вмісту, у порядку, який перелічує files зведення. Вид, чий результат не має дискретизованої осі часу, відхиляється з повідомленням про це. Анімація є MODELLED поданням власних чисел прогону; той самий сценарій і параметри дають побайтово однакові файли.

list_export_formats

Повідомляє, які формати експорту для взаємодії застосовні до сценарію Kshana, не запускаючи його: масив JSON з одним записом на формат (czml, kml, geojson, stk, sigmf) із applies, reason, коли формат не застосовний, і spec_url — опублікованою специфікацією, якої дотримується записувач. CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON та ефемериди STK (Systems Tool Kit) .e описують геометрію сценарію; SigMF (Signal Metadata Format) записує відліки, які синтезує сценарій spectrum із блоком [iq]. Викличте це перед export_interop.

export_interop

Експортує сценарій Kshana в одному форматі взаємодії: czml (Cesium Language, для CesiumJS), kml (Keyhole Markup Language, для Google Earth і засобів географічних інформаційних систем), geojson (RFC 7946), stk (ефемериди Systems Tool Kit .e, один файл на супутник) або sigmf (запис Signal Metadata Format синтезованих відліків сценарію spectrum). Перший елемент вмісту — індекс JSON: format, spec_url та files, кожен зі своїми suffix (що командний рядок додає до імені виводу, наприклад .czml або .G01.e), bytes, sha256 та encoding. Далі йдуть файли, по одному елементу вмісту, у порядку індексу: файли utf-8 як їхній текст, двійковий файл відліків SigMF як base64. Кампанія експортує кожен сценарій-учасник, до якого застосовний формат. Формат, що не застосовний, відхиляється з поясненням причини; list_export_formats повідомляє про всі п'ять одразу. Час подається у всесвітньому координованому часі (UTC); той самий сценарій дає побайтово однакові файли.

import_route

Записує маршрут GeoJSON у сценарій Kshana, що летить за треком шляхових точок, і повертає новий TOML сценарію (запустіть його через run_scenario). Маршрут — це LineString (або Feature / FeatureCollection, що містить його) із положень довгота, широта; він замінює start_lat_deg, start_lon_deg, step_lat_deg, step_lon_deg і waypoints сценарію. Види, що приймають маршрут, — terrain-nav, terrain-slam, gravity-map та combined-altpnt; будь-який інший вид відхиляється з поясненням причини. Задайте два кінці треку або рівномірно розташовані положення вздовж прямої: види з треком летять за start + i*step, тож будь-яка інша форма відхиляється.

export_sp3

Експортує розповсюджене орбітальне угруповання сценарію orbit як текст точних ефемерид SP3-c (стандартний формат постобробки ГНСС (GNSS)). Повертає помилку, якщо сценарій не належить до виду orbit.

export_omm

Експортує середні елементи сценарію orbit як каталог CCSDS 502.0-B-2 OMM (Orbit Mean-Elements Message) — один OMM на супутник. Повертає помилку, якщо сценарій не належить до виду orbit.

export_oem

Експортує розповсюджене орбітальне угруповання сценарію orbit як текст ефемерид CCSDS OEM 2,0 — часовий ряд інерційного стану (TEME) з положенням І швидкістю, який читають інструменти динаміки польоту (GMAT / Orekit / STK). Це доповнення до export_sp3, що містить лише положення, зі швидкістю. Повертає помилку, якщо сценарій не належить до виду orbit.

export_table_csv

Запускає сценарій Kshana і повертає його таблицю відтворюваності як текст CSV — побайтово стабільну таблицю, яку CLI записує як <scenario>.table.csv і на яку посилаються статті. Лише ці види її видають: realtime-frame-eop, lunar-time-budget, lunar-jamming, telecom-timing, leo-navmsg, коли його аналіз encode-decode працює на моделі повідомлення kepler16 або kepler-rac (таблиця широкомовних ефемерид), та moonlight-service-volume, коли задано і export_site_lat_deg, і export_site_lon_deg. Повертає помилку для будь-якого іншого виду (або недійсного сценарію); для показників якості використовуйте run_scenario.

sky_geometry

Геометрія неба під азимутально залежним обрієм (міський каньйон, гавань, фіорд, контейнерний термінал): для місця, часу та пресетів орбітальних угруповань, двострокових елементів орбіти (tle, з UTC epoch) або супутників, заданих азимутом/висотою чи ECEF, — які супутники видимі, а які закриті обрієм, GDOP/PDOP/HDOP/VDOP/TDOP із ядра DOP, перевіреного за gnss_lib_py, кофактор і коваріація схід–північ–вгору з одним годинником приймача на систему (або одним спільним) та горизонтальний еліпс похибок на одному сигма й за заявленої довірчої ймовірності для заявленого UERE. Без request описує REPRESENTATIVE пресет обрію з його походженням і зрізом на кожен градус (порожній skyline_preset перелічує їх). Сценарії видів orbit та integrity (з user_site), gnss-sim, jamming, leo-pvt і leo-pass приймають той самий розділ [skyline] через run_scenario. Рівень доказів MODELLED: геометрія за заявленою моделлю похибок, лише пряма видимість; це не прогноз реальної похибки приймача і не межа цілісності; пресети орбітальних угруповань — репрезентативне небо, а не небо певної дати; текст tle з epoch (UTC) дає небо, яке ці набори елементів дають на ту епоху (SGP4), а не вимірювання, і sky_source вказує, яке саме. Містить консультативне застереження: це не навігаційне обладнання із затвердженням типу. Без Монте-Карло через MCP (великі вибірки; використовуйте CLI, Python або WASM). Лише вбудовано, не більше 4 МіБ.

iq_signals

Налаштування шару IQ ГНСС (GNSS) як JSON: signals (назви сигналів, які приймають iq_scene, iq_acquire та iq_track), enabled (чи ввімкнено файлові інструменти IQ), work_dir (єдина тека, яку вони читають і в яку пишуть; кожен аргумент шляху вказується відносно неї), max_samples (найбільша кількість комплексних відліків, яку один виклик може згенерувати чи обробити) і, коли вимкнено, reason. Відліки IQ ніколи не проходять через протокол: інструменти приймають шляхи до файлів у робочому каталозі та відповідають компактними зведеннями JSON. Шар IQ не додає синтезу завад чи спуферів; нічого ніколи не передається. Викличте це першим.

iq_info

Описує один запис IQ у робочому каталозі без його обробки: вид (сирий із супутнім файлом, SigMF, колекція SigMF), формат відліків, частота дискретизації, центральна частота, загальна кількість відліків, тривалість, файли даних та їхній розмір, межі захоплення та кількість анотацій, як JSON (той самий рядок, який друкує kshana iq info). Необов'язковий raw описує сирий файл без супутнього файлу; необов'язковий hash додає SHA-256 кожного файлу даних (читає файл повністю).

iq_scene

Генерує багатосупутникову сцену ГНСС (GNSS) IQ у файл у робочому каталозі (kshana iq scene). Режим заявленого профілю: signal + prns (+ необов'язкові dopplers_hz, cn0_dbhz, data). Широкомовний режим: nav (навігаційний файл RINEX у робочому каталозі) + rx_pos [lat, lon, alt] розміщує кожен справний супутник GPS у його справжній широкомовній геометрії. Необов'язковий channel застосовує на рівні сигналу іоносферу, тропосферу, мерехтіння, багатопроменевість, наземне затінення для мобільних систем або NLOS. rate_hz × duration_s має вкладатися в бюджет відліків (див. iq_signals). Записує запис (сирий + супутній файл <out>.json або пару SigMF) і супутній файл істини; відповідає переліком записаних файлів і їхніх розмірів у байтах, кількістю відліків і дискретизацією та першою епохою істини для кожного супутника (фаза коду, Доплер, C/N0), щоб оцінити iq_acquire. Шар IQ не додає синтезу завад чи спуферів; нічого ніколи не передається.

iq_acquire

Захоплення FFT одного чи кількох PRN у записі IQ у робочому каталозі (kshana iq acquire). Читає лише відліки, потрібні для одного пошуку (когерентні × некогерентні періоди коду), які мають вкладатися в бюджет відліків. Спершу виконуються необов'язкові етапи frontend (смуговий фільтр, режекторний, гасіння, вирізання, AGC, квантувач). Відповідає одним виявленням на PRN: acquired, doppler_hz, code_phase_chips, нормованою піковою statistic, її порогом виявлення threshold та peak_ratio; json_out / csv_out також зберігають повний результат у файлах, а surface_out (один PRN; .csv, .json або .bin) зберігає всю поверхню потужності кореляції Доплер × фаза коду з піком та його параболічним і точним уточненням Доплера.

iq_track

Захоплює, а потім відстежує один чи кілька PRN у записі IQ у робочому каталозі (kshana iq track): захоплення ініціалізує кожен канал, потім банк контурів DLL/PLL (за потреби з допомогою FLL) один раз відтворює запис. Відстежувані відліки (весь запис або його перші max_seconds) мають вкладатися в бюджет відліків. Контури беруться з design (файл TOML kshana.loop-design/1 у робочому каталозі, design_name для вибору одного) або з вбудованого проєкту, причому аргументи контурів його перевизначають; reacquire повторно захоплює канал, що втратив захоплення або захопив хибно. Стеження потокове, тому пам'ять не зростає разом із записом. Відповідає назвою та хешем проєкту, будь-якими warnings (commensurate_sampling: частота дискретизації, кратна половині швидкості чипів, робить джитер і зміщення контуру коду нерепрезентативними) і, для кожного каналу, кількістю епох, секундами стеження, кінцевим Доплером і фазою коду, кінцевим і середнім C/N0 (дБ-Гц), частками епох у фазовому та кодовому захопленні, locked_at_end, кінцевим станом захоплення, виявленими хибними захопленнями та повторними захопленнями. Вивід для кожної епохи йде лише у файли: epochs_out (E/P/L, дискримінатори, стани контурів, C/N0, стан захоплення; .csv/.jsonl/.bin), events_out, json_out / csv_out. PRN, що не захоплений, відхиляється з його статистикою та порогом.

iq_frontend

Застосовує DSP front-end приймача та зменшення завад до запису IQ у робочому каталозі й записує результат як новий сирий запис із супутнім файлом <out>.json (kshana iq frontend). stages вибирає будь-що з: bandpass_hz [lo, hi] FIR, адаптивний notch, імпульсне blank, вирізання в частотній області excise, agc і bits-бітний квантувач (якому передує автоматичний AGC, якщо немає no_agc), завжди в цьому порядку. Увесь вхід має вкладатися в бюджет відліків. Відповідає кількістю оброблених відліків і записаними файлами з їхніми розмірами в байтах. Це обробляє запис; нічого не синтезує.

iq_campaign

Запускає кампанію лабораторного відтворення з робочого каталогу (kshana iq campaign): записи (кожен описаний файлом kshana.test-conditions/1, що фіксує відому істину лабораторії) × ланцюги front-end × проєкти контурів, кожна комірка відстежується й оцінюється щодо заявлених умов (час до втрати захоплення, час повторного захоплення, погіршення C/N0 щодо заявленого J/S поруч з аналітичним еталоном із позначкою MODELLED, частота хибного захоплення, джитер PLL/DLL, доступність). Покроково: один виклик виконує очікувані комірки, що вкладаються в бюджет відліків (або max_cells), кожна завершена комірка зберігається, а наступний виклик продовжує. Відповідає кількістю комірок, збоями, записаними файлами та digest, коли виконано кожну комірку. Оцінює лише записані дані; не синтезує жодних завад.

iq_campaign_status

Повідомляє про перебіг кампанії лабораторного відтворення з її вихідної теки в робочому каталозі, лише читаючи файли: виконані та очікувані комірки, записи, front-end і проєкти в плані та digest, коли виконано кожну комірку.

iq_sweep

Відтворює один запис IQ у робочому каталозі на кількох проєктах контурів стеження і повідомляє усталений результат кожного проєкту (kshana iq sweep): проєкти — це кожен проєкт файлу kshana.loop-design/1 (design) або добуток списків pll_bws_hz, dll_bws_hz, spacings_chips і coherents для вбудованого проєкту. Кожен PRN захоплюється один раз, і кожен канал (проєкт, PRN) відстежує ті самі відліки, тож кожен результат точно такий, як за запуску лише цього проєкту. Відповідає для кожного проєкту та PRN значеннями epochs, phase_jitter_deg і code_jitter_chips (за другу половину прогону), phase_lock_frac, code_lock_frac, mean_cn0_dbhz та хешем проєкту; json_out / csv_out зберігають таблицю у файлах. Відстежуваний проміжок має вкладатися в бюджет відліків (max_seconds його звужує), і за один виклик працює щонайбільше 256 каналів (проєкт, PRN). Це обробляє запис; нічого не синтезує.

iq_monitor

Запускає монітори виявлення завад і спуфінгу над записом IQ у робочому каталозі (kshana iq monitor): широкосмугові монітори power і spectral та, за наявності signal + prns, монітори C/N0 і якості сигналу для кожного супутника, кожен щодо базового рівня, вивченого за перші baseline_s секунд (або з файлу налаштувань). Відповідає рядами (назва та довжина), кожною подією, яку зафіксували монітори (початок, кінець, монітор, що змінилося; не більше 200 у відповіді), а також налаштуваннями та базовими рівнями, які вивчили монітори; json_out зберігає весь звіт (кожен ряд, подію та спектр), а csv_prefix записує <prefix>.series.csv і <prefix>.events.csv. Проміжок має вкладатися в бюджет відліків (max_seconds його звужує). Подія монітора означає, що виміряна величина залишила свій вивчений базовий рівень; вона не визначає причину чи джерело. Це оцінює лише записані дані; нічого не синтезує. Рівень доказів: MODELLED.

iq_test_conditions

Перевіряє файл лабораторних умов випробування (kshana iq conditions): файл kshana.test-conditions/1, текст TOML або JSON, що фіксує відому істину лабораторії для запису (очікувані супутники, час усталення, заявлений графік глушіння чи завад). Відповідає визначеними умовами та їхнім hash або причиною, чому файл недійсний. Лише вбудовано: нічого не читається з диска, а шлях до запису, названий у файлі, не відкривається (кампанія визначає їх усередині робочого каталогу). Вхід обмежено 4 МіБ.

iq_labfit

Підганяє модель втрати захоплення контуру стеження до лабораторних прогонів (kshana iq labfit): сценарій TOML iq-labfit називає один чи кілька прогонів, кожен — журнал приймача плюс його заявлені умови випробування; рушій завантажує кожен журнал, підганяє контурну й емпіричну моделі, виконує бутстреп невизначеності та обчислює похибку на відкладеному наборі (hold-out). Усе подається вбудовано: log кожного прогону дає text або base64 (path відхиляється), а інструмент не читає й не записує жодного файлу, тож робочий каталог IQ не потрібен. Як альтернатива, [input] сценарію називає campaign = "<out-dir>", завершену вихідну теку kshana iq campaign: тоді інструмент підганяє моделі C/N0 та захоплення до її оцінених комірок (звіт kshana.labfit-iq/1; Q заявляється, ніколи не підганяється, а ідентифіковане зміщення J/S підганяється; із mode = "validation" потрібна таблиця [validation]). Ця тека визначається відносно робочого каталогу IQ і має лежати всередині нього (усе поза ним відхиляється); вона читається, нічого не записується. Відповідає розібраним report, залишками та прогнозами як текст CSV і зведенням Markdown. Вхід обмежено 4 МіБ. Підгонка описує подані лабораторні прогони; це не прогноз для інших приймачів чи умов понад те, що заявляє звіт. Рівень доказів: MODELLED.

assess_vessel_stream

Оцінює обмежений уривок потоку NMEA 0183 судна так, як його оцінює kshana receiver-trust live, і повертає стан довіри для кожної епохи (calibrating, nominal, degraded, untrusted) та оцінку 0–100 з моніторами, що зробили відрахування (схема live JSON-lines 1,3: кожна епоха містить position, твердження advisory про те, що вихідні дані є консультативними, і свою супутникову geometry (good, degraded з причинами на кшталт few-satellites чи high-pdop, або unknown, коли в уривку немає GSV чи GSA) з label (good, fair, poor; геометрія відраховує бали лише коли вона poor); кожне відрахування має class: geometry (небо, а не висновок, що атаки не було), environment або inconsistency (схоже на атаку)), підсумок (кількості за станом, геометрією та класом, найнижча й остання оцінка, коли настала перша епоха untrusted) та останнє речення $PKSHT. session_toml оголошує судно ([platform] kind = "vessel", його обмеження швидкості, прискорення та швидкості повороту, висоту антени, чи є на шині датчик курсу). Уривок має містити вікно калібрування; вхід обмежено 2 МіБ і 20 000 епохами, а відповідь містить щонайбільше 200 рядків епох degraded або untrusted. Це обмежена форма команди live: сокет не відкривається і нічого не записується в порт, а шлюз і експортери телеметрії (тривалий процес та його сервер --listen) доступні лише з командного рядка. Перевірки не бачать спуфера, чиє визначення узгоджується з усім, що є на шині. Лише консультативно: це не навігаційне обладнання із затвердженням типу; відповідальність залишається на операторі. Рівень доказів: MODELLED.

jammertest_import

Читає опублікований каталог випробувань Jammertest і план передач (NPRA/jammertest-plan, MIT) як заплановану істину (kshana jammertest import): слоти однієї області випробувань стають подіями receiver-trust з ідентифікатором каталогу та роком у кожній мітці. plans містить один файл плану на добу, log_start_utc — перша епоха журналу, local_offset_h — зсув плану від UTC (за замовчуванням 2, CEST). Повертає events_toml (додайте його до сеансу receiver-trust), events (ідентифікатор випробування, вид, початок і кінець у секундах від початку журналу) та кількості пропущених. Події є ЗАПЛАНОВАНИМИ слотами, а не записаними часами в ефірі: слот може початися пізно або взагалі не відбутися, а поле плану status здебільшого порожнє. Жодне контактне чи особисте поле плану не читається. Вхід обмежено 4 МіБ на кожен текст. Рівень доказів: MODELLED.

jammertest_score

Оцінює журнал приймача щодо графіка Jammertest (kshana jammertest score): для кожного запланованого випробування — затримку виявлення (перша тривога мінус запланований початок), чи було його виявлено в межах допуску, пізно чи пропущено, і час відновлення (безтривожний проміжок recover_hold_s), а також хибні тривоги поза кожним слотом та його охоронним інтервалом. session_toml потребує лише [log] format = "ubx" (або rinex, android, nmea, sbf); подайте журнал як log (текстові формати) або log_base64 (двійкові). Потребує JSON каталогу та плану (catalog_json, plans) і області випробувань (location). Повертає оцінкову картку: tests, summary, baseline_contaminated і позначку MODELLED. Графік складається із запланованих слотів, а не записаних часів в ефірі, тож пропуск може бути випробуванням, яке ніколи не проводилося. Підписаний пакет доказів потребує ключа підпису: використовуйте командний рядок (kshana jammertest score --key). Вхід обмежено 4 МіБ на кожен текст. Лише консультативно: це не навігаційне обладнання із затвердженням типу; відповідальність залишається на операторі. Рівень доказів: MODELLED.

assess_vessel_log

Оцінює журнал NMEA 0183 судна як пакетний прогін (kshana receiver-trust із [platform] kind = "vessel"): модель оцінки, монітори, що спрацювали, і оцінку 0–100 для кожної епохи з її відрахуваннями, її супутникову геометрію (good, degraded, unknown) з label (good, fair, poor) для кожної епохи, причому геометрія відраховує бали лише коли вона poor, і клас для кожного відрахування (geometry, environment, inconsistency), з geometry_model (пороги, чинні верхня й нижня межі та походження) і geometry_summary. session_toml задає обмеження судна та будь-які налаштування моніторів чи оцінки (таблиця [log] не потрібна), а nmea — це текст журналу, що уникає вставлення його всередину рядка TOML. Вхід обмежено 4 МіБ; відповідь містить документ із epochs, скороченими до кількостей за станом і не більше 200 епох degraded або untrusted. Для журналу в іншому форматі або з [[events]] для оцінювання використовуйте assess_receiver_log. Лише консультативно: це не навігаційне обладнання із затвердженням типу; відповідальність залишається на операторі. Рівень доказів: MODELLED.

generate_training_nmea

Генерує синтетичний NMEA 0183 містка для навчання екіпажів із TOML nmea-scenario (kshana nmea-scenario): трек судна та хронологію сценарних подій (глушіння, відведення положення, спуфінг часу, затримка відтворення, з відновленням). Повертає набір речень із правильними контрольними сумами (GGA, RMC, VTG, GSV, GSA, GNS, ZDA, HDT, VBW; перші 2000 рядків) та журнал інструктора (що і коли введено, з істинним треком і summary верхнього рівня з піковими швидкостями та прискореннями; події відведення містять свою пікову швидкість і прискорення відведення; схема kshana-nmea-training/1) як JSON і текст. Стеля видимих супутників приймача — receiver.max_used (за замовчуванням 12). Детерміновано для кожного seed. ЛИШЕ ТЕКСТ: тут ніщо не синтезує RF, IQ чи будь-яку форму сигналу, нічого не передається, а вихідні дані призначені для навчання та тестування, ніколи для живих навігаційних систем судна (про це каже маркерне речення в потоці). Консультативно, не навігаційне обладнання із затвердженням типу. Потокове передавання на адресу TCP чи UDP доступне лише з командного рядка. Чотири приклади сценаріїв постачаються в scenarios/training/.

create_evidence_pack

Створює підписаний пакет доказів для вікна журналу NMEA 0183 судна (kshana receiver-trust evidence): сирі байти журналу для вікна, конфігурацію з кожним порогом, результати та причини для кожної епохи, самодостатню підсумкову сторінку і маніфест, що перелічує SHA-256 кожного файлу разом із хешем повного журналу та ланцюжком хешів, підписаний Ed25519. from_s/to_s — секунди від першої епохи журналу. Повертає файли як JSON (подайте їх до verify_evidence_pack), відкритий ключ підписувача та відбиток. Зерно підпису ніколи не повертається і не журналюється; якщо signing_key_seed_hex опущено, використовується одноразовий ключ, який відкидається, тож пакет доводить цілісність щодо ключа, який він сам називає, а не те, хто підписав: для ключа, що має значення, створіть пакет у командному рядку (зерно, передане тут, проходить через розмову). Вхід обмежено 4 МіБ, а відповідь — 4 МіБ (звузьте вікно). Пакет — це технічний запис того, що рушій обчислив із журналу за заявлених налаштувань; він не є юридичною думкою, констатацією факту щодо будь-якої події чи сертифікацією. Рівень доказів: MODELLED.

create_round_trip_pack

Створює підписаний лабораторний пакет кругового проходу (kshana evidence round-trip, docs/spec/TEST-CONDITIONS.md): зв'язує за хешем сценарій, що створив рух, документ лабораторії kshana.test-conditions/1, журнал приймача та його оцінку щодо заявлених подій, у підписаному пакеті доказів, чий config.json містить блок round_trip. Відмовляється створювати пакет, умови й події оцінювання якого суперечать одні одним або чий заявлений SHA-256 журналу не відповідає цьому журналу. БЕЗ СИГНАЛУ: нічого не записується, не відтворюється і не планується; те, як рух сценарію потрапив до приймача, є відповідальністю оператора і записується лише так, як заявлено. Зерно підпису ніколи не повертається і не журналюється; якщо його опущено, використовується одноразовий ключ, який відкидається (цілісність, а не особа). Вхід обмежено 4 МіБ, а відповідь — 4 МіБ. Технічний запис, а не юридична думка чи сертифікація. Рівень доказів: MODELLED.

verify_evidence_pack

Перевіряє підписаний пакет доказів (kshana evidence verify): SHA-256 кожного файлу щодо маніфесту, ланцюжок хешів, підпис Ed25519 та, з public_key (ключ підписувача, отриманий від підписувача іншим шляхом), що підписувач є очікуваним, а з full_log — що журнал, який ви маєте, є тим, який записано в пакеті, і що зріз походить із нього. Повертає звіт: ok, кожну невдачу за кодом і файлом, кожну перевірку, signer_pinned, примітки та verdict: verified (підписувача закріплено), intact-signer-not-pinned (усе збігається, але довірчого public_key не надано, тож підпис доводить лише те, що пакет цілісний щодо ключа, який він сам називає, а такий ключ може згенерувати будь-хто; скажіть про це, не називайте це верифікованим) або failed, з message для показу користувачеві. require_timestamp відхиляє пакет, що не містить маркера часу. Входи обмежено 4 МіБ. Успішна верифікація каже, що запис не змінено і хто його підписав (ключ, який ви надали); вона не каже, що спричинило будь-яку подію, хто відповідальний, чи що журнал показує те, що приймач справді отримав.

build_interference_map

Будує карту завад ГНСС (GNSS) за відкрито ліцензованими звітами про положення повітряних суден (ADS-B NIC/NACp) або кораблів (AIS), поданими як текст CSV (kshana interference-map adsb|ais). Повертає один документ GeoJSON на добу UTC (схема kshana-interference-map/v1) (імена файлів <source>-<dataset>-<date>.geojson; версія методу 2), у якому кожна опублікована комірка сітки має значення degraded, not_degraded, insufficient_sample, withheld_day_confounded або withheld_no_background (ADS-B) чи anomalous/not_anomalous (AIS), із вбудованими методом, його попередньо зареєстрованими порогами, ліцензією набору даних та зазначенням авторства. Кожна кількість у комірці нижче мінімуму публікації (5) має значення null (приховано, ніколи не нуль), а доба, фон якої не можна оцінити, приховує свої висновки. Лише агрегати: ідентифікатори хешуються в пам'яті й ніколи не повертаються, а комірка з меншою ніж 5 кількістю окремих повітряних суден чи суден не публікується. dataset — це схвалений пресет або custom (з licence, licence_url, attribution). Вхід обмежено 4 МіБ, а відповідь — 4 МіБ (використовуйте грубіший cell_deg або командний рядок для більшого обсягу). Нічого не завантажується: полігони суші, якщо потрібні для AIS, передаються на вхід. Погіршена комірка не визначає завади як причину; неопублікована комірка не є доказом чистої комірки; це не прогноз. Рівень доказів: MODELLED.

route_exposure

Підсумовує, яка частина маршруту проходить через погіршені комірки однієї чи кількох карт завад (kshana route-exposure): для кожної карти (по одній на джерело на добу UTC, GeoJSON, який повертає build_interference_map) — довжину маршруту та частки його довжини в погіршених комірках, у комірках, що не були погіршені, у комірках із надто малою вибіркою для оцінювання та в неспостережуваних комірках. Маршрут — це GeoJSON LineString або текст CSV lat,lon; date_from/date_to (YYYY-MM-DD) залишають карти в діапазоні дат. Вхід обмежено 4 МіБ на елемент. Неспостережувані комірки не є доказом чистого маршруту; погіршена комірка не визначає завади як причину; це описує минулі звіти і не є прогнозом. Рівень доказів: MODELLED.

compliance_report

Заповнює зіставлення з публічними рамковими документами за документами результатів Kshana (kshana compliance-report): для яких рядків шести рамкових документів і стандартів стійкості (рамкова структура DHS США для стійкого PNT v2.0, настанови IMO для суден, настанови EASA для авіації, NIS2 стаття 21, EN 16803, NIST IR 8323r1) подані прогони підтримують докази (supports evidence for), для яких ні, і яку прогалину зберігає кожен рядок. Передайте кожен прогін як label, result (текст JSON результату) і, коли він у вас є, scenario (TOML сценарію, що називає вид, якого не називає результат; результату receiver-trust він не потрібен). Не більше 64 прогонів і 4 МіБ загалом; нічого не читається з диска. status кожного рядка — evidenced, partly-evidenced, not-evidenced або out-of-scope, і кожен рядок зберігає свою gap, навіть коли докази є; входи, які не вдалося використати, перелічуються в unrecognised і нічого не враховуються. Показуйте statement звіту з будь-яким результатом, дослівно: статус означає, що прогін підтримує докази для можливостей, названих рядком; це не висновок, що рамковий документ виконано, і не означає, що будь-який продукт хтось оцінив чи схвалив. Не описуйте результат сильнішими словами. Рівень доказів: MODELLED.

compliance_mapping

Статичне зіставлення з публічними рамками (kshana compliance-report --mapping / --sources) у форматі Markdown: одна таблиця на кожну рамку з переказаною вимогою кожного рядка, виходами Kshana, що підтримують докази для неї (supports evidence for), і прогалиною, яку ці виходи не закривають; або, коли sources має значення true, вихідні документи, на які посилаються таблиці, з версіями та URL-адресами. Починається з твердження, яке містить кожен звіт і яке залишається з будь-яким уривком: рядок, позначений як evidenced, означає, що прогін підтримує докази для можливостей, названих у рядку; це не висновок, що рамку виконано, і не означає, що будь-хто оцінив чи схвалив будь-який продукт. Не потребує прогонів.

fit_imu_log

Підібрати параметри датчика для сценаріїв hybrid і fusion за журналом нерухомого IMU (kshana imu-fit, docs/MACHINE-INPUTS.md). Ці сценарії приймають параметри шуму, а не часовий ряд: тут їх зчитують із журналу, записаного при нерухомому датчику, за девіацією Аллана (з перекриттям) проінтегрованого сигналу. Повертає JSON: fit (зміщення акселерометра, спектральна густина випадкового блукання швидкості q_va, зміщення гіроскопа, спектральна густина випадкового блукання кута q_arw, нижня межа нестабільності зміщення, якщо журнал достатньо довгий, щоб її показати, частота й тривалість журналу, початкові нахили кривої Аллана та notes про те, що не вдалося підібрати або чому не можна довіряти), toml (таблиця [accel_classical], походження якої називає SHA-256 журналу, готова для вставлення в сценарій) і sha256. Журнал, який не був нерухомим, або надто короткий чи нерівномірно дискретизований, дає хибні параметри або відхиляється; нахили (близько -0,5 там, де переважає білий шум) показують, який саме випадок. Нічого не записується на диск. Рівень доказів: MODELLED (оцінювач, застосований до журналу, без зовнішнього оракула).

list_standards_packs

Перелічити пакети стандартів (kshana standards-pack list): оцінювані набори сценаріїв для тестових профілів рамки DHS Resilient PNT, IMO MSC.1/Circ.1575 і ICAO Doc 9849 Appendix F, кожен із порогами, які він визначає до прогону, і рядками compliance, для яких він підтримує докази (supports evidence for). Вхідних даних не потребує. Пакет вимірює змодельовані сценарії відносно заявлених порогів; він не оцінює жоден продукт. Рівень доказів: MODELLED.

run_standards_pack

Виконати один пакет стандартів (kshana standards-pack run <id>): кожен його сценарій, оцінений за порогами, заявленими до прогону. Повертає звіт (кожен тест MET, NOT MET або NEEDS INPUT, коли йому потрібен журнал приймача і він не оцінюється; кожен поріг із виміряним і очікуваним значенням) і те саме у форматі markdown. Передайте JSON звіту до compliance_report, щоб побачити рядки, для яких пакет підтримує докази (supports evidence for). Скажіть прямо, що поріг MET означає: змодельований сценарій досяг заявленого порогу, а NOT MET є зафіксованим результатом; ніколи не описуйте вихід як доказ того, що продукт чи рамку виконано. Лише консультативно: результат аналізу, не навігаційне обладнання із затвердженням типу. Рівень доказів: MODELLED.

lunanet_afs_check

Перевірити розширений прямий сигнал LunaNet (Augmented Forward Signal, AFS) за опублікованою специфікацією, закріпленою за LNIS Version 5 Applicable Document 1 Volume A (LSIS-AFS V1.0, 29 січня 2025) (kshana lunanet-afs-check, docs/LUNANET-AFS.md). Режим spec звіряє цю реалізацію з надрукованими в документі таблицями кодів (перші та останні 24 чипи кожного коду AFS-I Gold, AFS-Q Weil і третинного коду для PRN від 1 до 210, а також обидві послідовності Лежандра) і з наведеними прикладами (SB1 BCH, CRC-24Q), порогами B1–B10 попередньої реєстрації; B4 повідомляє про один промах (документ друкує однакові останні 24 чипи для третинних PRN 147 і 151). Режим symbols перевіряє потік символів із жорсткими рішеннями (текст із 0 і 1) на шаблон синхронізації, декодування SB1, FID, неперервність TOI та інтервал між кадрами. Підкадри від 2 до 4 (LDPC зі швидкістю 1/2, CRC-24Q) НЕ верифіковано: матриці LDPC містяться в окремому додатку, який не реалізовано. Режим generate повертає тестовий потік із підкадрами-заповнювачами: символи, а не хвильова форма; Kshana не записує жодного сигналу. VALIDATED лише за надрукованими таблицями цього видання, які сам документ позначає як TBC; скажіть про це й не описуйте результат як доказ того, що будь-який вузол чи служба LunaNet правильні. Лише консультативно.

score_benchmark

Оцінити подання kshana-bench (kshana bench score, bench/SPEC.md, docs/BENCH.md): файл прогнозів (kshana-bench-predictions/1) відносно файлу істини (kshana-bench-truth/1), обидва текстом JSON, не більше 4 МіБ кожен, і повернути файл результату (kshana-bench-result/1) із версією специфікації, завданням (a виявлення на журналах приймача, b виявлення на IQ, c прогноз утримання часу (holdover), d розрив оптимізму поза розподілом), розбиттям, SHA-256 обох вхідних файлів і метриками завдання (AUC, ймовірність виявлення за обмеження хибних тривог, RMSE за горизонтами або розрив оптимізму). threshold — заявлений поріг тривоги завдань a і b. Нічого не читається з диска і не записується. Кожна оцінка є MODELLED і описує журнал або корпус, ніколи не продукт; вона не є сертифікацією, і жодну організацію оцінка не схвалює. Рівень доказів: MODELLED.

render_leaderboard

Відтворити файли результатів kshana-bench (kshana bench leaderboard) як статичну сторінку таблиці лідерів, текст HTML у відповіді: results — це список текстів JSON kshana-bench-result/1 (не більше 256, кожен до 4 МіБ), кожен спершу перевіряється; файл, оцінений за іншою основною версією специфікації, відхиляється, бо результати різних основних версій ніколи не потрапляють в одну таблицю. Рядок означає, що цей файл набрав цей результат на цьому розбитті; він не означає, що будь-хто оцінив чи схвалив будь-який продукт. Нічого не записується. Рівень доказів: MODELLED.

trust_telemetry

Відтворити потік довіри GNSS (ГНСС) або результат receiver-trust як текст телеметрії безпеки (kshana trust-telemetry, docs/TRUST-TELEMETRY.md) тими самими кодувальниками, що й командний рядок: prometheus (експозиція кінцевого стану), cef або leef (один рядок syslog за RFC 5424 на кожну зміну діапазону або на кожну епоху з syslog_all; без позначки часу, бо годинник не читається) чи otlp (корисне навантаження метрик OTLP/HTTP JSON). input_kind — це jsonl (типово) або result; рядок потоку, який не вдалося розібрати, пропускається й враховується в kshana_trust_input_errors_total. Нічого не надсилається, не обслуговується і не записується: вихід — це текст у відповіді (запущені експортери, які є процесом, залишаються в командному рядку). Позицію, повідомлену приймачем, пропущено, якщо expose_position не має значення true. Вхідні дані, що містять геометрію супутників (жива схема 1,3, результати від 0,36), додають мітку геометрії (good, fair, poor; оцінюється лише poor), а також стан, HDOP, PDOP, VDOP і кількість використаних супутників, та мітку class (геометрія, середовище, неузгодженість) для кожної причини; старіші вхідні дані відтворюються як і раніше. Лише консультативно: Kshana не є навігаційним обладнанням із затвердженням типу (IEC 61108, IEC 61162), і відповідальність залишається на операторі. Рівень доказів: MODELLED.

export_test_bench

Експортувати рух транспортного засобу та події сценарію для лабораторного симулятора GNSS (kshana bench-export, docs/TEST-BENCH.md): CSV руху та його опис у JSON (положення в земній системі координат і геодезичне, швидкість, орієнтація, UTC), речення NMEA 0183 GGA/RMC, текст маршрутних точок, коли сітка відліків регулярна з кроком у мілісекунди, а також події сценарію у вигляді CSV і як TOML [[events]] для сценарію receiver-trust. Застосовується до gnss-ins (його відмови навігаційного стану є подіями), jamming і gnss-sim; інший вид відхиляється з поясненням причини. epoch — це момент UTC нульового часу руху, YYYY-MM-DDTHH:MM:SS (типово 2024-01-01T00:00:00Z). Нічого не записується на диск: перший елемент вмісту — індекс JSON (files із suffix, bytes, sha256; notes для будь-якого пропущеного файлу; notice), далі текст кожного файлу в порядку індексу. Той самий сценарій і та сама епоха дають побайтово ідентичні файли. СИГНАЛУ НЕМАЄ: ніщо з експортованого не є радіочастотним або baseband-сигналом, не моделює його і не керує ним, а подія є позначеним інтервалом, а не рецептом створення завад; сигнали забезпечують симулятор і його оператор, які відповідають за те, щоб запускати їх лише там, де це дозволено. Зберігайте повідомлення разом із файлами. Kshana не публікує результатів таких прогонів. Рівень доказів: MODELLED.

attach_evidence_timestamp

Прив'язати маркер позначки часу RFC 3161 до пакета доказів (kshana evidence attach-timestamp) у пам'яті: files — це пакет у тому вигляді, в якому його повертає create_evidence_pack, token_base64 — байти файлу .tsr від служби позначок часу. Маркер зберігається як timestamp.tsr поряд із підписаним маніфестом, а не всередині нього, і пакет із маркером мусить і надалі проходити перевірку, інакше нічого не прикріплюється; наявний маркер зберігається, якщо replace не має значення true. Повертає оновлені files (передайте їх до verify_evidence_pack з require_timestamp true, щоб вимагати наявності маркера) і нотатки перевірки. Це НЕ перевіряє підпис служби позначок часу на маркері та сертифікат служби (перевіряються структура маркера і те, що відбиток його повідомлення є хешем manifest.json цього пакета): скажіть про це й вкажіть користувачеві на openssl ts -verify. Вхідні дані та відповідь обмежено 4 МіБ. Позначка часу показує, що хеш існував у момент, який заявляє служба; вона не є юридичним висновком. Рівень доказів: MODELLED.

Усі канали

Усі способи його встановити.

Одна таблиця, згенерована з packaging/channels.json репозиторію та звірена з його README, тож кожна команда збігається з тією, що показує README, і закріплена за v0.40.0. Готові двійкові файли для кожної операційної системи, розширення для настільного асистента, кнопки в один клік для Cursor і VS Code, засоби запуску npx і uvx, Homebrew, Scoop і winget, реєстри та самостійно розміщений режим HTTP. Канали, позначені коли буде опубліковано, стають доступними з випуском.

Рушій і прив'язки

Сам рушій, у мові чи місці, де ви працюєте.

Спробувати в браузері

Для будь-кого, нічого встановлювати не треба. Потрібно: нічого.

Рушій працює локально як WebAssembly; нічого не вивантажується.

Бібліотека Rust

Для розробників на Rust, які вбудовують рушій. Потрібно: Rust.

Закріплено за v0.40.0cargo add kshana@0.40.0

Потім перевіртеcargo tree --depth 1 | grep kshana

Python

Для аналітиків і ноутбуків. Потрібно: Python.

Закріплено за v0.40.0pip install kshana==0.40.0

Потім перевіртеpython -c "import kshana; print(kshana.version())"

JavaScript і WebAssembly

Для розробників вебзастосунків і Node.js. Потрібно: Node.

Закріплено за v0.40.0npm install kshana@0.40.0

Потім перевіртеnpm ls kshana

ШІ-асистенти (сервер MCP)

Консультативне програмне забезпечення, не навігаційне обладнання із затвердженням типу: відповідальність за навігацію залишається на операторі. Сервер працює на вашому комп'ютері; нічого не надсилається до Ashforde OÜ.

Асистент зі штучним інтелектом (сервер MCP, cargo)

Для всіх, хто користується асистентом із підтримкою MCP. Потрібно: Rust 1,88+.

Закріплено за v0.40.0cargo install kshana-mcp --version 0.40.0

Потім перевіртеcargo install --list | grep kshana-mcp

Образ Docker

Для випадків без інструментарію Rust; сервер MCP у контейнері. Потрібно: Docker.

Закріплено за v0.40.0docker run --rm -i ghcr.io/ashfordeou/kshana-mcp:0.40.0

Потім перевіртеdocker image inspect ghcr.io/ashfordeou/kshana-mcp:0.40.0 --format '{{.Id}}'

npx

Для користувачів Node, будь-який клієнт MCP. Потрібно: Node 18+.

Закріплено за v0.40.0kshana-mcp@0.40.0

Потім перевіртеnpx -y kshana-mcp@0.40.0 --version

Засіб запуску: він завантажує двійковий файл випуску, перевіряє SHA256SUMS і запускає його.

winget на розгляді

Для Windows. Потрібно: winget.

Закріплено за v0.40.0winget install AshfordeOU.KshanaMcp --version 0.40.0

Потім перевіртеkshana-mcp --version

З'явиться, коли Microsoft прийме подання.

Віддалений (streamable HTTP), самостійно розміщений

Для клієнтів, що приймають URL-адресу. Потрібно: власний хост.

Закріплено за v0.40.0v0.40.0

Типово — петля (loopback); прив'язка не до петлі потребує --allow-remote і маркера bearer. Kshana не розміщує жодної кінцевої точки.

Інтеграції

Плагіни та образи, що переносять Kshana в інші інструменти.

Плагін JetBrains IDE

Для користувачів IntelliJ, PyCharm і CLion. Потрібно: IDE від JetBrains.

Settings → Plugins → Marketplace → знайдіть «Kshana» (ідентифікатор плагіна dev.kshana.ide). Клацніть правою кнопкою на .toml сценарію та оберіть Run Kshana Scenario.

Плагін Signal K

Для власників човнів із сервером Signal K. Потрібно: Node, сервер Signal K.

Закріплено за v0.40.0npm install signalk-kshana-trust@0.40.0

Потім перевіртеnpm ls signalk-kshana-trust

Плагін OpenCPN

Для користувачів картплотера OpenCPN. Потрібно: OpenCPN 5,8+.

Завантажте архів плагіна зі сторінки випуску. Випуск містить архів і XML із метаданими каталогу; внесення до каталогу OpenCPN — це запит на злиття, який відкривають вручну.

02Способи використання

Одинадцять способів почати.

Від вкладки браузера до набору регресійних тестів безперервної інтеграції (CI). Кожен спосіб запускає той самий рушій і записує той самий результат JSON, діаграму SVG (Scalable Vector Graphics) і звіт HTML (HyperText Markup Language). Оберіть один; кожна команда справжня і копіюється одним клацанням.

Kshana Studio

Будь-який вбудований сценарій, запущений на вашому комп'ютері як WebAssembly; нічого не встановлюється, нічого не завантажується. Налаштовуйте його, порівнюйте прогони, перебирайте параметр і експортуйте відтворюваний звіт.

03Командний рядок · бібліотеки · формати

Один виклик, три мови, та сама відповідь.

Командний рядок, прив'язки Rust, Python і JavaScript та формати файлів, які рушій читає й записує, поруч. Усе тут — безкоштовне відкрите ядро.

Командний рядок · kshana --helpЗ двійкового файлу

Довідник командного рядка з власного тексту використання двійкового файлу

kshana <scenario.toml> [--study-name <s>] [--eop <finals2000A>] [--export-sp3 <out.sp3>] [--export-omm <out.omm>] [--export-oem <out.oem>] [--export <czml|kml|geojson|stk|sigmf|all|list>]... [--import-route <route.geojson>]
kshana <scenario.toml> --animate <svg|html|frames|all> [--animate-fps <n>] [--animate-duration <s>]
kshana --study <suite.toml>
kshana --validate <scenario.toml>
kshana receiver-trust <scenario.toml>
kshana receiver-trust live <session.toml> [--stdin | --file <path> [--follow] | --tcp <host:port> | --udp <port>] [--gate] (kshana receiver-trust live --help)
kshana receiver-trust evidence <scenario.toml> --from <t0> --to <t1> --key <keyfile> --out <dir> (kshana evidence --help)
kshana evidence <keygen|verify|attach-timestamp> ... (kshana evidence --help)
kshana jammertest <import|score> ... (kshana jammertest --help)
kshana evidence round-trip <scenario.toml> --scenario <bench-scenario> --conditions <file> --from <t0> --to <t1> --key <keyfile> --out <dir> (kshana evidence --help)
kshana trust-telemetry [options] (kshana trust-telemetry --help)
kshana imu-fit <imu.csv> [--format csv|euroc] [--axis x|y|z] [--expected-mean <m/s2>] [--id <name>] [--json]
kshana nmea-scenario <scenario.toml> [--out <file.nmea>] [--tcp <addr>|--udp <addr>] (kshana nmea-scenario --help)
kshana interference-map <adsb|ais|fetch-land> ... (kshana interference-map --help)
kshana route-exposure --route <route> --map <map.geojson|dir> [--from <date>] [--to <date>]
kshana bench <spec|truth|cases|score|baseline|seal|reveal-check|manifest|verify-manifest|validate|leaderboard> ... (kshana bench --help)
kshana bench-export <scenario.toml> [--out <base>] [--epoch <YYYY-MM-DDTHH:MM:SS>]
kshana compliance-report [--out <base>] <result.json>... | --mapping | --sources
kshana lunanet-afs-check <spec [--json] [--strict]|symbols <file> [--max-sp-errors <n>] [--json]|generate --frames <n> [--toi0 <t>] --out <file>>
kshana standards-pack <list|run <id> [--json] [--out <base>]|rows <id>|tests <id>>
kshana partner check <submission.toml> [--json]
kshana osnma verify <pages|vectors.csv|stream.ubx> [--merkle-root <hex>] [--public-key <id:type:hex>] [--reference-time <gst-s>] [--json] (kshana osnma --help)
kshana iq <scene|acquire|track|sweep|labfit|campaign|conditions|frontend|monitor|inventory|info|extract|convert|decimate> ... (kshana iq --help)
kshana sky <request.json|request.toml> | --site <lat,lon[,h]> --systems <a,b,...> [--time <s>] [--mask <deg>] [--skyline-preset <name>] [--uere <m>] [--monte-carlo <n> --seed <s>] [--svg] (kshana sky --help)
kshana skyline --preset <name> [--json] | --presets | --profile <skyline.json|toml>
kshana kinds [--json]
kshana example [<name>]
kshana --help | --version

Прогін записує result.json, chart.svg, report.html, report.json, table.csv поруч зі сценарієм; --export-sp3, --export-omm і --export-oem записують файли орбіт; --animate також записує прогін як щось рухоме (animation.svg, animation.html, frames: анімований SVG, самодостатній програвач HTML або тека з пронумерованими кадрами), а --animate-fps і --animate-duration задають частоту й тривалість відтворення; --export записує геометрію сценарію або його синтезований сигнал для інших інструментів: CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON (географічний JSON), файл ефемерид STK (Systems Tool Kit), SigMF (Signal Metadata Format); --import-route читає маршрут, накреслений як лінія GeoJSON; --eop вводить параметри орієнтації Землі з файлу finals2000A; --study запускає безкоштовний набір сценаріїв у study.json і study.html; kshana kinds --json перелічує всі види з їхніми полями; kshana example друкує сценарій для початку роботи. Результати можуть передаватися в оболонці Kshana Interchange Format (KIF). Сервер MCP надає експорти орбіт як інструменти.

kshana --study — безкоштовний засіб запуску наборів. Якщо ви хочете, щоб аналіз виконали за вас, це платне індивідуальне дослідження.

Кожен прогінДетермінований
  • Записує result.json, chart.svg, report.html і той самий звіт як report.json, а також таблиця CSV (значення, розділені комами) для видів, що її публікують. За запитом також записує анімацію прогону (--animate) і сценарій у форматах, які читають інші інструменти (--export).
  • Відтворюваний за сценарієм, зерном (seed) і версією рушія, з CycloneDX SBOM (перелік компонентів програмного забезпечення) і походженням збірки SLSA (Supply-chain Levels for Software Artifacts) для кожного випуску.
  • Задокументовано: концепції, схема сценарію, API Python, валідація та кожен посібник, згенеровані з репозиторію. Документація
Rust, Python, JavaScriptЗапущено для v0.40.0

Кожна програма запускає вбудований сценарій clock-holdover (запишіть його за допомогою kshana example clock-holdover > clock-holdover.toml) і друкує той самий однорядковий підсумок. Повні версії містять README пакетів.

src/main.rs · після cargo add kshana
use kshana::api;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let toml = std::fs::read_to_string("clock-holdover.toml")?;
    let out = api::run_toml(&toml)?;              // RunOutput { json, svg, summary, csv }
    println!("{}", out.summary);                  // the one-line result string
    std::fs::write("clock-holdover.result.json", &out.json)?;
    Ok(())
}

kshana::api також має run_scenario, validate_scenario, list_scenario_kinds та експортери орбіт. Документація Rust

Відкрити в Kshana Studio: clock-holdover

Сумісність · читання та записКожен рядок називає свою перевірку

Формати, які рушій обробляє нині, зі сторінки стандартів репозиторію (Документація: стандарти). Розгорніть рядок, щоб дізнатися, як до нього дістатися і з чим його було звірено.

  • CCSDS OEM Consultative Committee for Space Data Systems, Orbit Ephemeris Message (повідомлення про ефемериди орбіти)читання · запис
    Як
    --export-oem, MCP export_oem
    Звірено з
    Приклад із CCSDS Blue Book, відновлений дослівно
  • CCSDS OMM Orbit Mean-Elements Message (повідомлення про середні елементи орбіти)запис
    Як
    --export-omm, MCP export_omm
    Звірено з
    Тест циклічного перетворення на справжніх двострокових наборах елементів
  • SP3-c / SP3-d Standard Product 3, прецизійні ефемеридичитання · запис
    Як
    --export-sp3, MCP export_sp3
    Звірено з
    Циклічне перетворення на знімку справжнього орбітального угруповання GPS (Global Positioning System)
  • CCSDS TDM Tracking Data Message (повідомлення з даними стеження)читання · запис
    Як
    Бібліотека Rust
    Звірено з
    Приклад із CCSDS Blue Book, відновлений дослівно
  • CCSDS Space Packet пакети телеметрії та телекеруваннячитання · запис
    Як
    Сценарії space-packet
    Звірено з
    Опубліковані побайтові тестові вектори незалежної бібліотеки
  • RINEX Receiver Independent Exchange Format (незалежний від приймача формат обміну), навігація та спостереженнячитання
    Як
    Вхідні дані сценаріїв, наприклад pvt
    Звірено з
    Файли спостережень зі справжньої станції Міжнародної служби GNSS (Global Navigation Satellite System, глобальна навігаційна супутникова система)
  • TLE two-line element set (двостроковий набір елементів)читання
    Як
    Сценарії orbit
    Звірено з
    Офіційні еталонні вектори AIAA (American Institute of Aeronautics and Astronautics)
  • IONEX IONosphere map EXchange format (формат обміну картами іоносфери)читання
    Як
    Бібліотека Rust
    Звірено з
    Читає продукт Міжнародної служби GNSS; зовнішньої перевірки в переліку ще немає
  • Орієнтація Землі IERS International Earth Rotation and Reference Systems Service (Міжнародна служба обертання Землі та систем відліку)читання
    Як
    --eop з файлом finals2000A
    Звірено з
    Офіційний продукт, зокрема прогнозні рядки
  • KIF Kshana Interchange Formatчитання · запис
    Як
    Оболонка навколо будь-якого результату
    Звірено з
    Власна версійована оболонка Kshana, а не зовнішній стандарт; кожен споживач отримує вердикт щодо сумісності
  • JSON, SVG, HTML, CSV виходи прогонузапис
    Як
    Кожен прогін; MCP export_table_csv
    Звірено з
    Детермінований за сценарієм, зерном (seed) і версією рушія
Плагін JetBrains IDEIntelliJ · PyCharm · CLion

Віддаєте перевагу клацанню?

Плагін «Kshana — PNT simulator»: клацніть правою кнопкою на будь-якому сценарії .toml, виберіть Run Kshana Scenario і читайте показники якості у вікні інструмента.

Бенчмарк

Запустіть бенчмарк.

kshana bench score перетворює файл подання та істину розбиття на файл результату, а kshana bench leaderboard відтворює файли результатів як статичну сторінку. Нічого не запускається від вашого імені, і нічого не завантажується.