specrails-desktop 2.25.0 → 2.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/dist/assets/{ActivityFeedPage-BGRTOOhT.js → ActivityFeedPage-1eXnoNAo.js} +1 -1
- package/client/dist/assets/{AgentBrowserCapture-DvDLxsUy.js → AgentBrowserCapture-BHW_6Vm0.js} +1 -1
- package/client/dist/assets/{AgentModeCodePane-DfwctjzN.js → AgentModeCodePane-C89SAJzI.js} +2 -2
- package/client/dist/assets/{AgentModeJobsPane-G3WrS-sE.js → AgentModeJobsPane-BG_4r4Dm.js} +1 -1
- package/client/dist/assets/{AgentsPage-DGFFijMC.js → AgentsPage-BrkWfc9s.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-hoJmlEpk.js → AnalyticsPage-CMZRUPrT.js} +1 -1
- package/client/dist/assets/{BarChart-BEhAXVK-.js → BarChart-BtF3zJHa.js} +1 -1
- package/client/dist/assets/{CodePage-B4zB9DVC.js → CodePage-Cime5FRs.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-CBX-Qpxd.js → DesktopAnalyticsPage-CSKHSBBF.js} +1 -1
- package/client/dist/assets/{DocsDialog-lTsnNdAM.js → DocsDialog-ClTq6Fzj.js} +1 -1
- package/client/dist/assets/{DocsPage-CkvdGroT.js → DocsPage-DTxfOpTu.js} +1 -1
- package/client/dist/assets/{ExportDropdown-Da98gR-P.js → ExportDropdown-Ho9zdPvK.js} +1 -1
- package/client/dist/assets/{IntegrationsPage-Cf9o4eZq.js → IntegrationsPage-DWNyo6jk.js} +1 -1
- package/client/dist/assets/{InteractiveJobComposer-C8N-Bbnn.js → InteractiveJobComposer-CYxXOKld.js} +1 -1
- package/client/dist/assets/{JobDetailModal-BZVwIIEx.js → JobDetailModal-DrNafHY5.js} +1 -1
- package/client/dist/assets/{JobDetailPage-CQewQ1zy.js → JobDetailPage-4VKw33GW.js} +1 -1
- package/client/dist/assets/{JobsPage-CB4wOxmE.js → JobsPage-cFr6wWaH.js} +1 -1
- package/client/dist/assets/{LoopBuilderPage-B9Y5gt08.js → LoopBuilderPage-Bk8zVvEX.js} +1 -1
- package/client/dist/assets/{LoopPreviewModal-kxQ5kV1t.js → LoopPreviewModal-XFSO2Vcs.js} +1 -1
- package/client/dist/assets/{LoopsPage-RysW-6sC.js → LoopsPage-DWMwDj9g.js} +1 -1
- package/client/dist/assets/{ProjectSettingsDialog-BHN5qsGT.js → ProjectSettingsDialog-DnSe_yWm.js} +1 -1
- package/client/dist/assets/{TemplatePreviewModal-DW6lZCIs.js → TemplatePreviewModal-B30-TY_v.js} +1 -1
- package/client/dist/assets/agent-6mhkV25_2.js +1 -0
- package/client/dist/assets/agent-BZqfQhI_.js +1 -0
- package/client/dist/assets/agent-Bjy1SlT5.js +1 -0
- package/client/dist/assets/agent-Bn6ZmjHj.js +1 -0
- package/client/dist/assets/{agent-G6Zn2gpr.js → agent-CRYdi9-t.js} +1 -1
- package/client/dist/assets/agent-D5QNn9np2.js +1 -0
- package/client/dist/assets/agent-DgFoLgrF2.js +1 -0
- package/client/dist/assets/agent-DgwPsxWQ.js +1 -0
- package/client/dist/assets/{brain-B9dkGuAN.js → brain-DcXkQwzO.js} +1 -1
- package/client/dist/assets/code-CwnBPPyA.js +1 -0
- package/client/dist/assets/{dashboard-4WX7agHF2.js → dashboard-CuGuy2__2.js} +1 -1
- package/client/dist/assets/{dashboard-IbEztmJ52.js → dashboard-CxP3TZ3I2.js} +1 -1
- package/client/dist/assets/{dashboard-5Z_esXIB.js → dashboard-DWHVfP7U.js} +1 -1
- package/client/dist/assets/{dashboard-DQ-po1MG2.js → dashboard-D_Pgs6QH2.js} +1 -1
- package/client/dist/assets/{dashboard-oqS7VRrK.js → dashboard-Dwnssayh.js} +1 -1
- package/client/dist/assets/{dashboard-ojWdDq6S.js → dashboard-S_pT1yxN.js} +1 -1
- package/client/dist/assets/{dashboard-zfoJcdFW.js → dashboard-tCxOFOxx.js} +1 -1
- package/client/dist/assets/{dashboard-nc-Raovv.js → dashboard-zefbBNyG.js} +1 -1
- package/client/dist/assets/{dist-js-BW5-IZTP.js → dist-js-6U6hyD6z.js} +1 -1
- package/client/dist/assets/{dist-js-Bbd7Wzdw.js → dist-js-BAWwLSIj.js} +1 -1
- package/client/dist/assets/index-DnkfABxY.js +156 -0
- package/client/dist/assets/index-cvOunQkD.css +2 -0
- package/client/dist/assets/{lib-EIkIPf26.js → lib-Bsny0zZp.js} +1 -1
- package/client/dist/assets/{loops-YYV2bwjd.js → loops-Brnx4Fji.js} +1 -1
- package/client/dist/assets/{loops-hXgncEpF2.js → loops-BvqQ-bHR2.js} +1 -1
- package/client/dist/assets/{loops-BvEenWBy.js → loops-CvOWsi5r.js} +1 -1
- package/client/dist/assets/{loops-DjOtVXRo.js → loops-D6D3XHjj.js} +1 -1
- package/client/dist/assets/{loops-HTHf-xu32.js → loops-DJNhp17p2.js} +1 -1
- package/client/dist/assets/{loops-kYbydDyN.js → loops-K5_HXfJa.js} +1 -1
- package/client/dist/assets/loops-LIgO_-eM.js +1 -0
- package/client/dist/assets/{loops-DNGiYKll2.js → loops-vhJdbcz92.js} +1 -1
- package/client/dist/assets/{settings-DZJeXoRV.js → settings-BWIf3vv4.js} +1 -1
- package/client/dist/assets/{settings-TNga5gIF2.js → settings-BhuXe7ek2.js} +1 -1
- package/client/dist/assets/{settings-D6qY9_UI.js → settings-DE8t6aYv.js} +1 -1
- package/client/dist/assets/{settings-BsJMsWGc.js → settings-DHd1lQ1k.js} +1 -1
- package/client/dist/assets/{settings-BOHOmHkb.js → settings-DTYQ5COE.js} +1 -1
- package/client/dist/assets/settings-DXgPh9-k.js +1 -0
- package/client/dist/assets/{settings-BlEA_7h02.js → settings-Dgv_q4qf2.js} +1 -1
- package/client/dist/assets/{settings-lFoaYT-s2.js → settings-FJXpJ3k92.js} +1 -1
- package/client/dist/assets/{setup-CmU6bTCV2.js → setup-cnqZsQSX2.js} +1 -1
- package/client/dist/assets/{upload-BCMl-nCg.js → upload-49vX83IZ.js} +1 -1
- package/client/dist/assets/{value-CG-amSq1.js → value-Bo8EiTZE.js} +1 -1
- package/client/dist/index.html +6 -6
- package/docs/agy-cli-provider-study.md +1 -1
- package/docs/codex.md +2 -2
- package/docs/gemini-cli-provider-study.md +2 -2
- package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/pt/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/internals/api-reference.md +3 -3
- package/docs/internals/companion-rails-as-loops-contract.md +6 -6
- package/docs/internals/configuration.md +1 -1
- package/docs/internals/interactive-jobs.md +3 -3
- package/docs/internals/safe-pr-review-flow.md +1 -1
- package/docs/internals/visual-design-audit.md +2 -2
- package/docs/running-pipelines.md +1 -1
- package/package.json +1 -1
- package/server/dist/agent-chat-manager.js +16 -2
- package/server/dist/agent-chat-router.js +66 -1
- package/server/dist/agent-context-resolver.js +301 -0
- package/server/dist/agent-operator-prompt.js +14 -7
- package/server/dist/agent-store.js +24 -12
- package/server/dist/db.js +17 -17
- package/server/dist/desktop-db.js +6 -0
- package/server/dist/feature-flags.js +2 -2
- package/server/dist/index.js +1 -1
- package/server/dist/interactive-job-session.js +3 -3
- package/server/dist/loop-command-catalog.js +11 -11
- package/server/dist/loop-factory.js +7 -7
- package/server/dist/loop-graph.js +2 -2
- package/server/dist/loop-run-manager.js +1 -1
- package/server/dist/mcp/guide.js +8 -6
- package/server/dist/mcp/tools/rails.js +4 -3
- package/server/dist/mobile/mobile-router.js +1 -1
- package/server/dist/project-router-jobs.js +1 -1
- package/server/dist/project-router-loop-runs.js +1 -1
- package/server/dist/project-router-settings.js +5 -5
- package/server/dist/queue-manager.js +27 -27
- package/server/dist/rails-router.js +20 -20
- package/client/dist/assets/agent-4ARs0uac2.js +0 -1
- package/client/dist/assets/agent-C55wwsUX.js +0 -1
- package/client/dist/assets/agent-C_kqyrXo.js +0 -1
- package/client/dist/assets/agent-Df3lnHMu.js +0 -1
- package/client/dist/assets/agent-MQhun7cv.js +0 -1
- package/client/dist/assets/agent-NqlER4Yh2.js +0 -1
- package/client/dist/assets/agent-OTGI6t7e2.js +0 -1
- package/client/dist/assets/code-CqCcRThR.js +0 -1
- package/client/dist/assets/index-BtAks9nm.css +0 -2
- package/client/dist/assets/index-DC-REAcL.js +0 -155
- package/client/dist/assets/loops-CBiWd9Hf.js +0 -1
- package/client/dist/assets/settings-Mr7MnJbf.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=`Loops`,t=`Loops de automação reutilizáveis — partilhados entre todos os seus projetos.`,n=`Novo loop`,r={drafts:`Rascunhos`,published:`Publicados`,templates:`Modelos`,builtIn:`Integrados`},i={search:`Buscar modelos…`,noResults:`Nenhum modelo corresponde aos seus filtros.`,clearFilter:`Limpar filtros`,resultCount_one:`{{count}} modelo`,resultCount_other:`{{count}} modelos`,needsSpec:`Requer spec`,standalone:`Autônoma`,needsSpecHint:`Roda em um rail com uma spec arrastada`,standaloneHint:`Roda sozinha — basta escolher um projeto`},a={API:`API`,Automation:`Automação`,CI:`CI`,Database:`Banco de dados`,Debugging:`Depuração`,DevOps:`DevOps`,Docs:`Docs`,Git:`Git`,Maintenance:`Manutenção`,Performance:`Desempenho`,Planning:`Planejamento`,Quality:`Qualidade`,Review:`Revisão`,Security:`Segurança`,Testing:`Testes`},o={draft:`Rascunho`,published:`Publicado`,running:`Em execução`},s={title:`Ainda não há loops`,body:`Crie um do zero ou comece a partir de um modelo.`},c={edit:`Editar`,delete:`Eliminar`,publish:`Publicar`,unpublish:`Despublicar`,duplicate:`Duplicar`,use:`Usar modelo`,preview:`Pré-visualização`,fork:`Bifurcar para editar`,run:`Executar`,export:`Exportar`,import:`Importar`,select:`Selecionar {{name}}`},l={nodes_one:`{{count}} nó`,nodes_other:`{{count}} nós`,usedIn:`Em uso · {{project}}`},u=`Eliminar este loop? Desaparecerá de todos os seletores de rail.`,d=`Novo loop`,f={load:`Falha ao carregar os loops`,save:`Falha ao guardar o loop`,publishInvalid:`Este loop ainda não pode ser publicado — corrija os problemas assinalados.`},p={back:`Voltar aos Loops`,save:`Guardar`,saved:`Loop guardado`,publish:`Publicar`,published:`Loop publicado`,addNode:`Adicionar nó`,deleteNode:`Eliminar nó`,config:{maxIterations:`Iterações máximas`,timeout:`Tempo limite (min)`,maxIterationsHint:`Limite de iterações do Loop Decider — o loop para ao atingi-lo mesmo que o objetivo não seja cumprido. Evita loops infinitos.`,timeoutHint:`Limite de tempo real de toda a execução, em minutos. Se excedido, a execução é interrompida e marcada como falha — uma rede de segurança junto com as iterações máximas.`,maxCost:`Custo máx ($)`,maxCostHint:`Orçamento opcional em USD para toda a execução. Verificado ENTRE passos (o custo de um passo só é conhecido ao terminá-lo), o loop para antes do próximo passo quando o total ultrapassa — pode passar um passo. Em provedores não-Claude o custo é estimado. Vazio = sem limite.`},nodes:{start:`Início`,"ai-step":`Passo de IA`,shell:`Shell`,decider:`Decisor do Loop`,condition:`Condição`,end:`Fim`},inspector:{selectNode:`Selecione um nó para o editar.`,prompt:`Prompt`,provider:`Fornecedor`,model:`Modelo`,effort:`Esforço de raciocínio`,command:`Comando`,goal:`Objetivo / critérios de paragem`,join:`Junção`,outcome:`Resultado`,startNote:`O ponto de entrada do loop. Ligue-o ao primeiro passo.`,promptHint:`Clique ou arraste um token para inseri-lo no prompt.`,tokensSpec:`Campos da spec`,tokensJira:`Jira`,tokensCommands:`Comandos`,label:`Nome`},branch:{continue:`↻ Continuar`,stop:`✓ Parar`},edgesHelp:{label:`Como as etapas se conectam`,body:`As setas definem a ORDEM de execução, não os dados — as caixas não têm portas de entrada e as conexões não carregam parâmetros. Cada AI Step retoma automaticamente sua sessão (todo o contexto anterior) mais um breve resumo das etapas anteriores; nada é ligado manualmente. O Loop Decider tem duas saídas: ↻ Continuar (objetivo não atingido → volta ao loop) e ✓ Parar (objetivo atingido → sai).`},arrange:{label:`Organizar`,vertical:`Vertical`,horizontal:`Horizontal`,grid:`Grade`,reset:`Redefinir`},constants:{label:`Constantes`,manage:`Gerenciar constantes`,title:`Constantes do loop`,empty:`Ainda não há constantes personalizadas.`,name:`NOME`,value:`valor`,add:`Adicionar`,builtinBadge:`Integradas`},paste:{done_one:`{{count}} passo colado`,done_other:`{{count}} passos colados`},problems:{count_one:`{{count}} problema`,count_other:`{{count}} problemas`,NO_START:`Adicione um nó de Início.`,MULTIPLE_START:`Só é permitido um nó de Início.`,NO_END:`Adicione pelo menos um nó de Fim.`,ORPHAN:`Este passo não é acessível a partir do Início.`,DECIDER_BRANCHES:`O Loop Decider precisa de uma ramificação Continuar e uma Parar.`,EMPTY_PROMPT:`O AI Step está com o prompt vazio.`,EMPTY_COMMAND:`O passo Shell está com o comando vazio.`,EMPTY_GOAL:`O Loop Decider não tem objetivo.`,DEAD_END:`Este passo não tem conexão de saída.`},preview:{label:`Pré-visualizar`,title:`Pré-visualização (dry-run)`,sampleNote:`Os valores do spec são exemplos; comandos e constantes são resolvidos como em execução.`,empty:`Nenhum passo para pré-visualizar.`,error:`Falha na pré-visualização`}},m={steps:`Passos`,limits:`máx. {{iterations}} iterações · {{timeout}} min de timeout`,openInBuilder:`Abrir no builder`,builtin:`Integrado`},h=`Integrado`,g={title:`Executar {{name}}`,subtitle:`Inicia este loop num projeto (sem ticket).`,project:`Projeto`,provider:`Provedor`,model:`Modelo`,effort:`Esforço de raciocínio`,execute:`Executar`,noProjects:`Sem projetos disponíveis.`,launched:`Executando {{name}}`},_=JSON.parse(`{"ship-and-green":{"name":"Ship & Green","description":"Totalmente autônomo: implementa a spec, verifica e refina (corrige) em caso de falha — repetindo verificar → corrigir → verificar até tudo ficar verde. Sem intervenção humana."},"verify-pass":{"name":"Verificação","description":"Verificação e correção autônomas: detecta e executa o build/lint/testes do projeto e, em caso de falha, refina — verificar → corrigir → verificar até ficar verde."},"ci-watch":{"name":"Monitorar CI","description":"Consulta as verificações de CI no PR aberto (o agente usa as ferramentas de CI do repositório) até que todas fiquem verdes."},"lint-and-fix":{"name":"Lint & Corrigir","description":"O agente detecta e executa o lint do projeto e corrige cada problema, iterando até o código ficar limpo."},"type-safe":{"name":"Tipos Seguros","description":"O agente detecta e executa o verificador de tipos do projeto e resolve cada erro, iterando até passar sem problemas."},"coverage-climb":{"name":"Subir Cobertura","description":"O agente executa a ferramenta de cobertura do projeto e adiciona testes focados até atingir os limites exigidos."},"build-fix":{"name":"Corrigir Build","description":"O agente detecta e executa o build de produção do projeto e corrige erros de compilação/empacotamento até ficar verde."},"deploy-check":{"name":"Checar Deploy","description":"O agente consulta o status de deploy/saúde (usando as ferramentas de deploy do projeto) até o serviço reportar que está saudável."},"factory_implement":{"name":"Implementar","description":"Totalmente autônomo: implementa a spec, verifica e refina (corrige) em caso de falha — repetindo até todos os testes passarem."},"factory_batch":{"name":"Implementar em Lote","description":"Implementa de uma vez todos os tickets do trilho e, em seguida, verifica + refina em caso de falha até ficar verde."},"factory_ultracode":{"name":"Freestyle","description":"Entrega a spec diretamente ao modelo com total liberdade — sem pipeline, ele trabalha como um agente de código normal, depois verifica + refina até ficar verde. Somente Claude."},"autoloop-tdd":{"name":"Autoloop TDD","description":"Um ciclo rigoroso de red-green-refactor para {{spec.title}}: defina cada comportamento primeiro com um teste que falha, escreva só o código necessário para deixá-lo verde e então organize — repetindo até cobrir totalmente a spec."},"e2e-until-green":{"name":"E2E até passar","description":"Rode a suíte end-to-end de {{spec.title}}, diagnostique cada fluxo de usuário que falha, corrija o defeito de UI ou integração por trás dele e siga iterando até todas as specs E2E passarem."},"flaky-test-triage":{"name":"Triagem de testes instáveis","description":"Reexecute várias vezes os testes que falham em torno de {{spec.title}} para separar regressões reais de instabilidades intermitentes, depois conserte as quebras reais e estabilize ou documente as instáveis."},"independent-verifier-pass":{"name":"Verificação independente","description":"Uma verificação adversarial de {{spec.title}}: rode build, lint e testes do zero, confie só na saída crua dos comandos (não em qualquer alegação prévia de 'funciona') e exponha ou corrija cada falha."},"post-edit-test-guard":{"name":"Teste pós-edição","description":"Após cada lote de edições em {{spec.title}}, rode imediatamente o menor conjunto de testes que toca os arquivos alterados — pegando regressões no instante em que surgem, em vez de só no final."},"post-merge-regression-guard":{"name":"Guarda pós-merge","description":"Logo após um merge ou rebase trazer o trabalho de outras pessoas para {{spec.title}}, rode o smoke test rápido para pegar quebras de integração na hora — antes de começar qualquer nova feature em cima disso."},"pre-commit-guard":{"name":"Guarda pré-commit","description":"Um portão de segurança para {{spec.title}} que intercepta cada commit: roda a suíte de testes primeiro e se recusa a commitar enquanto ela estiver vermelha, para que código quebrado nunca entre no histórico."},"visual-regression-until-match":{"name":"Regressão visual até bater","description":"Capture snapshots visuais da UI alterada, cace cada diferença de pixel não intencional e se autocorrija até a suíte visual ficar verde, com apenas as mudanças de design deliberadas aprovadas."},"format-until-clean":{"name":"Formatar até limpar","description":"Aplique o formatador do projeto, resolva os poucos problemas de estilo que ele não corrige sozinho e siga até uma nova formatação não alterar mais nada na árvore de trabalho."},"lint-typecheck-fix":{"name":"Corrigir lint e tipos","description":"Rode o lint e o verificador de tipos, resolva cada problema reportado com a menor edição possível e itere até ambos os portões voltarem completamente limpos."},"a11y-audit-until-clean":{"name":"Auditoria de a11y","description":"Rode as verificações automáticas de acessibilidade nas telas alteradas, corrija as violações uma categoria por vez e repita até a auditoria voltar sem nenhum problema."},"de-sloppify-pass":{"name":"Passada de limpeza","description":"Depois que a feature entra, varra o diff atrás de sobras desleixadas — saída de debug, ramos mortos, nomes ruins, funções inchadas — limpe tudo e comprove que a limpeza não quebrou nada."},"fix-ci-until-green":{"name":"Corrigir CI até passar","description":"Pegue a execução de CI mais recente que ficou vermelha nesta branch, reproduza a quebra na sua máquina, corrija a causa real, faça push e siga iterando até todas as checagens reportarem sucesso."},"pr-babysitter":{"name":"Babá de PRs","description":"Em intervalos recorrentes, varra os pull requests que você acompanha e mantenha cada um mergeável: reviva CI vermelho, faça rebase dos que ficaram atrás da branch base e cutuque os parados — escalando tudo o que precisa da decisão de um humano."},"pr-watch-loop":{"name":"Acompanhar PRs","description":"Consulte os pull requests da sua lista de acompanhamento em cadência constante, resuma a saúde de CI e revisão de cada um e resolva os bloqueios triviais ou destaque o que precisa de um responsável."},"pr-self-review":{"name":"Auto-revisão de PR","description":"Critique o seu próprio diff como faria um revisor sênior exigente, resolva o que encontrar e revise de novo até uma passada limpa não apontar nada crítico — antes mesmo do PR sair das suas mãos."},"spec-first-ship":{"name":"Spec primeiro","description":"Leve um checklist escrito de requisitos até o fim, um item por vez — cada passada implementa um único requisito não marcado, comprova e o risca — para que a spec seja o contrato do 'pronto'."},"dependency-audit-weekly":{"name":"Auditoria semanal de deps","description":"A cada semana, faça um balanço de quais pacotes ficaram para trás, separe-os entre seguros de atualizar e arriscados e devolva um plano de upgrade claro e acionável."},"dependency-upgrade-one-by-one":{"name":"Atualizar deps uma a uma","description":"Atualize exatamente um pacote desatualizado por passada, conserte o que a atualização quebrar, comprove que o projeto ainda funciona e commite — bem mais seguro do que atualizar tudo de uma vez."},"knip-until-clean":{"name":"Podar código morto","description":"Cace exports sem referência, arquivos órfãos e dependências que ninguém importa, remova-os com segurança e siga até o scanner de código morto não ter mais nada a reportar."},"docs-sync-after-edits":{"name":"Sincronizar docs com o código","description":"Após uma rodada de edições, rastreie cada doc que as mudanças tocaram — README, referência de API, comentários inline — e alinhe-os de novo com o real comportamento atual do código."},"security-audit-weekly":{"name":"Auditoria semanal de segurança","description":"Rode um scan semanal de vulnerabilidades sobre a árvore de dependências, faça a triagem do que aparecer por severidade e exposição real e devolva um plano de remediação priorizado."},"npm-audit-fix-loop":{"name":"Corrigir vulnerabilidades uma a uma","description":"Resolva os alertas altos e críticos de dependências de forma deliberada — uma correção por passada, cada uma verificada contra a suíte de testes — em vez de um force-fix cego que pode quebrar o build em silêncio."},"api-contract-until-match":{"name":"Contrato de API até bater","description":"Conduza a implementação até suas respostas honrarem o contrato de API publicado, fechando qualquer lacuna entre o que o schema promete e o que os handlers de fato retornam."},"openapi-sync-until-valid":{"name":"Sincronizar OpenAPI","description":"Mantenha o documento OpenAPI bem-formado e fiel aos handlers de rota reais, corrigindo erros da spec e o descompasso código-vs-doc a cada passada até o lint ficar satisfeito."},"migration-until-applied":{"name":"Migração até aplicar","description":"Leve o schema do banco adiante de forma limpa: rode as migrações pendentes, corrija qualquer falha de schema ou SQL que elas revelem e confirme que o histórico de migração permanece consistente."},"bundle-size-budget":{"name":"Orçamento de bundle","description":"Entregue a feature sem inflar o bundle do cliente além do orçamento — meça a cada passada e enxugue, faça code-split ou carregamento lazy até o portão de tamanho ficar verde."},"changelog-sync-after-ship":{"name":"Sincronizar changelog","description":"Após entregar, garanta que o changelog conte a história voltada ao usuário: revise o que entrou, escreva as entradas no padrão Keep-a-Changelog e confirme que nada visível ficou de fora."},"guardrails-learning-loop":{"name":"Loop de guardrails","description":"Siga iterando nos portões até ficarem verdes, mas toda vez que uma checagem falhar do mesmo jeito duas vezes, anote primeiro uma nota de guardrail para que o loop nunca gaste iterações tentando de novo uma abordagem que já falhou."},"ralph-story-executor":{"name":"Executor de histórias","description":"Trabalhe um backlog de histórias de usuário uma por vez, com contexto novo a cada passada: pegue a próxima história pendente, construa só ela, comprove que os portões do projeto seguem verdes, commite e marque como pronta antes de seguir."},"investigation-script-loop":{"name":"Script de investigação","description":"Identifique empiricamente a verdadeira causa de um bug: escreva um script descartável minúsculo que exercita o comportamento suspeito, rode-o, leia a saída real e refine a sonda até a própria saída provar a causa raiz."},"reflexion-debug-loop":{"name":"Debug com reflexão","description":"Deixe um teste que falha verde sem ficar patinando: cada vez que uma tentativa falha, registre uma reflexão curta em disco e consulte-a antes da próxima tentativa, para que o loop nunca repita uma correção já descartada."},"merge-conflict-resolver":{"name":"Resolver conflitos de merge","description":"Atualize a branch em relação ao alvo via rebase, depois resolva cada arquivo em conflito um a um preservando a intenção dos dois lados e comprove que o resultado ainda passa antes de declarar a branch em dia."},"staging-smoke-test":{"name":"Smoke test em staging","description":"Após um deploy em staging, percorra um checklist fixo de smoke — auth, os fluxos centrais de usuário e as integrações-chave — corrigindo o menor problema sempre que algo quebra e reexecutando até o checklist inteiro voltar limpo."},"deploy-verification-loop":{"name":"Verificação de deploy","description":"Depois que um deploy sai, consulte os endpoints de saúde e smoke em intervalos, investigando e corrigindo ou escalando qualquer resposta não saudável, e siga checando até todos os endpoints configurados reportarem sucesso."},"factory_openspec":{"name":"OpenSpec Lifecycle","description":"Ciclo OpenSpec do ticket ao arquivo: gera artefatos (opsx:ff) → implementa (opsx:apply) → verifica (opsx:verify); em FAIL volta e emenda o mesmo change, em PASS arquiva sem intervenção."}}`),v={title:e,subtitle:t,newLoop:n,sections:r,gallery:i,categories:a,status:o,empty:s,actions:c,card:l,confirmDelete:u,newLoopName:d,errors:f,builder:p,preview:m,builtInBadge:h,run:g,catalog:_,import:{done_one:`{{count}} loop importado`,done_other:`{{count}} loops importados`,skipped_one:`{{count}} duplicado ignorado: {{names}}`,skipped_other:`{{count}} duplicados ignorados: {{names}}`,invalid:`Esse arquivo não é uma exportação de loops válida.`}};export{c as actions,p as builder,h as builtInBadge,l as card,_ as catalog,a as categories,u as confirmDelete,v as default,s as empty,f as errors,i as gallery,n as newLoop,d as newLoopName,m as preview,g as run,r as sections,o as status,t as subtitle,e as title};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-BNv3lrIs.js";var t=e({appUpdate:()=>v,appearance:()=>m,budget:()=>c,codeSection:()=>p,coreUpdate:()=>_,default:()=>x,desktop:()=>l,errors:()=>i,integrationBranch:()=>b,language:()=>n,mobile:()=>h,notifications:()=>u,page:()=>r,pairWeb:()=>g,prePrompt:()=>o,projectDialog:()=>y,telemetry:()=>a,terminal:()=>f,ultraPrePrompt:()=>s,webhooks:()=>d}),n={title:`Language`,description:`Desktop-wide UI language. Applies instantly — no restart needed.`,selectLabel:`Interface language`,updateFailed:`Could not save the language preference`},r={title:`Project Settings`},i={saveFailed:`Failed to save: {{message}}`},a={title:`Pipeline Telemetry`,description:`Capture token usage, phase durations, and subagent activity for diagnostic export. Off by default.`,toggleLabel:`Enable pipeline telemetry`,toggleDescription:`When on, OTEL data from pipeline jobs is captured locally. Use the <mono>Export diagnostic</mono> button on any job card to download.`,enabled:`Pipeline telemetry enabled`,disabled:`Pipeline telemetry disabled`,saveFailed:`Failed to save telemetry setting`},o={title:`Rail Pre-prompt`,description:`Extra project-specific instructions appended to implement and batch-implement rail jobs after the ticket context and before execution.`,label:`Pre-prompt`,placeholder:`Example: Prefer incremental changes, keep migrations backward compatible, and add tests for every rail change.`,helper:`Use this for stable project guidance that should accompany every rail implementation run.`,saveButton:`Save pre-prompt`,cleared:`Pre-prompt cleared`,saved:`Pre-prompt saved`,saveFailed:`Failed to save pre-prompt`},s={title:`Freestyle pre-prompt`,description:`Instruction sent to Claude in Freestyle (Claude-only rails). Freestyle skips the OpenSpec pipeline — it hands Claude this pre-prompt plus the spec text and lets it implement autonomously. Leave blank to use the built-in default.`,label:`Freestyle pre-prompt`,placeholder:`Leave blank to use the default Freestyle instruction.`,helper:`The spec text is appended automatically after this pre-prompt. Empty = default.`,saveButton:`Save Freestyle pre-prompt`,resetToDefault:`Freestyle pre-prompt reset to default`,saved:`Freestyle pre-prompt saved`,saveFailed:`Failed to save Freestyle pre-prompt`},c={title:`Budget`,description:`Set a daily spend cap for this project. The queue auto-pauses when the limit is hit.`,dailyLabel:`Daily budget (USD)`,dailyHelper:`Leave blank to disable. Spend is calculated over the last 24 hours.`,dailyPlaceholder:`e.g. 5.00`,perJobLabel:`Per-job cost alert (USD)`,perJobHelper:`Alert when a single job in this project exceeds this amount.`,perJobPlaceholder:`e.g. 0.50`,invalidNumber:`Enter a positive number or leave blank to disable`,dailyRemoved:`Daily budget removed`,dailySet:"Daily budget set to ${{amount}}",perJobAlertDisabled:`Per-job cost alert disabled`,alertSet:"Alert set for jobs over ${{amount}}",saveBudgetFailed:`Failed to save budget`,saveThresholdFailed:`Failed to save threshold`},l={nav:{appearance:`Appearance`,code:`Code`,terminal:`Terminal`,updates:`Updates`,mobile:`Mobile`,mcp:`MCP`,projects:`Projects`,advanced:`Advanced`,webhooks:`Webhooks`,about:`About`},title:`Desktop Settings`,description:`Manage registered projects and view Desktop information.`,registeredProjects:`Registered Projects`,noProjects:`No projects registered yet`,techUrlDescription:`Base URL for the specrails-tech API (default: http://localhost:3000)`,techUrlSaved:`specrails-tech URL saved`,techUrlSaveFailed:`Failed to save URL`,budgetAlertsHeading:`Budget & Alerts`,dailyBudgetLabel:`Desktop daily budget (USD)`,dailyBudgetHelper:`Global daily spend limit across all projects. Queues auto-pause when exceeded.`,dailyBudgetPlaceholder:`e.g. 10.00`,perJobHelper:`Alert when a single job exceeds this amount. Leave blank to disable.`,costAlertsDisabled:`Cost alerts disabled`,dailyBudgetRemoved:`Desktop daily budget removed`,dailyBudgetSet:"Desktop daily budget set to ${{amount}}",dailyBudgetSaveFailed:`Failed to save Desktop daily budget`,projectRemoved:`Project removed`,projectRemoveFailed:`Failed to remove project`,onboardingHeading:`Onboarding`,platformTour:`Platform Tour`,platformTourDescription:`Replay the welcome wizard to review key features.`,replayTour:`Replay Tour`,terminalPanelHeading:`Terminal Panel`,infoHeading:`Desktop Information`,infoPort:`Port`,infoProjects:`Projects`,infoDb:`Desktop DB`},u={heading:`OS Notifications`,description:`Show native desktop notifications when jobs complete or fail. Notifications only appear when the tab is not focused.`,enableLabel:`Enable OS Notifications`,notifyOn:`Notify on:`,filterAll:`All (completed & failed)`,filterCompleted:`Completed only`,filterFailed:`Failed only`,enabledToast:`OS notifications enabled`,disabledToast:`OS notifications disabled`},d={heading:`Outbound Webhooks`,description:`Notify external tools (Slack, Zapier, CI/CD) on Desktop events. Requests are signed via <code>X-Specrails-Signature</code> when a secret is set.`,eventJobCompleted:`Job completed`,eventJobFailed:`Job failed`,eventDailyBudgetExceeded:`Daily budget exceeded`,statusOn:`on`,statusOff:`off`,disable:`Disable`,enable:`Enable`,sendTestPing:`Send test ping`,addHeading:`Add webhook`,secretPlaceholder:`Signing secret (optional)`,addButton:`Add Webhook`,urlRequired:`URL is required`,selectEvent:`Select at least one event`,added:`Webhook added`,addFailed:`Failed to add webhook`,updateFailed:`Failed to update webhook`,removed:`Webhook removed`,removeFailed:`Failed to remove webhook`,testPingSent:`Test ping sent`,testPingFailed:`Failed to send test ping`},f={title:`Terminal panel`,desktopDescription:`Desktop-wide defaults applied to every project unless a per-project override is set.`,projectDescription:`Per-project overrides for the terminal panel. Leave a field unchanged to inherit the Desktop default.`,fontFamily:`Font family`,fontSize:`Font size ({{min}}–{{max}})`,renderMode:`Render mode`,copyOnSelect:`Copy on select`,shellIntegration:`Shell integration (OSC 133 marks)`,notifyLongRunning:`Notify on long-running commands`,longCommandThreshold:`Long-command threshold (ms)`,imageRendering:`Inline image rendering (Sixel + iTerm2)`,browserShortcutUrl:`Browser shortcut URL`,quickScript:`Quick script (pasted into active terminal — Enter manually)`,reset:`Reset`,unsavedChanges:`Unsaved changes`,clearOverride:`Clear override`,clear:`Clear`,inheritingDefault:`Inheriting Desktop default`,nothingToSave:`Nothing to save`,saved:`Terminal settings saved`},p={heading:`Code section`,summaryLanguage:`Summary language`,monthlyBudget:`Monthly budget (USD)`,budgetHelper:"Cap on `surface=file-summary` spend per calendar month. User-initiated regenerations can override."},m={taglines:{dracula:`The original — dark purple-tinted with vivid neon accents`,"aurora-light":`Premium light — Linear-inspired indigo on warm off-white`,"obsidian-dark":`Premium dark — near-black blue-tinted with electric accents`,matrix:`Phosphor terminal — soft mint on green-tinted near-black`,specrails:`Brand theme — deep navy-indigo with saturated cyan accents`},heading:`Appearance`,themeGroupLabel:`Theme`,currentlyActive:`Currently active`,updateFailed:`Failed to update theme`},h={heading:`Mobile companion`,description:`Control Specrails from the SpecRails Companion app on your phone, 100% over your local network. Off by default.`,accessOn:`Mobile access on`,accessOff:`Mobile access off`,listeningOnPort:`Listening on port {{port}}`,notListening:`Not listening`,turnOn:`Turn on`,turnOff:`Turn off`,pairWebDevice:`Pair web companion`,reset:`Reset`,resetConfirm:`Reset the mobile identity? Every paired device will be revoked and must pair again.`,identityReset:`Mobile identity reset`,enableFailed:`Could not enable mobile access: {{message}}`,disableFailed:`Could not disable mobile access: {{message}}`,windowsFirewall:`Windows Firewall will ask to allow the SpecRails server on first enable — choose “Allow on private networks”.`,pairedDevices:`Paired devices`,noDevices:`No devices paired yet.`,revokeDevice:`Revoke {{name}}`},g={title:`Pair web companion`,description:`Open specrails.dev/companion-app on your phone, then scan this code with it.`,startFailed:`Could not start pairing: {{error}}`,showThenScan:`After your phone scans this, tap “Scan phone's code” and point the camera at your phone.`,scanAnswer:`Scan phone's code`,scanning:`Point the camera at the code on your phone…`,cameraFailed:`Camera unavailable: {{message}}`,notAnswer:`That QR isn't a pairing answer.`,connecting:`Connecting…`,paired:`✓ Paired`,pairedToast:`Web companion paired`,answerRejected:`The desktop rejected that code. Generate a fresh one and retry.`,copyCode:`Copy code`,codeCopied:`Code copied`,cancel:`Cancel`},_={heading:`Specrails Core`,installed:`Installed:`,updateAvailable:`Update available: {{version}}`,upToDate:`Up to date`,neverChecked:`Not checked yet`,check:`Check for updates`,checking:`Checking…`,update:`Update to {{version}}`,downloading:`Downloading…`,materializing:`Installing…`,affectsAll:`Applies to all projects — no restart needed.`,unavailable:`Core updates aren't available in this build.`,toastDone:`Specrails Core updated to {{version}}`,toastError:`Core update failed: {{message}}`,toastUpToDate:`Specrails Core is up to date`,toastCheckFailed:`Update check failed: {{message}}`},v={heading:`Specrails Desktop`,installed:`Installed:`,check:`Check for updates`,checking:`Checking…`,upToDate:`You're on the latest version`,updateAvailable:`Update available: {{version}}`,autoHint:`Checks automatically at launch and every 6 hours.`,unavailable:`App updates are only available in the desktop app.`,toastUpToDate:`Specrails Desktop is up to date`,toastCheckFailed:`Update check failed: {{message}}`},y={title:`{{name}} — Settings`,description:`Project-level configuration: prompts, budget, telemetry and terminal.`,nav:{general:`General`,budget:`Budget`,telemetry:`Telemetry`,terminal:`Terminal`}},b={title:`Integration branch`,description:`The branch parallel rails branch from and target their draft PRs at. Leave empty to auto-resolve to the repository's default branch.`,placeholder:`auto (repository default)`,resolved:`Rails branch off <mono>{{branch}}</mono>`,save:`Save branch`,saved:`Integration branch saved`,saveFailed:`Could not save the integration branch`},x={language:n,page:r,errors:i,telemetry:a,prePrompt:o,ultraPrePrompt:s,budget:c,desktop:l,notifications:u,webhooks:d,terminal:f,codeSection:p,appearance:m,mobile:h,pairWeb:g,coreUpdate:_,appUpdate:v,projectDialog:y,integrationBranch:b};export{t};
|