specrails-desktop 2.26.0 → 2.26.2

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.
Files changed (91) hide show
  1. package/client/dist/assets/{ActivityFeedPage-1eXnoNAo.js → ActivityFeedPage-bDe4VitF.js} +1 -1
  2. package/client/dist/assets/{AgentBrowserCapture-BHW_6Vm0.js → AgentBrowserCapture-DQyeEm2V.js} +1 -1
  3. package/client/dist/assets/{AgentModeCodePane-C89SAJzI.js → AgentModeCodePane-Ci39DcOo.js} +2 -2
  4. package/client/dist/assets/{AgentModeJobsPane-BG_4r4Dm.js → AgentModeJobsPane-C-g1WNVG.js} +1 -1
  5. package/client/dist/assets/{AgentsPage-BrkWfc9s.js → AgentsPage-BWgglK7V.js} +3 -3
  6. package/client/dist/assets/{AnalyticsPage-CMZRUPrT.js → AnalyticsPage-Da21wWWw.js} +1 -1
  7. package/client/dist/assets/{BarChart-BtF3zJHa.js → BarChart-BiLTq3uC.js} +1 -1
  8. package/client/dist/assets/{CodePage-Cime5FRs.js → CodePage-BUcAp7SC.js} +1 -1
  9. package/client/dist/assets/{DesktopAnalyticsPage-CSKHSBBF.js → DesktopAnalyticsPage-COkzgMmd.js} +1 -1
  10. package/client/dist/assets/{DocsDialog-ClTq6Fzj.js → DocsDialog-PZHMN18B.js} +1 -1
  11. package/client/dist/assets/{DocsPage-DTxfOpTu.js → DocsPage-D3fChfkj.js} +1 -1
  12. package/client/dist/assets/{ExportDropdown-Ho9zdPvK.js → ExportDropdown-DDhJH-Jr.js} +1 -1
  13. package/client/dist/assets/{IntegrationsPage-DWNyo6jk.js → IntegrationsPage-F87uxxVH.js} +1 -1
  14. package/client/dist/assets/{InteractiveJobComposer-CYxXOKld.js → InteractiveJobComposer-DqDCiCa0.js} +5 -5
  15. package/client/dist/assets/{JobDetailModal-DrNafHY5.js → JobDetailModal-BWJR60fi.js} +1 -1
  16. package/client/dist/assets/{JobDetailPage-4VKw33GW.js → JobDetailPage-CjWE_jyd.js} +1 -1
  17. package/client/dist/assets/{JobsPage-cFr6wWaH.js → JobsPage-LmnXkyCa.js} +1 -1
  18. package/client/dist/assets/{LoopBuilderPage-Bk8zVvEX.js → LoopBuilderPage-DsLLrtHa.js} +2 -2
  19. package/client/dist/assets/{LoopPreviewModal-XFSO2Vcs.js → LoopPreviewModal-C-fDEgnu.js} +1 -1
  20. package/client/dist/assets/{LoopsPage-DWMwDj9g.js → LoopsPage-DDNO9h9T.js} +1 -1
  21. package/client/dist/assets/{ProjectSettingsDialog-DnSe_yWm.js → ProjectSettingsDialog-CX854C8e.js} +1 -1
  22. package/client/dist/assets/{TemplatePreviewModal-B30-TY_v.js → TemplatePreviewModal-DcHFbLA8.js} +1 -1
  23. package/client/dist/assets/agent-BI6vr-To.js +1 -0
  24. package/client/dist/assets/{agent-D5QNn9np2.js → agent-BUGXI3Ok2.js} +1 -1
  25. package/client/dist/assets/agent-Bph_-xt7.js +1 -0
  26. package/client/dist/assets/agent-Bvy2Csyd.js +1 -0
  27. package/client/dist/assets/{agent-DgFoLgrF2.js → agent-Bwkyg2oX2.js} +1 -1
  28. package/client/dist/assets/agent-CLCyDaZh.js +1 -0
  29. package/client/dist/assets/{agent-6mhkV25_2.js → agent-Cqs14QMr2.js} +1 -1
  30. package/client/dist/assets/{agent-CRYdi9-t.js → agent-DJ0EBUuP.js} +1 -1
  31. package/client/dist/assets/{brain-DcXkQwzO.js → brain-BBNUUrUI.js} +1 -1
  32. package/client/dist/assets/dashboard-BjjS1OrL.js +1 -0
  33. package/client/dist/assets/dashboard-Bk6oSk1H2.js +1 -0
  34. package/client/dist/assets/dashboard-BrH-GdOg2.js +1 -0
  35. package/client/dist/assets/dashboard-BurhUI8_.js +1 -0
  36. package/client/dist/assets/dashboard-C6w0rICe.js +1 -0
  37. package/client/dist/assets/dashboard-CAUnfDQL2.js +1 -0
  38. package/client/dist/assets/dashboard-C_ljpeYO.js +1 -0
  39. package/client/dist/assets/dashboard-D6OqDdj6.js +1 -0
  40. package/client/dist/assets/{dist-js-BAWwLSIj.js → dist-js-BxjTIvdT.js} +1 -1
  41. package/client/dist/assets/{dist-js-6U6hyD6z.js → dist-js-DdP_Gl3p.js} +1 -1
  42. package/client/dist/assets/{index-cvOunQkD.css → index-C695aPdV.css} +1 -1
  43. package/client/dist/assets/index-Dw1N2-ci.js +156 -0
  44. package/client/dist/assets/{lib-Bsny0zZp.js → lib-BviHZ_gK.js} +1 -1
  45. package/client/dist/assets/{settings-DHd1lQ1k.js → settings-BHdPchJP.js} +1 -1
  46. package/client/dist/assets/{settings-FJXpJ3k92.js → settings-BeCczBFS2.js} +1 -1
  47. package/client/dist/assets/{settings-BWIf3vv4.js → settings-BlLi719f.js} +1 -1
  48. package/client/dist/assets/{settings-DTYQ5COE.js → settings-C_nY14Yz.js} +1 -1
  49. package/client/dist/assets/{settings-DE8t6aYv.js → settings-CaZ26a0S.js} +1 -1
  50. package/client/dist/assets/{settings-Dgv_q4qf2.js → settings-D54_cgl12.js} +1 -1
  51. package/client/dist/assets/{settings-DXgPh9-k.js → settings-D9bDDe2O.js} +1 -1
  52. package/client/dist/assets/{settings-BhuXe7ek2.js → settings-cn0tbve62.js} +1 -1
  53. package/client/dist/assets/{setup-iY8vH8pB.js → setup-7J8TjG4O.js} +1 -1
  54. package/client/dist/assets/{setup-D674kWQH.js → setup-BXpw07r-.js} +1 -1
  55. package/client/dist/assets/{setup-B590KsTX.js → setup-BiduSX9d.js} +1 -1
  56. package/client/dist/assets/{setup-cnqZsQSX2.js → setup-BuQNKztt2.js} +1 -1
  57. package/client/dist/assets/{setup-CEj6uY3-2.js → setup-BwMovM9z2.js} +1 -1
  58. package/client/dist/assets/{setup-BkyGoby6.js → setup-D84y3wx-.js} +1 -1
  59. package/client/dist/assets/{setup-CbIerFGf2.js → setup-DU0ULX8q2.js} +1 -1
  60. package/client/dist/assets/{setup-VNqXyB6Y.js → setup-RiUHzq7E.js} +1 -1
  61. package/client/dist/assets/{upload-49vX83IZ.js → upload-CRuuzzvp.js} +1 -1
  62. package/client/dist/assets/{value-Bo8EiTZE.js → value-CIr5hDMt.js} +1 -1
  63. package/client/dist/index.html +21 -8
  64. package/package.json +1 -1
  65. package/server/dist/agent-operator-prompt.js +45 -5
  66. package/server/dist/desktop-router.js +9 -2
  67. package/server/dist/mcp/guide.js +33 -4
  68. package/server/dist/mcp/tools/app-settings.js +18 -2
  69. package/server/dist/mcp/tools/catalog.js +2 -0
  70. package/server/dist/mcp/tools/rails.js +27 -6
  71. package/server/dist/mcp/tools/support.js +324 -0
  72. package/server/dist/pr-publisher.js +17 -15
  73. package/server/dist/project-git.js +57 -0
  74. package/server/dist/rail-isolated-launch.js +27 -3
  75. package/server/dist/rail-pr-decision.js +69 -1
  76. package/server/dist/rail-worktree-release.js +25 -0
  77. package/server/dist/rail-worktrees-store.js +2 -2
  78. package/server/dist/rails-router.js +136 -7
  79. package/client/dist/assets/agent-BZqfQhI_.js +0 -1
  80. package/client/dist/assets/agent-Bjy1SlT5.js +0 -1
  81. package/client/dist/assets/agent-Bn6ZmjHj.js +0 -1
  82. package/client/dist/assets/agent-DgwPsxWQ.js +0 -1
  83. package/client/dist/assets/dashboard-CuGuy2__2.js +0 -1
  84. package/client/dist/assets/dashboard-CxP3TZ3I2.js +0 -1
  85. package/client/dist/assets/dashboard-DWHVfP7U.js +0 -1
  86. package/client/dist/assets/dashboard-D_Pgs6QH2.js +0 -1
  87. package/client/dist/assets/dashboard-Dwnssayh.js +0 -1
  88. package/client/dist/assets/dashboard-S_pT1yxN.js +0 -1
  89. package/client/dist/assets/dashboard-tCxOFOxx.js +0 -1
  90. package/client/dist/assets/dashboard-zefbBNyG.js +0 -1
  91. package/client/dist/assets/index-DnkfABxY.js +0 -156
