Autentique-se na sua organização
Na sua própria máquina, o host aceita o seu próprio usuário do sistema operacional sem autenticação. Autentique-se na sua organização para o trabalho que chega a ela além desta máquina: compartilhamentos, os repositórios GitHub da sua organização, e registrar, alterar ou chamar extensões. O primeiro trabalho autenticado em um home reivindica o home para a sua organização. A pessoa autenticada passa a ser dona do trabalho feito ali antes. Depois disso, o host recusa uma requisição sem token enquanto esta máquina não está autenticada nessa organização. Preencha a tabela
[identity] no config.toml com os valores que a sua organização fornece: issuer, jwks_url, auth_url, device_url e client_id. Um host sem issuer ou jwks_url recusa todo token. O host aplica uma mudança em [identity] no seu próximo início depois que uma pessoa permite o novo config.toml em uma conversa acompanhada. Veja Quando uma mudança de configuração vale.
- O
narya loginimprime uma URL e um código curto. Abra a URL em qualquer máquina com navegador e digite o código. - O
narya whoamiinforma com qual identidade esta máquina está autenticada, sem chamada de rede. - O
narya logoutremove a autenticação.
O host
1
Comece o host
Rode
narya host start. O host toma o lock do armazenamento e escuta no socket dentro da sua pasta Narya.2
Verifique
Rode
narya host status. Ele informa se há um host rodando e o estado de cada um dos servidores de ferramentas dele, incluindo os de um repositório confiado. Ele sai com 1 enquanto algum deles está fora do ar.3
Pare o host
Rode
narya host stop. O host espera até 10 segundos pelas requisições e pelos turnos em andamento e depois solta o lock do armazenamento. Um turno que ainda roda depois de 10 segundos para, e o próximo início o recupera.Manter o host vivo entre logins
O
narya daemon install grava um serviço de login e o carrega: um LaunchAgent no macOS e uma unit systemd de usuário no Linux. Os dois rodam narya host start e o reiniciam depois de uma falha. O Narya grava a unit com permissões 0600. Ele define NARYA_HOME dentro da unit em vez de herdar o valor.
O narya daemon status responde três perguntas em separado: registrado, carregado e servindo. O narya daemon uninstall remove a unit e nada mais. Suas sessões, seu armazenamento e sua configuração continuam.
O host e cada sessão dentro dele sobrevivem a um terminal fechado. Um narya -p posterior se conecta ao host em execução em vez de abrir o armazenamento por conta própria.
O
narya daemon install é o único comando que grava uma unit de serviço.Sessões
Cada sessão se liga a um caminho de repositório. Retome uma com
narya -s <session-id> ou com narya -p --session <session-id>.
- O
narya session listlista as sessões no armazenamento. - O
narya export <session-id>grava uma transcrição na saída padrão. Escolha--format markdownou--format jsonl. Adicione--reasoninge--tool-outputpara mais detalhe. - O
narya import <file> --repository <absolute path>lê uma transcrição de outra ferramenta. Defina--format claudecodeou--format opencode. - O
narya session promote <session-id>entrega a sessão ao host em execução, então uma pergunta de permissão posterior nela é recusada e registrada. - O
narya session share <session-id>copia a sessão para o home da sua organização. Adicionesyncpara continuar enviando as entradas posteriores.
Compartilhar uma sessão
Um compartilhamento copia uma sessão para o home da sua organização, onde sua equipe a lê. O host mascara as entradas antes que elas saiam da sua máquina. Você define as regras de mascaramento na tabela
[sharing.redaction] do config.toml.
1
Veja a prévia do compartilhamento
Chame
GET /v1/sessions/{sessionId}/share/preview. A resposta traz cada entrada como o host a enviaria, e ela nomeia cada regra que reteve algo. Uma prévia não envia nada.2
Publique a sessão
Chame
POST /v1/sessions/{sessionId}/share com mode. O once copia as entradas que existem agora. O sync também envia as entradas que vierem depois. A resposta traz o novo shareId.- O
expiresAtdefine quando o compartilhamento termina. Sem ele, vale a janela do host. Defina essa janela comdefault_expiryna tabela[sharing]. - O
recipientsnomeia os colegas para quem o compartilhamento é. Sem ele, o compartilhamento é para a organização inteira. Apenas o dono da sessão pode nomear destinatários.
503 com NRY-0029 significa que o host registrou o compartilhamento e enfileirou as entradas dele, mas o home da organização não respondeu. O host envia as entradas mais tarde. Cada publicação cria um novo compartilhamento, então uma segunda publicação da mesma sessão cria um segundo compartilhamento.
- O
GET /v1/sessions/{sessionId}/sharelista os compartilhamentos ativos da sessão que você pode alterar. - O
PUT /v1/shares/{shareId}/recipientsaltera para quem um compartilhamento é. - O
DELETE /v1/sessions/{sessionId}/sharerevoga todos os compartilhamentos da sessão e apaga a cópia no home da organização. Um503comNRY-0029significa que a cópia ainda está lá. Envie a requisição de novo quando o home responder. - O
GET /v1/sharesno home da organização lista os compartilhamentos que você pode ler lá.
Rodar uma sessão em um ambiente
Um ambiente é um contêiner que o host provisiona para as suas sessões. Uma sessão que não nomeia nenhum ambiente roda na máquina do host. O host provisiona ambientes apenas quando a variável de ambiente
NARYA_SANDBOX_IMAGE nomeia a imagem a rodar. O host os roda no Docker Engine 23 ou posterior, e a imagem já deve estar no daemon do Docker.
Adicione --container ao narya ou ao narya -p para abrir uma nova conversa em um contêiner próprio, conversation-<sessionId>. Pela API, defina container como true no POST /v1/sessions. Este contêiner, e todo contêiner de um home hospedado, para depois de 15 minutos sem uso, mantém os seus arquivos e volta a rodar na próxima mensagem. Arquivar a conversa remove o contêiner.
- O
POST /v1/environmentscria um ambiente. Apenas oidé obrigatório. OsetupScriptroda uma vez dentro do novo ambiente. Orepositorynomeia um repositório que sua organização selecionou no GitHub App do Narya, comoowner/name, e o host o clona no ambiente. - O
GET /v1/environmentslista os seus ambientes, e oGET /v1/environments/{environmentId}lê um deles. - O
DELETE /v1/environments/{environmentId}destrói um ambiente.
environment do POST /v1/sessions.
Uma criação é idempotente no id. Quando você envia um id que já criou, o host responde 200 com esse ambiente. Ele não provisiona nada e não roda nenhum script de configuração.
Quando o script de configuração retorna, o host para cada processo que o script deixou rodando. Um processo que saiu do grupo de processos do script, por exemplo com setsid, e ainda roda faz a configuração falhar.
Quando o script de configuração falha ou passa do limite de tempo do host, o ambiente fica unusable. O campo setup dele traz o resultado e a saída do script. Uma sessão não pode rodar em um ambiente unusable. Destrua-o e depois crie-o de novo com um script corrigido.
Um home que a Lerian hospeda
A Lerian também roda o Narya como um home hospedado, um para cada organização. O home hospedado serve a mesma API do host. Cada sessão nele roda em um contêiner.
- Uma sessão que não nomeia nenhum
environment,cloneoucontainerrecebe o seu contêiner,conversation-<sessionId>, no primeiro turno. Comclone, ou comcontainerdefinido comotrue, a sessão recebe o seu contêiner na criação. - Defina
clonenoPOST /v1/sessionspara clonar um repositório no contêiner quando a sessão é criada. Nomeie um repositório que sua organização selecionou no GitHub App do Narya, comoowner/name. A sessão trabalha no próprio branch,narya/conversation-<sessionId>. - Depois do clone, o
.narya/setup.shdo repositório roda uma vez no contêiner. OsetupScripto substitui. Um clone ou uma configuração que falha não abre nenhuma sessão. - O caminho
repositoryde uma sessão é relativo ao workspace do home. - Arquivar a conversa remove o contêiner, o clone e o branch dela. Um branch que a sessão enviou continua no GitHub.
.narya/setup.sh do repositório muda, e tira um novo na próxima configuração que dá certo. Se a configuração editar um arquivo que o git rastreia, o home não guarda nenhum snapshot.
Um home hospedado recusa estas requisições com 422:
- Uma instalação de pacote. Registre uma extensão em um endereço HTTPS no lugar.
- Um login
subscription. - Uma resposta de confiança. Uma sessão nele recebe a confiança do seu contêiner.
- Um
worktreeem uma nova sessão.
Checkpoints e rebobinagens
Dentro de um repositório git, o Narya registra pontos de restauração da sua árvore de trabalho em um repositório git sombra ao lado do seu checkout. Seu próprio histórico git nunca muda. Nenhum temporizador remove um checkpoint. Fora de um repositório git, o Narya não registra nenhum, e recusa uma rebobinagem dos arquivos. Uma rebobinagem leva uma sessão para trás na conversa, nos arquivos, ou em ambos. Diga o escopo, porque ele não tem padrão. Antes de uma rebobinagem mover arquivos, o Narya registra a árvore como ela está, então o estado que você deixa vira um ponto de restauração próprio.
Saúde e reparo
O
narya doctor percorre a instalação e informa o que encontra:
- a pasta raiz e a configuração
- o host e o armazenamento
- as sessões, os jobs de pacotes e os servidores de ferramentas
- as credenciais
- o binário e o terminal
narya repair <session-id> é a saída de uma quarentena. Na inicialização, o Narya recupera cada sessão que um desligamento sujo deixou rodando e coloca em quarentena a que ele não consegue reproduzir. Esse comando tenta essa recuperação de novo. Adicione --retire para arquivar a sessão em vez disso, com a transcrição mantida.
Retenção
O Narya apaga os eventos de um turno depois que o turno termina, e a transcrição mantém o turno. O Narya guarda todo o resto até você dizer o contrário. Defina uma idade máxima por classe em
[retention] no config.toml.
- O
narya retention statusinforma o que uma varredura removeria. - O
narya retention runfaz a varredura. - O
narya purge <session-id> --yesapaga uma sessão e a transcrição dela. Ele recusa enquanto a sessão tem um compartilhamento ativo, então revogue o compartilhamento antes.
narya repair, o narya retention e o narya purge abrem o armazenamento por conta própria, então recusam enquanto um host roda. Pare o host antes com narya host stop.
