Tradução automática, não revista por um falante nativo. O inglês é a referência.

Programadores

Um só motor. Todas as portas de entrada.

Um só motor Rust para a resiliência GNSS (Global Navigation Satellite System) e PNT (posicionamento, navegação e temporização): uma interface de linha de comandos (CLI), pacotes 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.

Terminal · kshana v0.40.0 Execução registada
The recorded session plays here with JavaScript.
Comandos reais, saída real, reproduzidos tal como foram capturados. Na saída: SVs, veículos espaciais (satélites); J/S, relação jammer-sinal; thr, limiar; RAIM, monitorização autónoma de integridade pelo recetor; SQM, monitorização da qualidade do sinal; p95, o percentil 95.

Versão v0.40.0 92 tipos de cenário 49 Ferramentas MCP AGPL-3.0 ou licença comercial Gerado a partir do repositório
01Instalação · Assistentes de IA

Instalação numa só linha. Ou nenhuma.

Gerado a partir dos manifestos do repositório e verificado face aos seus READMEs, para que todos os comandos correspondam à v0.40.0. O kshana-mcp dá ao seu assistente de IA o mesmo motor: um cenário TOML (Tom's Obvious, Minimal Language) à entrada, JSON (JavaScript Object Notation) e CSV (valores separados por vírgulas) à saída.

InstalarA partir dos manifestos

Para qualquer pessoa, sem nada para instalar.

O motor corre localmente como WebAssembly; nada é carregado para servidores.

Motor RustAGPL-3.0 ou licença comercialLista de materiais de software e proveniência da compilação em cada versão

Assistente de IA + kshana-mcp Sessão registada

As mensagens que um assistente troca com o kshana-mcp, capturadas do servidor.

A sessão gravada decorre aqui passo a passo.

A mesma execução no Studio: Motor v0.40.0 · clock-holdover.toml · semente 42Abrir no Kshana StudioRelatório

49 ferramentas sobre a API pública do Kshana (interface de programação de aplicações), no registo oficial MCP como io.github.ashfordeOU/kshana-mcp. Exportações de órbita: SP3 (Standard Product 3) e CCSDS (Consultative Committee for Space Data Systems) OMM e OEM (mensagens de elementos médios orbitais e de efemérides, TEME: referencial True Equator, Mean Equinox). Registe-o em Assistente de IA (servidor MCP) ou Imagem Docker. Documentação do servidor MCP

run_scenario

Executa um cenário de resiliência PNT do Kshana a partir de uma definição TOML e devolve as suas figuras de mérito. Devolve o resumo legível por humanos seguido do JSON completo do resultado (FoM, curvas). O Kshana valida modelos SGP4/SDP4, referenciais IAU, desvios de Allan, disponibilidade GNSS/DOP, níveis de proteção ARAIM, fusão GNSS/INS e de sensores quânticos face a referências publicadas. Todos os tipos de cenário são executados através desta única ferramenta, incluindo spectrum (espetro de radiofrequência e cascata), solar-system, constellation-design e body-pnt (constelações em torno de qualquer corpo), campaign (fases encadeadas, varrimentos de parâmetros, conjuntos de Monte Carlo e cenários compostos) e os tipos de navegação em órbita terrestre baixa leo-signal, leo-pass, leo-navmsg, leo-pvt, leo-ppp, ntn-positioning e leo-pnt-chain. O conteúdo é em linha: um campo de cenário que indique um ficheiro é recusado, e um cenário tem no máximo 4 MiB. Chame primeiro list_scenario_kinds para descobrir os tipos de cenário e os seus campos, e list_example_scenarios / get_example_scenario para um cenário completo e executável de um tipo.

list_scenario_kinds

Lista todos os tipos de cenário Kshana incorporados com a sua descrição e os campos TOML obrigatórios/opcionais, como matriz JSON. Use-a para descobrir que cenários podem ser executados e como construir um TOML de cenário válido para run_scenario.

validate_scenario

Verificação prévia de um TOML de cenário Kshana: confirma que é analisado como TOML e deteta o seu tipo de cenário, sem o executar. Devolve o tipo detetado, ou um erro descritivo para um TOML malformado. (run_scenario efetua a validação completa ao executar o cenário.)

assess_receiver_log

Avalia a confiança num registo real de um recetor GNSS: lê um registo u-blox UBX, RINEX 3 (opcionalmente com navegação por difusão, o que acrescenta a solução de posição própria do motor, o RAIM e um monitor assistido pelo relógio), Android GnssLogger ou NMEA, executa os monitores de confiança (queda da densidade de portadora-ruído, AGC, indicador de jamming, perda de bloqueio, salto de posição, RAIM, relógio) face a uma linha de base de calibração e devolve quando e porquê o recetor deixou de merecer confiança. Os [[events]] opcionais com inícios e quedas previstas de C/N0 são pontuados face a tolerâncias declaradas no cenário: detetado, tardio ou não detetado, e concordam ou discordam. Devolve o resumo e o JSON completo do resultado (gráfico e CSV a pedido; o CSV de uma execução de embarcação começa com uma linha de comentário # que leva a declaração consultiva, que os leitores de CSV ignoram com a sua opção de comentário). Os bytes do registo vão em linha no TOML como text ou base64 (apenas em linha, no máximo 4 MiB). Uma tabela [platform] kind = "vessel" seleciona os monitores marítimos (coerência cinemática, rumo face ao rumo de superfície, odómetro, altura da antena, dispersão de C/N0, coerência temporal) e acrescenta uma pontuação de confiança de 0-100 por época com os monitores que deduziram. Cada época leva também a sua geometry de satélites (boa; degradada por poucos satélites ou PDOP ou HDOP elevado; ou desconhecida quando o registo não tem elevações de satélites nem DOP); cada época tem um label (good, fair, poor); para uma embarcação, um monitor geometry junta-se à pontuação, deduzindo apenas quando a geometria é má (no máximo 15 pontos: degradado, nunca não fiável), e cada dedução leva uma classe: geometria (o céu), ambiente ou incoerência (semelhante a um ataque). Para um excerto de fluxo com o gate, use assess_vessel_stream. Apenas consultivo; nível de evidência MODELLED.

list_example_scenarios

Lista os cenários de referência incluídos em JSON: count e scenarios, uma matriz de name, kind e about (a primeira frase do comentário de cabeçalho do próprio ficheiro). Cada um é um cenário completo que é executado tal como está, pelo que é o caminho mais rápido 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 (por exemplo spectrum, solar-system, constellation-design, campaign, leo-signal, leo-pass, leo-navmsg, leo-pvt).

get_example_scenario

Devolve o texto TOML de um cenário de referência incluído, byte a byte o ficheiro que o repositório distribui em scenarios/. Passe o texto (editado ou não) a run_scenario, report_scenario, animate_scenario ou a 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_scenario

Executa um cenário Kshana e devolve o seu relatório: um resumo executivo, as entradas, cada valor de resultado com a sua unidade e o seu rótulo VALIDATED ou MODELLED, os eventos, as linhas de capacidade que a execução exercitou e um registo de reprodutibilidade (versão do motor, resumos SHA-256 do cenário e do resultado, semente, o comando que o reproduz). format é json (predefinição; o report.json legível por máquina) ou html (o report.html imprimível e autónomo com o gráfico incorporado). O relatório de uma campanha leva também a sua tabela de varrimento ou distribuição de Monte Carlo. O relatório é uma função pura do cenário: não é lido nenhum relógio.

animate_scenario

Executa um cenário Kshana e devolve a sua série temporal sob a forma de animação. format é svg (predefinição: um SVG animado, sem script), html (uma página de reprodução autónoma) ou frames (fotogramas SVG estáticos numerados mais manifest.json, no máximo 120 fotogramas numa resposta). fps opcional (1 a 60, predefinição 12), duration_s (0,5 a 600, predefinição 8) e width (480 a 3840 píxeis, predefiniçã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 de eventos, se está presente uma cascata de espetro, os caminhos de resultado de onde foram lidos os traços, qualquer série omitida e os nomes dos ficheiros. Seguem-se os ficheiros, um item de conteúdo cada, pela ordem que o files do resumo indica. Um tipo de cenário cujo resultado não tem eixo temporal 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 ficheiros idênticos byte a byte.

list_export_formats

Reporta quais os formatos de exportação de interoperabilidade que se aplicam a um cenário Kshana, sem o executar: uma matriz JSON com uma entrada por formato (czml, kml, geojson, stk, sigmf) que indica applies, o reason quando não se aplica e spec_url, a especificação publicada que o escritor segue. CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON e as efemérides STK (Systems Tool Kit) .e descrevem a geometria do cenário; o SigMF (Signal Metadata Format) regista as amostras que um cenário spectrum com um bloco [iq] sintetiza. Chame-o antes de export_interop.

export_interop

Exporta um cenário Kshana num formato de interoperabilidade: czml (Cesium Language, para o CesiumJS), kml (Keyhole Markup Language, para o Google Earth e ferramentas de sistemas de informação geográfica), geojson (RFC 7946), stk (efemérides do Systems Tool Kit .e, um ficheiro 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 o seu suffix (o que a linha de comandos acrescenta ao nome de saída, por exemplo .czml ou .G01.e), bytes, sha256 e encoding. Seguem-se os ficheiros, um item de conteúdo cada, pela ordem do índice: ficheiros utf-8 como o seu texto, o ficheiro binário de amostras SigMF como base64. Uma campanha exporta cada cenário-membro a que o formato se aplica. Um formato que não se aplica é recusado com o motivo; list_export_formats reporta os cinco de uma vez. As horas estão em Tempo Universal Coordenado (UTC); o mesmo cenário dá ficheiros idênticos byte a byte.

import_route

Escreve uma rota GeoJSON num cenário Kshana que percorre uma trajetória de pontos de passagem, e devolve o novo TOML do cenário (execute-o com run_scenario). A rota é um LineString (ou um Feature / FeatureCollection que contenha um) de posições de longitude, latitude; 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. Indique os dois extremos da trajetória, ou posições igualmente espaçadas ao longo de uma linha reta: os tipos de trajetória percorrem start + i*step, pelo que qualquer outra forma é recusada.

export_sp3

Exporta a constelação propagada de um cenário orbit como texto de efemérides precisas SP3-c (o formato normalizado de pós-processamento GNSS). Dá erro se o cenário não for do tipo de cenário orbit.

export_omm

Exporta 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. Dá erro se o cenário não for do tipo de cenário orbit.

export_oem

Exporta a constelação propagada de um cenário orbit como texto de efemérides CCSDS OEM 2,0 — a série temporal de estados inerciais (TEME) com posição E velocidade, que as ferramentas de dinâmica de voo (GMAT / Orekit / STK) leem. É o complemento com velocidade de export_sp3, que só tem posição. Dá erro se o cenário não for do tipo de cenário orbit.

export_table_csv

Executa um cenário Kshana e devolve a sua tabela de reprodutibilidade como texto CSV — a tabela estável byte a byte que a CLI escreve como <scenario>.table.csv e que os artigos citam. Só estes tipos de cenário emitem uma: realtime-frame-eop, lunar-time-budget, lunar-jamming, telecom-timing, leo-navmsg quando a sua análise encode-decode é executada sobre um modelo de mensagem kepler16 ou kepler-rac (a tabela de efemérides de difusão), e moonlight-service-volume quando export_site_lat_deg e export_site_lon_deg estão ambos definidos. Dá erro para qualquer outro tipo de cenário (ou um cenário inválido); use run_scenario para as figuras de mérito.

sky_geometry

Geometria do céu sob uma linha de horizonte dependente do azimute (um desfiladeiro urbano, um porto, um fiorde, um terminal de contentores): a partir de um local, uma hora e predefinições de constelação, conjuntos de elementos de duas linhas (tle, com uma epoch UTC) ou satélites dados como azimute/elevação ou ECEF, quais os satélites visíveis e quais os ocultados pela linha de horizonte, GDOP/PDOP/HDOP/VDOP/TDOP a partir do núcleo DOP verificado com o gnss_lib_py, o cofator e a covariância este-norte-cima com um relógio de recetor por sistema (ou um 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 linha de horizonte REPRESENTATIVE com a sua proveniência e o seu corte a cada grau (um skyline_preset vazio lista-as). Os cenários dos tipos orbit e integrity (com user_site), gnss-sim, jamming, leo-pvt e leo-pass aceitam a mesma secção [skyline] através de run_scenario. Nível de evidência MODELLED: geometria sob um modelo de erro declarado, apenas com linha de vista; não é uma previsão do erro real de um recetor 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 uma epoch (UTC) dá o céu que esses conjuntos de elementos dão nessa época (SGP4), não uma medição, e sky_source diz qual dos dois. Leva o aviso consultivo: não é um equipamento de navegação homologado. Sem Monte Carlo através do MCP (amostras em massa; use a CLI, o Python ou o WASM). Apenas em linha, no máximo 4 MiB.

iq_signals

A configuração da camada IQ GNSS, em JSON: signals (os nomes de sinal que iq_scene, iq_acquire e iq_track aceitam), enabled (se as ferramentas de ficheiros IQ estão ativas), work_dir (a única pasta que leem e escrevem; todo o 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 viajam pelo protocolo: as ferramentas recebem caminhos de ficheiros 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 é alguma vez transmitido. Chame-a primeiro.

iq_info

Descreve uma gravação IQ no diretório de trabalho sem a processar: tipo (bruta com ficheiro auxiliar, SigMF, coleção SigMF), formato das amostras, taxa de amostragem, frequência central, total de amostras, duração, ficheiros de dados e o seu tamanho, limites de captura e número de anotações, em JSON (a mesma linha que kshana iq info imprime). raw opcional descreve um ficheiro bruto sem ficheiro auxiliar; hash opcional acrescenta o SHA-256 de cada ficheiro de dados (lê o ficheiro inteiro).

iq_scene

Gera uma cena IQ GNSS multissatélite para um ficheiro no diretório de trabalho (kshana iq scene). Modo de perfil declarado: signal + prns (+ dopplers_hz, cn0_dbhz, data opcionais). Modo de difusão: nav (um ficheiro de navegação RINEX no diretório de trabalho) + rx_pos [lat, lon, alt] coloca cada satélite GPS saudável na sua geometria de difusão verdadeira. channel opcional aplica ionosfera, troposfera, cintilação, multipercurso, sombreamento móvel terrestre ou NLOS ao nível do sinal. rate_hz × duration_s tem de caber no orçamento de amostras (ver iq_signals). Escreve a gravação (bruta + ficheiro auxiliar <out>.json, ou um par SigMF) e um ficheiro auxiliar de referência; responde com os ficheiros escritos e o seu número de bytes, o número de amostras e a amostragem, e a primeira época da referência por satélite (fase do código, Doppler, C/N0) face à qual pontuar iq_acquire. A camada IQ não acrescenta síntese de interferência nem de spoofer; nada é alguma vez transmitido.

iq_acquire

Aquisição por FFT de um ou mais PRN numa gravação IQ no diretório de trabalho (kshana iq acquire). Lê apenas as amostras de que uma pesquisa precisa (períodos de código coerentes × não coerentes), que têm de caber no orçamento de amostras. As etapas frontend opcionais (passa-banda, notch, blanking, excisão, AGC, quantificador) são executadas primeiro. Responde com uma deteção por PRN: acquired, doppler_hz, code_phase_chips, o pico normalizado statistic, o seu threshold de deteção e o peak_ratio; json_out / csv_out guardam também o resultado completo em ficheiros, e surface_out (um PRN; .csv, .json ou .bin) guarda a superfície completa de potência de correlação Doppler × fase do código com o pico e os seus refinamentos de Doppler parabólico e de pesquisa fina.

iq_track

Adquire e depois segue um ou mais PRN numa gravação IQ no diretório de trabalho (kshana iq track): a aquisição inicializa cada canal, depois o banco de malhas DLL/PLL (opcionalmente assistidas por FLL) repete a gravação uma vez. As amostras seguidas (a gravação inteira, ou os seus primeiros max_seconds) têm de caber no orçamento de amostras. As malhas vêm de design (um ficheiro TOML kshana.loop-design/1 no diretório de trabalho, design_name para escolher uma) ou do projeto incorporado, com os argumentos de malha a substituí-lo; reacquire readquire um canal que perde o bloqueio ou se bloqueia em falso. O seguimento é feito em fluxo, pelo 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 que seja múltiplo de metade da taxa de chip torna o jitter e o enviesamento da malha de código não representativos) e, por canal, o número de épocas, os segundos seguidos, o Doppler e a fase do código finais, o C/N0 final e médio (dB-Hz), as frações de épocas em bloqueio de fase e de código, locked_at_end, o estado de bloqueio final, os falsos bloqueios detetados e as readquisições. A saída por época vai apenas para ficheiros: epochs_out (E/P/L, discriminadores, estados das malhas, C/N0, estado de bloqueio; .csv/.jsonl/.bin), events_out, json_out / csv_out. Um PRN que não é adquirido é recusado com a sua estatística e o seu limiar.

iq_frontend

Aplica DSP de front-end de recetor e de mitigação de interferência a uma gravação IQ no diretório de trabalho e escreve o resultado como uma nova gravação bruta com um ficheiro auxiliar <out>.json (kshana iq frontend). stages escolhe qualquer das seguintes: FIR bandpass_hz [lo, hi], notch adaptativo, supressão de impulsos (blank), excisão no domínio da frequência (excise), agc e um quantificador de bits bits (precedido de um AGC automático, salvo no_agc), sempre por essa ordem. Toda a entrada tem de caber no orçamento de amostras. Responde com as amostras processadas e os ficheiros escritos com o seu número de bytes. Processa uma gravação; não sintetiza nada.

iq_campaign

Executa uma campanha de repetição em laboratório guardada no diretório de trabalho (kshana iq campaign): gravações (cada uma descrita por um ficheiro kshana.test-conditions/1 que declara a referência conhecida do laboratório) x cadeias de front-end x projetos de malha, sendo cada célula seguida e pontuada face às condições declaradas (tempo até à perda de bloqueio, tempo de readquisição, degradação do C/N0 face ao J/S declarado, ao lado de uma referência analítica rotulada MODELLED, taxa de falso bloqueio, jitter de PLL/DLL, disponibilidade). Incremental: uma chamada executa as células pendentes que cabem no orçamento de amostras (ou max_cells), cada célula concluída é guardada e a chamada seguinte retoma. Responde com as contagens de células, as falhas, os ficheiros escritos e o digest quando todas as células estão concluídas. Pontua apenas dados gravados; não sintetiza nenhuma interferência.

iq_campaign_status

Reporta o progresso de uma campanha de repetição em laboratório a partir da sua pasta de saída no diretório de trabalho, lendo apenas ficheiros: 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 estão concluídas.

iq_sweep

Repete uma gravação IQ no diretório de trabalho através de vários projetos de malha de seguimento e reporta o resultado em regime estacionário de cada projeto (kshana iq sweep): os projetos são todos os projetos de um ficheiro kshana.loop-design/1 (design), ou o produto das listas pll_bws_hz, dll_bws_hz, spacings_chips e coherents no projeto incorporado. Cada PRN é adquirido uma vez e cada canal (projeto, PRN) segue as mesmas amostras, pelo que cada resultado é exatamente o de executar o projeto isoladamente. Responde com, por projeto e PRN, epochs, phase_jitter_deg e code_jitter_chips (na segunda metade da execução), phase_lock_frac, code_lock_frac, mean_cn0_dbhz e o hash do projeto; json_out / csv_out guardam a tabela em ficheiros. O intervalo seguido tem de caber no orçamento de amostras (max_seconds estreita-o) e são executados no máximo 256 canais (projeto, PRN) por chamada. Processa uma gravação; não sintetiza nada.

iq_monitor

Executa os monitores de deteçã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 do sinal por satélite, cada um face a uma linha de base aprendida nos primeiros baseline_s segundos (ou a partir de um ficheiro de definições). Responde com as séries (nome e comprimento), todos os eventos que os monitores levantaram (início, fim, monitor, o que mudou; no máximo 200 na resposta) e as definições e linhas de base que os monitores aprenderam; json_out guarda o relatório completo (todas as séries, eventos e espetros) e csv_prefix escreve <prefix>.series.csv e <prefix>.events.csv. O intervalo tem de caber no orçamento de amostras (max_seconds estreita-o). Um evento de monitor diz que uma grandeza medida saiu da sua linha de base aprendida; não identifica uma causa nem uma origem. Pontua apenas dados gravados; não sintetiza nada. Nível de evidência: MODELLED.

iq_test_conditions

Valida um ficheiro de condições de ensaio de laboratório (kshana iq conditions): um ficheiro kshana.test-conditions/1, em texto TOML ou JSON, que declara a referência conhecida do laboratório para uma gravação (os satélites esperados, o tempo de estabilização, o calendário declarado de jamming ou interferência). Responde com as condições resolvidas e o seu hash, ou o motivo pelo qual o ficheiro é inválido. Apenas em linha: nada é lido do disco, e um caminho de gravação que o ficheiro indique não é aberto (uma campanha resolve-os dentro do diretório de trabalho). A entrada está limitada a 4 MiB.

iq_labfit

Ajusta o modelo de perda de bloqueio da malha de seguimento a execuções de laboratório (kshana iq labfit): um TOML de cenário iq-labfit indica uma ou mais execuções, cada uma um registo de recetor com as suas condições de ensaio declaradas; o motor carrega cada registo, ajusta os modelos de malha e empírico, aplica bootstrap à incerteza e calcula o erro no conjunto reservado. Tudo é em linha: o log de cada execução dá text ou base64 (um path é recusado) e a ferramenta não lê nem escreve nenhum ficheiro, pelo que não precisa do diretório de trabalho IQ. Em alternativa, o [input] do cenário indica campaign = "<out-dir>", uma pasta de saída de kshana iq campaign concluída: a ferramenta ajusta então os modelos de C/N0 e de bloqueio às suas células pontuadas (um relatório kshana.labfit-iq/1; o Q é declarado, nunca ajustado, e o desvio identificável de J/S é ajustado; com mode = "validation" é necessária uma tabela [validation]). Essa pasta é resolvida relativamente ao diretório de trabalho IQ e tem de estar dentro dele (qualquer caminho fora é recusado); é lida, nada é escrito. Responde com o report analisado, os resíduos e as previsões como texto CSV e um resumo em Markdown. A entrada está limitada a 4 MiB. O ajuste descreve as execuções de laboratório dadas; não é uma previsão para outros recetores nem para condições além do que o relatório declara. Nível de evidência: MODELLED.

assess_vessel_stream

Pontua um excerto limitado de um fluxo NMEA 0183 de uma embarcação tal como kshana receiver-trust live o pontua, e devolve o estado de confiança por época (a calibrar, nominal, degradado, não fiável) e a pontuação de 0-100 com os monitores que deduziram (esquema JSON-lines em tempo real 1,3: cada época traz position, uma declaração advisory de que a saída é consultiva, e a respetiva geometry de satélites (boa, degradada com motivos como few-satellites ou high-pdop, ou desconhecida quando o excerto não tem GSV nem GSA) com um label (good, fair, poor; a geometria só deduz quando é má); cada dedução traz uma class: geometria (o céu, e não uma conclusão de que não ocorreu nenhum ataque), ambiente ou incoerência (semelhante a um ataque)), o resumo (contagens por estado, geometria e classe, pontuação mais baixa e final, quando surgiu a primeira época não fiável) e a última sentença $PKSHT. session_toml declara a embarcação ([platform] kind = "vessel", os seus limites de velocidade, aceleração e taxa de viragem, a altura da antena, se há um sensor de rumo no barramento). O excerto tem de conter a janela de calibração; a entrada está limitada a 2 MiB e 20 000 épocas, e a resposta traz no máximo 200 linhas de épocas degradadas ou não fiáveis. Esta é a forma limitada do comando em tempo real: não é aberto nenhum socket e nada é escrito numa porta, e o gate e os exportadores de telemetria (o processo de longa duração e o seu servidor --listen) existem apenas na linha de comandos. As verificações não conseguem ver um spoofer cuja posição seja coerente com tudo o que está no barramento. Apenas consultivo: não é um equipamento de navegação homologado; o operador continua a ser responsável. Nível de evidência: MODELLED.

jammertest_import

Lê o catálogo de ensaios e o plano de transmissão publicados do Jammertest (NPRA/jammertest-plan, MIT) como referência programada (kshana jammertest import): os intervalos de uma zona de ensaio tornam-se eventos receiver-trust com o identificador do catálogo e o ano em cada rótulo. plans contém um ficheiro de plano por dia, log_start_utc é a primeira época do registo, local_offset_h o desvio do plano face ao UTC (predefinição 2, CEST). Devolve events_toml (acrescente-o a uma sessão receiver-trust), events (identificador do ensaio, tipo, início e fim em segundos desde o início do registo) e as contagens de ignorados. Os eventos são intervalos PLANEADOS, não horas de emissão registadas: um intervalo pode começar tarde ou nunca ser executado, e o campo status do plano está quase sempre vazio. Nenhum campo de contacto ou pessoal do plano é lido. A entrada está limitada a 4 MiB por texto. Nível de evidência: MODELLED.

jammertest_score

Pontua um registo de recetor face ao calendário do Jammertest (kshana jammertest score): por ensaio programado, a latência de deteção (primeiro alarme menos o início previsto), se foi detetado dentro da tolerância, tardiamente ou não detetado, e o tempo de recuperação (um período sem alarmes de recover_hold_s), mais os falsos alarmes fora de cada intervalo e da sua guarda. session_toml só precisa de [log] format = "ubx" (ou rinex, android, nmea, sbf); indique o registo como log (formatos de texto) ou log_base64 (binário). Precisa do JSON do catálogo e do plano (catalog_json, plans) e da zona de ensaio (location). Devolve o cartão de pontuação: tests, summary, baseline_contaminated e um rótulo MODELLED. O calendário são intervalos planeados, não horas de emissão registadas, pelo que uma falha de deteção pode ser um ensaio que nunca foi executado. Um pacote de evidências assinado precisa de uma chave de assinatura: use a linha de comandos (kshana jammertest score --key). A entrada está limitada a 4 MiB por texto. Apenas consultivo: não é um equipamento de navegação homologado; o operador continua a ser responsável. Nível de evidência: MODELLED.

assess_vessel_log

Avalia o registo 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-100 de cada época com as suas deduções, a geometria dos satélites (boa, degradada, desconhecida) com um label (good, fair, poor) em cada época, com a geometria a deduzir apenas quando é má, e uma classe em cada dedução (geometria, ambiente, incoerência), com geometry_model (limiares, o teto e o piso em vigor, e a proveniência) e geometry_summary. session_toml declara os limites da embarcação e quaisquer definições de monitores ou de pontuação (não é necessária nenhuma tabela [log]) e nmea é o texto do registo, o que evita colá-lo dentro de uma cadeia TOML. A entrada está limitada a 4 MiB; a resposta traz o documento com epochs reduzido a contagens por estado e no máximo 200 épocas degradadas ou não fiáveis. Para um registo noutro formato, ou com [[events]] a pontuar, use assess_receiver_log. Apenas consultivo: não é um equipamento de navegação homologado; o operador continua a ser responsável. Nível de evidência: MODELLED.

generate_training_nmea

Gera NMEA 0183 sintético de ponte para formação de tripulações a partir de um TOML nmea-scenario (kshana nmea-scenario): uma derrota da embarcação e uma cronologia de eventos programados (jamming, arrastamento de posição, spoofing de hora, atraso de repetição, com recuperação). Devolve o conjunto de sentenças com soma de verificação válida (GGA, RMC, VTG, GSV, GSA, GNS, ZDA, HDT, VBW; as primeiras 2000 linhas) e o registo do instrutor (o que foi injetado e quando, com a derrota verdadeira e um summary de nível superior das velocidades e acelerações máximas; os eventos de arrastamento levam a sua velocidade e aceleração máximas de arrastamento; esquema kshana-nmea-training/1) como JSON e texto. O limite de satélites visíveis do recetor é receiver.max_used (predefinição 12). Determinista por seed. APENAS TEXTO: nada aqui sintetiza RF, IQ ou qualquer forma de onda, nada é transmitido, e a saída destina-se a formação e ensaio, nunca aos sistemas de navegação em funcionamento de uma embarcação (uma sentença marcadora no fluxo di-lo). Consultivo, não é um equipamento de navegação homologado. A transmissão para um endereço TCP ou UDP existe apenas na linha de comandos. Quatro cenários de exemplo são distribuídos em scenarios/training/.

create_evidence_pack

Cria um pacote de evidências assinado para uma janela do registo NMEA 0183 de uma embarcação (kshana receiver-trust evidence): os bytes brutos do registo para a janela, a configuração com todos os limiares, os resultados e motivos por época, uma página de resumo autónoma e um manifesto que lista o SHA-256 de cada ficheiro com o hash do registo completo e uma cadeia de hashes, assinado com Ed25519. from_s/to_s são segundos desde a primeira época do registo. Devolve os ficheiros em JSON (entregue-os a verify_evidence_pack), a chave pública e a impressão digital do signatário. A semente de assinatura nunca é devolvida nem registada; se signing_key_seed_hex for omitido, é usada e descartada uma chave de utilização única, pelo que o pacote prova a integridade face à chave que ele próprio indica, não quem o assinou: para uma chave que importe, crie o pacote na linha de comandos (uma semente passada aqui viaja pela conversa). A entrada está limitada a 4 MiB e a resposta a 4 MiB (estreite a janela). Um pacote é um registo técnico do que o motor calculou a partir de um registo sob definições declaradas; não é um parecer jurídico, uma constatação de facto sobre qualquer evento, nem uma certificação. Nível de evidência: MODELLED.

create_round_trip_pack

Cria o pacote de ida e volta de laboratório assinado (kshana evidence round-trip, docs/spec/TEST-CONDITIONS.md): liga por hash o cenário que produziu o movimento, o documento kshana.test-conditions/1 do laboratório, o registo do recetor e a sua pontuação face aos eventos declarados, num pacote de evidências assinado cujo config.json leva um bloco round_trip. Recusa um pacote cujas condições e eventos de pontuação discordem, ou cujo SHA-256 declarado do registo não seja o do registo. SEM SINAL: nada é escrito, repetido ou agendado; a forma como o movimento de um cenário chegou ao recetor é da responsabilidade do operador e é registada apenas como declarada. A semente de assinatura nunca é devolvida nem registada; se omitida, é usada e descartada uma chave de utilização única (integridade, não identidade). A entrada está limitada a 4 MiB e a resposta a 4 MiB. Um registo técnico, não um parecer jurídico nem uma certificação. Nível de evidência: MODELLED.

verify_evidence_pack

Verifica um pacote de evidências assinado (kshana evidence verify): o SHA-256 de cada ficheiro face ao 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 registo que possui é o que o pacote regista e que o excerto provém dele. Devolve o relatório: ok, cada falha por código e ficheiro, cada verificação, signer_pinned, notas e um verdict: verified (signatário fixado), intact-signer-not-pinned (tudo verifica, mas não foi fornecida nenhuma public_key de confiança, pelo que a assinatura prova apenas que o pacote está íntegro face à chave que ele próprio indica, que qualquer pessoa pode gerar; diga-o, não lhe chame verificado) ou failed, com uma message para mostrar ao utilizador. require_timestamp reprova um pacote que não leve nenhum token de marca temporal. As entradas estão limitadas a 4 MiB. Um resultado verificado diz que o registo não foi alterado e quem o assinou (a chave que forneceu); não diz o que causou qualquer evento, quem é responsável, nem que o registo mostra o que o recetor realmente recebeu.

build_interference_map

Constrói um mapa de interferência GNSS a partir de relatórios de posição de aeronaves (ADS-B NIC/NACp) ou de navios (AIS) com licença aberta, fornecidos como texto CSV (kshana interference-map adsb|ais). Devolve um documento GeoJSON por dia UTC (esquema kshana-interference-map/v1) (nomes de ficheiro <source>-<dataset>-<date>.geojson; versão do método 2) em que cada célula de grelha publicada é degraded, not_degraded, insufficient_sample, withheld_day_confounded ou withheld_no_background (ADS-B) ou anomalous/not_anomalous (AIS), com o método, os seus limiares pré-registados, a licença do conjunto de dados e a atribuição incorporados. Toda a 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 as suas classificações. Apenas agregado: os identificadores são convertidos em hash em memória e nunca devolvidos, e uma célula com menos de 5 aeronaves ou embarcações distintas não é publicada. dataset é uma predefinição reconhecida ou custom (com licence, licence_url, attribution). A entrada está limitada a 4 MiB e a resposta a 4 MiB (use um cell_deg mais grosseiro ou a linha de comandos para mais). Nada é obtido: os polígonos de terra, se desejados para o AIS, são passados. Uma célula degradada não identifica a interferência como causa; uma célula não publicada não é prova de uma célula limpa; isto não é uma previsão. Nível de evidência: MODELLED.

route_exposure

Resume que parte de uma rota atravessa 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 devolve), o comprimento da rota e as proporções do seu comprimento em células degradadas, em células que não estavam degradadas, em células com amostra insuficiente para avaliar e em células não observadas. A rota é uma LineString GeoJSON ou texto CSV lat,lon; date_from/date_to (AAAA-MM-DD) mantêm os mapas de um intervalo de datas. A entrada está limitada a 4 MiB por item. As células não observadas não são prova de uma rota limpa; uma célula degradada não identifica a interferência como causa; isto descreve relatórios passados e não é uma previsão. Nível de evidência: MODELLED.

compliance_report

Preenche o mapeamento de referenciais públicos a partir de documentos de resultados do Kshana (kshana compliance-report): quais as 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 a aviação, o artigo 21 da NIS2, a EN 16803, a NIST IR 8323r1) para as quais as execuções dadas fornecem elementos de prova em apoio, quais não, 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 indica o tipo de cenário que um resultado não indica; um resultado 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 cada linha mantém o seu gap mesmo quando comprovada; as 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, textualmente: um estado significa que uma execução fornece elementos de prova em apoio das capacidades que a linha nomeia; não é uma constatação de que um referencial é satisfeito, 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_mapping

O 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 elementos de prova em apoio dessa exigência e a lacuna que as saídas não fecham; ou, com sources verdadeiro, os documentos de origem que as tabelas citam, com versões e URL. Encabeçado pela declaração que todo o relatório leva, que acompanha qualquer excerto: uma linha marcada como evidenced significa que uma execução fornece elementos de prova em apoio das capacidades que a linha nomeia; não é uma constatação de que um referencial é satisfeito, 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_log

Ajusta os parâmetros de sensor dos cenários hybrid e fusion a partir de um registo de IMU estacionária (kshana imu-fit, docs/MACHINE-INPUTS.md). Esses cenários aceitam parâmetros de ruído, não uma série temporal: isto lê-os de um registo gravado com o sensor imóvel, pelo desvio de Allan sobreposto do sinal integrado. Devolve JSON: fit (enviesamento do acelerómetro, PSD de passeio aleatório de velocidade q_va, enviesamento do giroscópio, PSD de passeio aleatório de ângulo q_arw, patamar de instabilidade do enviesamento quando o registo é suficientemente longo para mostrar um, a taxa e a duração do registo, as inclinações iniciais de Allan e notes sobre o que não pôde ser ajustado ou merecer confiança), toml (uma tabela [accel_classical] cuja proveniência indica o SHA-256 do registo, pronta a colar num cenário) e sha256. Um registo que não era estacionário, ou que é demasiado curto ou amostrado de forma irregular, dá parâmetros errados ou é recusado; as inclinações (cerca de -0.5 onde domina o ruído branco) mostram qual dos casos. Nada é escrito em disco. Nível de evidência: MODELLED (o estimador aplicado ao registo, sem nenhuma referência independente externa).

list_standards_packs

Lista os pacotes de normas (kshana standards-pack list): conjuntos de cenários pontuados para os perfis de ensaio 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 elementos de prova em apoio. Não precisa de entrada. Um pacote avalia cenários modelados face a limiares declarados; não classifica nenhum produto. Nível de evidência: MODELLED.

run_standards_pack

Executa um pacote de normas (kshana standards-pack run <id>): todos os cenários que contém, pontuados face a limiares declarados antes da execução. Devolve o relatório (cada ensaio MET, NOT MET ou NEEDS INPUT quando precisa de um registo de recetor e não é pontuado; cada limiar com o seu valor medido e esperado) e o mesmo como markdown. Passe o JSON do relatório a compliance_report para ver as linhas para as quais o pacote fornece elementos de prova em apoio. Diga claramente que um limiar MET significa que um cenário modelado atingiu um limiar declarado, e que um NOT MET é um resultado registado; nunca descreva a saída como demonstrando que um produto ou um referencial é satisfeito. Apenas consultivo: saída de análise, não é um equipamento de navegação homologado. Nível de evidência: MODELLED.

lunanet_afs_check

Verifica o LunaNet Augmented Forward Signal (AFS) face à 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 face às tabelas de códigos 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 PRN 1 a 210, e ambas as sequências de Legendre) e a exemplos resolvidos (SB1 BCH, CRC-24Q), limiares B1 a B10 de um pré-registo; B4 regista uma falha (o documento imprime os mesmos últimos 24 chips para os PRN terciários 147 e 151). O modo symbols verifica um fluxo de símbolos de decisão rígida (texto de 0 e 1) quanto ao padrão de sincronização, à descodificação SB1, ao FID, à continuidade do TOI e ao espaçamento de tramas. As subtramas 2 a 4 (LDPC de taxa 1/2, CRC-24Q) NÃO são verificadas: as matrizes LDPC estão num anexo separado que não está implementado. O modo generate devolve um fluxo de ensaio com subtramas de substituição: símbolos, não uma forma de onda; o Kshana não escreve nenhum sinal. VALIDATED apenas face às tabelas impressas dessa edição, que o próprio documento marca como TBC; diga-o, e não descreva um resultado como demonstrando que qualquer nó ou serviço LunaNet está correto. Apenas consultivo.

score_benchmark

Pontua uma submissão ao kshana-bench (kshana bench score, bench/SPEC.md, docs/BENCH.md): um ficheiro de previsões (kshana-bench-predictions/1) face a um ficheiro de referência (kshana-bench-truth/1), ambos em texto JSON, no máximo 4 MiB cada, e devolve o ficheiro de resultados (kshana-bench-result/1) com a versão da especificação, a tarefa (a deteção em registos de recetor, b deteção em IQ, c previsão de holdover de temporização, d lacuna de otimismo fora da distribuição), a partição, o SHA-256 de ambas as entradas e as métricas da tarefa (AUC, probabilidade de deteção com um limite de falsos alarmes, RMSE por horizonte, ou a lacuna de otimismo). threshold é o limiar de alarme declarado das tarefas a e b. Nada é lido do disco nem escrito. Cada pontuação é MODELLED e descreve um registo ou um corpus, nunca um produto; não é uma certificação e nenhuma organização é recomendada por uma pontuação. Nível de evidência: MODELLED.

render_leaderboard

Gera os ficheiros de resultados do kshana-bench (kshana bench leaderboard) como a página estática de classificação, 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 primeiro; um ficheiro pontuado sob outra versão principal da especificação é recusado, porque resultados de versões principais diferentes nunca são postos numa mesma tabela. Uma linha diz que este ficheiro obteve este número nesta partição; não significa que algum produto tenha sido classificado ou aprovado por quem quer que seja. Nada é escrito. Nível de evidência: MODELLED.

trust_telemetry

Apresenta um fluxo de confiança GNSS ou um resultado receiver-trust como texto de telemetria de segurança (kshana trust-telemetry, docs/TRUST-TELEMETRY.md), com os mesmos codificadores que a linha de comandos usa: prometheus (a exposição do estado final), cef ou leef (uma linha syslog RFC 5424 por mudança de banda, ou por época com syslog_all; sem marca temporal, porque não é lido nenhum relógio) ou otlp (a carga de métricas JSON OTLP/HTTP). input_kind é jsonl (predefinição) ou result; uma linha do fluxo que não é analisada é ignorada e contada em kshana_trust_input_errors_total. Nada é enviado, servido ou escrito: a saída é texto na resposta (os exportadores em execução, que são um processo, ficam na linha de comandos). A posição comunicada pelo recetor é omitida, salvo se expose_position for verdadeiro. Uma entrada que leve geometria de satélites (esquema em tempo real 1,3, resultados a partir da 0,36) acrescenta o rótulo de geometria (good, fair, poor; nunca pontuada, exceto quando poor) e o estado, HDOP, PDOP, VDOP e satélites usados, e um rótulo class (geometria, ambiente, incoerência) em cada motivo; uma entrada mais antiga é apresentada exatamente como antes. Apenas consultivo: o Kshana não é um equipamento de navegação homologado (IEC 61108, IEC 61162) e o operador continua a ser responsável. Nível de evidência: MODELLED.

export_test_bench

Exporta 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 a sua descrição JSON (posição fixa à Terra e geodésica, velocidade, atitude, UTC), sentenças NMEA 0183 GGA/RMC, um texto de pontos de passagem quando a grelha de amostragem é regular ao milissegundo, e os eventos do cenário como CSV e como TOML [[events]] para um cenário receiver-trust. Aplica-se a gnss-ins (as suas indisponibilidades de 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 (predefinição 2024-01-01T00:00:00Z). Nada é escrito em disco: o primeiro item de conteúdo é um índice JSON (files com suffix, bytes, sha256; notes em qualquer ficheiro omitido; notice), seguido do texto de cada ficheiro pela ordem do índice. O mesmo cenário e a mesma época dão ficheiros idênticos byte a byte. SEM SINAL: nada do que é exportado é, modela ou comanda um sinal de radiofrequência ou de banda de base, e um evento é um intervalo rotulado, não uma receita para produzir interferência; o simulador e o seu operador fornecem os sinais e são responsáveis por os executar apenas onde for permitido. Mantenha o aviso com os ficheiros. O Kshana não publica resultados de tais execuções. Nível de evidência: MODELLED.

attach_evidence_timestamp

Associa um token de marca temporal RFC 3161 a um pacote de evidências (kshana evidence attach-timestamp), em memória: files é um pacote tal como create_evidence_pack o devolve, token_base64 os bytes do ficheiro .tsr de uma autoridade de marcação temporal. O token é guardado como timestamp.tsr ao lado do manifesto assinado, e não dentro dele, e o pacote com o token tem de continuar a verificar-se, caso contrário nada é associado; um token existente é mantido, salvo se replace for verdadeiro. Devolve os files atualizados (entregue-os a verify_evidence_pack com require_timestamp verdadeiro para exigir que o token esteja presente) e as notas de verificação. NÃO verifica a assinatura da autoridade de marcação temporal no token nem o certificado da autoridade (verifica a estrutura do token e se a sua impressão de mensagem é o hash do manifest.json deste pacote): diga-o e remeta o utilizador para openssl ts -verify. A entrada e a resposta estão limitadas a 4 MiB. Uma marca temporal mostra que um hash existia numa hora que a autoridade declara; não é um parecer jurídico. Nível de evidência: MODELLED.

Todos os canais

Todas as formas de o instalar.

Uma tabela, gerada a partir do packaging/channels.json do repositório e verificada por comparação com os seus README, pelo que cada comando é o que o README mostra, fixado em v0.40.0. Binários pré-compilados para cada sistema operativo, a extensão do assistente de ambiente de trabalho, botões de um clique para o Cursor e o VS Code, lançadores npx e uvx, Homebrew, Scoop e winget, os registos e um modo HTTP alojado pelo próprio utilizador. Os canais marcados como quando publicado entram em funcionamento com a versão.

Motor e ligações

O motor por si só, na linguagem ou no local onde trabalha.

Experimentar no navegador

Para qualquer pessoa, sem nada a instalar. Requisitos: nenhum.

O motor corre localmente como WebAssembly; nada é carregado para servidores.

Biblioteca Rust

Para programadores de Rust que incorporam o motor. Requisitos: Rust.

Fixado em v0.40.0cargo add kshana@0.40.0

Depois, verifiquecargo tree --depth 1 | grep kshana

Python

Para analistas e notebooks. Requisitos: Python.

Fixado em v0.40.0pip install kshana==0.40.0

Depois, verifiquepython -c "import kshana; print(kshana.version())"

JavaScript e WebAssembly

Para programadores web e de Node.js. Requisitos: Node.

Fixado em v0.40.0npm install kshana@0.40.0

Depois, verifiquenpm ls kshana

Assistentes de IA (servidor MCP)

Consultivo, não um equipamento de navegação homologado: o operador continua a ser responsável pela navegação. O servidor é executado no seu computador; nada é enviado à Ashforde OÜ.

Assistente de IA (servidor MCP, cargo)

Para quem usa um assistente com suporte de MCP. Requisitos: Rust 1,88+.

Fixado em v0.40.0cargo install kshana-mcp --version 0.40.0

Depois, verifiquecargo install --list | grep kshana-mcp

Imagem Docker

Para quem não tem uma cadeia de ferramentas Rust; o servidor MCP num contentor. Requisitos: 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}}'

npx

Para utilizadores de Node, qualquer cliente MCP. Requisitos: Node 18+.

Fixado em v0.40.0kshana-mcp@0.40.0

Depois, verifiquenpx -y kshana-mcp@0.40.0 --version

Um lançador: descarrega o binário da versão, verifica o SHA256SUMS e executa-o.

winget em revisão

Para Windows. Requisitos: winget.

Fixado em v0.40.0winget install AshfordeOU.KshanaMcp --version 0.40.0

Depois, verifiquekshana-mcp --version

Aparece quando a Microsoft integrar a submissão.

Remoto (HTTP em fluxo contínuo), alojado pelo próprio utilizador

Para clientes que aceitam um URL. Requisitos: o seu próprio anfitrião.

Fixado em v0.40.0v0.40.0

Loopback por predefinição; uma ligação fora do loopback exige --allow-remote e um token de portador. O Kshana não aloja nenhum ponto de acesso.

Integrações

Extensões e imagens que levam o Kshana para outras ferramentas.

Plugin para IDE JetBrains

Para utilizadores de IntelliJ, PyCharm e CLion. Requisitos: um IDE da JetBrains.

Settings → Plugins → Marketplace → pesquise "Kshana" (ID do plugin dev.kshana.ide). Clique com o botão direito num .toml de cenário e escolha Run Kshana Scenario.

Extensão para o Signal K

Para proprietários de embarcações que executam um servidor Signal K. Requisitos: Node, um servidor Signal K.

Fixado em v0.40.0npm install signalk-kshana-trust@0.40.0

Depois, verifiquenpm ls signalk-kshana-trust

Extensão para o OpenCPN

Para utilizadores de plotters cartográficos OpenCPN. Requisitos: OpenCPN 5,8+.

Descarregue o tarball da extensão da versão. A versão inclui o tarball e o seu XML de metadados do catálogo; a inclusão no catálogo do OpenCPN é um pedido de integração aberto manualmente.

Imagem de compilação de referência

Para implementações do gate e do bench. Requisitos: Docker.

Fixado em v0.40.0docker pull ghcr.io/ashfordeou/kshana-reference-build:0.40.0

02Formas de o utilizar

Onze formas de entrar.

Desde um separador do navegador até um conjunto de regressão de integração contínua (CI). Cada porta executa o mesmo motor e escreve o mesmo resultado JSON, gráfico SVG (Scalable Vector Graphics) e relatório HTML (HyperText Markup Language). Escolha uma; todos os comandos são reais e copiam-se com um clique.

Kshana Studio

Qualquer cenário incluído, executado na sua máquina como WebAssembly; nada instalado, nada carregado. Ajuste-o, compare execuções, varra um parâmetro e exporte um relatório reproduzível.

03Linha de comandos · bibliotecas · formatos

Uma chamada, três linguagens, a mesma resposta.

A linha de comandos, as ligações Rust, Python e JavaScript e os formatos de ficheiro que o motor lê e escreve, lado a lado. Tudo o que aqui está é o núcleo aberto gratuito.

Linha de comandos · kshana --helpA partir do binário

Referência da linha de comandos, a partir do texto de utilização do próprio binário

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

Uma execução escreve result.json, chart.svg, report.html, report.json, table.csv junto do cenário; --export-sp3, --export-omm e --export-oem escrevem ficheiros de órbita; --animate escreve também a execução como algo que se move (animation.svg, animation.html, frames: um SVG animado, um leitor HTML autónomo ou uma pasta de fotogramas numerados), com --animate-fps e --animate-duration para a taxa e a duração da reprodução; --export escreve a geometria do cenário ou o seu sinal sintetizado para outras ferramentas: CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON (JSON geográfico), um ficheiro 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 ficheiro finals2000A; --study executa um conjunto gratuito de cenários para study.json e study.html; kshana kinds --json lista todos os tipos de cenário com os seus campos; kshana example imprime um cenário para começar. Os resultados podem viajar no envelope Kshana Interchange Format (KIF). O servidor MCP expõe as exportações de órbita como ferramentas.

kshana --study é o executor gratuito de conjuntos. Se preferir que a análise seja feita por si, isso é um estudo personalizado pago.

Cada execuçãoDeterminista
  • Escreve result.json, chart.svg, report.html e o mesmo relatório como report.json, mais uma tabela CSV (valores separados por vírgulas) para os tipos de cenário que a publicam. A pedido, escreve também uma animação da execução (--animate) e o cenário nos formatos que outras ferramentas leem (--export).
  • Reproduzível a partir do cenário, da semente e da versão do motor, com um SBOM CycloneDX (lista de materiais de software) e proveniência de compilação SLSA (Supply-chain Levels for Software Artifacts) em cada versão.
  • Documentado: conceitos, esquema de cenários, API Python, validação e todos os tutoriais, gerados a partir do repositório. Documentação
Rust, Python, JavaScriptExecutado contra a v0.40.0

Cada programa executa o cenário clock-holdover incluído (escreva-o com kshana example clock-holdover > clock-holdover.toml) e imprime o mesmo resumo de uma linha. Os README dos pacotes trazem as versões completas.

src/main.rs · após 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 tem também run_scenario, validate_scenario, list_scenario_kinds e os exportadores de órbita. Documentação de Rust

Abrir no Kshana Studio: clock-holdover

Interoperabilidade · leitura e escritaCada linha indica a sua verificação

Formatos que o motor trata atualmente, a partir da página de normas do repositório (Docs: standards). Abra uma linha para ver como lá chegar e face ao que foi verificada.

  • CCSDS OEM Consultative Committee for Space Data Systems, Orbit Ephemeris Messageleitura · escrita
    Como
    --export-oem, MCP export_oem
    Verificado face a
    O exemplo do Blue Book da CCSDS, recuperado textualmente
  • CCSDS OMM Orbit Mean-Elements Messageescrita
    Como
    --export-omm, MCP export_omm
    Verificado face a
    Teste de ida e volta com conjuntos de elementos de duas linhas reais
  • SP3-c / SP3-d Standard Product 3, efemérides precisasleitura · escrita
    Como
    --export-sp3, MCP export_sp3
    Verificado face a
    Ida e volta com um instantâneo de uma constelação GPS (Global Positioning System) real
  • CCSDS TDM Tracking Data Messageleitura · escrita
    Como
    Biblioteca Rust
    Verificado face a
    O exemplo do Blue Book da CCSDS, recuperado textualmente
  • CCSDS Space Packet pacotes de telemetria e telecomandoleitura · escrita
    Como
    Cenários space-packet
    Verificado face a
    Vetores de teste ao nível do byte publicados de uma biblioteca independente
  • RINEX Receiver Independent Exchange Format, navegação e observaçãoleitura
    Como
    Entradas de cenário, como pvt
    Verificado face a
    Ficheiros de observação de uma estação real do International GNSS (Global Navigation Satellite System) Service
  • TLE conjunto de elementos de duas linhasleitura
    Como
    Cenários orbit
    Verificado face a
    Os vetores de referência oficiais da AIAA (American Institute of Aeronautics and Astronautics)
  • IONEX IONosphere map EXchange formatleitura
    Como
    Biblioteca Rust
    Verificado face a
    Lê o produto do International GNSS Service; ainda não há nenhuma verificação externa listada
  • Orientação da Terra do IERS International Earth Rotation and Reference Systems Serviceleitura
    Como
    --eop com um ficheiro finals2000A
    Verificado face a
    O produto oficial, incluindo as linhas previstas
  • KIF Kshana Interchange Formatleitura · escrita
    Como
    Envelope em torno de qualquer resultado
    Verificado face a
    O envelope versionado próprio do Kshana, não uma norma externa; cada consumidor recebe um veredicto de compatibilidade
  • JSON, SVG, HTML, CSV as saídas da execuçãoescrita
    Como
    Cada execução; MCP export_table_csv
    Verificado face a
    Determinista a partir do cenário, da semente e da versão do motor
Plugin para IDE JetBrainsIntelliJ · PyCharm · CLion

Prefere clicar?

A extensão "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 numa janela de ferramentas.

Benchmark

Execute o benchmark.

kshana bench score transforma um ficheiro de submissão e a referência de uma partição num ficheiro de resultados, e kshana bench leaderboard gera ficheiros de resultados numa página estática. Nada é executado em seu nome e nada é carregado.