Experimentar no navegador
Para qualquer pessoa, sem nada a instalar. Requer: nada.
O motor é executado localmente como WebAssembly; nada é enviado.
Tradução automática, não revista por um falante nativo. O inglês é a referência.
Um só motor em Rust para a resiliência de GNSS (Global Navigation Satellite System) e PNT (posicionamento, navegação e temporização): uma interface de linha de comando (CLI), pacotes em Rust, Python e JavaScript, o Kshana Studio no navegador, um plugin para IDE (ambiente de desenvolvimento integrado) JetBrains e um servidor MCP (Model Context Protocol), para que um assistente de IA (inteligência artificial) execute o motor validado em vez de adivinhar a matemática. Código aberto sob a AGPL-3.0 (GNU Affero General Public License, versão 3) ou uma licença comercial.
The recorded session plays here with JavaScript.
Gerado a partir dos manifestos do repositório e verificado contra seus READMEs, de modo que todo comando corresponde à v0.40.0. O kshana-mcp dá ao seu assistente de IA o mesmo motor: um cenário TOML (Tom's Obvious, Minimal Language) entra, JSON (JavaScript Object Notation) e CSV (valores separados por vírgula) saem.
Para qualquer pessoa, nada a instalar.
O motor é executado localmente como WebAssembly; nada é enviado.
Para engenheiros que querem o comando kshana.
Depois, verifiquekshana --version
Para analistas e notebooks.
Depois, verifiquepython -c "import kshana; print(kshana.version())"
Para desenvolvedores web e Node.js.
Depois, verifiquenpm ls kshana
Para quem usa um assistente compatível com MCP.
Depois, verifiquecargo install --list | grep kshana-mcp
Nome no registro io.github.ashfordeOU/kshana-mcp. Registre-o no seu cliente, a partir do README do kshana-mcp:
{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"env": { "KSHANA_MCP_IQ_DIR": "/Users/you/iq" }
}
}
}{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"args": [],
"env": {}
}
}
}Para quem não tem a toolchain Rust; o servidor MCP em um contêiner.
Depois, verifiquedocker image inspect ghcr.io/ashfordeou/kshana-mcp:0.40.0 --format '{{.Id}}'
Registro de contêineres do GitHubGuia do servidor MCP: Docker
Para desenvolvedores Rust que incorporam o motor.
Depois, verifiquecargo tree --depth 1 | grep kshana
Para usuários de IntelliJ, PyCharm e CLion.
Settings → Plugins → Marketplace → busque "Kshana" (ID do plugin dev.kshana.ide). Clique com o botão direito em um .toml de cenário e escolha Run Kshana Scenario.
Motor RustAGPL-3.0 ou licença comercialLista de materiais de software e proveniência de build em cada versão
A sessão gravada é reproduzida aqui passo a passo.
Mesma execução no Studio: Motor v0.40.0 · clock-holdover.toml · seed 42Abrir no Kshana StudioRelatório
49 ferramentas sobre a API pública (interface de programação de aplicações) do Kshana, no registro oficial de MCP como io.github.ashfordeOU/kshana-mcp. Exportações de órbita: SP3 (Standard Product 3) e OMM e OEM do CCSDS (Consultative Committee for Space Data Systems) (mensagens de elementos médios de órbita e de efemérides, TEME: referencial True Equator, Mean Equinox). Registre-o em Assistente de IA (servidor MCP) ou Imagem Docker. Documentação do servidor MCP
run_scenarioExecuta um cenário de resiliência PNT do Kshana a partir de uma definição TOML e retorna suas figuras de mérito. Retorna o resumo legível por humanos seguido do JSON completo do resultado (FoMs, curvas). O Kshana valida SGP4/SDP4, referenciais IAU, desvios de Allan, disponibilidade GNSS/DOP, níveis de proteção ARAIM, fusão GNSS/INS e modelos de sensores quânticos contra referências publicadas. Todo tipo de cenário é executado por esta única ferramenta, incluindo spectrum (espectro de radiofrequência e cascata), solar-system, constellation-design e body-pnt (constelações em torno de qualquer corpo), campaign (fases encadeadas, varreduras de parâmetros, conjuntos Monte Carlo e cenários compostos) e os tipos de navegação em órbita baixa da Terra leo-signal, leo-pass, leo-navmsg, leo-pvt, leo-ppp, ntn-positioning e leo-pnt-chain. O conteúdo é embutido: um campo de cenário que nomeia um arquivo é recusado, e um cenário tem no máximo 4 MiB. Chame list_scenario_kinds primeiro para descobrir os tipos de cenário e seus campos, e list_example_scenarios / get_example_scenario para um cenário completo e executável de um tipo.
list_scenario_kindsLista todo tipo de cenário embutido do Kshana com sua descrição e seus campos TOML obrigatórios/opcionais, como um array JSON. Use-a para descobrir quais cenários podem ser executados e como construir um TOML de cenário válido para run_scenario.
validate_scenarioVerificação prévia de um TOML de cenário do Kshana: confirma que ele é analisado como TOML e detecta o tipo de cenário, sem executá-lo. Retorna o tipo detectado ou um erro descritivo para TOML malformado. (run_scenario faz a validação completa executando o cenário.)
assess_receiver_logAvalia a confiança de um registro real de receptor GNSS: lê um log u-blox UBX, RINEX 3 (opcionalmente com navegação por broadcast, o que acrescenta a solução de posição do próprio motor, o RAIM e um monitor auxiliado pelo relógio), Android GnssLogger ou NMEA, executa os monitores de confiança (queda da densidade de portadora a ruído, AGC, indicador de jamming, perda de travamento, salto de posição, RAIM, relógio) contra uma linha de base de calibração e retorna quando e por que o receptor deixou de ser confiável. Os [[events]] opcionais, com inícios e quedas previstas de C/N0, são pontuados contra tolerâncias declaradas no cenário: detectado, tardio ou perdido, e concorda ou discorda. Retorna o resumo e o JSON completo do resultado (gráfico e CSV sob demanda; o CSV de uma execução de embarcação começa com uma linha de comentário # que traz a declaração consultiva, e que os leitores de CSV ignoram com sua opção de comentário). Os bytes do log vão embutidos no TOML como text ou base64 (somente embutidos, no máximo 4 MiB). Uma tabela [platform] kind = "vessel" seleciona os monitores marítimos (consistência cinemática, rumo em relação ao curso, odômetro de velocidade, altura da antena, dispersão de C/N0, consistência de tempo) e acrescenta uma pontuação de confiança de 0 a 100 por época, com os monitores que deduziram. Cada época também traz a geometry de satélites (good; degraded para poucos satélites ou PDOP ou HDOP alto; ou unknown quando o log não tem elevações de satélite nem DOP); cada época tem um label (good, fair, poor); para uma embarcação, um monitor geometry entra na pontuação, deduzindo apenas quando a geometria é ruim (no máximo 15 pontos: degradada, nunca untrusted), e toda dedução traz uma classe: geometria (o céu), ambiente ou inconsistência (semelhante a ataque). Para um trecho de fluxo com o portão, use assess_vessel_stream. Apenas consultivo; nível de evidência MODELLED.
list_example_scenariosLista os cenários de referência incluídos como JSON: count e scenarios, um array de name, kind e about (a primeira frase do comentário de cabeçalho do próprio arquivo). Cada um é um cenário completo que roda como está, de modo que esta é a via mais rápida para um TOML válido de um tipo de cenário: escolha um nome, obtenha-o com get_example_scenario, edite-o, execute-o. Passe kind para listar apenas os exemplos de um tipo de cenário (por exemplo spectrum, solar-system, constellation-design, campaign, leo-signal, leo-pass, leo-navmsg, leo-pvt).
get_example_scenarioRetorna o texto TOML de um cenário de referência incluído, byte a byte o arquivo que o repositório distribui em scenarios/. Passe o texto (editado ou não) para run_scenario, report_scenario, animate_scenario ou uma ferramenta de exportação. Os nomes vêm de list_example_scenarios. Um cenário que existe no repositório mas não está incluído é recusado, com o motivo.
report_scenarioExecuta um cenário do Kshana e retorna seu relatório: um resumo executivo, as entradas, cada valor de resultado com sua unidade e seu rótulo VALIDATED ou MODELLED, os eventos, as linhas de capacidade que a execução exercitou e um registro de reprodutibilidade (versão do motor, resumos SHA-256 do cenário e do resultado, semente, o comando que o reproduz). format é json (padrão; o report.json legível por máquina) ou html (o report.html imprimível e autocontido, com o gráfico embutido). O relatório de uma campanha também traz sua tabela de varredura ou a distribuição Monte Carlo. O relatório é uma função pura do cenário: nenhum relógio é lido.
animate_scenarioExecuta um cenário do Kshana e retorna sua série temporal como uma animação. format é svg (padrão: um SVG animado, sem script), html (uma página de player autocontida) ou frames (quadros SVG estáticos numerados mais manifest.json, no máximo 120 quadros em uma resposta). Os opcionais fps (1 a 60, padrão 12), duration_s (0,5 a 600, padrão 8) e width (480 a 3840 pixels, padrão 960). O primeiro item de conteúdo é um resumo JSON do que foi desenhado: o intervalo de tempo e a unidade, os títulos dos gráficos, o número de fases e eventos, se há uma cascata de espectro, os caminhos de resultado de onde os traços foram lidos, qualquer série omitida e os nomes dos arquivos. Os arquivos vêm em seguida, um item de conteúdo cada, na ordem em que files do resumo os lista. Um tipo de cenário cujo resultado não tem eixo de tempo amostrado é recusado com uma mensagem que o diz. A animação é uma apresentação MODELLED dos números da própria execução; o mesmo cenário e as mesmas opções dão arquivos idênticos byte a byte.
list_export_formatsInforma quais formatos de exportação de interoperabilidade se aplicam a um cenário do Kshana, sem executá-lo: um array JSON com uma entrada por formato (czml, kml, geojson, stk, sigmf) que fornece applies, o reason quando não se aplica e spec_url, a especificação publicada que o gravador segue. CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON e as efemérides .e do STK (Systems Tool Kit) descrevem a geometria do cenário; o SigMF (Signal Metadata Format) registra as amostras que um cenário spectrum com um bloco [iq] sintetiza. Chame esta ferramenta antes de export_interop.
export_interopExporta um cenário do Kshana em um formato de interoperabilidade: czml (Cesium Language, para CesiumJS), kml (Keyhole Markup Language, para o Google Earth e ferramentas de sistemas de informação geográfica), geojson (RFC 7946), stk (efemérides .e do Systems Tool Kit, um arquivo por satélite) ou sigmf (gravação em Signal Metadata Format das amostras sintetizadas de um cenário spectrum). O primeiro item de conteúdo é um índice JSON: format, spec_url e files, cada um com seu suffix (o que a linha de comando acrescenta ao nome de saída, por exemplo .czml ou .G01.e), bytes, sha256 e encoding. Os arquivos vêm em seguida, um item de conteúdo cada, na ordem do índice: arquivos utf-8 como seu texto, o arquivo binário de amostras SigMF como base64. Uma campanha exporta cada cenário-membro ao qual o formato se aplica. Um formato que não se aplica é recusado, com o motivo; list_export_formats informa os cinco de uma vez. Os horários são em Tempo Universal Coordenado (UTC); o mesmo cenário dá arquivos idênticos byte a byte.
import_routeGrava uma rota GeoJSON em um cenário do Kshana que percorre uma trilha de waypoints, e retorna o novo TOML do cenário (execute-o com run_scenario). A rota é uma LineString (ou uma Feature / FeatureCollection que contenha uma) de posições de longitude e latitude; ela substitui start_lat_deg, start_lon_deg, step_lat_deg, step_lon_deg e waypoints do cenário. Os tipos de cenário que aceitam uma rota são terrain-nav, terrain-slam, gravity-map e combined-altpnt; qualquer outro tipo é recusado, com o motivo. Forneça as duas extremidades da trilha, ou posições igualmente espaçadas ao longo de uma reta: os tipos de trilha percorrem início + i*passo, de modo que qualquer outra forma é recusada.
export_sp3Exporta a constelação propagada de um cenário orbit como texto de efemérides precisas SP3-c (o formato padrão de pós-processamento GNSS). Retorna erro se o cenário não for de um tipo de cenário orbit.
export_ommExporta os elementos médios de um cenário orbit como um catálogo CCSDS 502.0-B-2 OMM (Orbit Mean-Elements Message) — um OMM por satélite. Retorna erro se o cenário não for de um tipo de cenário orbit.
export_oemExporta a constelação propagada de um cenário orbit como texto de efemérides CCSDS OEM 2,0 — a série temporal de estado inercial (TEME) com posição E velocidade, que ferramentas de dinâmica de voo (GMAT / Orekit / STK) leem. É o complemento com velocidade de export_sp3, que traz apenas a posição. Retorna erro se o cenário não for de um tipo de cenário orbit.
export_table_csvExecuta um cenário do Kshana e retorna sua tabela de reprodutibilidade como texto CSV — a tabela estável byte a byte que a CLI grava como <scenario>.table.csv e que os artigos citam. Apenas estes tipos de cenário emitem uma: realtime-frame-eop, lunar-time-budget, lunar-jamming, telecom-timing, leo-navmsg quando sua análise encode-decode roda sobre um modelo de mensagem kepler16 ou kepler-rac (a tabela de efemérides de broadcast) e moonlight-service-volume quando export_site_lat_deg e export_site_lon_deg estão ambos definidos. Retorna erro para qualquer outro tipo de cenário (ou um cenário inválido); use run_scenario para as figuras de mérito.
sky_geometryGeometria do céu sob um horizonte dependente do azimute (um cânion urbano, um porto, um fiorde, um terminal de contêineres): a partir de um local, de um instante e de predefinições de constelação, de conjuntos de elementos de duas linhas (tle, com um epoch em UTC) ou de satélites dados em azimute/elevação ou em ECEF, quais satélites estão visíveis e quais ficam ocultos pelo horizonte, GDOP/PDOP/HDOP/VDOP/TDOP a partir do núcleo de DOP verificado com o gnss_lib_py, o cofator e a covariância leste-norte-cima com um relógio de receptor por sistema (ou um em comum) e a elipse de erro horizontal a um sigma e a uma confiança declarada para um UERE declarado. Sem request, descreve uma predefinição de horizonte REPRESENTATIVE com sua proveniência e seu corte a cada grau (um skyline_preset vazio as lista). Cenários dos tipos orbit e integrity (com user_site), gnss-sim, jamming, leo-pvt e leo-pass recebem a mesma seção [skyline] por meio de run_scenario. Nível de evidência MODELLED: geometria sob um modelo de erro declarado, apenas linha de visada; não é uma previsão do erro real de um receptor nem um limite de integridade; as constelações predefinidas são um céu representativo, não o céu de uma data; o texto tle com um epoch (UTC) fornece o céu que esses conjuntos de elementos dão naquela época (SGP4), não uma medição, e sky_source diz qual dos dois. Traz o aviso consultivo: não é um equipamento de navegação homologado. Sem Monte Carlo por MCP (amostras em volume; use a CLI, Python ou WASM). Somente em linha, no máximo 4 MiB.
iq_signalsA configuração da camada IQ GNSS, como JSON: signals (os nomes de sinal que iq_scene, iq_acquire e iq_track aceitam), enabled (se as ferramentas de arquivo IQ estão ativadas), work_dir (a única pasta que elas leem e gravam; todo argumento de caminho é relativo a ela), max_samples (o máximo de amostras complexas que uma chamada pode gerar ou processar) e, quando desativada, reason. As amostras IQ nunca trafegam pelo protocolo: as ferramentas recebem caminhos de arquivo no diretório de trabalho e respondem com resumos JSON compactos. A camada IQ não acrescenta síntese de interferência nem de spoofer; nada é transmitido em momento algum. Chame esta ferramenta primeiro.
iq_infoDescreve uma gravação IQ no diretório de trabalho sem processá-la: tipo (bruta com arquivo auxiliar, SigMF, coleção SigMF), formato das amostras, taxa de amostragem, frequência central, total de amostras, duração, arquivos de dados e seu tamanho, limites de captura e número de anotações, como JSON (a mesma linha que kshana iq info imprime). O opcional raw descreve um arquivo bruto sem arquivo auxiliar; o opcional hash acrescenta o SHA-256 de cada arquivo de dados (lê o arquivo inteiro).
iq_sceneGera uma cena IQ GNSS de vários satélites em um arquivo no diretório de trabalho (kshana iq scene). Modo de perfil declarado: signal + prns (+ opcionais dopplers_hz, cn0_dbhz, data). Modo broadcast: nav (um arquivo de navegação RINEX no diretório de trabalho) + rx_pos [lat, lon, alt] posiciona cada satélite GPS saudável em sua geometria real de broadcast. O opcional channel aplica ionosfera, troposfera, cintilação, multipercurso, sombreamento móvel terrestre ou NLOS no nível do sinal. rate_hz × duration_s deve caber no orçamento de amostras (veja iq_signals). Grava a gravação (bruta + arquivo auxiliar <out>.json, ou um par SigMF) e um arquivo auxiliar de verdade; responde com os arquivos gravados e suas contagens de bytes, o número de amostras e a amostragem, e a primeira época da verdade por satélite (fase do código, Doppler, C/N0) para pontuar iq_acquire. A camada IQ não acrescenta síntese de interferência nem de spoofer; nada é transmitido em momento algum.
iq_acquireAquisição por FFT de um ou mais PRNs sobre uma gravação IQ no diretório de trabalho (kshana iq acquire). Lê apenas as amostras de que uma busca precisa (períodos de código coerentes × não coerentes), que devem caber no orçamento de amostras. Os estágios opcionais frontend (passa-banda, notch, blanking, excisão, AGC, quantizador) rodam primeiro. Responde com uma detecção por PRN: acquired, doppler_hz, code_phase_chips, a statistic de pico normalizada, seu threshold de detecção e o peak_ratio; json_out / csv_out também mantêm o resultado completo em arquivos, e surface_out (um PRN; .csv, .json ou .bin) mantém toda a superfície de potência de correlação Doppler × fase do código com o pico e seus refinamentos de Doppler parabólico e de busca fina.
iq_trackAdquire e depois rastreia um ou mais PRNs sobre uma gravação IQ no diretório de trabalho (kshana iq track): a aquisição inicializa cada canal e, em seguida, o banco de malhas DLL/PLL (opcionalmente auxiliado por FLL) reproduz a gravação uma vez. As amostras rastreadas (a gravação inteira, ou os primeiros max_seconds) devem caber no orçamento de amostras. As malhas vêm de design (um arquivo TOML kshana.loop-design/1 no diretório de trabalho, com design_name para escolher um) ou do projeto embutido, e os argumentos de malha o sobrescrevem; reacquire readquire um canal que perde o travamento ou trava em falso. O rastreamento é feito em fluxo, de modo que a memória não cresce com a gravação. Responde com o nome e o hash do projeto, quaisquer warnings (commensurate_sampling: uma taxa de amostragem múltipla de metade da taxa de chips torna o jitter e o viés da malha de código não representativos) e, por canal, o número de épocas, os segundos rastreados, o Doppler e a fase do código finais, o C/N0 final e médio (dB-Hz), as frações de épocas em travamento de fase e de código, locked_at_end, o estado final de travamento, os falsos travamentos detectados e as readquisições. A saída por época vai apenas para arquivos: epochs_out (E/P/L, discriminadores, estados da malha, C/N0, estado de travamento; .csv/.jsonl/.bin), events_out, json_out / csv_out. Um PRN que não foi adquirido é recusado, com sua estatística e seu limiar.
iq_frontendAplica DSP de front-end de receptor e de mitigação de interferência a uma gravação IQ no diretório de trabalho e grava o resultado como uma nova gravação bruta com um arquivo auxiliar <out>.json (kshana iq frontend). stages escolhe qualquer um destes: FIR bandpass_hz [lo, hi], notch adaptativo, supressão de pulsos (blank), excise no domínio da frequência, agc e um quantizador de bits bits (precedido por um AGC automático, a menos que no_agc), sempre nessa ordem. A entrada inteira deve caber no orçamento de amostras. Responde com as amostras processadas e os arquivos gravados com suas contagens de bytes. Esta ferramenta processa uma gravação; não sintetiza nada.
iq_campaignExecuta uma campanha de replay de laboratório mantida no diretório de trabalho (kshana iq campaign): gravações (cada uma descrita por um arquivo kshana.test-conditions/1 que declara a verdade conhecida do laboratório) x cadeias de front-end x projetos de malha, com cada célula rastreada e pontuada em relação às condições declaradas (tempo até a perda de travamento, tempo de readquisição, degradação de C/N0 em relação ao J/S declarado ao lado de uma referência analítica rotulada MODELLED, taxa de falso travamento, jitter de PLL/DLL, disponibilidade). Incremental: uma chamada executa as células pendentes que cabem no orçamento de amostras (ou max_cells), toda célula concluída é mantida e a chamada seguinte retoma. Responde com as contagens de células, as falhas, os arquivos gravados e o digest quando todas as células estiverem concluídas. Pontua apenas dados gravados; não sintetiza nenhuma interferência.
iq_campaign_statusInforma o andamento de uma campanha de replay de laboratório a partir de sua pasta de saída no diretório de trabalho, apenas lendo arquivos: células concluídas e pendentes, as gravações, os front-ends e os projetos do plano, e o digest quando todas as células estiverem concluídas.
iq_sweepReproduz uma gravação IQ no diretório de trabalho em vários projetos de malha de rastreamento e informa o resultado em regime permanente de cada projeto (kshana iq sweep): os projetos são todos os projetos de um arquivo kshana.loop-design/1 (design), ou o produto das listas pll_bws_hz, dll_bws_hz, spacings_chips e coherents sobre o projeto embutido. Cada PRN é adquirido uma vez e cada canal (projeto, PRN) rastreia as mesmas amostras, de modo que cada resultado é exatamente o de executar o projeto isoladamente. Responde com, por projeto e PRN, epochs, phase_jitter_deg e code_jitter_chips (sobre a segunda metade da execução), phase_lock_frac, code_lock_frac, mean_cn0_dbhz e o hash do projeto; json_out / csv_out mantêm a tabela em arquivos. O trecho rastreado deve caber no orçamento de amostras (max_seconds o restringe) e no máximo 256 canais (projeto, PRN) rodam por chamada. Esta ferramenta processa uma gravação; não sintetiza nada.
iq_monitorExecuta os monitores de detecção de interferência e de spoofing sobre uma gravação IQ no diretório de trabalho (kshana iq monitor): os monitores de banda larga power e spectral e, dados signal + prns, os monitores de C/N0 e de qualidade de sinal por satélite, cada um contra uma linha de base aprendida nos primeiros baseline_s segundos (ou a partir de um arquivo de configurações). Responde com as séries (nome e comprimento), todo evento levantado pelos monitores (início, fim, monitor, o que mudou; no máximo 200 na resposta) e as configurações e linhas de base que os monitores aprenderam; json_out mantém o relatório inteiro (todas as séries, eventos e espectros) e csv_prefix grava <prefix>.series.csv e <prefix>.events.csv. O trecho deve caber no orçamento de amostras (max_seconds o restringe). Um evento de monitor diz que uma grandeza medida saiu de sua linha de base aprendida; ele não identifica uma causa nem uma fonte. Esta ferramenta pontua apenas dados gravados; não sintetiza nada. Nível de evidência: MODELLED.
iq_test_conditionsValida um arquivo de condições de teste de laboratório (kshana iq conditions): um arquivo kshana.test-conditions/1, em texto TOML ou JSON, que declara a verdade conhecida do laboratório para uma gravação (os satélites esperados, o tempo de acomodação, o cronograma declarado de jamming ou interferência). Responde com as condições resolvidas e seu hash, ou o motivo pelo qual o arquivo é inválido. Somente embutido: nada é lido do disco, e um caminho de gravação que o arquivo nomeia não é aberto (uma campanha os resolve dentro do diretório de trabalho). A entrada é limitada a 4 MiB.
iq_labfitAjusta o modelo de perda de travamento da malha de rastreamento a execuções de laboratório (kshana iq labfit): um TOML de cenário iq-labfit nomeia uma ou mais execuções, cada uma um log de receptor mais suas condições de teste declaradas; o motor carrega cada log, ajusta os modelos de malha e empírico, aplica bootstrap à incerteza e calcula o erro de conjunto reservado. Tudo é embutido: o log de cada execução fornece text ou base64 (um path é recusado) e a ferramenta não lê nem grava arquivo algum, de modo que não precisa do diretório de trabalho IQ. Alternativamente, o [input] do cenário nomeia campaign = "<out-dir>", uma pasta de saída concluída de kshana iq campaign: a ferramenta então ajusta os modelos de C/N0 e de travamento às suas células pontuadas (um relatório kshana.labfit-iq/1; Q é declarado, nunca ajustado, e o deslocamento de J/S identificável é ajustado; com mode = "validation" é exigida uma tabela [validation]). Essa pasta é resolvida em relação ao diretório de trabalho IQ e deve ficar dentro dele (qualquer coisa fora é recusada); ela é lida, nada é gravado. Responde com o report analisado, os resíduos e as previsões como texto CSV e um resumo em Markdown. A entrada é limitada a 4 MiB. O ajuste descreve as execuções de laboratório fornecidas; não é uma previsão para outros receptores ou condições além do que o relatório declara. Nível de evidência: MODELLED.
assess_vessel_streamPontua um trecho limitado de um fluxo NMEA 0183 de uma embarcação do mesmo modo que kshana receiver-trust live o pontua, e retorna o estado de confiança por época (calibrating, nominal, degraded, untrusted) e a pontuação de 0 a 100 com os monitores que deduziram (esquema JSON-lines live 1,3: cada época traz position, uma declaração advisory de que a saída é consultiva e sua geometry de satélites (good, degraded com motivos como few-satellites ou high-pdop, ou unknown quando o trecho não tem GSV nem GSA) com um label (good, fair, poor; a geometria deduz apenas quando poor); toda dedução traz uma class: geometry (o céu, e não uma constatação de que nenhum ataque ocorreu), environment ou inconsistency (semelhante a ataque)), o resumo (contagens por estado, geometria e classe, pontuação mais baixa e final, quando veio a primeira época untrusted) e a última sentença $PKSHT. session_toml declara a embarcação ([platform] kind = "vessel", seus limites de velocidade, aceleração e taxa de giro, altura da antena, se há um sensor de rumo no barramento). O trecho deve conter a janela de calibração; a entrada é limitada a 2 MiB e 20.000 épocas, e a resposta traz no máximo 200 linhas de épocas degraded ou untrusted. Esta é a forma limitada do comando live: nenhum soquete é aberto e nada é gravado em uma porta, e o portão e os exportadores de telemetria (o processo de longa duração e seu servidor --listen) existem apenas na linha de comando. As verificações não conseguem ver um spoofer cuja posição seja consistente com tudo o que há no barramento. Apenas consultivo: não é um equipamento de navegação homologado; o operador continua responsável. Nível de evidência: MODELLED.
jammertest_importLê o catálogo de testes e o plano de transmissão publicados do Jammertest (NPRA/jammertest-plan, MIT) como verdade programada (kshana jammertest import): os intervalos de uma área de teste tornam-se eventos de receiver-trust, com o id do catálogo e o ano em cada rótulo. plans contém um arquivo de plano por dia, log_start_utc é a primeira época do log, local_offset_h a defasagem do plano em relação ao UTC (padrão 2, CEST). Retorna events_toml (acrescente-o a uma sessão de receiver-trust), events (id do teste, tipo, início e fim em segundos desde o início do log) e as contagens dos ignorados. Os eventos são intervalos PLANEJADOS, e não horários de transmissão registrados: um intervalo pode começar tarde ou nunca ser executado, e o campo status do plano está quase sempre vazio. Nenhum campo de contato ou pessoal do plano é lido. A entrada é limitada a 4 MiB por texto. Nível de evidência: MODELLED.
jammertest_scorePontua um log de receptor contra o cronograma do Jammertest (kshana jammertest score): para cada teste programado, a latência de detecção (primeiro alarme menos o início planejado), se foi detectado dentro da tolerância, tarde ou perdido, e o tempo de recuperação (um trecho sem alarme de recover_hold_s), além dos alarmes falsos fora de todo intervalo e de sua margem de guarda. session_toml precisa apenas de [log] format = "ubx" (ou rinex, android, nmea, sbf); forneça o log como log (formatos de texto) ou log_base64 (binário). Precisa do JSON do catálogo e do plano (catalog_json, plans) e da área de teste (location). Retorna o placar: tests, summary, baseline_contaminated e um rótulo MODELLED. O cronograma são intervalos planejados, e não horários de transmissão registrados, de modo que uma perda pode ser um teste que nunca foi executado. Um pacote de evidências assinado precisa de uma chave de assinatura: use a linha de comando (kshana jammertest score --key). A entrada é limitada a 4 MiB por texto. Apenas consultivo: não é um equipamento de navegação homologado; o operador continua responsável. Nível de evidência: MODELLED.
assess_vessel_logAvalia um registro NMEA 0183 de uma embarcação como execução em lote (kshana receiver-trust com [platform] kind = "vessel"): o modelo de pontuação, os monitores executados e a pontuação de 0 a 100 de cada época com suas deduções, a geometria de satélites (boa, degradada, desconhecida) com um label (good, fair, poor) em cada época, com a geometria deduzindo apenas quando ruim, e uma classe em cada dedução (geometria, ambiente, inconsistência), com geometry_model (limiares, o teto e o piso em vigor, e a procedência) e geometry_summary. session_toml declara os limites da embarcação e quaisquer configurações de monitor ou de pontuação (nenhuma tabela [log] é necessária) e nmea é o texto do log, o que evita colá-lo dentro de uma string TOML. A entrada é limitada a 4 MiB; a resposta traz o documento com epochs reduzido a contagens por estado e no máximo 200 épocas degradadas ou untrusted. Para um log em outro formato, ou com [[events]] a pontuar, use assess_receiver_log. Apenas consultivo: não é um equipamento de navegação homologado; o operador continua responsável. Nível de evidência: MODELLED.
generate_training_nmeaGera NMEA 0183 sintético de passadiço para treinamento de tripulações, a partir de um TOML nmea-scenario (kshana nmea-scenario): uma derrota de embarcação e uma linha do tempo de eventos roteirizados (jamming, arrasto de posição, falsificação de tempo, atraso de replay, com recuperação). Retorna o conjunto de sentenças com checksum válido (GGA, RMC, VTG, GSV, GSA, GNS, ZDA, HDT, VBW; as primeiras 2000 linhas) e o log do instrutor (o que foi injetado e quando, com a derrota verdadeira e um summary de nível superior de velocidades e acelerações de pico; os eventos de arrasto trazem sua velocidade e aceleração de arrasto de pico; esquema kshana-nmea-training/1) como JSON e texto. O teto de satélites visíveis do receptor é receiver.max_used (padrão 12). Determinístico por seed. SOMENTE TEXTO: nada aqui sintetiza RF, IQ ou qualquer forma de onda, nada é transmitido, e a saída serve para treinamento e teste, nunca para os sistemas de navegação em operação de uma embarcação (uma sentença marcadora no fluxo o diz). Consultivo, não é um equipamento de navegação homologado. O envio em fluxo para um endereço TCP ou UDP existe apenas na linha de comando. Quatro cenários de exemplo acompanham em scenarios/training/.
create_evidence_packCria um pacote de evidências assinado para uma janela de um registro NMEA 0183 de uma embarcação (kshana receiver-trust evidence): os bytes brutos do log da janela, a configuração com todos os limiares, os resultados e motivos por época, uma página de resumo autocontida e um manifesto que lista o SHA-256 de cada arquivo com o hash do log completo e uma cadeia de hashes, assinado com Ed25519. from_s/to_s são segundos desde a primeira época do log. Retorna os arquivos como JSON (passe-os a verify_evidence_pack), a chave pública e a impressão digital do signatário. A semente de assinatura nunca é retornada nem registrada; se signing_key_seed_hex for omitido, uma chave de uso único é usada e descartada, de modo que o pacote prova a integridade em relação à chave que ele mesmo nomeia, e não quem o assinou: para uma chave que importa, crie o pacote na linha de comando (uma semente passada aqui trafega pela conversa). A entrada é limitada a 4 MiB e a resposta a 4 MiB (restrinja a janela). Um pacote é um registro técnico do que o motor calculou a partir de um log sob configurações declaradas; não é um parecer jurídico, uma constatação de fato sobre qualquer evento nem uma certificação. Nível de evidência: MODELLED.
create_round_trip_packCria o pacote assinado de ida e volta de laboratório (kshana evidence round-trip, docs/spec/TEST-CONDITIONS.md): vincula por hash o cenário que produziu o movimento, o documento kshana.test-conditions/1 do laboratório, o log do receptor e sua pontuação em relação aos eventos declarados, em um pacote de evidências assinado cujo config.json traz um bloco round_trip. Recusa um pacote cujas condições e eventos de pontuação discordem, ou cujo SHA-256 declarado do log não seja o do log. SEM SINAL: nada é gravado, reproduzido ou programado; como o movimento de um cenário chegou ao receptor é responsabilidade do operador e é registrado apenas como declarado. A semente de assinatura nunca é retornada nem registrada; se omitida, uma chave de uso único é usada e descartada (integridade, não identidade). A entrada é limitada a 4 MiB e a resposta a 4 MiB. Um registro técnico, não um parecer jurídico nem uma certificação. Nível de evidência: MODELLED.
verify_evidence_packVerifica um pacote de evidências assinado (kshana evidence verify): o SHA-256 de cada arquivo contra o manifesto, a cadeia de hashes, a assinatura Ed25519 e, com public_key (a chave do signatário, obtida do signatário por outra via), que o signatário é o esperado, e, com full_log, que o log que você possui é o que o pacote registra e que o trecho veio dele. Retorna o relatório: ok, cada falha por código e arquivo, cada verificação, signer_pinned, observações e um verdict: verified (signatário fixado), intact-signer-not-pinned (tudo confere, mas nenhuma public_key confiável foi fornecida, de modo que a assinatura prova apenas que o pacote está íntegro em relação à chave que ele mesmo nomeia, que qualquer pessoa pode gerar; diga isso, não o chame de verificado) ou failed, com uma message para mostrar ao usuário. require_timestamp reprova um pacote que não traz token de carimbo de tempo. As entradas são limitadas a 4 MiB. Uma verificação bem-sucedida diz que o registro não foi alterado e quem o assinou (a chave que você forneceu); ela não diz o que causou qualquer evento, quem é responsável, nem que o log mostra o que o receptor de fato recebeu.
build_interference_mapConstrói um mapa de interferência GNSS a partir de relatórios de posição de aeronaves (ADS-B NIC/NACp) ou navios (AIS) de licença aberta, fornecidos como texto CSV (kshana interference-map adsb|ais). Retorna um documento GeoJSON por dia UTC (esquema kshana-interference-map/v1) (nomes de arquivo <source>-<dataset>-<date>.geojson; versão do método 2) no qual cada célula de grade publicada é degraded, not_degraded, insufficient_sample, withheld_day_confounded ou withheld_no_background (ADS-B) ou anomalous/not_anomalous (AIS), com o método, seus limiares fixados antecipadamente, a licença do conjunto de dados e a atribuição embutidos. Toda contagem por célula abaixo do mínimo de publicação (5) é null (retida, nunca zero), e um dia cujo fundo não pode ser estimado retém suas classificações. Apenas agregado: os identificadores passam por hash em memória e nunca são retornados, e uma célula com menos de 5 aeronaves ou embarcações distintas não é publicada. dataset é uma predefinição da lista permitida ou custom (com licence, licence_url, attribution). A entrada é limitada a 4 MiB e a resposta a 4 MiB (use um cell_deg mais grosseiro ou a linha de comando para mais). Nada é buscado: polígonos de terra, se desejados para AIS, são passados. Uma célula degradada não identifica interferência como a causa; uma célula não publicada não é evidência de uma célula livre; isto não é uma previsão. Nível de evidência: MODELLED.
route_exposureResume quanto de uma rota passa por células degradadas de um ou mais mapas de interferência (kshana route-exposure): para cada mapa (um por fonte por dia UTC, o GeoJSON que build_interference_map retorna), o comprimento da rota e as parcelas desse comprimento em células degradadas, em células que não estavam degradadas, em células com amostra insuficiente para avaliação e em células não observadas. A rota é um LineString GeoJSON ou texto CSV lat,lon; date_from/date_to (YYYY-MM-DD) mantêm os mapas de um intervalo de datas. A entrada é limitada a 4 MiB por item. Células não observadas não são evidência de uma rota livre; uma célula degradada não identifica interferência como a causa; isto descreve relatórios passados e não é uma previsão. Nível de evidência: MODELLED.
compliance_reportPreenche o mapeamento de referenciais públicos a partir de documentos de resultado do Kshana (kshana compliance-report): quais linhas de seis referenciais e normas de resiliência (o referencial Resilient PNT v2.0 do DHS dos EUA, as orientações da IMO para navios, as orientações da EASA para aviação, NIS2 Artigo 21, EN 16803, NIST IR 8323r1) as execuções fornecidas fornecem evidências em apoio de, quais não fornecem, e a lacuna que cada linha mantém. Passe cada execução como label, result (o texto JSON do resultado) e, quando o tiver, scenario (o TOML do cenário, que nomeia o tipo de cenário que um resultado não nomeia; um resultado de receiver-trust não precisa de nenhum). No máximo 64 execuções e 4 MiB no total; nada é lido do disco. O status de cada linha é evidenced, partly-evidenced, not-evidenced ou out-of-scope, e toda linha mantém seu gap mesmo quando evidenciada; entradas que não puderam ser usadas são listadas em unrecognised e não contam para nada. Mostre o statement do relatório com qualquer resultado, literalmente: um status significa que uma execução fornece evidências em apoio das capacidades que a linha nomeia; não é uma constatação de que um referencial é atendido, e não significa que algum produto tenha sido classificado ou aprovado por quem quer que seja. Não descreva a saída em termos mais fortes. Nível de evidência: MODELLED.
compliance_mappingO mapeamento estático de referenciais públicos (kshana compliance-report --mapping / --sources) em Markdown: uma tabela por referencial, com a exigência parafraseada de cada linha, as saídas do Kshana que fornecem evidências em apoio dela e a lacuna que as saídas não fecham; ou, com sources verdadeiro, os documentos-fonte citados pelas tabelas, com versões e URLs. Encabeçado pela declaração que todo relatório traz, a qual permanece com qualquer trecho: uma linha marcada como evidenciada significa que uma execução fornece evidências em apoio das capacidades que a linha nomeia; não é uma constatação de que um referencial é atendido, e não significa que algum produto tenha sido classificado ou aprovado por quem quer que seja. Não precisa de execuções.
fit_imu_logAjusta os parâmetros de sensor dos cenários hybrid e fusion a partir de um registro de IMU estacionário (kshana imu-fit, docs/MACHINE-INPUTS.md). Esses cenários recebem parâmetros de ruído, e não uma série temporal: esta ferramenta os extrai de um registro gravado com o sensor mantido parado, pelo desvio de Allan sobreposto do sinal integrado. Retorna JSON: fit (viés do acelerômetro, PSD de passeio aleatório de velocidade q_va, viés do giroscópio, PSD de passeio aleatório de ângulo q_arw, piso de instabilidade de viés quando o registro é longo o bastante para mostrar um, a taxa e a duração do registro, as inclinações iniciais de Allan e notes sobre o que não pôde ser ajustado ou considerado confiável), toml (uma tabela [accel_classical] cuja procedência nomeia o SHA-256 do registro, pronta para colar em um cenário) e sha256. Um registro que não era estacionário, ou é curto demais ou amostrado de forma irregular, dá parâmetros errados ou é recusado; as inclinações (cerca de -0.5 onde o ruído branco domina) mostram qual dos casos. Nada é gravado em disco. Nível de evidência: MODELLED (o estimador aplicado ao registro, sem referência independente externa).
list_standards_packsLista os pacotes de normas (kshana standards-pack list): conjuntos de cenários pontuados para os perfis de teste do referencial Resilient PNT do DHS, a IMO MSC.1/Circ.1575 e o ICAO Doc 9849 Apêndice F, cada um com os limiares que declara antes da execução e as linhas de compliance para as quais fornece evidências em apoio. Não precisa de entrada. Um pacote mede cenários modelados contra limiares declarados; não classifica nenhum produto. Nível de evidência: MODELLED.
run_standards_packExecuta um pacote de normas (kshana standards-pack run <id>): todos os cenários dele, pontuados contra limiares declarados antes da execução. Retorna o relatório (cada teste MET, NOT MET ou NEEDS INPUT quando precisa de um log de receptor e não é pontuado; cada limiar com seu valor medido e esperado) e o mesmo em markdown. Passe o JSON do relatório a compliance_report para ver as linhas para as quais o pacote fornece evidências em apoio. Diga com clareza que um limiar MET significa que um cenário modelado atingiu um limiar declarado, e que um NOT MET é um resultado registrado; nunca descreva a saída como mostrando que um produto ou um referencial é atendido. Apenas consultivo: saída de análise, não um equipamento de navegação homologado. Nível de evidência: MODELLED.
lunanet_afs_checkVerifica o LunaNet Augmented Forward Signal (AFS) em relação à especificação publicada, fixada em LNIS Version 5 Applicable Document 1 Volume A (LSIS-AFS V1.0, 29 de janeiro de 2025) (kshana lunanet-afs-check, docs/LUNANET-AFS.md). O modo spec verifica esta implementação contra as tabelas de código impressas no documento (os primeiros e os últimos 24 chips de cada código AFS-I Gold, AFS-Q Weil e terciário para os PRNs 1 a 210, e ambas as sequências de Legendre) e contra exemplos resolvidos (SB1 BCH, CRC-24Q), limiares B1 a B10 de um pré-registro; B4 relata uma falha (o documento imprime os mesmos últimos 24 chips para os PRNs terciários 147 e 151). O modo symbols verifica um fluxo de símbolos de decisão abrupta (texto de 0 e 1) quanto ao padrão de sincronização, decodificação de SB1, FID, continuidade de TOI e espaçamento de quadros. Os subquadros 2 a 4 (LDPC de taxa 1/2, CRC-24Q) NÃO são verificados: as matrizes LDPC estão em um anexo separado que não foi implementado. O modo generate retorna um fluxo de teste com subquadros provisórios: símbolos, não uma forma de onda; o Kshana não grava nenhum sinal. VALIDATED apenas contra as tabelas impressas dessa edição, que o próprio documento marca como TBC; diga isso, e não descreva um resultado como mostrando que algum nó ou serviço LunaNet está correto. Apenas consultivo.
score_benchmarkPontua uma submissão ao kshana-bench (kshana bench score, bench/SPEC.md, docs/BENCH.md): um arquivo de previsões (kshana-bench-predictions/1) contra um arquivo de verdade (kshana-bench-truth/1), ambos em texto JSON, de no máximo 4 MiB cada, e retorna o arquivo de resultado (kshana-bench-result/1) com a versão da especificação, a tarefa (a detecção em logs de receptor, b detecção em IQ, c previsão de holdover de temporização, d lacuna de otimismo fora da distribuição), a divisão, o SHA-256 de ambas as entradas e as métricas da tarefa (AUC, probabilidade de detecção com um teto de alarmes falsos, RMSE por horizonte, ou a lacuna de otimismo). threshold é o limiar de alarme declarado das tarefas a e b. Nada é lido do disco nem gravado. Toda pontuação é MODELLED e descreve um log ou um corpus, nunca um produto; não é uma certificação, e nenhuma organização é endossada por uma pontuação. Nível de evidência: MODELLED.
render_leaderboardRenderiza arquivos de resultado do kshana-bench (kshana bench leaderboard) como a página estática do leaderboard, em texto HTML na resposta: results é uma lista de textos JSON kshana-bench-result/1 (no máximo 256, 4 MiB cada), cada um validado antes; um arquivo pontuado sob outra versão principal da especificação é recusado, porque resultados de versões principais diferentes nunca são colocados em uma só tabela. Uma linha diz que este arquivo obteve este número nesta divisão; não significa que algum produto tenha sido classificado ou aprovado por quem quer que seja. Nada é gravado. Nível de evidência: MODELLED.
trust_telemetryRenderiza um fluxo de confiança GNSS ou um resultado de receiver-trust como texto de telemetria de segurança (kshana trust-telemetry, docs/TRUST-TELEMETRY.md), com os mesmos codificadores que a linha de comando usa: prometheus (a exposição do estado final), cef ou leef (uma linha de syslog RFC 5424 por mudança de faixa, ou por época com syslog_all; sem carimbo de tempo, porque nenhum relógio é lido) ou otlp (a carga de métricas JSON OTLP/HTTP). input_kind é jsonl (padrão) ou result; uma linha de fluxo que não é analisada é ignorada e contada em kshana_trust_input_errors_total. Nada é enviado, servido ou gravado: a saída é texto na resposta (os exportadores em execução, que são um processo, ficam na linha de comando). A posição informada pelo receptor é omitida, a menos que expose_position seja verdadeiro. Uma entrada que traz geometria de satélites (esquema live 1,3, resultados a partir de 0,36) acrescenta o rótulo de geometria (good, fair, poor; nunca pontuada, exceto quando poor) e o status, HDOP, PDOP, VDOP e os satélites usados, e um rótulo class (geometria, ambiente, inconsistência) em cada motivo; uma entrada mais antiga é renderizada exatamente como antes. Apenas consultivo: o Kshana não é um equipamento de navegação homologado (IEC 61108, IEC 61162) e o operador continua responsável. Nível de evidência: MODELLED.
export_test_benchExporta o movimento do veículo e os eventos de um cenário para um simulador GNSS de laboratório (kshana bench-export, docs/TEST-BENCH.md): um CSV de movimento e sua descrição em JSON (posição terrestre fixa e geodésica, velocidade, atitude, UTC), sentenças NMEA 0183 GGA/RMC, um texto de waypoints quando a grade de amostras é regular em milissegundos, e os eventos do cenário como CSV e como TOML [[events]] para um cenário receiver-trust. Aplica-se a gnss-ins (suas interrupções do estado de navegação são os eventos), jamming e gnss-sim; outro tipo de cenário é recusado, com o motivo. epoch é o instante UTC do tempo de movimento zero, YYYY-MM-DDTHH:MM:SS (padrão 2024-01-01T00:00:00Z). Nada é gravado em disco: o primeiro item de conteúdo é um índice JSON (files com suffix, bytes, sha256; notes em qualquer arquivo omitido; notice), seguido pelo texto de cada arquivo na ordem do índice. O mesmo cenário e a mesma época dão arquivos idênticos byte a byte. SEM SINAL: nada do que é exportado é, modela ou comanda um sinal de radiofrequência ou de banda base, e um evento é um intervalo rotulado, não uma receita para produzir interferência; o simulador e seu operador fornecem os sinais e são responsáveis por executá-los apenas onde for permitido. Mantenha o aviso junto com os arquivos. O Kshana não publica resultados dessas execuções. Nível de evidência: MODELLED.
attach_evidence_timestampVincula um token de carimbo de tempo RFC 3161 a um pacote de evidências (kshana evidence attach-timestamp), em memória: files é um pacote como o retornado por create_evidence_pack, token_base64 são os bytes do arquivo .tsr de uma autoridade de carimbo de tempo. O token é armazenado como timestamp.tsr ao lado do manifesto assinado, e não dentro dele, e o pacote com o token ainda deve ser verificado, ou nada é anexado; um token existente é mantido, a menos que replace seja verdadeiro. Retorna os files atualizados (passe-os a verify_evidence_pack com require_timestamp verdadeiro para exigir que o token esteja presente) e as observações de verificação. Isto NÃO verifica a assinatura da autoridade de carimbo de tempo no token nem o certificado da autoridade (verifica a estrutura do token e se o seu message imprint é o hash do manifest.json deste pacote): diga isso e indique ao usuário openssl ts -verify. A entrada e a resposta são limitadas a 4 MiB. Um carimbo de tempo mostra que um hash existia em um momento que a autoridade declara; não é um parecer jurídico. Nível de evidência: MODELLED.
Uma tabela, gerada a partir do packaging/channels.json do repositório e conferida com os seus READMEs, de modo que cada comando é o que o README mostra, fixado em v0.40.0. Binários pré-compilados para cada sistema operacional, a extensão do assistente de desktop, botões de um clique para Cursor e VS Code, lançadores npx e uvx, Homebrew, Scoop e winget, os registros e um modo HTTP auto-hospedado. Os canais marcados como quando publicado entram no ar com o lançamento.
O motor sozinho, na linguagem ou no lugar em que se trabalha.
Para qualquer pessoa, sem nada a instalar. Requer: nada.
O motor é executado localmente como WebAssembly; nada é enviado.
Para engenheiros que querem o comando kshana. Requer: Rust.
Fixado em v0.40.0cargo install kshana --version 0.40.0
Depois, verifiquekshana --version
Para desenvolvedores Rust que embutem o motor. Requer: Rust.
Fixado em v0.40.0cargo add kshana@0.40.0
Depois, verifiquecargo tree --depth 1 | grep kshana
Para analistas e notebooks. Requer: Python.
Fixado em v0.40.0pip install kshana==0.40.0
Depois, verifiquepython -c "import kshana; print(kshana.version())"
Para desenvolvedores web e Node.js. Requer: Node.
Fixado em v0.40.0npm install kshana@0.40.0
Depois, verifiquenpm ls kshana
Consultivo, não é um equipamento de navegação homologado: o operador continua responsável pela navegação. O servidor roda no seu computador; nada é enviado à Ashforde OÜ.
Para quem usa um assistente compatível com MCP. Requer: Rust 1,88+.
Fixado em v0.40.0cargo install kshana-mcp --version 0.40.0
Depois, verifiquecargo install --list | grep kshana-mcp
Para quem não tem toolchain Rust; o servidor MCP em um contêiner. Requer: Docker.
Fixado em v0.40.0docker run --rm -i ghcr.io/ashfordeou/kshana-mcp:0.40.0
Depois, verifiquedocker image inspect ghcr.io/ashfordeou/kshana-mcp:0.40.0 --format '{{.Id}}'
Registro de contêineres do GitHubGuia do servidor MCP: Docker
Para usuários do assistente de desktop, sem terminal. Requer: nada.
macOS (Apple silicon)macOS (Intel)WindowsLinux (x86-64)Linux (Arm)
Clique duas vezes em kshana-mcp-<target>.mcpb.
Para usuários do Cursor. Requer: Node ou Docker.
Fixado em v0.40.0kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0
Para usuários do VS Code e do Insiders. Requer: Node ou Docker.
Fixado em v0.40.0kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0
Instalar no VS Code (npx)Instalar no VS Code (Docker)Instalar no VS Code Insiders (npx)
Para usuários de Node, qualquer cliente MCP. Requer: Node 18+.
Fixado em v0.40.0kshana-mcp@0.40.0
Depois, verifiquenpx -y kshana-mcp@0.40.0 --version
Um lançador: baixa o binário da release, verifica o SHA256SUMS e o executa.
Para usuários de Python, qualquer cliente MCP. Requer: Python 3,9+ com uv ou pipx.
Fixado em v0.40.0kshana-mcp==0.40.0
Depois, verifiqueuvx kshana-mcp==0.40.0 --version
Para macOS e Linux. Requer: brew.
Fixado em v0.40.0formula for v0.40.0
Depois, verifiquekshana-mcp --version
Para Windows. Requer: Scoop.
Fixado em v0.40.0manifest for v0.40.0
Depois, verifiquekshana-mcp --version
Para Windows. Requer: winget.
Fixado em v0.40.0winget install AshfordeOU.KshanaMcp --version 0.40.0
Depois, verifiquekshana-mcp --version
Aparece quando a Microsoft incorporar o envio.
Para quem não usa gerenciador de pacotes. Requer: nada.
Baixe kshana-mcp-<target> da release e confira-o com o SHA256SUMS.
Para clientes MCP que usam registro. Requer: um cliente que use registro.
Pesquise io.github.ashfordeOU/kshana-mcp.
Para clientes que aceitam uma URL. Requer: um host próprio.
Fixado em v0.40.0v0.40.0
Loopback por padrão; um bind fora do loopback exige --allow-remote e um token bearer. O Kshana não hospeda nenhum endpoint.
Plugins e imagens que levam o Kshana a outras ferramentas.
Para usuários de IntelliJ, PyCharm e CLion. Requer: uma IDE da JetBrains.
Settings → Plugins → Marketplace → busque "Kshana" (ID do plugin dev.kshana.ide). Clique com o botão direito em um .toml de cenário e escolha Run Kshana Scenario.
Para proprietários de barcos que rodam um servidor Signal K. Requer: Node, um servidor Signal K.
Fixado em v0.40.0npm install signalk-kshana-trust@0.40.0
Depois, verifiquenpm ls signalk-kshana-trust
Para usuários de plotters de carta do OpenCPN. Requer: OpenCPN 5,8+.
Baixe o tarball do plugin da release. A release traz o tarball e seu XML de metadados de catálogo; a listagem no catálogo do OpenCPN é um pull request aberto à mão.
Para operadores que rodam o Grafana. Requer: Grafana.
Importe kshana-grafana-*.json da release.
Para implantações de gate e de bench. Requer: Docker.
Fixado em v0.40.0docker pull ghcr.io/ashfordeou/kshana-reference-build:0.40.0
De uma aba do navegador a uma suíte de regressão de integração contínua (CI). Toda porta executa o mesmo motor e grava o mesmo resultado JSON, o mesmo gráfico SVG (Scalable Vector Graphics) e o mesmo relatório HTML (HyperText Markup Language). Escolha uma; todo comando é real e se copia com um clique.
Qualquer cenário incluído, executado na sua máquina como WebAssembly; nada instalado, nada enviado. Ajuste-o, compare execuções, varra um parâmetro e exporte um relatório reprodutível.
Apenas o Kshana Studio, para uma página de curso ou um relatório, com o cenário e a visualização pré-selecionados
studio/index.html?embed=1&scenario=integrity-raim&tab=timeserieskshana <scenario>.toml grava result.json, chart.svg e report.html
A saída é determinística a partir do cenário, da semente e da versão do motor, de modo que um result.json versionado é um teste de regressão (CI: integração contínua): execute de novo e compare as diferenças
kshana --study: uma suíte de cenários em um único study.json e study.html carimbados, gratuito. Não é o estudo personalizado pago.
kshana::api::run_toml retorna JSON, SVG, um resumo e CSV (valores separados por vírgula)
kshana.run e run_full, além de validate_toml e list_kinds
run, summary e chart_svg no navegador ou no Node.js
49 ferramentas que um assistente de IA pode chamar, cada uma um invólucro fino sobre a API pública
O servidor MCP sem toolchain Rust, multiarquitetura
Clique com o botão direito em um .toml de cenário, Run Kshana Scenario, e leia as figuras em uma janela de ferramentas
A linha de comando, os bindings de Rust, Python e JavaScript e os formatos de arquivo que o motor lê e grava, lado a lado. Tudo aqui é o núcleo aberto gratuito.
kshana --helpA partir do bináriokshana <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 | --versionUma execução grava result.json, chart.svg, report.html, report.json, table.csv ao lado do cenário; --export-sp3, --export-omm e --export-oem gravam arquivos de órbita; --animate também grava a execução como algo que se move (animation.svg, animation.html, frames: um SVG animado, um player HTML autocontido ou uma pasta de quadros numerados), com --animate-fps e --animate-duration para a taxa e a duração da reprodução; --export grava a geometria do cenário ou seu sinal sintetizado para outras ferramentas: CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON (JSON geográfico), um arquivo de efemérides STK (Systems Tool Kit), SigMF (Signal Metadata Format); --import-route lê uma rota desenhada como uma linha GeoJSON; --eop injeta parâmetros de orientação da Terra de um arquivo finals2000A; --study executa uma suíte gratuita de cenários em study.json e study.html; kshana kinds --json lista todos os tipos de cenário com seus campos; kshana example imprime um cenário para começar. Os resultados podem trafegar no envelope Kshana Interchange Format (KIF). O servidor MCP expõe as exportações de órbita como ferramentas.
kshana --study é o executor de suítes gratuito. Se preferir que a análise seja feita por outra pessoa, isso é um estudo personalizado pago.
result.json, chart.svg, report.html e o mesmo relatório como report.json, além de uma tabela CSV (valores separados por vírgula) para os tipos de cenário que publicam uma. Sob demanda, também grava uma animação da execução (--animate) e o cenário nos formatos que outras ferramentas leem (--export).Cada programa executa o cenário incluído clock-holdover (grave-o com kshana example clock-holdover > clock-holdover.toml) e imprime o mesmo resumo de uma linha. Os READMEs dos pacotes trazem as versões completas.
cargo add kshanause 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 também tem run_scenario, validate_scenario, list_scenario_kinds e os exportadores de órbita. Documentação do Rust
pip install kshanaimport json, kshana
toml = open("clock-holdover.toml").read()
result = json.loads(kshana.run(toml)) # the full result document
print(result["quantum"]["fom"]["integrity"])
result_json, chart_svg, summary = kshana.run_full(toml)
print(kshana.version(), summary)O pacote também tem validate_toml e list_kinds. Documentação do Python
npm install kshanaimport { readFileSync } from "node:fs";
import { createRequire } from "node:module";
import { initSync, run, summary, version } from "kshana";
const wasm = createRequire(import.meta.url).resolve("kshana/kshana_bg.wasm");
initSync({ module: readFileSync(wasm) }); // in a browser: await init()
const toml = readFileSync("clock-holdover.toml", "utf8");
const result = JSON.parse(run(toml)); // the full result document
console.log(version(), result.classical.fom.timing_p95_ns);
console.log(summary(toml)); // the one-line result stringO mesmo pacote roda no navegador; é o que o Kshana Studio usa. Documentação do npm
Formatos que o motor trata hoje, a partir da página de normas do repositório (Documentação: normas). Abra uma linha para ver como alcançá-lo e contra o que foi verificado.
--export-oem, MCP export_oem--export-omm, MCP export_omm--export-sp3, MCP export_sp3space-packetpvtorbit--eop com um arquivo finals2000Aexport_table_csvO plugin "Kshana — PNT simulator": clique com o botão direito em qualquer cenário .toml, escolha Run Kshana Scenario e leia as figuras de mérito em uma janela de ferramentas.
kshana bench score transforma um arquivo de submissão e a verdade de uma divisão em um arquivo de resultado, e kshana bench leaderboard renderiza arquivos de resultado em uma página estática. Nada é executado em seu nome e nada é enviado.