@@ -0,0 +1 @@
1
+ var e={railAdded:`Rail {{n}} ajouté`,railRemoved:`{{rail}} supprimé`,railLimitReached:`Limite de rails atteinte ({{max}} max.)`,railDeleteFailed:`Impossible de supprimer le rail — il contient des specs, est en cours d'exécution ou a une décision de PR en attente`,launchTicketsInFlight:`Une spec de ce rail est déjà traitée par une exécution active`,launchAllSummary_one:`{{count}} rail lancé en parallèle`,launchAllSummary_other:`{{count}} rails lancés en parallèle`,launchAllNoneEligible:`Aucun rail prêt à lancer — assignez d'abord des specs à un rail libre`,launchAllFailed:`Aucun rail n'a pu être lancé`,railCompleted:`Rail {{n}} terminé`,railFailed:`Rail {{n}} en échec — specs renvoyées vers Specs`,railEnded:`Rail {{n}} {{status}} — specs renvoyées vers Specs`,alreadyOnRail:`Déjà sur {{rail}}`,movedToRail:`Déplacé vers {{rail}}`,railRunningStopFirst:`{{rail}} est en cours d'exécution — arrêtez-le avant de le supprimer`,removedFromRail:`Retiré de {{rail}}`,queuedOnRail:`Mis en file sur {{rail}}`,queuedOnRailDescription:`Le rail est en cours d'exécution`,railStopped:`{{rail}} arrêté`,stopFailed:`Échec de l'arrêt du rail`,syncTicketsFailed:`Échec de la synchronisation des tickets du rail`,launchFailed:`Échec du lancement du rail`,launchNetworkError:`Erreur réseau au lancement du rail`,railLaunched:`{{rail}} lancé`,launchDescription_one:`{{mode}} avec {{count}} spec`,launchDescription_other:`{{mode}} avec {{count}} specs`,railWorktreeNeedsReview:`Rail {{n}} : la spec #{{ticket}} nécessite une revue après le merge`,railWorktreesNoGit:`Isolation par worktree indisponible : ce projet n'est pas un dépôt git — exécution en mode partagé.`,railWorktreesNoCommits:`Isolation par worktree indisponible : le dépôt n'a pas encore de commit — faites un commit initial puis relancez.`,railWorktreesError:`L'isolation par worktrees a échoué — cette exécution continue SANS le flux de revue par PR (pas de carte d'implémentation). Voir le détail de l'erreur ci-dessous.`,onReviewCannotMoveToRail:`Cette spec attend une revue de PR — résolvez d'abord la décision de la PR`,onReviewNotLaunchable:`Une spec de ce rail attend une revue de PR — résolvez la décision de la PR avant de lancer`},t={readyForReview:`Prêt pour la revue`,draftPr:`PR en brouillon`,branchPushed:`Branche poussée — PR en attente`,branchPushedHint:`La branche a été poussée mais la PR n'a pas pu être créée (GitHub CLI indisponible). Réessayez pour la créer.`,iteratingPr:`Mise à jour de la PR`,prReady:`PR prête`,prFailed:`PR en échec`,prFailedDetail:`PR en échec : {{detail}}`,createDegraded:`Impossible de publier la PR — {{detail}}. Réessayez une fois le problème résolu.`,createPr:`Créer la PR`,createPrTooltip:`→ {{base}}`,publish:`Publier`,publishTooltip:`Ouvre la PR en brouillon pour la relecture de l'équipe`,checkout:`Checkout`,checkoutTooltip:`Basculer le dossier principal du projet sur {{branch}}`,checkoutSuccess:`Checkout effectué sur {{branch}}`,checkoutFailed:`Impossible de faire le checkout de la branche de la PR`,discard:`Abandonner`,discardTooltip:`Supprime les branches et renvoie les tickets vers Specs`,retryPr:`Réessayer la PR`,retry:`Réessayer`,checkMerge:`Vérifier le merge`,checkMergeTooltip:`Demande à GitHub si la PR a été fusionnée`,prLinkFallback:`PR`,openPrTitle:`Ouvrir la PR sur GitHub`,notMergedYet:`Pas encore fusionnée`,alreadyResolved:`Déjà résolue ailleurs`,ghFailed:`GitHub CLI a échoué : {{detail}}`,actionFailed:`Impossible d'appliquer la décision de la PR`,mergedToast:`PR fusionnée — tickets passés en Terminé`,discardedToast:`PR abandonnée — tickets renvoyés vers Specs`,decisionPending:`Ce rail a une décision de PR en attente — créez, publiez ou abandonnez-la avant de relancer`,discardConfirmTitle:`Abandonner cette livraison ?`,discardConfirmBody:`Les branches et worktrees du lancement seront supprimés et ses tickets retourneront vers Specs. Cette action est irréversible.`,mergeLocal:`Intégrer en local`,mergeLocalTooltip:`Fusionne les branches livrées dans {{base}} dans votre checkout local (sans GitHub)`,mergeLocalConfirmTitle:`Intégrer en local ?`,mergeLocalConfirmBody:`Les branches livrées seront fusionnées dans {{base}} dans votre checkout local. Votre checkout doit être sur {{base}} avec un arbre de travail propre.`,mergeLocalBlockedDirty:`Impossible d'intégrer : votre arbre de travail sur {{base}} contient des changements non commités. Commitez ou stashez-les, puis réessayez.`,mergeLocalBlockedBranch:`Impossible d'intégrer : votre checkout est sur {{current}}, pas sur {{base}}. Passez sur {{base}}, puis réessayez.`,mergeLocalFailed:`La fusion locale a échoué : {{detail}}`,mergedLocally:`Intégré dans {{base}} en local`},n={title:`Rails`,runningCount_one:`{{count}} en cours`,runningCount_other:`{{count}} en cours`,launchAll:`Tout lancer`,launchAllTitle:`Lance en parallèle tous les rails prêts — chaque exécution est isolée dans son propre worktree git`},r={skipRunning_one:`{{count}} déjà en cours`,skipRunning_other:`{{count}} déjà en cours`,skipEmpty_one:`{{count}} sans specs`,skipEmpty_other:`{{count}} sans specs`,skipPendingDecision_one:`{{count}} en attente d'une décision de PR`,skipPendingDecision_other:`{{count}} en attente d'une décision de PR`,skipOnReview_one:`{{count}} avec des specs en revue`,skipOnReview_other:`{{count}} avec des specs en revue`,skipInFlight_one:`{{count}} ignoré (spec déjà en cours)`,skipInFlight_other:`{{count}} ignorés (specs déjà en cours)`,failedCount_one:`{{count}} en échec`,failedCount_other:`{{count}} en échec`},i={title:`Lancer tous les rails`,railsCount_one:`{{count}} rail`,railsCount_other:`{{count}} rails`,specsCount_one:`{{count}} spec`,specsCount_other:`{{count}} specs`,isolationTitle:`Parallèle et isolé.`,isolationBody:`Chaque rail s'exécute dans son propre worktree git — les lancements simultanés n'entrent jamais en collision.`,pipelinesTitle_one:`{{count}} pipeline IA.`,pipelinesTitle_other:`{{count}} pipelines IA.`,pipelinesBody:`Un lancement par rail, chacun avec son mode, son moteur et son profil configurés.`,costTitle:`Coût multiplié.`,costBody:`Chaque rail génère sa propre exécution IA — la dépense augmente avec le nombre de rails.`,launch_one:`Lancer {{count}} rail`,launch_other:`Lancer {{count}} rails`},a={viewJobLog:`Voir le log du job`,log:`Log`,implement:`Implémenter`,batch:`Batch`,freestyle:`Freestyle`,freestyleTitle:`Freestyle — Claude implémente la spec en autonomie, sans pipeline`,loop:`Loop`,loopTitle:`Loop — exécute une boucle d'automatisation publiée sur les specs du rail`,pickLoop:`Choisir une boucle…`,effortTitle:`Effort de raisonnement`,stop:`Arrêter`,play:`Lancer`,failedRetry:`Job en échec — cliquez pour réessayer`,addSpecsFirst:`Ajoutez d'abord des specs à ce rail`,builtInLoops:`Intégrés`,customLoops:`Loops personnalisés`,worktreesMerged:`{{count}} fusionnés`,worktreesNeedsReview:`{{count}} à vérifier`,execSteps:`{{count}} étapes`,execLines:`{{count}} lignes`,openspec:`OpenSpec`},o={moveToSpecs:`Déplacer vers Specs`,deleteRail:`Supprimer {{label}}`,dropHere:`Déposer ici`,dropOnThisRail:`Déposer sur ce rail`,dragSpecsHere:`Glissez des specs ici`},s={title:`Lancer en mode Freestyle`,context_one:`{{rail}} · {{count}} spec`,context_other:`{{rail}} · {{count}} specs`,noPipelineTitle:`Pas de pipeline OpenSpec.`,noPipelineBody:`Le flux structuré architecte → développeur → reviewer est entièrement ignoré.`,autonomyTitle:`Autonomie native de Claude.`,autonomyBody:`Claude travaille seul avec ses agents natifs et des workflows dynamiques.`,costTitle:`Coût variable.`,costBody:`La dépense dépend de ce que Claude décide de faire — elle peut être plus élevée que prévu.`,continue:`Continuer`},c={fetchFailed:`Échec de la récupération des rails : {{status}}`},l={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c};export{l as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,a as railControls,t as railPr,o as railRow,n as railsBoard,e as toasts,c as useRails};
@@ -0,0 +1 @@
1
+ var e={railAdded:`Rail {{n}} añadido`,railRemoved:`{{rail}} eliminado`,railLimitReached:`Límite de rails alcanzado ({{max}} máx.)`,railDeleteFailed:`No se pudo eliminar el rail — tiene specs, está en ejecución o tiene una decisión de PR pendiente`,launchTicketsInFlight:`Una spec de este rail ya está siendo trabajada por una ejecución activa`,launchAllSummary_one:`{{count}} rail lanzado en paralelo`,launchAllSummary_other:`{{count}} rails lanzados en paralelo`,launchAllNoneEligible:`No hay rails listos para lanzar — asigna specs a un rail libre primero`,launchAllFailed:`No se pudo lanzar ningún rail`,railCompleted:`Rail {{n}} completado`,railFailed:`Rail {{n}} fallido — las specs han vuelto a Specs`,railEnded:`Rail {{n}} {{status}} — las specs han vuelto a Specs`,alreadyOnRail:`Ya está en {{rail}}`,movedToRail:`Movida a {{rail}}`,railRunningStopFirst:`{{rail}} está en ejecución — detenlo antes de eliminarlo`,removedFromRail:`Quitada de {{rail}}`,queuedOnRail:`En cola en {{rail}}`,queuedOnRailDescription:`El rail está en ejecución`,railStopped:`{{rail}} detenido`,stopFailed:`No se pudo detener el rail`,syncTicketsFailed:`No se pudieron sincronizar los tickets del rail`,launchFailed:`No se pudo lanzar el rail`,launchNetworkError:`Error de red al lanzar el rail`,railLaunched:`{{rail}} lanzado`,launchDescription_one:`{{mode}} con {{count}} spec`,launchDescription_other:`{{mode}} con {{count}} specs`,railWorktreeNeedsReview:`Rail {{n}}: la spec #{{ticket}} necesita revisión tras el merge`,railWorktreesNoGit:`Aislamiento por worktrees no disponible: el proyecto no es un repositorio git — ejecutando en modo compartido.`,railWorktreesNoCommits:`Aislamiento por worktrees no disponible: el repositorio aún no tiene commits — haz un commit inicial y relanza.`,railWorktreesError:`La aislación por worktrees falló — este run continúa SIN el flujo de revisión por PR (sin tarjeta de implementación). Mira el detalle del error abajo.`,onReviewCannotMoveToRail:`Esta spec está pendiente de revisión de PR — resuelve primero la decisión de la PR`,onReviewNotLaunchable:`Una spec de este rail está pendiente de revisión de PR — resuelve la decisión de la PR antes de lanzar`},t={readyForReview:`Listo para revisión`,draftPr:`PR en borrador`,branchPushed:`Rama subida — PR pendiente`,branchPushedHint:`La rama se subió pero no se pudo crear la PR (GitHub CLI no disponible). Reintenta para crearla.`,iteratingPr:`Actualizando PR`,prReady:`PR lista`,prFailed:`PR fallida`,prFailedDetail:`PR fallida: {{detail}}`,createDegraded:`No se pudo publicar la PR — {{detail}}. Reintenta cuando esté resuelto.`,createPr:`Crear PR`,createPrTooltip:`→ {{base}}`,publish:`Publicar`,publishTooltip:`Abre la PR en borrador para la revisión del equipo`,checkout:`Checkout`,checkoutTooltip:`Cambia la carpeta principal del proyecto a {{branch}}`,checkoutSuccess:`Checkout en {{branch}}`,checkoutFailed:`No se pudo hacer checkout de la rama de la PR`,discard:`Descartar`,discardTooltip:`Elimina las ramas y devuelve los tickets a Specs`,retryPr:`Reintentar PR`,retry:`Reintentar`,checkMerge:`Comprobar merge`,checkMergeTooltip:`Consulta a GitHub si ya se ha hecho merge de la PR`,prLinkFallback:`PR`,openPrTitle:`Abrir la PR en GitHub`,notMergedYet:`Aún sin merge`,alreadyResolved:`Ya resuelta en otro sitio`,ghFailed:`GitHub CLI falló: {{detail}}`,actionFailed:`No se pudo aplicar la decisión de la PR`,mergedToast:`Merge de la PR completado — los tickets han pasado a Hecho`,discardedToast:`PR descartada — los tickets han vuelto a Specs`,decisionPending:`Este rail tiene una decisión de PR pendiente — créala, publícala o descártala antes de relanzar`,discardConfirmTitle:`¿Descartar esta entrega?`,discardConfirmBody:`Se eliminarán las ramas y worktrees del lanzamiento y sus tickets volverán a Specs. Esta acción no se puede deshacer.`,mergeLocal:`Integrar en local`,mergeLocalTooltip:`Fusiona las ramas entregadas en {{base}} en tu checkout local (sin necesidad de GitHub)`,mergeLocalConfirmTitle:`¿Integrar en local?`,mergeLocalConfirmBody:`Las ramas entregadas se fusionarán en {{base}} en tu checkout local. Tu checkout debe estar en {{base}} con el árbol de trabajo limpio.`,mergeLocalBlockedDirty:`No se puede integrar: tu árbol de trabajo en {{base}} tiene cambios sin commitear. Haz commit o stash y reintenta.`,mergeLocalBlockedBranch:`No se puede integrar: tu checkout está en {{current}}, no en {{base}}. Cambia a {{base}} y reintenta.`,mergeLocalFailed:`La fusión local falló: {{detail}}`,mergedLocally:`Integrado en {{base}} en local`},n={title:`Rails`,runningCount_one:`{{count}} en ejecución`,runningCount_other:`{{count}} en ejecución`,launchAll:`Lanzar todos`,launchAllTitle:`Lanza en paralelo todos los rails listos — cada ejecución se aísla en su propio worktree de git`},r={skipRunning_one:`{{count}} ya en ejecución`,skipRunning_other:`{{count}} ya en ejecución`,skipEmpty_one:`{{count}} sin specs`,skipEmpty_other:`{{count}} sin specs`,skipPendingDecision_one:`{{count}} con decisión de PR pendiente`,skipPendingDecision_other:`{{count}} con decisión de PR pendiente`,skipOnReview_one:`{{count}} con specs en revisión`,skipOnReview_other:`{{count}} con specs en revisión`,skipInFlight_one:`{{count}} omitido (spec ya en curso)`,skipInFlight_other:`{{count}} omitidos (specs ya en curso)`,failedCount_one:`{{count}} fallido`,failedCount_other:`{{count}} fallidos`},i={title:`Lanzar todos los rails`,railsCount_one:`{{count}} rail`,railsCount_other:`{{count}} rails`,specsCount_one:`{{count}} spec`,specsCount_other:`{{count}} specs`,isolationTitle:`Paralelo y aislado.`,isolationBody:`Cada rail se ejecuta en su propio worktree de git — los lanzamientos simultáneos nunca colisionan.`,pipelinesTitle_one:`{{count}} pipeline de IA.`,pipelinesTitle_other:`{{count}} pipelines de IA.`,pipelinesBody:`Un lanzamiento por rail, cada uno con su modo, motor y perfil configurados.`,costTitle:`Coste multiplicado.`,costBody:`Cada rail genera su propia ejecución de IA — el gasto escala con el número de rails.`,launch_one:`Lanzar {{count}} rail`,launch_other:`Lanzar {{count}} rails`},a={viewJobLog:`Ver log del job`,log:`Log`,implement:`Implement`,batch:`Batch`,freestyle:`Freestyle`,freestyleTitle:`Freestyle — Claude implementa la spec de forma autónoma, sin pipeline`,loop:`Loop`,loopTitle:`Loop — ejecuta un bucle de automatización publicado sobre las specs del rail`,pickLoop:`Elige un bucle…`,effortTitle:`Esfuerzo de razonamiento`,stop:`Detener`,play:`Iniciar`,failedRetry:`El job ha fallado — haz clic para reintentar`,addSpecsFirst:`Añade primero specs a este rail`,builtInLoops:`Integrados`,customLoops:`Loops personalizados`,worktreesMerged:`{{count}} fusionados`,worktreesNeedsReview:`{{count}} a revisar`,execSteps:`{{count}} pasos`,execLines:`{{count}} líneas`,openspec:`OpenSpec`},o={moveToSpecs:`Mover a Specs`,deleteRail:`Eliminar {{label}}`,dropHere:`Suelta aquí`,dropOnThisRail:`Suelta en este rail`,dragSpecsHere:`Arrastra specs aquí`},s={title:`Lanzar en modo Freestyle`,context_one:`{{rail}} · {{count}} spec`,context_other:`{{rail}} · {{count}} specs`,noPipelineTitle:`Sin pipeline de OpenSpec.`,noPipelineBody:`El flujo estructurado architect → developer → reviewer se omite por completo.`,autonomyTitle:`Autonomía nativa de Claude.`,autonomyBody:`Claude trabaja por su cuenta con agentes nativos y flujos dinámicos.`,costTitle:`Coste variable.`,costBody:`El gasto depende de lo que Claude decida hacer — puede ser mayor de lo esperado.`,continue:`Continuar`},c={fetchFailed:`No se pudieron obtener los rails: {{status}}`},l={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c};export{l as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,a as railControls,t as railPr,o as railRow,n as railsBoard,e as toasts,c as useRails};
@@ -0,0 +1 @@
1
+ var e={railAdded:`Rail {{n}} hinzugefügt`,railRemoved:`{{rail}} entfernt`,railLimitReached:`Rail-Limit erreicht (max. {{max}})`,railDeleteFailed:`Rail konnte nicht entfernt werden – es enthält Specs, läuft gerade oder hat eine ausstehende PR-Entscheidung`,launchTicketsInFlight:`Eine Spec dieses Rails wird bereits von einem aktiven Lauf bearbeitet`,launchAllSummary_one:`{{count}} Rail parallel gestartet`,launchAllSummary_other:`{{count}} Rails parallel gestartet`,launchAllNoneEligible:`Keine Rails startbereit – weise zuerst Specs einem freien Rail zu`,launchAllFailed:`Es konnte kein Rail gestartet werden`,railCompleted:`Rail {{n}} abgeschlossen`,railFailed:`Rail {{n}} fehlgeschlagen – Specs zurück in Specs`,railEnded:`Rail {{n}} {{status}} – Specs zurück in Specs`,alreadyOnRail:`Bereits auf {{rail}}`,movedToRail:`Auf {{rail}} verschoben`,railRunningStopFirst:`{{rail}} läuft – vor dem Entfernen stoppen`,removedFromRail:`Von {{rail}} entfernt`,queuedOnRail:`Auf {{rail}} eingereiht`,queuedOnRailDescription:`Rail läuft gerade`,railStopped:`{{rail}} gestoppt`,stopFailed:`Rail konnte nicht gestoppt werden`,syncTicketsFailed:`Rail-Tickets konnten nicht synchronisiert werden`,launchFailed:`Rail konnte nicht gestartet werden`,launchNetworkError:`Netzwerkfehler beim Starten des Rails`,railLaunched:`{{rail}} gestartet`,launchDescription_one:`{{mode}} mit {{count}} Spec`,launchDescription_other:`{{mode}} mit {{count}} Specs`,railWorktreeNeedsReview:`Rail {{n}}: Spec #{{ticket}} muss nach dem Merge geprüft werden`,railWorktreesNoGit:`Worktree-Isolation nicht verfügbar: Dieses Projekt ist kein Git-Repository — Ausführung im gemeinsamen Modus.`,railWorktreesNoCommits:`Worktree-Isolation nicht verfügbar: Das Repository hat noch keine Commits — erstelle einen ersten Commit und starte neu.`,railWorktreesError:`Worktree-Isolation fehlgeschlagen — dieser Lauf läuft OHNE den PR-Review-Flow weiter (keine Implementierungskarte). Siehe Fehlerdetail unten.`,onReviewCannotMoveToRail:`Diese Spec wartet auf die PR-Prüfung — löse zuerst die PR-Entscheidung`,onReviewNotLaunchable:`Eine Spec auf diesem Rail wartet auf die PR-Prüfung — löse die PR-Entscheidung vor dem Start`},t={readyForReview:`Bereit zur Prüfung`,draftPr:`Entwurfs-PR`,branchPushed:`Branch gepusht — PR ausstehend`,branchPushedHint:`Der Branch wurde gepusht, aber die PR konnte nicht erstellt werden (GitHub CLI nicht verfügbar). Erneut versuchen, um sie zu erstellen.`,iteratingPr:`PR wird aktualisiert`,prReady:`PR bereit`,prFailed:`PR fehlgeschlagen`,prFailedDetail:`PR fehlgeschlagen: {{detail}}`,createDegraded:`PR konnte nicht veröffentlicht werden — {{detail}}. Nach Behebung erneut versuchen.`,createPr:`PR erstellen`,createPrTooltip:`→ {{base}}`,publish:`Veröffentlichen`,publishTooltip:`Öffnet den Entwurfs-PR für das Review des Teams`,checkout:`Checkout`,checkoutTooltip:`Den Hauptordner des Projekts auf {{branch}} auschecken`,checkoutSuccess:`{{branch}} ausgecheckt`,checkoutFailed:`PR-Branch konnte nicht ausgecheckt werden`,discard:`Verwerfen`,discardTooltip:`Verwirft die Branches und schickt die Tickets zurück zu Specs`,retryPr:`PR erneut versuchen`,retry:`Erneut versuchen`,checkMerge:`Merge prüfen`,checkMergeTooltip:`Bei GitHub nachfragen, ob die PR gemergt wurde`,prLinkFallback:`PR`,openPrTitle:`PR auf GitHub öffnen`,notMergedYet:`Noch nicht gemergt`,alreadyResolved:`Bereits anderweitig erledigt`,ghFailed:`GitHub CLI fehlgeschlagen: {{detail}}`,actionFailed:`PR-Entscheidung konnte nicht angewendet werden`,mergedToast:`PR gemergt — Tickets nach Fertig verschoben`,discardedToast:`PR verworfen — Tickets zurück in Specs`,decisionPending:`Dieser Rail hat eine ausstehende PR-Entscheidung — erstelle, veröffentliche oder verwirf sie, bevor du neu startest`,discardConfirmTitle:`Diese Lieferung verwerfen?`,discardConfirmBody:`Die Branches und Worktrees des Launches werden verworfen und die Tickets kehren zurück zu Specs. Das kann nicht rückgängig gemacht werden.`,mergeLocal:`Lokal integrieren`,mergeLocalTooltip:`Führt die gelieferten Branches lokal in {{base}} zusammen (ohne GitHub)`,mergeLocalConfirmTitle:`Lokal integrieren?`,mergeLocalConfirmBody:`Die gelieferten Branches werden lokal in {{base}} zusammengeführt. Dein Checkout muss auf {{base}} stehen und sauber sein.`,mergeLocalBlockedDirty:`Integration nicht möglich: dein Arbeitsverzeichnis auf {{base}} hat uncommittete Änderungen. Committe oder stashe sie und versuche es erneut.`,mergeLocalBlockedBranch:`Integration nicht möglich: dein Checkout steht auf {{current}}, nicht auf {{base}}. Wechsle zu {{base}} und versuche es erneut.`,mergeLocalFailed:`Lokaler Merge fehlgeschlagen: {{detail}}`,mergedLocally:`Lokal in {{base}} integriert`},n={title:`Rails`,runningCount_one:`{{count}} läuft`,runningCount_other:`{{count}} laufen`,launchAll:`Alle starten`,launchAllTitle:`Startet alle startbereiten Rails parallel – jeder Lauf ist in seinem eigenen Git-Worktree isoliert`},r={skipRunning_one:`{{count}} läuft bereits`,skipRunning_other:`{{count}} laufen bereits`,skipEmpty_one:`{{count}} ohne Specs`,skipEmpty_other:`{{count}} ohne Specs`,skipPendingDecision_one:`{{count}} wartet auf eine PR-Entscheidung`,skipPendingDecision_other:`{{count}} warten auf eine PR-Entscheidung`,skipOnReview_one:`{{count}} mit Specs im Review`,skipOnReview_other:`{{count}} mit Specs im Review`,skipInFlight_one:`{{count}} übersprungen (Spec bereits in Arbeit)`,skipInFlight_other:`{{count}} übersprungen (Specs bereits in Arbeit)`,failedCount_one:`{{count}} fehlgeschlagen`,failedCount_other:`{{count}} fehlgeschlagen`},i={title:`Alle Rails starten`,railsCount_one:`{{count}} Rail`,railsCount_other:`{{count}} Rails`,specsCount_one:`{{count}} Spec`,specsCount_other:`{{count}} Specs`,isolationTitle:`Parallel und isoliert.`,isolationBody:`Jedes Rail läuft in seinem eigenen Git-Worktree – gleichzeitige Starts kollidieren nie.`,pipelinesTitle_one:`{{count}} KI-Pipeline.`,pipelinesTitle_other:`{{count}} KI-Pipelines.`,pipelinesBody:`Ein Start pro Rail, jeweils mit dem konfigurierten Modus, Engine und Profil.`,costTitle:`Vervielfachte Kosten.`,costBody:`Jedes Rail erzeugt seinen eigenen KI-Lauf – die Ausgaben skalieren mit der Anzahl der Rails.`,launch_one:`{{count}} Rail starten`,launch_other:`{{count}} Rails starten`},a={viewJobLog:`Job-Log anzeigen`,log:`Log`,implement:`Implement`,batch:`Batch`,freestyle:`Freestyle`,freestyleTitle:`Freestyle – Claude implementiert die Spec autonom, ohne Pipeline`,loop:`Loop`,loopTitle:`Loop – eine veröffentlichte Automatisierungsschleife gegen die Specs des Rails ausführen`,pickLoop:`Schleife auswählen…`,effortTitle:`Denkaufwand`,stop:`Stopp`,play:`Start`,failedRetry:`Job fehlgeschlagen – zum Wiederholen klicken`,addSpecsFirst:`Füge zuerst Specs zu diesem Rail hinzu`,builtInLoops:`Integriert`,customLoops:`Eigene Loops`,worktreesMerged:`{{count}} zusammengeführt`,worktreesNeedsReview:`{{count}} zu prüfen`,execSteps:`{{count}} Schritte`,execLines:`{{count}} Zeilen`,openspec:`OpenSpec`},o={moveToSpecs:`Nach Specs verschieben`,deleteRail:`{{label}} löschen`,dropHere:`Hier ablegen`,dropOnThisRail:`Auf diesem Rail ablegen`,dragSpecsHere:`Specs hierher ziehen`},s={title:`Im Freestyle-Modus starten`,context_one:`{{rail}} · {{count}} Spec`,context_other:`{{rail}} · {{count}} Specs`,noPipelineTitle:`Keine OpenSpec-Pipeline.`,noPipelineBody:`Der strukturierte Flow Architect → Developer → Reviewer wird komplett übersprungen.`,autonomyTitle:`Native Claude-Autonomie.`,autonomyBody:`Claude arbeitet eigenständig mit nativen Agenten und dynamischen Workflows.`,costTitle:`Variable Kosten.`,costBody:`Die Ausgaben hängen davon ab, was Claude entscheidet – sie können höher ausfallen als erwartet.`,continue:`Weiter`},c={fetchFailed:`Rails konnten nicht geladen werden: {{status}}`},l={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c};export{l as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,a as railControls,t as railPr,o as railRow,n as railsBoard,e as toasts,c as useRails};
@@ -0,0 +1 @@
1
+ var e={railAdded:`Rail {{n}} adicionado`,railRemoved:`{{rail}} removido`,railLimitReached:`Limite de rails atingido ({{max}} máx.)`,railDeleteFailed:`Não foi possível remover o rail — ele contém specs, está em execução ou tem uma decisão de PR pendente`,launchTicketsInFlight:`Uma spec deste rail já está sendo trabalhada por uma execução ativa`,launchAllSummary_one:`{{count}} rail lançado em paralelo`,launchAllSummary_other:`{{count}} rails lançados em paralelo`,launchAllNoneEligible:`Nenhum rail pronto para lançar — atribua specs a um rail livre primeiro`,launchAllFailed:`Nenhum rail pôde ser lançado`,railCompleted:`Rail {{n}} concluído`,railFailed:`Rail {{n}} falhou — specs devolvidas a Specs`,railEnded:`Rail {{n}} {{status}} — specs devolvidas a Specs`,alreadyOnRail:`Já está em {{rail}}`,movedToRail:`Movido para {{rail}}`,railRunningStopFirst:`{{rail}} está em execução — pare-o antes de remover`,removedFromRail:`Removido de {{rail}}`,queuedOnRail:`Em fila em {{rail}}`,queuedOnRailDescription:`O rail está atualmente em execução`,railStopped:`{{rail}} parado`,stopFailed:`Falha ao parar o rail`,syncTicketsFailed:`Falha ao sincronizar os tickets do rail`,launchFailed:`Falha ao lançar o rail`,launchNetworkError:`Erro de rede ao lançar o rail`,railLaunched:`{{rail}} lançado`,launchDescription_one:`{{mode}} com {{count}} spec`,launchDescription_other:`{{mode}} com {{count}} specs`,railWorktreeNeedsReview:`Rail {{n}}: a spec #{{ticket}} precisa de revisão após o merge`,railWorktreesNoGit:`Isolamento por worktree indisponível: este projeto não é um repositório git — executando em modo compartilhado.`,railWorktreesNoCommits:`Isolamento por worktree indisponível: o repositório ainda não tem commits — faça um commit inicial e relance.`,railWorktreesError:`O isolamento por worktrees falhou — esta execução continua SEM o fluxo de revisão por PR (sem cartão de implementação). Veja o detalhe do erro abaixo.`,onReviewCannotMoveToRail:`Esta spec aguarda revisão da PR — resolva primeiro a decisão da PR`,onReviewNotLaunchable:`Uma spec deste rail aguarda revisão da PR — resolva a decisão da PR antes de lançar`},t={readyForReview:`Pronto para revisão`,draftPr:`PR em rascunho`,branchPushed:`Ramo enviado — PR pendente`,branchPushedHint:`O ramo foi enviado mas não foi possível criar a PR (GitHub CLI indisponível). Tente novamente para a criar.`,iteratingPr:`A atualizar PR`,prReady:`PR pronta`,prFailed:`PR falhou`,prFailedDetail:`PR falhou: {{detail}}`,createDegraded:`Não foi possível publicar a PR — {{detail}}. Tente novamente quando estiver resolvido.`,createPr:`Criar PR`,createPrTooltip:`→ {{base}}`,publish:`Publicar`,publishTooltip:`Abre a PR em rascunho para a revisão da equipa`,checkout:`Checkout`,checkoutTooltip:`Fazer checkout de {{branch}} na pasta principal do projeto`,checkoutSuccess:`Checkout feito em {{branch}}`,checkoutFailed:`Não foi possível fazer checkout do ramo da PR`,discard:`Descartar`,discardTooltip:`Elimina os ramos e devolve os tickets a Specs`,retryPr:`Tentar PR novamente`,retry:`Tentar novamente`,checkMerge:`Verificar merge`,checkMergeTooltip:`Pergunta ao GitHub se já foi feito merge da PR`,prLinkFallback:`PR`,openPrTitle:`Abrir a PR no GitHub`,notMergedYet:`Ainda sem merge`,alreadyResolved:`Já resolvida noutro lugar`,ghFailed:`GitHub CLI falhou: {{detail}}`,actionFailed:`Não foi possível aplicar a decisão da PR`,mergedToast:`Merge da PR concluído — tickets movidos para Concluído`,discardedToast:`PR descartada — tickets devolvidos a Specs`,decisionPending:`Este rail tem uma decisão de PR pendente — crie, publique ou descarte-a antes de relançar`,discardConfirmTitle:`Descartar esta entrega?`,discardConfirmBody:`Os ramos e worktrees do lançamento serão eliminados e os seus tickets voltarão a Specs. Esta ação não pode ser anulada.`,mergeLocal:`Integrar localmente`,mergeLocalTooltip:`Faz merge dos branches entregues em {{base}} no seu checkout local (sem GitHub)`,mergeLocalConfirmTitle:`Integrar localmente?`,mergeLocalConfirmBody:`Os branches entregues serão mesclados em {{base}} no seu checkout local. Seu checkout deve estar em {{base}} com a árvore de trabalho limpa.`,mergeLocalBlockedDirty:`Não é possível integrar: sua árvore de trabalho em {{base}} tem mudanças sem commit. Faça commit ou stash e tente de novo.`,mergeLocalBlockedBranch:`Não é possível integrar: seu checkout está em {{current}}, não em {{base}}. Mude para {{base}} e tente de novo.`,mergeLocalFailed:`O merge local falhou: {{detail}}`,mergedLocally:`Integrado em {{base}} localmente`},n={title:`Rails`,runningCount_one:`{{count}} em execução`,runningCount_other:`{{count}} em execução`,launchAll:`Lançar todos`,launchAllTitle:`Lança em paralelo todos os rails prontos — cada execução é isolada em seu próprio worktree do git`},r={skipRunning_one:`{{count}} já em execução`,skipRunning_other:`{{count}} já em execução`,skipEmpty_one:`{{count}} sem specs`,skipEmpty_other:`{{count}} sem specs`,skipPendingDecision_one:`{{count}} aguardando uma decisão de PR`,skipPendingDecision_other:`{{count}} aguardando uma decisão de PR`,skipOnReview_one:`{{count}} com specs em revisão`,skipOnReview_other:`{{count}} com specs em revisão`,skipInFlight_one:`{{count}} ignorado (spec já em andamento)`,skipInFlight_other:`{{count}} ignorados (specs já em andamento)`,failedCount_one:`{{count}} falhou`,failedCount_other:`{{count}} falharam`},i={title:`Lançar todos os rails`,railsCount_one:`{{count}} rail`,railsCount_other:`{{count}} rails`,specsCount_one:`{{count}} spec`,specsCount_other:`{{count}} specs`,isolationTitle:`Paralelo e isolado.`,isolationBody:`Cada rail roda em seu próprio worktree do git — lançamentos simultâneos nunca colidem.`,pipelinesTitle_one:`{{count}} pipeline de IA.`,pipelinesTitle_other:`{{count}} pipelines de IA.`,pipelinesBody:`Um lançamento por rail, cada um com seu modo, motor e perfil configurados.`,costTitle:`Custo multiplicado.`,costBody:`Cada rail gera sua própria execução de IA — o gasto escala com o número de rails.`,launch_one:`Lançar {{count}} rail`,launch_other:`Lançar {{count}} rails`},a={viewJobLog:`Ver log do job`,log:`Log`,implement:`Implementar`,batch:`Batch`,freestyle:`Freestyle`,freestyleTitle:`Freestyle — o Claude implementa a spec de forma autónoma, sem pipeline`,loop:`Loop`,loopTitle:`Loop — execute um loop de automação publicado nas specs do rail`,pickLoop:`Escolha um loop…`,effortTitle:`Esforço de raciocínio`,stop:`Parar`,play:`Iniciar`,failedRetry:`O job falhou — clique para repetir`,addSpecsFirst:`Adicione primeiro specs a este rail`,builtInLoops:`Integrados`,customLoops:`Loops personalizados`,worktreesMerged:`{{count}} mesclados`,worktreesNeedsReview:`{{count}} para revisar`,execSteps:`{{count}} passos`,execLines:`{{count}} linhas`,openspec:`OpenSpec`},o={moveToSpecs:`Mover para Specs`,deleteRail:`Eliminar {{label}}`,dropHere:`Largar aqui`,dropOnThisRail:`Largar neste rail`,dragSpecsHere:`Arraste specs para aqui`},s={title:`Lançar em modo Freestyle`,context_one:`{{rail}} · {{count}} spec`,context_other:`{{rail}} · {{count}} specs`,noPipelineTitle:`Sem pipeline OpenSpec.`,noPipelineBody:`O fluxo estruturado architect → developer → reviewer é totalmente ignorado.`,autonomyTitle:`Autonomia nativa do Claude.`,autonomyBody:`O Claude trabalha por conta própria com agentes nativos e workflows dinâmicos.`,costTitle:`Custo variável.`,costBody:`O gasto depende do que o Claude decidir fazer — pode ser superior ao esperado.`,continue:`Continuar`},c={fetchFailed:`Falha ao obter os rails: {{status}}`},l={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c};export{l as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,a as railControls,t as railPr,o as railRow,n as railsBoard,e as toasts,c as useRails};
@@ -1 +1 @@
1
- import{l as e,u as t}from"./index-DnkfABxY.js";var n=class{constructor(){this.eventListeners=Object.create(null)}addListener(e,t){return this.on(e,t)}removeListener(e,t){return this.off(e,t)}on(e,t){return e in this.eventListeners?this.eventListeners[e].push(t):this.eventListeners[e]=[t],this}once(e,t){let n=r=>{this.removeListener(e,n),t(r)};return this.addListener(e,n)}off(e,t){return e in this.eventListeners&&(this.eventListeners[e]=this.eventListeners[e].filter(e=>e!==t)),this}removeAllListeners(e){return e?delete this.eventListeners[e]:this.eventListeners=Object.create(null),this}emit(e,t){if(e in this.eventListeners){let n=this.eventListeners[e];for(let e of n)e(t);return!0}return!1}listenerCount(e){return e in this.eventListeners?this.eventListeners[e].length:0}prependListener(e,t){return e in this.eventListeners?this.eventListeners[e].unshift(t):this.eventListeners[e]=[t],this}prependOnceListener(e,t){let n=r=>{this.removeListener(e,n),t(r)};return this.prependListener(e,n)}},r=class{constructor(e){this.pid=e}async write(e){await t(`plugin:shell|stdin_write`,{pid:this.pid,buffer:e})}async kill(){await t(`plugin:shell|kill`,{cmd:`killChild`,pid:this.pid})}},i=class i extends n{constructor(e,t=[],r){super(),this.stdout=new n,this.stderr=new n,this.program=e,this.args=typeof t==`string`?[t]:t,this.options=r??{}}static create(e,t=[],n){return new i(e,t,n)}static sidecar(e,t=[],n){let r=new i(e,t,n);return r.options.sidecar=!0,r}async spawn(){let n=this.program,i=this.args,a=this.options;typeof i==`object`&&Object.freeze(i);let o=new e;return o.onmessage=e=>{switch(e.event){case`Error`:this.emit(`error`,e.payload);break;case`Terminated`:this.emit(`close`,e.payload);break;case`Stdout`:this.stdout.emit(`data`,e.payload);break;case`Stderr`:this.stderr.emit(`data`,e.payload);break}},await t(`plugin:shell|spawn`,{program:n,args:i,options:a,onEvent:o}).then(e=>new r(e))}async execute(){let e=this.program,n=this.args,r=this.options;return typeof n==`object`&&Object.freeze(n),await t(`plugin:shell|execute`,{program:e,args:n,options:r})}};async function a(e,n){await t(`plugin:shell|open`,{path:e,with:n})}export{r as Child,i as Command,n as EventEmitter,a as open};
1
+ import{l as e,u as t}from"./index-Dw1N2-ci.js";var n=class{constructor(){this.eventListeners=Object.create(null)}addListener(e,t){return this.on(e,t)}removeListener(e,t){return this.off(e,t)}on(e,t){return e in this.eventListeners?this.eventListeners[e].push(t):this.eventListeners[e]=[t],this}once(e,t){let n=r=>{this.removeListener(e,n),t(r)};return this.addListener(e,n)}off(e,t){return e in this.eventListeners&&(this.eventListeners[e]=this.eventListeners[e].filter(e=>e!==t)),this}removeAllListeners(e){return e?delete this.eventListeners[e]:this.eventListeners=Object.create(null),this}emit(e,t){if(e in this.eventListeners){let n=this.eventListeners[e];for(let e of n)e(t);return!0}return!1}listenerCount(e){return e in this.eventListeners?this.eventListeners[e].length:0}prependListener(e,t){return e in this.eventListeners?this.eventListeners[e].unshift(t):this.eventListeners[e]=[t],this}prependOnceListener(e,t){let n=r=>{this.removeListener(e,n),t(r)};return this.prependListener(e,n)}},r=class{constructor(e){this.pid=e}async write(e){await t(`plugin:shell|stdin_write`,{pid:this.pid,buffer:e})}async kill(){await t(`plugin:shell|kill`,{cmd:`killChild`,pid:this.pid})}},i=class i extends n{constructor(e,t=[],r){super(),this.stdout=new n,this.stderr=new n,this.program=e,this.args=typeof t==`string`?[t]:t,this.options=r??{}}static create(e,t=[],n){return new i(e,t,n)}static sidecar(e,t=[],n){let r=new i(e,t,n);return r.options.sidecar=!0,r}async spawn(){let n=this.program,i=this.args,a=this.options;typeof i==`object`&&Object.freeze(i);let o=new e;return o.onmessage=e=>{switch(e.event){case`Error`:this.emit(`error`,e.payload);break;case`Terminated`:this.emit(`close`,e.payload);break;case`Stdout`:this.stdout.emit(`data`,e.payload);break;case`Stderr`:this.stderr.emit(`data`,e.payload);break}},await t(`plugin:shell|spawn`,{program:n,args:i,options:a,onEvent:o}).then(e=>new r(e))}async execute(){let e=this.program,n=this.args,r=this.options;return typeof n==`object`&&Object.freeze(n),await t(`plugin:shell|execute`,{program:e,args:n,options:r})}};async function a(e,n){await t(`plugin:shell|open`,{path:e,with:n})}export{r as Child,i as Command,n as EventEmitter,a as open};
@@ -1 +1 @@
1
- import{u as e}from"./index-DnkfABxY.js";function t(e){if(e!==void 0){if(typeof e==`string`)return e;if(`ok`in e&&`cancel`in e)return{OkCancelCustom:[e.ok,e.cancel]};if(`yes`in e&&`no`in e&&`cancel`in e)return{YesNoCancelCustom:[e.yes,e.no,e.cancel]};if(`ok`in e)return{OkCustom:e.ok}}}async function n(t={}){return typeof t==`object`&&Object.freeze(t),await e(`plugin:dialog|open`,{options:t})}async function r(t={}){return typeof t==`object`&&Object.freeze(t),await e(`plugin:dialog|save`,{options:t})}async function i(n,r){return await e(`plugin:dialog|message`,{message:n,title:r?.title,kind:r?.kind,buttons:t(r?.buttons)})}async function a(e,t){let n=typeof t==`string`?{title:t}:t;return n&&!n.buttons&&n.okLabel&&(n.buttons={ok:n.okLabel}),i(e,n)}async function o(e,t){let n=typeof t==`string`?{title:t}:t,r=n?.okLabel||n?.cancelLabel,a=n?.okLabel??`Yes`;return await i(e,{title:n?.title,kind:n?.kind,buttons:r?{ok:a,cancel:n.cancelLabel??`No`}:`YesNo`})===a}async function s(e,t){let n=typeof t==`string`?{title:t}:t,r=n?.okLabel||n?.cancelLabel,a=n?.okLabel??`Ok`;return await i(e,{title:n?.title,kind:n?.kind,buttons:r?{ok:a,cancel:n.cancelLabel??`Cancel`}:`OkCancel`})===a}export{o as ask,s as confirm,a as message,n as open,r as save};
1
+ import{u as e}from"./index-Dw1N2-ci.js";function t(e){if(e!==void 0){if(typeof e==`string`)return e;if(`ok`in e&&`cancel`in e)return{OkCancelCustom:[e.ok,e.cancel]};if(`yes`in e&&`no`in e&&`cancel`in e)return{YesNoCancelCustom:[e.yes,e.no,e.cancel]};if(`ok`in e)return{OkCustom:e.ok}}}async function n(t={}){return typeof t==`object`&&Object.freeze(t),await e(`plugin:dialog|open`,{options:t})}async function r(t={}){return typeof t==`object`&&Object.freeze(t),await e(`plugin:dialog|save`,{options:t})}async function i(n,r){return await e(`plugin:dialog|message`,{message:n,title:r?.title,kind:r?.kind,buttons:t(r?.buttons)})}async function a(e,t){let n=typeof t==`string`?{title:t}:t;return n&&!n.buttons&&n.okLabel&&(n.buttons={ok:n.okLabel}),i(e,n)}async function o(e,t){let n=typeof t==`string`?{title:t}:t,r=n?.okLabel||n?.cancelLabel,a=n?.okLabel??`Yes`;return await i(e,{title:n?.title,kind:n?.kind,buttons:r?{ok:a,cancel:n.cancelLabel??`No`}:`YesNo`})===a}async function s(e,t){let n=typeof t==`string`?{title:t}:t,r=n?.okLabel||n?.cancelLabel,a=n?.okLabel??`Ok`;return await i(e,{title:n?.title,kind:n?.kind,buttons:r?{ok:a,cancel:n.cancelLabel??`Cancel`}:`OkCancel`})===a}export{o as ask,s as confirm,a as message,n as open,r as save};