specrails-desktop 2.29.2 → 2.29.3
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-ClpD5CFj.js → ActivityFeedPage-CFB4UBhT.js} +1 -1
- package/client/dist/assets/{AgentBrowserCapture-CSPs9Ofc.js → AgentBrowserCapture-C-T0r16B.js} +1 -1
- package/client/dist/assets/{AgentModeCodePane-DwcyklA5.js → AgentModeCodePane-IljV5FOQ.js} +2 -2
- package/client/dist/assets/{AgentModeJobsPane-C69bqlMa.js → AgentModeJobsPane-B5miH10_.js} +1 -1
- package/client/dist/assets/{AgentsPage-pRiRr9-W.js → AgentsPage-BgYQrAcH.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-C14exKsC.js → AnalyticsPage-BtVCuNjL.js} +1 -1
- package/client/dist/assets/{CodePage-CK76JKm9.js → CodePage-Cb_jAjSV.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-Cnv0f3XQ.js → DesktopAnalyticsPage-s_Cc_JL1.js} +1 -1
- package/client/dist/assets/{DocsDialog-CHUm_Ym0.js → DocsDialog-Cr47QI9L.js} +1 -1
- package/client/dist/assets/{DocsPage-COI-oDok.js → DocsPage-C_WPRuG_.js} +1 -1
- package/client/dist/assets/{InteractiveJobComposer-CypM7R1F.js → InteractiveJobComposer-NfFOciRB.js} +1 -1
- package/client/dist/assets/{JobDetailModal-B_W0H9dw.js → JobDetailModal-DqEW7Z7K.js} +1 -1
- package/client/dist/assets/{JobDetailPage-CeeXOoKS.js → JobDetailPage-D4ppEpDE.js} +1 -1
- package/client/dist/assets/{JobsPage-CwhJG9jw.js → JobsPage-DStSoMyq.js} +1 -1
- package/client/dist/assets/{LoopBuilderPage-C51t1WOM.js → LoopBuilderPage-DltCwS4P.js} +1 -1
- package/client/dist/assets/{LoopPreviewModal-Y2HgtIJu.js → LoopPreviewModal-BWaiAbUq.js} +1 -1
- package/client/dist/assets/{LoopsPage-Bvn1Kw5V.js → LoopsPage-BqjbXuBZ.js} +1 -1
- package/client/dist/assets/{MinimizedChatsContext-DiFvZDPW.js → MinimizedChatsContext--o3JAM9F.js} +1 -1
- package/client/dist/assets/{PluginsPage-BGPRJpdf.js → PluginsPage-B-UOmzXw.js} +1 -1
- package/client/dist/assets/{ProjectSettingsDialog-D_GTyGLc.js → ProjectSettingsDialog-DkGajIxE.js} +1 -1
- package/client/dist/assets/{TemplatePreviewModal-szwBhd7h.js → TemplatePreviewModal-5CUXlkw7.js} +1 -1
- package/client/dist/assets/{TicketDetailModal-9UEyK974.js → TicketDetailModal-B_igqmti.js} +4 -4
- package/client/dist/assets/{Trans-B_vKZ-Hb.js → Trans-DDMIBBUd.js} +1 -1
- package/client/dist/assets/agent-BXc59ARK2.js +1 -0
- package/client/dist/assets/agent-BbIFXdDq.js +1 -0
- package/client/dist/assets/agent-BqEfA5u5.js +1 -0
- package/client/dist/assets/agent-BtGzgTC4.js +1 -0
- package/client/dist/assets/agent-CIhys_5d.js +1 -0
- package/client/dist/assets/agent-CJPaqsVR.js +1 -0
- package/client/dist/assets/agent-n-hY4GuL.js +1 -0
- package/client/dist/assets/agent-tJ-efa3_2.js +1 -0
- package/client/dist/assets/common-6MLbD-jM.js +1 -0
- package/client/dist/assets/common-BKGEu4rm.js +1 -0
- package/client/dist/assets/common-BNbnv8cE2.js +1 -0
- package/client/dist/assets/common-BqGWtDbt.js +1 -0
- package/client/dist/assets/common-DBtTzeYm2.js +1 -0
- package/client/dist/assets/common-DEW3Nr8n.js +1 -0
- package/client/dist/assets/{common-DVQuhs-m.js → common-DHsv9N5d.js} +1 -1
- package/client/dist/assets/common-mkrEcW-Y.js +1 -0
- package/client/dist/assets/dashboard-BYzxom0L.js +1 -0
- package/client/dist/assets/dashboard-BmDZmHyY.js +1 -0
- package/client/dist/assets/dashboard-CnNtJBQ5.js +1 -0
- package/client/dist/assets/dashboard-D4Uj-XWc2.js +1 -0
- package/client/dist/assets/dashboard-D57uRaGw2.js +1 -0
- package/client/dist/assets/dashboard-DAr6F9et.js +1 -0
- package/client/dist/assets/dashboard-vAcsn0L3.js +1 -0
- package/client/dist/assets/dashboard-vrjZvxWy.js +1 -0
- package/client/dist/assets/{dist-js-CcBCbb32.js → dist-js-BCUhGUXS.js} +1 -1
- package/client/dist/assets/{dist-js-VwztRkGj.js → dist-js-DcoXTnEI.js} +1 -1
- package/client/dist/assets/{formatDistanceToNow-ByHIauTQ.js → formatDistanceToNow-DP3Ab6fX.js} +1 -1
- package/client/dist/assets/{getTimezoneOffsetInMilliseconds-BxHAksaU.js → getTimezoneOffsetInMilliseconds-DdKKL8Fx.js} +1 -1
- package/client/dist/assets/{i18n-CgaRxpII.js → i18n-DREQCE2F.js} +2 -2
- package/client/dist/assets/index-B784m8RT.js +76 -0
- package/client/dist/assets/index-CQBIemiz.css +2 -0
- package/client/dist/assets/{spending-C4p06nen.js → spending-CtY7yYes.js} +1 -1
- package/client/dist/assets/{useBrowserCaptureSession-2OqX0vap.js → useBrowserCaptureSession-BFBdW59q.js} +1 -1
- package/client/dist/assets/{useDesktop-X8YB9xzv.js → useDesktop-uWVZ8eia.js} +1 -1
- package/client/dist/index.html +14 -14
- package/docs/internals/safe-pr-review-flow.md +221 -38
- package/package.json +1 -1
- package/server/dist/active-pr-continuation.js +237 -52
- package/server/dist/agent-chat-manager.js +29 -12
- package/server/dist/agent-store.js +19 -4
- package/server/dist/db.js +21 -0
- package/server/dist/pr-lifecycle.js +100 -8
- package/server/dist/project-git.js +62 -2
- package/server/dist/rail-isolated-launch.js +644 -108
- package/server/dist/rail-pr-decision.js +1065 -181
- package/server/dist/rail-pr-recovery-git.js +235 -0
- package/server/dist/rail-pr-store.js +120 -9
- package/server/dist/rail-worktree-release.js +290 -4
- package/server/dist/rails-router.js +97 -9
- package/server/dist/worktree-manager.js +120 -16
- package/server/dist/worktree-overlay.js +166 -4
- package/client/dist/assets/agent-4rmXoo_p.js +0 -1
- package/client/dist/assets/agent-BxZuNGih.js +0 -1
- package/client/dist/assets/agent-C3uXOYv_.js +0 -1
- package/client/dist/assets/agent-CA8Y4wbw.js +0 -1
- package/client/dist/assets/agent-CASKrhG12.js +0 -1
- package/client/dist/assets/agent-Cv-jud5n2.js +0 -1
- package/client/dist/assets/agent-DitUxYh2.js +0 -1
- package/client/dist/assets/agent-Doow4X7o.js +0 -1
- package/client/dist/assets/common-CD1QHriA2.js +0 -1
- package/client/dist/assets/common-CwwPaRxx.js +0 -1
- package/client/dist/assets/common-Dg2jaX7d.js +0 -1
- package/client/dist/assets/common-DuBwj6tK.js +0 -1
- package/client/dist/assets/common-MRj9MHcc.js +0 -1
- package/client/dist/assets/common-O4ZpnMLp.js +0 -1
- package/client/dist/assets/common-fyeF0v7C2.js +0 -1
- package/client/dist/assets/dashboard-B_NkSHYm.js +0 -1
- package/client/dist/assets/dashboard-ClBb_3pq.js +0 -1
- package/client/dist/assets/dashboard-CpCmJvMB.js +0 -1
- package/client/dist/assets/dashboard-Czohu35O2.js +0 -1
- package/client/dist/assets/dashboard-DcjbD0UK.js +0 -1
- package/client/dist/assets/dashboard-Dvx5F3we.js +0 -1
- package/client/dist/assets/dashboard-R1bOPjBh2.js +0 -1
- package/client/dist/assets/dashboard-owcDucDi.js +0 -1
- package/client/dist/assets/index-BflYQpWm.css +0 -2
- package/client/dist/assets/index-C1_-BTXy.js +0 -72
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={railAdded:`レール {{n}} を追加しました`,railRemoved:`{{rail}} を削除しました`,railLimitReached:`レールの上限に達しました(最大 {{max}})`,railDeleteFailed:`レールを削除できません — スペックを保持しているか、実行中か、PR の判断待ちです`,launchTicketsInFlight:`このレールのスペックは既にアクティブな実行で処理中です`,launchAllSummary_one:`{{count}} 件のレールを並列で起動しました`,launchAllSummary_other:`{{count}} 件のレールを並列で起動しました`,launchAllNoneEligible:`起動できるレールがありません — まず空きレールにスペックを割り当ててください`,launchAllFailed:`起動できたレールはありません`,railCompleted:`レール {{n}} が完了しました`,railFailed:`レール {{n}} が失敗しました — スペックは Specs に戻されました`,railEnded:`レール {{n}}: {{status}} — スペックは Specs に戻されました`,alreadyOnRail:`すでに {{rail}} にあります`,movedToRail:`{{rail}} に移動しました`,railRunningStopFirst:`{{rail}} は実行中です — 削除する前に停止してください`,removedFromRail:`{{rail}} から削除しました`,queuedOnRail:`{{rail}} のキューに追加しました`,queuedOnRailDescription:`レールは現在実行中です`,railStopped:`{{rail}} を停止しました`,stopFailed:`レールの停止に失敗しました`,syncTicketsFailed:`レールのチケット同期に失敗しました`,launchFailed:`レールの起動に失敗しました`,launchNetworkError:`レール起動中にネットワークエラーが発生しました`,railLaunched:`{{rail}} を起動しました`,launchDescription_one:`{{mode}} · スペック {{count}} 件`,launchDescription_other:`{{mode}} · スペック {{count}} 件`,railWorktreeNeedsReview:`Rail {{n}}:マージ後、spec #{{ticket}} は要確認です`,railWorktreesNoGit:`worktree 分離は利用できません:このプロジェクトは git リポジトリではありません — 共有モードで実行します。`,railWorktreesNoCommits:`worktree 分離は利用できません:リポジトリにまだコミットがありません — 初回コミットを作成してから再実行してください。`,railWorktreesError:`ワークツリー分離に失敗しました — この実行は PR レビューフローなし(実装カードなし)で続行されます。下のエラー詳細を確認してください。`,onReviewCannotMoveToRail:`このスペックは PR レビュー待ちです — まず PR の決定を処理してください`,onReviewNotLaunchable:`このレールのスペックが PR レビュー待ちです — 起動する前に PR の決定を処理してください`},t=JSON.parse(`{"operation":{"inProgress":"操作を実行中…","create-pr":"PR を作成中…","publish":"公開中…","discard":"破棄中…","dismiss":"フォローアップを閉じています…","poll-merge":"マージを確認中…","reopen":"再オープン中…","merge-local":"ローカルで統合中…","recover-and-retry":"保存された結果をコミットして再プッシュしています…","acknowledge-no-changes":"完了に変更中…"},"markDone":"完了にする","refine":"改善する","completedToast":"確認済み — spec を完了に移動しました","markDoneConfirmTitle":"これらの spec を完了にしますか?","markDoneConfirmBody":"コード変更が不要であることを実装が確認しました。spec を完了に移動し、変更のない worktree をクリーンアップします。","refineConfirmTitle":"これらの spec を改善しますか?","refineConfirmBody":"変更なしの結果を閉じ、改善できるよう spec をバックログに戻します。実行ログは引き続き利用できます。","localOnly":"変更はローカルにあります","localOnlyHint":"実装は完了しましたが、変更はまだプッシュされていません。ローカルで統合するか、リモートが利用可能になってから公開を再試行してください。","noChanges":"変更は不要でした","partial":"{{total}} 件中 {{succeeded}} 件の実装が準備完了","createPartialPr":"{{count}} 件で PR を作成","deliveryBlocked":"実装完了 — 配信に対応が必要です","updateFailed":"実装完了 — 更新に失敗しました","retryPush":"プッシュを再試行","retryPushVerified":"プッシュを検証しました · コミット {{sha}} はPRに含まれています","commitAlreadyVerified":"コミット {{sha}} はすでにPRで検証済みです","deliveryCommit":"コミット {{sha}}","prClosed":"PR はマージされずに閉じられました","reopen":"再オープン","dismiss":"フォローアップを閉じる","discardLocalResult":"ローカル結果を破棄","dismissConfirmTitle":"このフォローアップを閉じますか?","dismissConfirmBody":"このフォローアップカードを閉じます。専用 worktree は、安全に削除できる場合にのみ削除されます。安全でない場合は警告とともに保持されます。既存の PR、ブランチ、レビュー状態は変更されません。","discardLocalConfirmTitle":"ローカル結果を破棄しますか?","discardLocalConfirmBody":"復旧可能なローカル反復は、安全に削除できる場合にのみ削除されます。変更されている場合は警告とともに保持されます。既存の PR とブランチは変更されません。削除された結果は復旧できません。","viewRunLog":"{{ref}} の実行ログを表示","cleanupIncomplete_one":"クリーンアップが不完全です(警告 {{count}} 件)","cleanupIncomplete_other":"クリーンアップが不完全です(警告 {{count}} 件)","cleanupIncompleteHint":"ローカルの復旧データを保持しました。手動で削除する前に、以下の詳細を確認してください。","copyCleanupDetails":"復旧情報をコピー","safetyArchiveTitle":"安全アーカイブ({{count}})","safetyArchiveHint":"念のため、一時ワークスペースファイルを PR の外部に保存しました。内容を確認するか、手動で削除できます。","copySafetyArchive":"パスをコピー","unit":{"failed":"実装失敗","blocked":"配信ブロック","noChanges":"変更なし","succeeded":"準備完了"},"readyForReview":"レビュー準備完了","draftPr":"ドラフト PR","branchPushed":"ブランチはプッシュ済み — PR は未作成","branchPushedHint":"ブランチはプッシュされましたが、PR を作成できませんでした(GitHub CLI が利用できません)。再試行して作成してください。","iteratingPr":"PR 更新中","prReady":"PR 準備完了","implementationFailed":"実装に失敗しました","implementationFailedHint":"実装の実行に失敗しました。実行ログを開き、再実行する前にこのカードを破棄してください。","prFailed":"PR 失敗","prFailedDetail":"PR 失敗: {{detail}}","createDegraded":"PR を公開できませんでした — {{detail}}。解決後に再試行してください。","createPr":"PR を作成","createPrTooltip":"→ {{base}}","publish":"公開","publishTooltip":"ドラフト PR をチームのレビューに公開します","checkout":"ブランチをチェックアウト","checkoutTooltip":"プロジェクトのメインフォルダで {{branch}} をチェックアウト","checkoutSuccess":"{{branch}} をチェックアウトしました","checkoutFailed":"PR ブランチをチェックアウトできませんでした","checkoutDirtyTitle":"変更を保護するためチェックアウトをブロックしました","checkoutDirtyBody":"プロジェクトのメインフォルダーに未コミットの変更があります。コミットまたは stash してから、もう一度お試しください。変更は一切加えられていません。","checkoutSafetyUnknownTitle":"安全性を確認できないためチェックアウトを一時停止しました","checkoutSafetyUnknownBody":"Specrails はプロジェクトのメインフォルダーの Git 状態を読み取れませんでした。解放や変更は行われていません。Git が利用可能になってから再試行してください。","checkoutNotDeliverableTitle":"この PR ブランチには保存された実装が含まれていません","checkoutNotDeliverableBody":"配信対象の正確なコミットはまだ検証されていません。代わりにローカルの結果を確認または復元してください。","inspectLocalResult":"ローカルの結果を確認","inspectLocalResultTooltip":"保存された隔離 worktree を表示してパスをコピー","localResultPathCopied":"ローカル結果のパスをコピーしました","localResultPath":"保存されたローカル結果","localResultUnavailableHere":"このコンピューターには復元可能な worktree がありません。実行したコンピューターで実行ログを確認してください。","recoverAndRetry":"コミットして push を再試行","recoverAndRetryConfirmTitle":"保存された結果をコミットして push しますか?","recoverAndRetryConfirmBody":"Specrails は {{branch}} 用の隔離 worktree または記録済みの fast-forward 可能なブランチだけを使用します。必要に応じて配信対象ファイルをコミットし、PR が想定された head/base のまま開いている場合に限り、その正確なコミットだけを push します。メインのプロジェクトフォルダーと未コミットの変更には一切触れません。","recoverAndRetryVerified":"復元したコミット {{sha}} が PR 上で検証されました","recoveryStillBlocked":"ローカル復元には引き続き対応が必要です","recheckRecovery":"もう一度確認","recheckRecoveryConfirmTitle":"このコンピューターをもう一度確認しますか?","recheckRecoveryConfirmBody":"Specrails は、このクローンで {{branch}} の配信に属する worktree、ブランチ、refs、reflogs、孤立した Git オブジェクトを再スキャンします。結果を 1 つに特定できた場合、隔離された変更をコミットし、正確な push を再試行します。メインのプロジェクトフォルダーには触れません。","recoveryUnavailable":"このコンピューターでは復旧を検証できませんでした","recoveryUnavailableBody":"Specrails は、このクローンで配信に属する結果を安全に 1 つへ特定できませんでした。変更や削除は行われていません。ステージの詳細と run ログを確認してください。run を別のコンピューターで実行した場合は、そちらで Specrails を開いて再確認してください。","recoveryDetailSummary":"復旧の技術的詳細","discard":"破棄","discardTooltip":"デリバリーを閉じてチケットを Specs に戻します。変更されたローカル作業は保持されます","retryPr":"PR を再試行","retry":"再試行","checkMerge":"マージを確認","verifyPr":"PRを検証","verifyPrTooltip":"GitHub上の正確なコミットとPRのマージ状態を検証します","checkMergeTooltip":"PR がマージ済みかどうかを GitHub に確認します","prLinkFallback":"PR","openPrTitle":"GitHub で PR を開く","notMergedYet":"まだマージされていません","commitMissingRetry":"配信コミットは PR に含まれなくなりました。プッシュを再試行できます。","prVerifiedWaiting":"コミット {{sha}} を検証しました · マージ待ち","alreadyResolved":"すでに他の場所で解決済み","ghFailed":"GitHub CLI が失敗しました:{{detail}}","actionFailed":"PR の決定を適用できませんでした","mergedToast":"PR がマージされました — チケットは完了に移動しました","discardedToast":"PR を破棄しました — チケットは Specs に戻されました","decisionPending":"このレールには未処理の PR 決定があります — 再起動する前に作成・公開・破棄のいずれかを行ってください","discardConfirmTitle":"この成果物を破棄しますか?","discardConfirmBody":"PR はリモートブランチを削除せずにクローズされます。SpecRails が所有し、記録済みコミットのままのローカルブランチと worktree だけが削除されます。変更されたものは警告とともに保持されます。チケットは Specs のバックログに戻ります。削除されたローカルリソースは復旧できません。","implementationFailedDiscardTitle":"失敗した配信を破棄しますか?","implementationFailedDiscardBody":"カードを閉じ、チケットを Specs に戻します。ローカルの作業とブランチは確認できるよう保持されます。安全にクリーンアップできることが確認されたリソースのみ削除される場合があります。","mergeLocal":"ローカルに統合","mergeLocalTooltip":"配信されたブランチをローカルチェックアウトの {{base}} にマージします(GitHub 不要)","mergeLocalConfirmTitle":"ローカルに統合しますか?","mergeLocalConfirmBody":"配信されたブランチがローカルチェックアウトの {{base}} にマージされます。チェックアウトは {{base}} でワークツリーがクリーンである必要があります。","mergeLocalBlockedDirty":"統合できません:{{base}} のワークツリーに未コミットの変更があります。コミットまたはスタッシュして再試行してください。","mergeLocalBlockedBranch":"統合できません:チェックアウトは {{current}} で、{{base}} ではありません。{{base}} に切り替えて再試行してください。","mergeLocalFailed":"ローカルマージに失敗しました:{{detail}}","mergedLocally":"ローカルで {{base}} に統合しました"}`),n={title:`レール`,runningCount_one:`{{count}} 件実行中`,runningCount_other:`{{count}} 件実行中`,launchAll:`すべて起動`,launchAllTitle:`準備完了のレールをすべて並列で起動します — 各実行は専用の git worktree に隔離されます`},r={skipRunning_one:`{{count}} 件は既に実行中`,skipRunning_other:`{{count}} 件は既に実行中`,skipEmpty_one:`{{count}} 件はスペックなし`,skipEmpty_other:`{{count}} 件はスペックなし`,skipPendingDecision_one:`{{count}} 件は PR の判断待ち`,skipPendingDecision_other:`{{count}} 件は PR の判断待ち`,skipOnReview_one:`{{count}} 件はレビュー中のスペックあり`,skipOnReview_other:`{{count}} 件はレビュー中のスペックあり`,skipInFlight_one:`{{count}} 件をスキップ(スペックは処理中)`,skipInFlight_other:`{{count}} 件をスキップ(スペックは処理中)`,failedCount_one:`{{count}} 件が失敗`,failedCount_other:`{{count}} 件が失敗`},i={title:`すべてのレールを起動`,railsCount_one:`レール {{count}} 件`,railsCount_other:`レール {{count}} 件`,specsCount_one:`スペック {{count}} 件`,specsCount_other:`スペック {{count}} 件`,isolationTitle:`並列かつ隔離。`,isolationBody:`各レールは専用の git worktree で実行され、同時起動が衝突することはありません。`,pipelinesTitle_one:`{{count}} 本の AI パイプライン。`,pipelinesTitle_other:`{{count}} 本の AI パイプライン。`,pipelinesBody:`レールごとに 1 回起動し、それぞれ設定済みのモード・エンジン・プロファイルを使います。`,costTitle:`コストは倍増します。`,costBody:`各レールが独自の AI 実行を生成します — 支出はレール数に比例します。`,launch_one:`レール {{count}} 件を起動`,launch_other:`レール {{count}} 件を起動`},a={viewJobLog:`ジョブログを表示`,log:`ログ`,implement:`実装`,batch:`バッチ`,freestyle:`Freestyle`,freestyleTitle:`Freestyle — Claude がパイプラインなしでスペックを自律的に実装します`,loop:`Loop`,loopTitle:`Loop — 公開済みの自動化ループをレールのスペックに対して実行します`,pickLoop:`ループを選択…`,effortTitle:`推論の労力`,stop:`停止`,play:`実行`,failedRetry:`ジョブが失敗しました — クリックして再試行`,addSpecsFirst:`先にこのレールにスペックを追加してください`,builtInLoops:`組み込み`,customLoops:`カスタムループ`,worktreesMerged:`{{count}} 件マージ済み`,worktreesNeedsReview:`{{count}} 件要確認`,execSteps:`{{count}} ステップ`,execLines:`{{count}} 行`,openspec:`OpenSpec`},o={moveToSpecs:`Specs に移動`,deleteRail:`{{label}} を削除`,dropHere:`ここにドロップ`,dropOnThisRail:`このレールにドロップ`,dragSpecsHere:`ここにスペックをドラッグ`},s={title:`Freestyle モードで起動`,context_one:`{{rail}} · スペック {{count}} 件`,context_other:`{{rail}} · スペック {{count}} 件`,noPipelineTitle:`OpenSpec パイプラインなし。`,noPipelineBody:`アーキテクト → 開発者 → レビュアーの構造化フローは完全にスキップされます。`,autonomyTitle:`Claude ネイティブの自律性。`,autonomyBody:`Claude はネイティブエージェントと動的ワークフローを使って自律的に作業します。`,costTitle:`コストは変動します。`,costBody:`支出は Claude の判断に依存し、想定より高くなることがあります。`,continue:`続行`},c={fetchFailed:`レールの取得に失敗しました: {{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}} 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=JSON.parse(`{"operation":{"inProgress":"Action en cours…","create-pr":"Création de la PR…","publish":"Publication…","discard":"Suppression…","dismiss":"Fermeture du suivi…","poll-merge":"Vérification de la fusion…","reopen":"Réouverture…","merge-local":"Intégration locale…","recover-and-retry":"Création du commit et nouvelle tentative d’envoi du résultat préservé…","acknowledge-no-changes":"Marquage comme terminé…"},"markDone":"Marquer comme terminées","refine":"Affiner","completedToast":"Confirmé — les specs sont passées à Terminé","markDoneConfirmTitle":"Marquer ces specs comme terminées ?","markDoneConfirmBody":"L’implémentation a confirmé qu’aucune modification de code n’est nécessaire. Les specs passeront à Terminé et le worktree sans changement sera nettoyé.","refineConfirmTitle":"Affiner ces specs ?","refineConfirmBody":"Le résultat sans modification sera fermé et les specs retourneront dans le backlog pour être affinées. Les journaux d’exécution resteront disponibles.","localOnly":"Modifications disponibles localement","localOnlyHint":"L’implémentation est terminée, mais les modifications n’ont pas été poussées. Intégrez-les localement ou republiez-les lorsque le dépôt distant sera disponible.","noChanges":"Aucune modification nécessaire","partial":"{{succeeded}} implémentations sur {{total}} sont prêtes","createPartialPr":"Créer une PR avec {{count}}","deliveryBlocked":"Implémentation terminée — la livraison requiert votre attention","updateFailed":"Implémentation terminée — échec de la mise à jour","retryPush":"Réessayer le push","retryPushVerified":"Push vérifié · le commit {{sha}} est dans la PR","commitAlreadyVerified":"Le commit {{sha}} est déjà vérifié dans la PR","deliveryCommit":"commit {{sha}}","prClosed":"PR fermée sans fusion","reopen":"Rouvrir","dismiss":"Fermer le suivi","discardLocalResult":"Supprimer le résultat local","dismissConfirmTitle":"Fermer ce suivi ?","dismissConfirmBody":"Cette carte de suivi sera fermée. Son worktree ne sera supprimé que si cela reste sans risque ; sinon, il sera conservé avec un avertissement. La PR existante, sa branche et son état de revue resteront inchangés.","discardLocalConfirmTitle":"Supprimer le résultat local ?","discardLocalConfirmBody":"L’itération locale récupérable ne sera supprimée que si cela reste sans risque ; si elle a changé, elle sera conservée avec un avertissement. Toute PR existante et sa branche resteront inchangées. Un résultat supprimé ne peut pas être récupéré.","viewRunLog":"Voir le journal d’exécution de {{ref}}","cleanupIncomplete_one":"Nettoyage incomplet ({{count}} avertissement)","cleanupIncomplete_other":"Nettoyage incomplet ({{count}} avertissements)","cleanupIncompleteHint":"Les données de récupération locales ont été conservées. Examinez ces détails avant toute suppression manuelle.","copyCleanupDetails":"Copier les détails de récupération","safetyArchiveTitle":"Archive de sécurité ({{count}})","safetyArchiveHint":"Des fichiers temporaires de l’espace de travail ont été conservés hors de la PR par précaution. Vous pouvez les examiner ou les supprimer manuellement.","copySafetyArchive":"Copier les chemins","unit":{"failed":"échec de l’implémentation","blocked":"livraison bloquée","noChanges":"aucune modification","succeeded":"prête"},"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","implementationFailed":"Échec de l’implémentation","implementationFailedHint":"Le run d’implémentation a échoué. Ouvrez le journal du run, puis abandonnez cette carte avant de relancer.","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":"Changer de branche","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","checkoutDirtyTitle":"Checkout bloqué pour protéger vos modifications","checkoutDirtyBody":"Le dossier principal du projet contient des modifications non validées. Créez un commit ou mettez-les de côté, puis réessayez. Aucun changement n’a été effectué.","checkoutSafetyUnknownTitle":"Checkout suspendu, car la sécurité n’a pas pu être vérifiée","checkoutSafetyUnknownBody":"Specrails n’a pas pu lire l’état Git du dossier principal du projet. Rien n’a été libéré ni modifié. Réessayez lorsque Git sera disponible.","checkoutNotDeliverableTitle":"Cette branche de PR ne contient pas l’implémentation préservée","checkoutNotDeliverableBody":"Le commit exact de la livraison n’a pas encore été vérifié. Inspectez ou récupérez plutôt le résultat local.","inspectLocalResult":"Inspecter le résultat local","inspectLocalResultTooltip":"Afficher le worktree isolé préservé et copier son chemin","localResultPathCopied":"Chemin du résultat local copié","localResultPath":"Résultat local préservé","localResultUnavailableHere":"Aucun worktree récupérable n’est disponible sur cet ordinateur. Consultez le journal d’exécution depuis la machine où l’opération a été lancée.","recoverAndRetry":"Créer le commit et réessayer l’envoi","recoverAndRetryConfirmTitle":"Créer le commit et envoyer le résultat préservé ?","recoverAndRetryConfirmBody":"Specrails utilisera uniquement le worktree isolé ou la branche enregistrée compatible avec une avance rapide pour {{branch}}. Si nécessaire, il créera un commit avec les fichiers livrables, puis enverra ce commit exact uniquement si la PR est toujours ouverte sur les branches source et cible attendues. Le dossier principal de votre projet et ses modifications non validées resteront intacts.","recoverAndRetryVerified":"Le commit récupéré {{sha}} est vérifié dans la PR","recoveryStillBlocked":"La récupération locale nécessite encore votre attention","recheckRecovery":"Vérifier à nouveau","recheckRecoveryConfirmTitle":"Vérifier à nouveau cet ordinateur ?","recheckRecoveryConfirmBody":"Specrails réanalysera dans ce clone le worktree, la branche, les refs, les reflogs et les objets Git orphelins appartenant à la livraison de {{branch}}. S’il prouve un résultat unique, il pourra committer les changements isolés et retenter le push exact. Le dossier principal du projet ne sera pas touché.","recoveryUnavailable":"La récupération n’a pas pu être vérifiée sur cet ordinateur","recoveryUnavailableBody":"Specrails n’a pas pu prouver de manière sûre un résultat unique appartenant à la livraison dans ce clone. Rien n’a été modifié ou supprimé. Consultez le détail de l’étape et les journaux d’exécution. Si le run a été exécuté sur un autre ordinateur, ouvrez-y Specrails puis vérifiez à nouveau.","recoveryDetailSummary":"Détail technique de récupération","discard":"Abandonner","discardTooltip":"Ferme la livraison et renvoie ses tickets vers Specs ; le travail local modifié est conservé","retryPr":"Réessayer la PR","retry":"Réessayer","checkMerge":"Vérifier le merge","verifyPr":"Vérifier la PR","verifyPrTooltip":"Vérifier le commit exact dans GitHub et si la PR est fusionnée","checkMergeTooltip":"Demande à GitHub si la PR a été fusionnée","prLinkFallback":"PR","openPrTitle":"Ouvrir la PR sur GitHub","notMergedYet":"Pas encore fusionnée","commitMissingRetry":"Le commit de livraison n’est plus présent dans la PR. Vous pouvez réessayer le push.","prVerifiedWaiting":"Commit {{sha}} vérifié · en attente du merge","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":"La PR sera fermée sans supprimer sa branche distante. Seuls les branches locales et les worktrees appartenant à SpecRails et toujours positionnés sur leur commit enregistré seront supprimés ; tout élément modifié sera conservé avec un avertissement. Les tickets retourneront dans le backlog Specs. Les ressources locales supprimées ne peuvent pas être récupérées.","implementationFailedDiscardTitle":"Abandonner cette livraison en échec ?","implementationFailedDiscardBody":"La carte sera fermée et ses tickets retourneront vers Specs. Le travail local et les branches seront conservés pour inspection. Seules les ressources dont le nettoyage est prouvé sûr pourront être supprimées.","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}} aggiunto`,railRemoved:`{{rail}} rimosso`,railLimitReached:`Limite di rail raggiunto ({{max}} max)`,railDeleteFailed:`Impossibile rimuovere il rail — contiene spec, è in esecuzione o ha una decisione PR in sospeso`,launchTicketsInFlight:`Una spec di questo rail è già in lavorazione da un'esecuzione attiva`,launchAllSummary_one:`{{count}} rail lanciato in parallelo`,launchAllSummary_other:`{{count}} rail lanciati in parallelo`,launchAllNoneEligible:`Nessun rail pronto al lancio — assegna prima le spec a un rail libero`,launchAllFailed:`Nessun rail è stato lanciato`,railCompleted:`Rail {{n}} completato`,railFailed:`Rail {{n}} non riuscito — le spec sono tornate in Specs`,railEnded:`Rail {{n}} {{status}} — le spec sono tornate in Specs`,alreadyOnRail:`Già su {{rail}}`,movedToRail:`Spostata su {{rail}}`,railRunningStopFirst:`{{rail}} è in esecuzione — fermalo prima di rimuoverlo`,removedFromRail:`Rimossa da {{rail}}`,queuedOnRail:`In coda su {{rail}}`,queuedOnRailDescription:`Il rail è attualmente in esecuzione`,railStopped:`{{rail}} fermato`,stopFailed:`Impossibile fermare il rail`,syncTicketsFailed:`Impossibile sincronizzare i ticket del rail`,launchFailed:`Impossibile avviare il rail`,launchNetworkError:`Errore di rete durante l'avvio del rail`,railLaunched:`{{rail}} avviato`,launchDescription_one:`{{mode}} con {{count}} spec`,launchDescription_other:`{{mode}} con {{count}} spec`,railWorktreeNeedsReview:`Rail {{n}}: la spec #{{ticket}} richiede revisione dopo il merge`,railWorktreesNoGit:`Isolamento con worktree non disponibile: il progetto non è un repository git — esecuzione in modalità condivisa.`,railWorktreesNoCommits:`Isolamento con worktree non disponibile: il repository non ha ancora commit — crea un commit iniziale e rilancia.`,railWorktreesError:`L'isolamento tramite worktree è fallito — questa esecuzione continua SENZA il flusso di revisione PR (nessuna scheda di implementazione). Vedi il dettaglio dell'errore sotto.`,onReviewCannotMoveToRail:`Questa spec è in attesa della revisione della PR — risolvi prima la decisione sulla PR`,onReviewNotLaunchable:`Una spec di questo rail è in attesa della revisione della PR — risolvi la decisione sulla PR prima di lanciare`},t={operation:{inProgress:`Azione in corso…`,"create-pr":`Creazione PR…`,publish:`Pubblicazione…`,discard:`Eliminazione…`,dismiss:`Chiusura del follow-up…`,"poll-merge":`Verifica merge…`,reopen:`Riapertura…`,"merge-local":`Integrazione locale…`,"recover-and-retry":`Creazione del commit e nuovo tentativo di push del risultato preservato…`,"acknowledge-no-changes":`Contrassegno come completato…`},markDone:`Segna come completate`,refine:`Perfeziona`,completedToast:`Confermato — le spec sono passate a Completate`,markDoneConfirmTitle:`Segnare queste spec come completate?`,markDoneConfirmBody:`L’implementazione ha confermato che non servono modifiche al codice. Le spec passeranno a Completate e il worktree senza modifiche verrà ripulito.`,refineConfirmTitle:`Perfezionare queste spec?`,refineConfirmBody:`Il risultato senza modifiche verrà chiuso e le spec torneranno nel backlog per essere perfezionate. I log di esecuzione resteranno disponibili.`,localOnly:`Modifiche disponibili in locale`,localOnlyHint:`L’implementazione è completa, ma le modifiche non sono state inviate. Integrale localmente o riprova a pubblicarle quando il remoto sarà disponibile.`,noChanges:`Nessuna modifica necessaria`,partial:`{{succeeded}} implementazioni su {{total}} pronte`,createPartialPr:`Crea PR con {{count}}`,deliveryBlocked:`Implementazione completa — la consegna richiede attenzione`,updateFailed:`Implementazione completa — aggiornamento non riuscito`,retryPush:`Riprova push`,retryPushVerified:`Push verificato · il commit {{sha}} è nella PR`,commitAlreadyVerified:`Il commit {{sha}} è già verificato nella PR`,deliveryCommit:`commit {{sha}}`,prClosed:`PR chiusa senza merge`,reopen:`Riapri`,dismiss:`Chiudi follow-up`,discardLocalResult:`Elimina risultato locale`,dismissConfirmTitle:`Chiudere questo follow-up?`,dismissConfirmBody:`Questa scheda di follow-up verrà chiusa. Il relativo worktree verrà rimosso solo se è ancora sicuro farlo; in caso contrario, sarà conservato con un avviso. La PR esistente, il suo branch e lo stato di revisione resteranno invariati.`,discardLocalConfirmTitle:`Eliminare il risultato locale?`,discardLocalConfirmBody:`L’iterazione locale recuperabile verrà rimossa solo se è ancora sicuro farlo; se è cambiata, sarà conservata con un avviso. Qualsiasi PR esistente e il suo branch resteranno invariati. Un risultato rimosso non può essere recuperato.`,viewRunLog:`Visualizza il log di esecuzione di {{ref}}`,cleanupIncomplete_one:`Pulizia incompleta ({{count}} avviso)`,cleanupIncomplete_other:`Pulizia incompleta ({{count}} avvisi)`,cleanupIncompleteHint:`I dati di recupero locali sono stati conservati. Controlla questi dettagli prima di rimuovere qualcosa manualmente.`,copyCleanupDetails:`Copia dettagli di recupero`,safetyArchiveTitle:`Archivio di sicurezza ({{count}})`,safetyArchiveHint:`I file temporanei dell’area di lavoro sono stati conservati fuori dalla PR per precauzione. Puoi controllarli o rimuoverli manualmente.`,copySafetyArchive:`Copia percorsi`,unit:{failed:`implementazione non riuscita`,blocked:`consegna bloccata`,noChanges:`nessuna modifica`,succeeded:`pronta`},readyForReview:`Pronto per la revisione`,draftPr:`PR in bozza`,branchPushed:`Ramo inviato — PR in sospeso`,branchPushedHint:`Il ramo è stato inviato ma non è stato possibile creare la PR (GitHub CLI non disponibile). Riprova per crearla.`,iteratingPr:`Aggiornamento PR`,prReady:`PR pronta`,implementationFailed:`Implementazione non riuscita`,implementationFailedHint:`Il run di implementazione non è riuscito. Apri il log del run, poi scarta questa scheda prima di rilanciare.`,prFailed:`PR non riuscita`,prFailedDetail:`PR non riuscita: {{detail}}`,createDegraded:`Impossibile pubblicare la PR — {{detail}}. Riprova una volta risolto.`,createPr:`Crea PR`,createPrTooltip:`→ {{base}}`,publish:`Pubblica`,publishTooltip:`Apre la PR in bozza per la revisione del team`,checkout:`Passa al branch`,checkoutTooltip:`Esegui il checkout di {{branch}} nella cartella principale del progetto`,checkoutSuccess:`Checkout eseguito su {{branch}}`,checkoutFailed:`Impossibile eseguire il checkout del branch della PR`,checkoutDirtyTitle:`Checkout bloccato per proteggere le tue modifiche`,checkoutDirtyBody:`La cartella principale del progetto contiene modifiche senza commit. Esegui un commit o uno stash, quindi riprova. Non è stato modificato nulla.`,checkoutSafetyUnknownTitle:`Checkout in pausa: impossibile verificare la sicurezza`,checkoutSafetyUnknownBody:`Specrails non ha potuto leggere lo stato Git della cartella principale del progetto. Nulla è stato rilasciato o modificato. Riprova quando Git sarà disponibile.`,checkoutNotDeliverableTitle:`Questo branch della PR non contiene l’implementazione preservata`,checkoutNotDeliverableBody:`Il commit esatto della consegna non è ancora stato verificato. Ispeziona o recupera invece il risultato locale.`,inspectLocalResult:`Ispeziona il risultato locale`,inspectLocalResultTooltip:`Mostra il worktree isolato preservato e copia il suo percorso`,localResultPathCopied:`Percorso del risultato locale copiato`,localResultPath:`Risultato locale preservato`,localResultUnavailableHere:`Su questo computer non è disponibile alcun worktree recuperabile. Consulta il log dell’esecuzione dal computer su cui è stata eseguita.`,recoverAndRetry:`Crea commit e riprova il push`,recoverAndRetryConfirmTitle:`Creare il commit e inviare il risultato preservato?`,recoverAndRetryConfirmBody:`Specrails userà esclusivamente il worktree isolato o il branch registrato compatibile con il fast-forward per {{branch}}. Se necessario, creerà un commit con i file consegnabili e invierà quel commit esatto solo se la PR è ancora aperta sui branch di origine e destinazione previsti. La cartella principale del progetto e le sue modifiche senza commit non verranno toccate.`,recoverAndRetryVerified:`Il commit recuperato {{sha}} è verificato nella PR`,recoveryStillBlocked:`Il recupero locale richiede ancora attenzione`,recheckRecovery:`Controlla di nuovo`,recheckRecoveryConfirmTitle:`Controllare di nuovo questo computer?`,recheckRecoveryConfirmBody:`Specrails riesaminerà in questo clone il worktree, il branch, i ref, i reflog e gli oggetti Git orfani appartenenti alla consegna di {{branch}}. Se dimostra un unico risultato, potrà eseguire il commit delle modifiche isolate e ritentare il push esatto. La cartella principale del progetto non verrà toccata.`,recoveryUnavailable:`Impossibile verificare il recupero su questo computer`,recoveryUnavailableBody:`Specrails non ha potuto dimostrare in sicurezza un unico risultato appartenente alla consegna in questo clone. Nulla è stato modificato o rimosso. Controlla i dettagli della fase e i log di esecuzione. Se il run è stato eseguito su un altro computer, apri Specrails lì e controlla di nuovo.`,recoveryDetailSummary:`Dettaglio tecnico del recupero`,discard:`Scarta`,discardTooltip:`Chiude la consegna e riporta i ticket in Specs; il lavoro locale modificato viene conservato`,retryPr:`Riprova PR`,retry:`Riprova`,checkMerge:`Verifica merge`,verifyPr:`Verifica PR`,verifyPrTooltip:`Verifica il commit esatto su GitHub e se la PR è stata unita`,checkMergeTooltip:`Chiede a GitHub se è stato fatto il merge della PR`,prLinkFallback:`PR`,openPrTitle:`Apri la PR su GitHub`,notMergedYet:`Ancora nessun merge`,commitMissingRetry:`Il commit di consegna non è più presente nella PR. Puoi riprovare il push.`,prVerifiedWaiting:`Commit {{sha}} verificato · in attesa del merge`,alreadyResolved:`Già risolta altrove`,ghFailed:`GitHub CLI non riuscita: {{detail}}`,actionFailed:`Impossibile applicare la decisione sulla PR`,mergedToast:`Merge della PR effettuato — i ticket sono passati a Completato`,discardedToast:`PR scartata — i ticket sono tornati in Specs`,decisionPending:`Questo rail ha una decisione sulla PR in sospeso — creala, pubblicala o scartala prima di rilanciare`,discardConfirmTitle:`Scartare questa consegna?`,discardConfirmBody:`La PR verrà chiusa senza eliminare il branch remoto. Verranno rimossi solo i branch locali e i worktree di proprietà di SpecRails che si trovano ancora sul commit registrato; qualsiasi elemento modificato sarà conservato con un avviso. I ticket torneranno nel backlog di Specs. Le risorse locali rimosse non possono essere recuperate.`,implementationFailedDiscardTitle:`Scartare questa consegna non riuscita?`,implementationFailedDiscardBody:`La scheda verrà chiusa e i ticket torneranno in Specs. Il lavoro locale e i branch saranno conservati per l'ispezione. Potranno essere rimosse solo le risorse la cui pulizia è dimostrata sicura.`,mergeLocal:`Integra in locale`,mergeLocalTooltip:`Unisce i branch consegnati in {{base}} nel tuo checkout locale (senza GitHub)`,mergeLocalConfirmTitle:`Integrare in locale?`,mergeLocalConfirmBody:`I branch consegnati verranno uniti in {{base}} nel tuo checkout locale. Il checkout deve essere su {{base}} con albero di lavoro pulito.`,mergeLocalBlockedDirty:`Impossibile integrare: il tuo albero di lavoro su {{base}} ha modifiche non committate. Fai commit o stash e riprova.`,mergeLocalBlockedBranch:`Impossibile integrare: il tuo checkout è su {{current}}, non su {{base}}. Passa a {{base}} e riprova.`,mergeLocalFailed:`Merge locale fallito: {{detail}}`,mergedLocally:`Integrato in {{base}} in locale`},n={title:`Rails`,runningCount_one:`{{count}} in esecuzione`,runningCount_other:`{{count}} in esecuzione`,launchAll:`Lancia tutti`,launchAllTitle:`Lancia in parallelo tutti i rail pronti — ogni esecuzione è isolata nel proprio worktree git`},r={skipRunning_one:`{{count}} già in esecuzione`,skipRunning_other:`{{count}} già in esecuzione`,skipEmpty_one:`{{count}} senza spec`,skipEmpty_other:`{{count}} senza spec`,skipPendingDecision_one:`{{count}} in attesa di una decisione PR`,skipPendingDecision_other:`{{count}} in attesa di una decisione PR`,skipOnReview_one:`{{count}} con spec in revisione`,skipOnReview_other:`{{count}} con spec in revisione`,skipInFlight_one:`{{count}} saltato (spec già in corso)`,skipInFlight_other:`{{count}} saltati (spec già in corso)`,failedCount_one:`{{count}} non riuscito`,failedCount_other:`{{count}} non riusciti`},i={title:`Lancia tutti i rail`,railsCount_one:`{{count}} rail`,railsCount_other:`{{count}} rail`,specsCount_one:`{{count}} spec`,specsCount_other:`{{count}} spec`,isolationTitle:`Parallelo e isolato.`,isolationBody:`Ogni rail gira nel proprio worktree git — i lanci simultanei non collidono mai.`,pipelinesTitle_one:`{{count}} pipeline IA.`,pipelinesTitle_other:`{{count}} pipeline IA.`,pipelinesBody:`Un lancio per rail, ciascuno con la propria modalità, engine e profilo configurati.`,costTitle:`Costo moltiplicato.`,costBody:`Ogni rail genera la propria esecuzione IA — la spesa cresce con il numero di rail.`,launch_one:`Lancia {{count}} rail`,launch_other:`Lancia {{count}} rail`},a={viewJobLog:`Visualizza log del job`,log:`Log`,implement:`Implementa`,batch:`Batch`,freestyle:`Freestyle`,freestyleTitle:`Freestyle — Claude implementa la spec in autonomia, senza pipeline`,loop:`Loop`,loopTitle:`Loop — esegui un loop di automazione pubblicato sulle spec del rail`,pickLoop:`Scegli un loop…`,effortTitle:`Sforzo di ragionamento`,stop:`Stop`,play:`Avvia`,failedRetry:`Job non riuscito — clicca per riprovare`,addSpecsFirst:`Aggiungi prima delle spec a questo rail`,builtInLoops:`Integrati`,customLoops:`Loop personalizzati`,worktreesMerged:`{{count}} uniti`,worktreesNeedsReview:`{{count}} da rivedere`,execSteps:`{{count}} passi`,execLines:`{{count}} righe`,openspec:`OpenSpec`},o={moveToSpecs:`Sposta in Specs`,deleteRail:`Elimina {{label}}`,dropHere:`Rilascia qui`,dropOnThisRail:`Rilascia su questo rail`,dragSpecsHere:`Trascina qui le spec`},s={title:`Avvia in modalità Freestyle`,context_one:`{{rail}} · {{count}} spec`,context_other:`{{rail}} · {{count}} spec`,noPipelineTitle:`Nessuna pipeline OpenSpec.`,noPipelineBody:`Il flusso strutturato architect → developer → reviewer viene saltato del tutto.`,autonomyTitle:`Autonomia nativa di Claude.`,autonomyBody:`Claude lavora in autonomia usando agenti nativi e workflow dinamici.`,costTitle:`Costo variabile.`,costBody:`La spesa dipende da cosa Claude decide di fare — può essere più alta del previsto.`,continue:`Continua`},c={fetchFailed:`Impossibile recuperare i rail: {{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={operation:{inProgress:`Ação em andamento…`,"create-pr":`Criando PR…`,publish:`Publicando…`,discard:`Descartando…`,dismiss:`Encerrando acompanhamento…`,"poll-merge":`Verificando merge…`,reopen:`Reabrindo…`,"merge-local":`Integrando localmente…`,"recover-and-retry":`A criar o commit e a tentar novamente o push do resultado preservado…`,"acknowledge-no-changes":`Marcando como concluído…`},markDone:`Marcar como concluídas`,refine:`Refinar`,completedToast:`Confirmado — as specs foram movidas para Concluído`,markDoneConfirmTitle:`Marcar estas specs como concluídas?`,markDoneConfirmBody:`A implementação confirmou que nenhuma alteração de código é necessária. As specs serão movidas para Concluído e o worktree sem alterações será limpo.`,refineConfirmTitle:`Refinar estas specs?`,refineConfirmBody:`O resultado sem alterações será fechado e as specs voltarão ao backlog para refinamento. Os logs de execução permanecerão disponíveis.`,localOnly:`Alterações disponíveis localmente`,localOnlyHint:`A implementação foi concluída, mas as alterações não foram enviadas. Integre-as localmente ou tente publicar novamente quando o remoto estiver disponível.`,noChanges:`Nenhuma alteração necessária`,partial:`{{succeeded}} de {{total}} implementações prontas`,createPartialPr:`Criar PR com {{count}}`,deliveryBlocked:`Implementação concluída — a entrega requer atenção`,updateFailed:`Implementação concluída — falha na atualização`,retryPush:`Tentar push novamente`,retryPushVerified:`Push verificado · o commit {{sha}} está na PR`,commitAlreadyVerified:`O commit {{sha}} já está verificado na PR`,deliveryCommit:`commit {{sha}}`,prClosed:`PR fechada sem merge`,reopen:`Reabrir`,dismiss:`Encerrar acompanhamento`,discardLocalResult:`Descartar resultado local`,dismissConfirmTitle:`Encerrar este acompanhamento?`,dismissConfirmBody:`Este cartão de acompanhamento será encerrado. Seu worktree só será removido se isso ainda for seguro; caso contrário, será preservado com um aviso. A PR existente, seu branch e o estado da revisão permanecerão inalterados.`,discardLocalConfirmTitle:`Descartar o resultado local?`,discardLocalConfirmBody:`A iteração local recuperável só será removida se isso ainda for seguro; se tiver sido alterada, será preservada com um aviso. Qualquer PR existente e seu branch permanecerão inalterados. Um resultado removido não pode ser recuperado.`,viewRunLog:`Ver log de execução de {{ref}}`,cleanupIncomplete_one:`Limpeza incompleta ({{count}} aviso)`,cleanupIncomplete_other:`Limpeza incompleta ({{count}} avisos)`,cleanupIncompleteHint:`Os dados de recuperação locais foram preservados. Verifique estes detalhes antes de remover algo manualmente.`,copyCleanupDetails:`Copiar detalhes de recuperação`,safetyArchiveTitle:`Arquivo de segurança ({{count}})`,safetyArchiveHint:`Os ficheiros temporários do espaço de trabalho foram preservados fora da PR por precaução. Pode inspecioná-los ou removê-los manualmente.`,copySafetyArchive:`Copiar caminhos`,unit:{failed:`implementação falhou`,blocked:`entrega bloqueada`,noChanges:`sem alterações`,succeeded:`pronta`},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`,implementationFailed:`Implementação falhou`,implementationFailedHint:`A execução de implementação falhou. Abra o log da execução e descarte este cartão antes de relançar.`,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:`Mudar para o branch`,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`,checkoutDirtyTitle:`Checkout bloqueado para proteger as suas alterações`,checkoutDirtyBody:`A pasta principal do projeto contém alterações sem commit. Faça commit ou stash e tente novamente. Não foi feita qualquer alteração.`,checkoutSafetyUnknownTitle:`Checkout em pausa porque não foi possível verificar a segurança`,checkoutSafetyUnknownBody:`O Specrails não conseguiu ler o estado do Git na pasta principal do projeto. Nada foi libertado ou alterado. Tente novamente quando o Git estiver disponível.`,checkoutNotDeliverableTitle:`Este ramo da PR não contém a implementação preservada`,checkoutNotDeliverableBody:`O commit exato da entrega ainda não foi verificado. Em alternativa, inspecione ou recupere o resultado local.`,inspectLocalResult:`Inspecionar resultado local`,inspectLocalResultTooltip:`Mostrar o worktree isolado preservado e copiar o respetivo caminho`,localResultPathCopied:`Caminho do resultado local copiado`,localResultPath:`Resultado local preservado`,localResultUnavailableHere:`Não existe nenhum worktree recuperável neste computador. Consulte o log da execução no computador onde foi iniciada.`,recoverAndRetry:`Fazer commit e tentar push novamente`,recoverAndRetryConfirmTitle:`Fazer commit e enviar o resultado preservado?`,recoverAndRetryConfirmBody:`O Specrails utilizará apenas o worktree isolado ou o ramo registado compatível com avanço rápido para {{branch}}. Se necessário, criará um commit com os ficheiros entregáveis e enviará esse commit exato apenas se a PR continuar aberta nos ramos de origem e destino esperados. A pasta principal do projeto e as respetivas alterações sem commit não serão afetadas.`,recoverAndRetryVerified:`O commit recuperado {{sha}} está verificado na PR`,recoveryStillBlocked:`A recuperação local ainda requer atenção`,recheckRecovery:`Verificar novamente`,recheckRecoveryConfirmTitle:`Verificar este computador novamente?`,recheckRecoveryConfirmBody:`O Specrails examinará novamente neste clone o worktree, a branch, as refs, os reflogs e os objetos Git órfãos pertencentes à entrega de {{branch}}. Se comprovar um único resultado, poderá fazer commit das alterações isoladas e repetir o push exato. A pasta principal do projeto não será alterada.`,recoveryUnavailable:`Não foi possível verificar a recuperação neste computador`,recoveryUnavailableBody:`O Specrails não conseguiu comprovar com segurança um único resultado pertencente à entrega neste clone. Nada foi alterado ou removido. Consulte os detalhes da etapa e os registos de execução. Se o run foi executado noutro computador, abra o Specrails nele e verifique novamente.`,recoveryDetailSummary:`Detalhe técnico da recuperação`,discard:`Descartar`,discardTooltip:`Fecha a entrega e devolve os tickets a Specs; o trabalho local alterado é preservado`,retryPr:`Tentar PR novamente`,retry:`Tentar novamente`,checkMerge:`Verificar merge`,verifyPr:`Verificar PR`,verifyPrTooltip:`Verificar o commit exato no GitHub e se a PR foi integrada`,checkMergeTooltip:`Pergunta ao GitHub se já foi feito merge da PR`,prLinkFallback:`PR`,openPrTitle:`Abrir a PR no GitHub`,notMergedYet:`Ainda sem merge`,commitMissingRetry:`O commit da entrega não está mais na PR. Você pode tentar o push novamente.`,prVerifiedWaiting:`Commit {{sha}} verificado · aguardando 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:`A PR será fechada sem excluir o branch remoto. Apenas branches locais e worktrees pertencentes ao SpecRails que ainda estejam no commit registrado serão removidos; qualquer item alterado será preservado com um aviso. Os tickets voltarão ao backlog de Specs. Os recursos locais removidos não podem ser recuperados.`,implementationFailedDiscardTitle:`Descartar esta entrega com falha?`,implementationFailedDiscardBody:`O cartão será fechado e os tickets voltarão a Specs. O trabalho local e os branches serão preservados para inspeção. Apenas recursos comprovadamente seguros para limpeza poderão ser removidos.`,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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={railAdded:`已添加 Rail {{n}}`,railRemoved:`已移除 {{rail}}`,railLimitReached:`已达到 Rail 上限(最多 {{max}} 个)`,railDeleteFailed:`无法移除该 Rail — 它包含 Spec、正在运行或有待处理的 PR 决定`,launchTicketsInFlight:`该 Rail 上的某个 Spec 已在被一个活动运行处理`,launchAllSummary_one:`已并行启动 {{count}} 个 Rail`,launchAllSummary_other:`已并行启动 {{count}} 个 Rail`,launchAllNoneEligible:`没有可启动的 Rail — 请先将 Spec 分配到空闲的 Rail`,launchAllFailed:`没有任何 Rail 能够启动`,railCompleted:`Rail {{n}} 已完成`,railFailed:`Rail {{n}} 失败 — Spec 已退回 Specs`,railEnded:`Rail {{n}} {{status}} — Spec 已退回 Specs`,alreadyOnRail:`已在 {{rail}} 上`,movedToRail:`已移至 {{rail}}`,railRunningStopFirst:`{{rail}} 正在运行 — 请先停止再移除`,removedFromRail:`已从 {{rail}} 移除`,queuedOnRail:`已在 {{rail}} 排队`,queuedOnRailDescription:`Rail 正在运行`,railStopped:`{{rail}} 已停止`,stopFailed:`停止 Rail 失败`,syncTicketsFailed:`同步 Rail 工单失败`,launchFailed:`启动 Rail 失败`,launchNetworkError:`启动 Rail 时网络错误`,railLaunched:`{{rail}} 已启动`,launchDescription_one:`{{mode}},共 {{count}} 个 Spec`,launchDescription_other:`{{mode}},共 {{count}} 个 Spec`,railWorktreeNeedsReview:`Rail {{n}}:合并后 spec #{{ticket}} 需要复查`,railWorktreesNoGit:`worktree 隔离不可用:该项目不是 git 仓库 — 以共享模式运行。`,railWorktreesNoCommits:`worktree 隔离不可用:仓库还没有任何提交 — 先做一次初始提交再重新启动。`,railWorktreesError:`Worktree 隔离失败 — 此次运行将在没有 PR 审查流程的情况下继续(无实施卡片)。请查看下方错误详情。`,onReviewCannotMoveToRail:`该 Spec 正在等待 PR 评审 — 请先处理 PR 决定`,onReviewNotLaunchable:`该 Rail 上有 Spec 正在等待 PR 评审 — 请先处理 PR 决定再启动`},t={operation:{inProgress:`操作进行中…`,"create-pr":`正在创建 PR…`,publish:`正在发布…`,discard:`正在丢弃…`,dismiss:`正在关闭后续任务…`,"poll-merge":`正在检查合并…`,reopen:`正在重新打开…`,"merge-local":`正在本地集成…`,"recover-and-retry":`正在提交并重新推送已保留的结果…`,"acknowledge-no-changes":`正在标记完成…`},markDone:`标记为完成`,refine:`细化`,completedToast:`已确认 — spec 已移至完成`,markDoneConfirmTitle:`将这些 spec 标记为完成?`,markDoneConfirmBody:`实现已确认无需更改代码。spec 将移至完成,并清理无更改的 worktree。`,refineConfirmTitle:`细化这些 spec?`,refineConfirmBody:`无更改结果将被关闭,spec 会返回待办列表以便细化。运行日志仍可查看。`,localOnly:`更改保存在本地`,localOnlyHint:`实现已完成,但更改尚未推送。请在本地集成,或在远程可用后重试发布。`,noChanges:`无需更改`,partial:`{{total}} 个实现中有 {{succeeded}} 个已就绪`,createPartialPr:`用 {{count}} 个结果创建 PR`,deliveryBlocked:`实现完成 — 交付需要处理`,updateFailed:`实现完成 — 更新失败`,retryPush:`重试推送`,retryPushVerified:`推送已验证 · 提交 {{sha}} 已在 PR 中`,commitAlreadyVerified:`提交 {{sha}} 已在 PR 中验证`,deliveryCommit:`提交 {{sha}}`,prClosed:`PR 已关闭但未合并`,reopen:`重新打开`,dismiss:`关闭后续任务`,discardLocalResult:`丢弃本地结果`,dismissConfirmTitle:`关闭此后续任务?`,dismissConfirmBody:`此后续卡片将被关闭。仅在仍可安全删除时才会移除其专用 worktree;否则将保留并显示警告。现有 PR、分支和审查状态不会改变。`,discardLocalConfirmTitle:`丢弃本地结果?`,discardLocalConfirmBody:`仅在仍可安全删除时才会移除可恢复的本地迭代;如果它已发生变化,将保留并显示警告。任何现有 PR 及其分支都不会改变。已删除的结果无法恢复。`,viewRunLog:`查看 {{ref}} 的运行日志`,cleanupIncomplete_one:`清理未完成({{count}} 条警告)`,cleanupIncomplete_other:`清理未完成({{count}} 条警告)`,cleanupIncompleteHint:`本地恢复数据已保留。手动删除任何内容前,请先检查以下详情。`,copyCleanupDetails:`复制恢复详情`,safetyArchiveTitle:`安全存档({{count}})`,safetyArchiveHint:`为安全起见,临时工作区文件已保存在 PR 之外。你可以检查或手动删除它们。`,copySafetyArchive:`复制路径`,unit:{failed:`实现失败`,blocked:`交付受阻`,noChanges:`无更改`,succeeded:`已就绪`},readyForReview:`评审就绪`,draftPr:`草稿 PR`,branchPushed:`分支已推送 — PR 待创建`,branchPushedHint:`分支已推送,但无法创建 PR(GitHub CLI 不可用)。请重试以创建。`,iteratingPr:`正在更新 PR`,prReady:`PR 已就绪`,implementationFailed:`实现失败`,implementationFailedHint:`实现运行失败。请打开运行日志,然后在重新启动前丢弃此卡片。`,prFailed:`PR 失败`,prFailedDetail:`PR 失败:{{detail}}`,createDegraded:`无法发布 PR — {{detail}}。解决后请重试。`,createPr:`创建 PR`,createPrTooltip:`→ {{base}}`,publish:`发布`,publishTooltip:`将草稿 PR 开放给团队评审`,checkout:`检出分支`,checkoutTooltip:`在项目主目录检出 {{branch}}`,checkoutSuccess:`已检出 {{branch}}`,checkoutFailed:`无法检出 PR 分支`,checkoutDirtyTitle:`为保护你的更改,已阻止检出`,checkoutDirtyBody:`项目主目录中有未提交的更改。请先提交或暂存这些更改,然后重试。本次操作没有修改任何内容。`,checkoutSafetyUnknownTitle:`无法验证安全状态,已暂停检出`,checkoutSafetyUnknownBody:`Specrails 无法读取项目主目录的 Git 状态。没有释放或修改任何内容。请在 Git 恢复可用后重试。`,checkoutNotDeliverableTitle:`此 PR 分支不包含已保留的实现`,checkoutNotDeliverableBody:`尚未验证本次交付的精确提交。请改为检查或恢复本地结果。`,inspectLocalResult:`检查本地结果`,inspectLocalResultTooltip:`显示已保留的隔离 worktree 并复制其路径`,localResultPathCopied:`已复制本地结果路径`,localResultPath:`已保留的本地结果`,localResultUnavailableHere:`此电脑上没有可恢复的 worktree。请在运行该任务的电脑上查看运行日志。`,recoverAndRetry:`提交并重试推送`,recoverAndRetryConfirmTitle:`提交并推送已保留的结果?`,recoverAndRetryConfirmBody:`Specrails 只会使用 {{branch}} 对应的隔离 worktree 或已记录且可快进的分支。必要时,它会提交可交付文件;仅当 PR 仍以预期的源分支和目标分支保持打开状态时,才会推送这个精确提交。不会触碰项目主目录及其中尚未提交的更改。`,recoverAndRetryVerified:`已恢复的提交 {{sha}} 已在 PR 中验证`,recoveryStillBlocked:`本地恢复仍需处理`,recheckRecovery:`再次检查`,recheckRecoveryConfirmTitle:`再次检查此计算机?`,recheckRecoveryConfirmBody:`Specrails 将在此克隆中重新扫描属于 {{branch}} 交付的 worktree、分支、refs、reflogs 和孤立 Git 对象。如果能证明唯一结果,它可以提交隔离的更改并重试精确 push。不会触碰主项目文件夹。`,recoveryUnavailable:`无法在此计算机上验证恢复结果`,recoveryUnavailableBody:`Specrails 无法在此克隆中安全证明唯一一个属于此次交付的结果。没有更改或删除任何内容。请检查阶段详情和运行日志。如果 run 在另一台计算机上执行,请在那里打开 Specrails,然后再次检查。`,recoveryDetailSummary:`恢复技术详情`,discard:`丢弃`,discardTooltip:`关闭交付并将工单退回 Specs;已修改的本地工作会保留`,retryPr:`重试 PR`,retry:`重试`,checkMerge:`检查合并`,verifyPr:`验证 PR`,verifyPrTooltip:`验证 GitHub 中的准确提交并检查 PR 是否已合并`,checkMergeTooltip:`向 GitHub 查询该 PR 是否已合并`,prLinkFallback:`PR`,openPrTitle:`在 GitHub 上打开该 PR`,notMergedYet:`尚未合并`,commitMissingRetry:`交付提交已不在 PR 中。你可以重新尝试推送。`,prVerifiedWaiting:`提交 {{sha}} 已验证 · 等待合并`,alreadyResolved:`已在其他地方处理`,ghFailed:`GitHub CLI 失败:{{detail}}`,actionFailed:`无法应用 PR 决定`,mergedToast:`PR 已合并 — 工单已移至完成`,discardedToast:`PR 已丢弃 — 工单已退回 Specs`,decisionPending:`该 Rail 有待处理的 PR 决定 — 请先创建、发布或丢弃,再重新启动`,discardConfirmTitle:`丢弃本次交付?`,discardConfirmBody:`PR 将关闭,但不会删除其远程分支。只会删除归 SpecRails 所有且仍停留在已记录提交上的本地分支和 worktree;任何已更改的内容都会保留并显示警告。工单将返回 Specs 待办列表。已删除的本地资源无法恢复。`,implementationFailedDiscardTitle:`丢弃此失败的交付?`,implementationFailedDiscardBody:`卡片将被关闭,工单会返回 Specs。本地工作和分支将保留以供检查。只有确认可安全清理的资源才可能被移除。`,mergeLocal:`本地集成`,mergeLocalTooltip:`将交付的分支合并到本地检出的 {{base}}(无需 GitHub)`,mergeLocalConfirmTitle:`本地集成?`,mergeLocalConfirmBody:`交付的分支将合并到本地检出的 {{base}}。你的检出必须位于 {{base}} 且工作树干净。`,mergeLocalBlockedDirty:`无法集成:{{base}} 上的工作树有未提交的更改。请提交或暂存后重试。`,mergeLocalBlockedBranch:`无法集成:当前检出在 {{current}},而不是 {{base}}。请切换到 {{base}} 后重试。`,mergeLocalFailed:`本地合并失败:{{detail}}`,mergedLocally:`已在本地集成到 {{base}}`},n={title:`Rails`,runningCount_one:`{{count}} 个运行中`,runningCount_other:`{{count}} 个运行中`,launchAll:`全部启动`,launchAllTitle:`并行启动所有就绪的 Rail — 每次运行都隔离在自己的 git worktree 中`},r={skipRunning_one:`{{count}} 个已在运行`,skipRunning_other:`{{count}} 个已在运行`,skipEmpty_one:`{{count}} 个没有 Spec`,skipEmpty_other:`{{count}} 个没有 Spec`,skipPendingDecision_one:`{{count}} 个等待 PR 决定`,skipPendingDecision_other:`{{count}} 个等待 PR 决定`,skipOnReview_one:`{{count}} 个包含审查中的 Spec`,skipOnReview_other:`{{count}} 个包含审查中的 Spec`,skipInFlight_one:`{{count}} 个已跳过(Spec 已在进行中)`,skipInFlight_other:`{{count}} 个已跳过(Spec 已在进行中)`,failedCount_one:`{{count}} 个失败`,failedCount_other:`{{count}} 个失败`},i={title:`启动所有 Rail`,railsCount_one:`{{count}} 个 Rail`,railsCount_other:`{{count}} 个 Rail`,specsCount_one:`{{count}} 个 Spec`,specsCount_other:`{{count}} 个 Spec`,isolationTitle:`并行且隔离。`,isolationBody:`每个 Rail 都在自己的 git worktree 中运行 — 同时启动永不冲突。`,pipelinesTitle_one:`{{count}} 条 AI 流水线。`,pipelinesTitle_other:`{{count}} 条 AI 流水线。`,pipelinesBody:`每个 Rail 启动一次,各自使用配置好的模式、引擎和 Profile。`,costTitle:`成本成倍增加。`,costBody:`每个 Rail 都会产生自己的 AI 运行 — 花费随 Rail 数量增长。`,launch_one:`启动 {{count}} 个 Rail`,launch_other:`启动 {{count}} 个 Rail`},a={viewJobLog:`查看任务日志`,log:`日志`,implement:`实现`,batch:`批量`,freestyle:`Freestyle`,freestyleTitle:`Freestyle — Claude 自主实现该 Spec,不走流水线`,loop:`Loop`,loopTitle:`Loop — 针对该轨道的 Spec 运行已发布的自动化循环`,pickLoop:`选择一个循环…`,effortTitle:`推理强度`,stop:`停止`,play:`运行`,failedRetry:`任务失败 — 点击重试`,addSpecsFirst:`请先向此 Rail 添加 Spec`,builtInLoops:`内置`,customLoops:`自定义循环`,worktreesMerged:`已合并 {{count}}`,worktreesNeedsReview:`{{count}} 需复查`,execSteps:`{{count}} 步`,execLines:`{{count}} 行`,openspec:`OpenSpec`},o={moveToSpecs:`移至 Specs`,deleteRail:`删除 {{label}}`,dropHere:`拖放到此处`,dropOnThisRail:`拖放到此 Rail`,dragSpecsHere:`将 Spec 拖到此处`},s={title:`以 Freestyle 模式启动`,context_one:`{{rail}} · {{count}} 个 Spec`,context_other:`{{rail}} · {{count}} 个 Spec`,noPipelineTitle:`无 OpenSpec 流水线。`,noPipelineBody:`完全跳过架构师 → 开发者 → 审查者的结构化流程。`,autonomyTitle:`Claude 原生自主模式。`,autonomyBody:`Claude 使用原生 Agent 和动态工作流自主工作。`,costTitle:`成本不固定。`,costBody:`花费取决于 Claude 的决策 — 可能高于预期。`,continue:`继续`},c={fetchFailed:`获取 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{d as e,f as t}from"./index-
|
|
1
|
+
import{d as e,f as t}from"./index-B784m8RT.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{f as e}from"./index-
|
|
1
|
+
import{f as e}from"./index-B784m8RT.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};
|
package/client/dist/assets/{formatDistanceToNow-ByHIauTQ.js → formatDistanceToNow-DP3Ab6fX.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as e,f as t,h as n,m as r,p as i,u as a,x as o}from"./i18n-
|
|
1
|
+
import{b as e,f as t,h as n,m as r,p as i,u as a,x as o}from"./i18n-DREQCE2F.js";import{t as s}from"./getTimezoneOffsetInMilliseconds-DdKKL8Fx.js";function c(e,n){let r=t(e)-+t(n);return r<0?-1:r>0?1:r}function l(e){return n(e,Date.now())}function u(e,t,n){let[i,a]=r(n?.in,e,t),o=i.getFullYear()-a.getFullYear(),s=i.getMonth()-a.getMonth();return o*12+s}function d(e){return t=>{let n=(e?Math[e]:Math.trunc)(t);return n===0?0:n}}function f(e,n){return t(e)-+t(n)}function p(e,n){let r=t(e,n?.in);return r.setHours(23,59,59,999),r}function m(e,n){let r=t(e,n?.in),i=r.getMonth();return r.setFullYear(r.getFullYear(),i+1,0),r.setHours(23,59,59,999),r}function h(e,n){let r=t(e,n?.in);return+p(r,n)==+m(r,n)}function g(e,t,n){let[i,a,o]=r(n?.in,e,e,t),s=c(a,o),l=Math.abs(u(a,o));if(l<1)return 0;a.getMonth()===1&&a.getDate()>27&&a.setDate(30),a.setMonth(a.getMonth()-s*l);let d=c(a,o)===-s;h(i)&&l===1&&c(i,o)===1&&(d=!1);let f=s*(l-+d);return f===0?0:f}function _(e,t,n){let r=f(e,t)/1e3;return d(n?.roundingMethod)(r)}function v(t,n,l){let u=i(),d=l?.locale??u.locale??a,f=c(t,n);if(isNaN(f))throw RangeError(`Invalid time value`);let p=Object.assign({},l,{addSuffix:l?.addSuffix,comparison:f}),[m,h]=r(l?.in,...f>0?[n,t]:[t,n]),v=_(h,m),y=(s(h)-s(m))/1e3,b=Math.round((v-y)/60),x;if(b<2)return l?.includeSeconds?v<5?d.formatDistance(`lessThanXSeconds`,5,p):v<10?d.formatDistance(`lessThanXSeconds`,10,p):v<20?d.formatDistance(`lessThanXSeconds`,20,p):v<40?d.formatDistance(`halfAMinute`,0,p):v<60?d.formatDistance(`lessThanXMinutes`,1,p):d.formatDistance(`xMinutes`,1,p):b===0?d.formatDistance(`lessThanXMinutes`,1,p):d.formatDistance(`xMinutes`,b,p);if(b<45)return d.formatDistance(`xMinutes`,b,p);if(b<90)return d.formatDistance(`aboutXHours`,1,p);if(b<1440){let e=Math.round(b/60);return d.formatDistance(`aboutXHours`,e,p)}else if(b<2520)return d.formatDistance(`xDays`,1,p);else if(b<43200){let t=Math.round(b/e);return d.formatDistance(`xDays`,t,p)}else if(b<43200*2)return x=Math.round(b/o),d.formatDistance(`aboutXMonths`,x,p);if(x=g(h,m),x<12){let e=Math.round(b/o);return d.formatDistance(`xMonths`,e,p)}else{let e=x%12,t=Math.trunc(x/12);return e<3?d.formatDistance(`aboutXYears`,t,p):e<9?d.formatDistance(`overXYears`,t,p):d.formatDistance(`almostXYears`,t+1,p)}}function y(e,t){return v(e,l(e),t)}export{y as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{f as e}from"./i18n-
|
|
1
|
+
import{f as e}from"./i18n-DREQCE2F.js";function t(t){let n=e(t),r=new Date(Date.UTC(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()));return r.setUTCFullYear(n.getFullYear()),t-+r}export{t};
|