specrails-desktop 2.4.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/client/dist/assets/{ActivityFeedPage-DJJlZ3mF.js → ActivityFeedPage-CoWwVcty.js} +1 -1
  2. package/client/dist/assets/AgentsPage-CgPvynWc.js +86 -0
  3. package/client/dist/assets/{AnalyticsPage-BUd3gWYC.js → AnalyticsPage-ioz3Ub2D.js} +1 -1
  4. package/client/dist/assets/{BarChart-HDe_YoUD.js → BarChart-BKXQPcoW.js} +1 -1
  5. package/client/dist/assets/CodePage-CYhXRKiI.js +2 -0
  6. package/client/dist/assets/{DesktopAnalyticsPage-CgvmSvF0.js → DesktopAnalyticsPage-CBfPCT3q.js} +1 -1
  7. package/client/dist/assets/DocsDialog-uRTBV-3T.js +11 -0
  8. package/client/dist/assets/DocsPage-gH0Lc54I.js +11 -0
  9. package/client/dist/assets/{ExportDropdown-f4dwQjlT.js → ExportDropdown-DAp7zWib.js} +1 -1
  10. package/client/dist/assets/IntegrationsPage-D40Si_7s.js +3 -0
  11. package/client/dist/assets/JobDetailPage-DSxAvB1n.js +16 -0
  12. package/client/dist/assets/JobsPage-ZMBc1BHE.js +1 -0
  13. package/client/dist/assets/dashboard--Ahnvfr3.js +1 -0
  14. package/client/dist/assets/dashboard-BN1C2pEh.js +1 -0
  15. package/client/dist/assets/dashboard-BZs_EzAn.js +1 -0
  16. package/client/dist/assets/dashboard-Bsw44L8_.js +1 -0
  17. package/client/dist/assets/dashboard-Bw3VECgY.js +1 -0
  18. package/client/dist/assets/{dashboard-Duo4DDCW.js → dashboard-CuOshSHn.js} +1 -1
  19. package/client/dist/assets/dashboard-DfouCM3_.js +1 -0
  20. package/client/dist/assets/dashboard-Pp5hwnZB.js +1 -0
  21. package/client/dist/assets/{dist-js-COfIfLRE.js → dist-js-CKqmDyXR.js} +1 -1
  22. package/client/dist/assets/{dist-js-CvScGQU_.js → dist-js-bTZuok_W.js} +1 -1
  23. package/client/dist/assets/{index-DGIXKRHE.js → index-B9IKK_QQ.js} +45 -45
  24. package/client/dist/assets/index-BqAXaTbC.css +2 -0
  25. package/client/dist/assets/jobs-BGkI19S_.js +1 -0
  26. package/client/dist/assets/jobs-Brp44JDd.js +1 -0
  27. package/client/dist/assets/jobs-D93lG6If.js +1 -0
  28. package/client/dist/assets/jobs-DAF8AGy5.js +1 -0
  29. package/client/dist/assets/jobs-Db3xrsp_.js +1 -0
  30. package/client/dist/assets/jobs-Do4Ltqdj.js +1 -0
  31. package/client/dist/assets/jobs-F5PGJwbW.js +1 -0
  32. package/client/dist/assets/jobs-fYWWxCUV.js +1 -0
  33. package/client/dist/assets/{lib-Bro9Z0gp.js → lib-B5mjOeEi.js} +1 -1
  34. package/client/dist/assets/{settings-D3LurcR5.js → settings-BI_cVCqN.js} +1 -1
  35. package/client/dist/assets/{settings-5tzo0Rn3.js → settings-BRaLLSVi.js} +1 -1
  36. package/client/dist/assets/{settings-BEWv3VEu.js → settings-BcqH0oea.js} +1 -1
  37. package/client/dist/assets/settings-C0-7Fpxg.js +1 -0
  38. package/client/dist/assets/{settings-BORg56um.js → settings-D6QMBlGQ.js} +1 -1
  39. package/client/dist/assets/{settings-DcqWIEM6.js → settings-GOBKOTGl.js} +1 -1
  40. package/client/dist/assets/{settings-BDAW3trC.js → settings-pT3MzfRu.js} +1 -1
  41. package/client/dist/assets/{settings-Dfz8QbZS.js → settings-u-16ISHt.js} +1 -1
  42. package/client/dist/assets/{setup-D3rNZA9A.js → setup-BIIkb-_K.js} +1 -1
  43. package/client/dist/assets/{setup-C1IA-9YS.js → setup-BeQxu9kD.js} +1 -1
  44. package/client/dist/assets/{setup-pjgmYHx6.js → setup-CPa6GnlI.js} +1 -1
  45. package/client/dist/assets/{setup-gzLG8T6F.js → setup-CZl4OEJx.js} +1 -1
  46. package/client/dist/assets/{setup-C0dzw8j4.js → setup-ChpodNfn.js} +1 -1
  47. package/client/dist/assets/{setup-WP6WOYQh.js → setup-D_fjJH6u.js} +1 -1
  48. package/client/dist/assets/{setup-UD2aanGs.js → setup-YzD8DX4O.js} +1 -1
  49. package/client/dist/assets/{setup-CpfjaNut.js → setup-fRpDozmq.js} +1 -1
  50. package/client/dist/assets/{specs-DicWhvwi.js → specs-B4GuOzuZ.js} +1 -1
  51. package/client/dist/assets/{specs-CXNQzPk9.js → specs-BVLKe2n5.js} +1 -1
  52. package/client/dist/assets/{specs-dkro6lSM.js → specs-C62F2CDv.js} +1 -1
  53. package/client/dist/assets/{specs-4lA_u79w.js → specs-D-Sb6dre.js} +1 -1
  54. package/client/dist/assets/{specs-DgmyAE3N.js → specs-DFSkAeK8.js} +1 -1
  55. package/client/dist/assets/{specs-DZCLH2-l.js → specs-DfwDeADE.js} +1 -1
  56. package/client/dist/assets/{specs-BHjxcjOf.js → specs-VK-zXv7x.js} +1 -1
  57. package/client/dist/assets/{specs-DFnc2Huj.js → specs-ghyBMnib.js} +1 -1
  58. package/client/dist/assets/{useProjectCache-D9juBhsO.js → useProjectCache-Cf83MBQh.js} +1 -1
  59. package/client/dist/index.html +7 -7
  60. package/docs/internals/api-reference.md +4 -7
  61. package/package.json +2 -2
  62. package/server/dist/chat-manager.js +19 -7
  63. package/server/dist/context-scope.js +29 -8
  64. package/server/dist/db.js +47 -2
  65. package/server/dist/feature-flags.js +15 -0
  66. package/server/dist/interactive-job-session.js +363 -0
  67. package/server/dist/mobile/index.js +5 -5
  68. package/server/dist/mobile/mobile-admin-router.js +28 -35
  69. package/server/dist/mobile/mobile-datachannel.js +167 -0
  70. package/server/dist/mobile/mobile-gateway.js +72 -98
  71. package/server/dist/mobile/mobile-router.js +4 -35
  72. package/server/dist/mobile/mobile-signal-reconnect.js +84 -0
  73. package/server/dist/mobile/mobile-types.js +5 -5
  74. package/server/dist/mobile/mobile-webrtc-peer.js +129 -0
  75. package/server/dist/mobile/mobile-webrtc.js +117 -0
  76. package/server/dist/project-router-jobs.js +42 -0
  77. package/server/dist/queue-manager.js +214 -54
  78. package/server/dist/rails-router.js +15 -1
  79. package/server/dist/util/stream-display.js +66 -0
  80. package/client/dist/assets/AgentsPage-49JaEDjR.js +0 -86
  81. package/client/dist/assets/CodePage-CqPPND47.js +0 -2
  82. package/client/dist/assets/DocsDialog-hHFd3Ejs.js +0 -11
  83. package/client/dist/assets/DocsPage-B4R1aksg.js +0 -11
  84. package/client/dist/assets/IntegrationsPage-CX2Ybxx0.js +0 -3
  85. package/client/dist/assets/JobDetailPage-DN2Jc8Ti.js +0 -16
  86. package/client/dist/assets/JobsPage-DmdpqijT.js +0 -1
  87. package/client/dist/assets/dashboard--Y6yzMlf.js +0 -1
  88. package/client/dist/assets/dashboard--a4-6oYE.js +0 -1
  89. package/client/dist/assets/dashboard-BiJ3CDTG.js +0 -1
  90. package/client/dist/assets/dashboard-CiXjk63Z.js +0 -1
  91. package/client/dist/assets/dashboard-Cx5VjCea.js +0 -1
  92. package/client/dist/assets/dashboard-D7jg25XR.js +0 -1
  93. package/client/dist/assets/dashboard-DpGYK2s1.js +0 -1
  94. package/client/dist/assets/index-DBpvYrDK.css +0 -2
  95. package/client/dist/assets/jobs-8viuHLDV.js +0 -1
  96. package/client/dist/assets/jobs-AW2eB5D-.js +0 -1
  97. package/client/dist/assets/jobs-BSm89DL5.js +0 -1
  98. package/client/dist/assets/jobs-BZ3sQHjZ.js +0 -1
  99. package/client/dist/assets/jobs-Bd8AdOTb.js +0 -1
  100. package/client/dist/assets/jobs-CRtsq_u0.js +0 -1
  101. package/client/dist/assets/jobs-CSRwFQ6K.js +0 -1
  102. package/client/dist/assets/jobs-CbEl7WMI.js +0 -1
  103. package/client/dist/assets/settings-yMubjqYw.js +0 -1
  104. package/server/dist/mobile/mobile-mdns.js +0 -81
  105. package/server/dist/mobile/mobile-pairing.js +0 -179
@@ -1 +1 @@
1
- import{n as e}from"./chunk-CilyBKbf.js";var t=e({addProject:()=>r,checkpoints:()=>o,default:()=>u,instructions:()=>a,onboarding:()=>l,prerequisites:()=>i,setupChat:()=>s,welcome:()=>c,wizard:()=>n}),n={configureAgents:`Configure {{provider}} agents`,configureSubtitle:`Choose which agents to install and how to run them.`,tabs:{agents:`Agents`,models:`Models`},skipForNow:`Skip for now`,install:`Install`,nextProvider:`Next: {{provider}}`,installingProvider:`Installing {{provider}}…`,installingSpecrails:`Installing specrails...`,installingFromTemplates:`Installing agents from templates`,waitingForOutput:`Waiting for output...`,checkpoints:{baseInstall:`Base installation`,agentSelection:`Agent selection`,agentGeneration:`Agent generation`},steps:{configure:`Configure`},summary:{agents:`Agents`,agentSkills:`Agent skills`,skills:`Skills`,openspecSkills:`OpenSpec skills`,legacyRemoved_one:`Removed {{count}} legacy <code>/specrails:*</code> command`,legacyRemoved_other:`Removed {{count}} legacy <code>/specrails:*</code> commands`},complete:{welcome:`Welcome to <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> is now configured with AI-powered development workflows. Your specialized agents and commands are ready to use.`,installedForEngines_one:`Installed for {{count}} engine`,installedForEngines_other:`Installed for {{count}} engines`,learnMore:`Learn how to get the most out of specrails:`,continueToProject:`Continue to project`,jira:{title:`Connect a Jira board`,subtitle:`Optional — back this project's specs with a Jira board. You can also do it later in Settings.`,configure:`Configure Jira`,optional:`optional`}},error:{title:`Setup failed`,skipSetup:`Skip setup`,prereqMissing:`SpecRails setup needs Node.js, npm, npx and Git available on PATH before it can install this project.`,prereqRetryHint:`Install the missing tools, restart Specrails, then retry setup.`}},r={title:`Add Project`,description:`Register a project directory to manage it from Specrails.`,noProviderDetected:`No AI CLI detected. Install Claude Code or Codex CLI first.`,pathLabel:`Project path`,pathPlaceholder:`/Users/me/my-project`,pathHint:`Absolute path to the project root`,browseForFolder:`Browse for folder`,selectProjectFolder:`Select project folder`,nameLabel:`Display name`,optional:`(optional)`,namePlaceholder:`My Project`,nameHint:`Defaults to the directory name`,providersLabel:`AI providers`,notFound:`not found`,multiProviderHint:`Both engines will be set up. The first is the project default. Cannot be changed after creation.`,singleProviderHint:`Cannot be changed after the project is created.`,adding:`Adding...`,submit:`Add Project`,toolsRequired_one:`{{tools}} is required to add a project`,toolsRequired_other:`{{tools}} are required to add a project`,errors:{pathRequired:`Project path is required`,selectProvider:`Select at least one AI provider`,addFailed:`Failed to add project`},toasts:{registered:`Project "{{name}}" registered`}},i={corruptedBundle:`bundle corrupted — reinstall app`,notInstalled:`not installed`,failedToExecute:`found but failed to execute`,failedToExecuteAt:`found at {{path}} but failed to execute`,failedToExecuteWithError:`found but failed to execute ({{error}})`,failedToExecuteAtWithError:`found at {{path}} but failed to execute ({{error}})`,needsMinimum:`{{version}} found — needs {{minVersion}}+`,unknownVersion:`unknown`,installedLabel:`installed`,verifyError:`Could not verify developer tools locally — install will validate.`,allDetected:`All required tools detected`,bundleCorruptedTitle:`App bundle corrupted`,toolsRequired_one:`{{count}} developer tool required`,toolsRequired_other:`{{count}} developer tools required`,reinstallHint:`Reinstall the Specrails app to restore bundled tools.`,installMissingHint:`Install the missing tools to continue.`,moreInfo:`More info`,bundledBadge:`bundled`},a={title:`Install developer tools`,description:`SpecRails needs Node.js, npm, npx, and Git on PATH. Pick the snippet for your OS, run it, then click "I installed it, recheck".`,darwin:{intro:`Homebrew gets you both tools in one line. If you do not have brew, use the official downloads.`,installNodeGit:`Install Node.js and Git via Homebrew`},win32:{intro:`Winget ships with Windows 11 and recent Windows 10. Open PowerShell or Terminal and run:`,installNode:`Install Node.js LTS`,installGit:`Install Git`,note:`After install, restart Specrails so Windows refreshes PATH.`},linux:{intro:`Use your distro package manager:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (official)`,gitOfficial:`Git (official)`,gitWindows:`Git for Windows (official)`},showOtherPlatforms:`Show other platforms`,hideOtherPlatforms:`Hide other platforms`,recheck:`I installed it, recheck`,diagnostics:{copy:`Copy diagnostics`,copied:`Diagnostics copied`,failed:`Copy failed`},corrupted:{title:`App bundle corrupted`,description:`One or more bundled tools (Node.js, Git) could not be verified.`,body:`This tool is bundled with the Specrails app and cannot be installed separately. If you see this message, the app bundle may be corrupted. Please reinstall Specrails.`}},o={title:`Setup progress`,progress:`{{done}} of {{total}} complete`,rawLog_one:`Raw log ({{count}} line)`,rawLog_other:`Raw log ({{count}} lines)`},s={title:`Setup assistant`,subtitle:`Respond to prompts to configure your project`,settingUp:`Setting up your project...`,placeholder:`Type a response...`,keyboardHint:`Enter to send, Shift+Enter for new line`},c={title:`Welcome to <spec>spec</spec><rails>rails</rails>`,description:`Specrails manages multiple projects from a single interface. Add your first project to get started.`,addFirstProject:`Add your first project`,jiraHint:`Connect each project to its own Jira board — specs stay in sync, both ways.`},l=JSON.parse(`{"productTour":"Product tour","stepCount":"Step {{current}} of {{total}}","goToStep":"Go to step {{step}}: {{label}}","stepLabel":"Step {{step}}","dontShowAgain":"Don't show this again","skipTour":"Skip tour","getStarted":"Get Started","flow":{"addSpec":"Add Spec","dropInRail":"Drop in a Rail","hitPlay":"Hit Play","ship":"Ship","architect":"Architect","developer":"Developer","reviewer":"Reviewer"},"language":{"nav":"Language","title":"Choose your language","subtitle":"Specrails speaks your language","intro":"Pick the language you want the interface in. It applies instantly — this tour included.","note":"You can change it any time in Settings → Language."},"theme":{"nav":"Theme","title":"Pick your look","subtitle":"Built-in themes, applied instantly","intro":"Choose how Specrails should look — the theme applies the moment you click.","note":"You can change it any time in Settings → Appearance."},"welcome":{"nav":"Welcome","title":"Welcome to Specrails","subtitle":"Your local cockpit for shipping software with AI agents","intro":"Specrails turns an idea into shipped code — and lets you <b>see, steer, and trust</b> every step. Draft a spec by talking to an AI, drop it on an execution rail, and hit Play. The pipeline handles architecture, implementation, review and the pull request, streaming its work live the whole way.","coreLoopLabel":"The core loop","flowCaption":"Each spec flows through <b>Architect → Developer → Reviewer → Ship</b> automatically.","localNote":"<b>100% local · single user · no accounts.</b> Everything runs on your machine. Your code never leaves the laptop unless <i>you</i> spawn an agent against it.","tourNote":"This quick tour walks through everything the app can do — about a minute."},"authorSpecs":{"nav":"Author specs","title":"Turn ideas into specs","subtitle":"Six ways to capture exactly what you want built","intro":"A <b>spec</b> is a description of work you want done. Author one however suits the moment — from a quick one-liner to a full conversation with the AI.","exploreLabel":"Explore — converse","exploreBody":"Describe what you want in a chat; a live draft rebuilds itself every turn. A preset slider tunes how much project context the AI sees — from your message only, up to the full codebase plus your MCP servers.","quickLabel":"Quick — one shot","quickBody":"Already know what you want? Generate a complete spec in a single turn. Optionally enrich it with a Contract Layer: exact names, data shapes, invariants and a file-touch list so the agents don't reinvent anything.","websiteLabel":"From a website","websiteBody":"Opens an embedded browser. Hover-select an element or drag a rectangle, and the screenshot, DOM and applied CSS become attachments. The desktop build ships its own Chromium, so it works offline.","smashLabel":"SMASH a big epic","smashBody":"Explode a large spec into a family of smaller sub-specs in one click — each child carries a short summary on its card.","draftsLabel":"Drafts & Continue Editing","draftsBody":"Park an in-progress exploration as a draft ticket and resume it later; reopen any spec back in Explore to keep refining it.","compareLabel":"Compare side by side","compareBody":"Drag a spec to the screen edge and a picker of your other specs slides in — review two of them together, tablet-style."},"rails":{"nav":"Run on rails","title":"Run the pipeline on rails","subtitle":"Organize specs into lanes, then launch the agents","intro":"The right side of the Dashboard is your <b>Rails</b> — execution lanes. Drag a spec card onto a rail and press <play>▶ Play</play> to launch an implementation job.","jobLabel":"What each job runs","flowCaption":"Every phase streams its logs live as it works.","modeLabel":"Pick how a rail runs","modeBody":"Each rail chooses a mode: <b>Implement</b> (the full structured pipeline), <b>Batch</b> (several specs in sequence), or <b>Ultracode</b> (Claude works autonomously, no fixed pipeline).","profilesLabel":"Agent profiles","profilesBody":"A per-project, declarative catalog that decides which agents run and which model each one uses — picked per rail and snapshotted per job so concurrent work stays isolated.","jobDetailLabel":"Live job detail","jobDetailBody":"Every job shows a ticket-identity header, a live duration ticker and running turn/token counts, with the authoritative cost resolved on exit.","isolationLabel":"Many projects, isolated","isolationBody":"Each project has its own database and job queue. Run different projects at the same time and switch between them from the left sidebar — your place is remembered per project."},"providers":{"nav":"Your agent","title":"Bring your own agent","subtitle":"Claude Code and Codex, as first-class engines","intro":"The app treats <b>Claude Code</b> and <b>Codex CLI</b> as interchangeable engines behind one contract. A project can install one or both — the choice is made at install time.","table":{"capability":"Capability","streamingResume":"Streaming & session resume","native":"Native","costReporting":"Cost reporting","providerBilled":"Provider-billed","estimated":"Estimated (~)","telemetry":"Telemetry (OTEL)","synthesized":"Synthesized","agentProfiles":"Agent profiles"},"calloutLabel":"When both are installed","calloutBody":"Pick the engine <b>per spec, per rail, or per terminal launch</b>. The app remembers your last choice per project. Codex cost is estimated from a local rate-card and always flagged with a <mono>~</mono>."},"cost":{"nav":"Track cost","title":"Track every cent","subtitle":"Every billable invocation, recorded and visualized","intro":"Every AI invocation — across rails, Quick, Explore, AI edits, SMASH and file summaries — is recorded for <b>both Claude and Codex</b>. No more guessing what the agents cost.","analyticsLabel":"Analytics page","analyticsBody":"A burn-rate hero, daily timeline, top tickets, model breakdown and a cost-vs-turns scatter. Filter by period (7d / 30d / 90d / All) and by surface.","perTicketLabel":"Per-ticket spending","perTicketBody":"Each spec's detail shows what it cost and how many turns it took, deep-linking into Analytics filtered to that ticket.","honestLabel":"Honest numbers","honestBody":"Claude cost is the provider-billed figure; Codex is estimated and flagged with <mono>~</mono>. Token totals include the cache tiers, so the figures actually reconcile.","budgetsLabel":"Budgets & alerts","budgetsBody":"Set a daily budget and a per-job cost alert; the app auto-pauses the queue when you cross the line. Export anything to CSV or JSON."},"workspace":{"nav":"Workspace","title":"Make it your workspace","subtitle":"Everything you need without leaving the window","terminalLabel":"Terminal panel","terminalBody":"A real VS-Code-style terminal at the bottom (<mod>{{mod}}</mod> <j>J</j>) — WebGL rendering, search, inline images, drag-drop paths and shell integration. Up to 10 sessions per project.","codeLabel":"Code explorer","codeBody":"A read-only file tree and Monaco viewer with plain-language AI summaries and “touched by AI” provenance chips, so anyone can follow what changed and why.","integrationsLabel":"Integrations","integrationsBody":"A per-project marketplace of MCP integrations — Serena semantic code-navigation is bundled. Installs are additive: adding one never disturbs another.","themesLabel":"Themes","themesBody":"Five built-in themes — specrails (default), dracula, aurora-light, obsidian-dark and matrix — applied before the UI paints, so there's no flash. Change them in Settings → Appearance.","chatsLabel":"Minimizable chats","chatsBody":"Park an Explore or AI-Edit session into a dock chip and pick it back up later — never lost across refreshes or project switches.","desktopLabel":"Desktop or browser","desktopBody":"Run Specrails in your browser, or grab the signed desktop app (macOS & Windows) that bundles its own server and runtimes."},"companion":{"nav":"Mobile app","title":"Take Specrails with you","subtitle":"SpecRails Companion — your pipelines, on your phone","intro":"<b>SpecRails Companion</b> is the free mobile app for iPhone and Android that pairs with this desktop over your local network. Browse the specs board, launch and stop rails, follow live job logs and glance at analytics — straight from your phone.","localLabel":"100% local, like everything else","localBody":"The app talks directly to this computer over your Wi-Fi — QR pairing with pinned TLS. No cloud relay, no account, and your code never leaves home.","downloadLabel":"Get the app","downloadHint":"Scan a code with your phone's camera, or open the link.","ios":"Download for iPhone","android":"Download for Android","pairLabel":"Pairing takes ten seconds","pairBody":"Once installed, go to Settings → Mobile companion → Pair device and scan the QR code shown there."},"moveFast":{"nav":"Move fast","title":"Move at the speed of thought","subtitle":"Keyboard-first, everywhere","paletteLabel":"Command palette","paletteShortcut":"<f>Press</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>anywhere</m>","paletteBody":"Switch projects, run spec commands, jump to any page and find recent jobs — all with fuzzy search.","terminalLabel":"Terminal panel","terminalBody":"Toggle with <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"All shortcuts","shortcutsBody":"Press <q>?</q> to see the full cheat-sheet.","chatLabel":"Chat sidebar","chatBody":"Toggle the right sidebar with <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Projects sidebar","projectsBody":"Toggle the left Arc sidebar with <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>That's the tour.</b> Add a project from the left sidebar and ship your first spec. You can reopen this walkthrough anytime from Settings."},"jira":{"label":"Jira integration","body":"Back any project with a <b>Jira board</b> — each spec becomes a Jira issue, kept in sync both ways: status follows the rail, and a comment is posted when a job finishes. Configure it per project when you add it, or anytime in Settings."}}`),u={wizard:n,addProject:r,prerequisites:i,instructions:a,checkpoints:o,setupChat:s,welcome:c,onboarding:l};export{t};
1
+ import{n as e}from"./chunk-CilyBKbf.js";var t=e({addProject:()=>r,checkpoints:()=>o,default:()=>u,instructions:()=>a,onboarding:()=>l,prerequisites:()=>i,setupChat:()=>s,welcome:()=>c,wizard:()=>n}),n={configureAgents:`Configure {{provider}} agents`,configureSubtitle:`Choose which agents to install and how to run them.`,tabs:{agents:`Agents`,models:`Models`},skipForNow:`Skip for now`,install:`Install`,nextProvider:`Next: {{provider}}`,installingProvider:`Installing {{provider}}…`,installingSpecrails:`Installing specrails...`,installingFromTemplates:`Installing agents from templates`,waitingForOutput:`Waiting for output...`,checkpoints:{baseInstall:`Base installation`,agentSelection:`Agent selection`,agentGeneration:`Agent generation`},steps:{configure:`Configure`},summary:{agents:`Agents`,agentSkills:`Agent skills`,skills:`Skills`,openspecSkills:`OpenSpec skills`,legacyRemoved_one:`Removed {{count}} legacy <code>/specrails:*</code> command`,legacyRemoved_other:`Removed {{count}} legacy <code>/specrails:*</code> commands`},complete:{welcome:`Welcome to <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> is now configured with AI-powered development workflows. Your specialized agents and commands are ready to use.`,installedForEngines_one:`Installed for {{count}} engine`,installedForEngines_other:`Installed for {{count}} engines`,learnMore:`Learn how to get the most out of specrails:`,continueToProject:`Continue to project`,jira:{title:`Connect a Jira board`,subtitle:`Optional — back this project's specs with a Jira board. You can also do it later in Settings.`,configure:`Configure Jira`,optional:`optional`}},error:{title:`Setup failed`,skipSetup:`Skip setup`,prereqMissing:`SpecRails setup needs Node.js, npm, npx and Git available on PATH before it can install this project.`,prereqRetryHint:`Install the missing tools, restart Specrails, then retry setup.`}},r={title:`Add Project`,description:`Register a project directory to manage it from Specrails.`,noProviderDetected:`No AI CLI detected. Install Claude Code or Codex CLI first.`,pathLabel:`Project path`,pathPlaceholder:`/Users/me/my-project`,pathHint:`Absolute path to the project root`,browseForFolder:`Browse for folder`,selectProjectFolder:`Select project folder`,nameLabel:`Display name`,optional:`(optional)`,namePlaceholder:`My Project`,nameHint:`Defaults to the directory name`,providersLabel:`AI providers`,notFound:`not found`,multiProviderHint:`Both engines will be set up. The first is the project default. Cannot be changed after creation.`,singleProviderHint:`Cannot be changed after the project is created.`,adding:`Adding...`,submit:`Add Project`,toolsRequired_one:`{{tools}} is required to add a project`,toolsRequired_other:`{{tools}} are required to add a project`,errors:{pathRequired:`Project path is required`,selectProvider:`Select at least one AI provider`,addFailed:`Failed to add project`},toasts:{registered:`Project "{{name}}" registered`}},i={corruptedBundle:`bundle corrupted — reinstall app`,notInstalled:`not installed`,failedToExecute:`found but failed to execute`,failedToExecuteAt:`found at {{path}} but failed to execute`,failedToExecuteWithError:`found but failed to execute ({{error}})`,failedToExecuteAtWithError:`found at {{path}} but failed to execute ({{error}})`,needsMinimum:`{{version}} found — needs {{minVersion}}+`,unknownVersion:`unknown`,installedLabel:`installed`,verifyError:`Could not verify developer tools locally — install will validate.`,allDetected:`All required tools detected`,bundleCorruptedTitle:`App bundle corrupted`,toolsRequired_one:`{{count}} developer tool required`,toolsRequired_other:`{{count}} developer tools required`,reinstallHint:`Reinstall the Specrails app to restore bundled tools.`,installMissingHint:`Install the missing tools to continue.`,moreInfo:`More info`,bundledBadge:`bundled`},a={title:`Install developer tools`,description:`SpecRails needs Node.js, npm, npx, and Git on PATH. Pick the snippet for your OS, run it, then click "I installed it, recheck".`,darwin:{intro:`Homebrew gets you both tools in one line. If you do not have brew, use the official downloads.`,installNodeGit:`Install Node.js and Git via Homebrew`},win32:{intro:`Winget ships with Windows 11 and recent Windows 10. Open PowerShell or Terminal and run:`,installNode:`Install Node.js LTS`,installGit:`Install Git`,note:`After install, restart Specrails so Windows refreshes PATH.`},linux:{intro:`Use your distro package manager:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (official)`,gitOfficial:`Git (official)`,gitWindows:`Git for Windows (official)`},showOtherPlatforms:`Show other platforms`,hideOtherPlatforms:`Hide other platforms`,recheck:`I installed it, recheck`,diagnostics:{copy:`Copy diagnostics`,copied:`Diagnostics copied`,failed:`Copy failed`},corrupted:{title:`App bundle corrupted`,description:`One or more bundled tools (Node.js, Git) could not be verified.`,body:`This tool is bundled with the Specrails app and cannot be installed separately. If you see this message, the app bundle may be corrupted. Please reinstall Specrails.`}},o={title:`Setup progress`,progress:`{{done}} of {{total}} complete`,rawLog_one:`Raw log ({{count}} line)`,rawLog_other:`Raw log ({{count}} lines)`},s={title:`Setup assistant`,subtitle:`Respond to prompts to configure your project`,settingUp:`Setting up your project...`,placeholder:`Type a response...`,keyboardHint:`Enter to send, Shift+Enter for new line`},c={title:`Welcome to <spec>spec</spec><rails>rails</rails>`,description:`Specrails manages multiple projects from a single interface. Add your first project to get started.`,addFirstProject:`Add your first project`,jiraHint:`Connect each project to its own Jira board — specs stay in sync, both ways.`},l=JSON.parse(`{"productTour":"Product tour","stepCount":"Step {{current}} of {{total}}","goToStep":"Go to step {{step}}: {{label}}","stepLabel":"Step {{step}}","dontShowAgain":"Don't show this again","skipTour":"Skip tour","getStarted":"Get Started","flow":{"addSpec":"Add Spec","dropInRail":"Drop in a Rail","hitPlay":"Hit Play","ship":"Ship","architect":"Architect","developer":"Developer","reviewer":"Reviewer"},"language":{"nav":"Language","title":"Choose your language","subtitle":"Specrails speaks your language","intro":"Pick the language you want the interface in. It applies instantly — this tour included.","note":"You can change it any time in Settings → Language."},"theme":{"nav":"Theme","title":"Pick your look","subtitle":"Built-in themes, applied instantly","intro":"Choose how Specrails should look — the theme applies the moment you click.","note":"You can change it any time in Settings → Appearance."},"welcome":{"nav":"Welcome","title":"Welcome to Specrails","subtitle":"Your local cockpit for shipping software with AI agents","intro":"Specrails turns an idea into shipped code — and lets you <b>see, steer, and trust</b> every step. Draft a spec by talking to an AI, drop it on an execution rail, and hit Play. The pipeline handles architecture, implementation, review and the pull request, streaming its work live the whole way.","coreLoopLabel":"The core loop","flowCaption":"Each spec flows through <b>Architect → Developer → Reviewer → Ship</b> automatically.","localNote":"<b>100% local · single user · no accounts.</b> Everything runs on your machine. Your code never leaves the laptop unless <i>you</i> spawn an agent against it.","tourNote":"This quick tour walks through everything the app can do — about a minute."},"authorSpecs":{"nav":"Author specs","title":"Turn ideas into specs","subtitle":"Six ways to capture exactly what you want built","intro":"A <b>spec</b> is a description of work you want done. Author one however suits the moment — from a quick one-liner to a full conversation with the AI.","exploreLabel":"Explore — converse","exploreBody":"Describe what you want in a chat; a live draft rebuilds itself every turn. A preset slider tunes how much project context the AI sees — from your message only, up to the full codebase plus your MCP servers.","quickLabel":"Quick — one shot","quickBody":"Already know what you want? Generate a complete spec in a single turn. Optionally enrich it with a Contract Layer: exact names, data shapes, invariants and a file-touch list so the agents don't reinvent anything.","websiteLabel":"From a website","websiteBody":"Opens an embedded browser. Hover-select an element or drag a rectangle, and the screenshot, DOM and applied CSS become attachments. The desktop build ships its own Chromium, so it works offline.","smashLabel":"SMASH a big epic","smashBody":"Explode a large spec into a family of smaller sub-specs in one click — each child carries a short summary on its card.","draftsLabel":"Drafts & Continue Editing","draftsBody":"Park an in-progress exploration as a draft ticket and resume it later; reopen any spec back in Explore to keep refining it.","compareLabel":"Compare side by side","compareBody":"Drag a spec to the screen edge and a picker of your other specs slides in — review two of them together, tablet-style."},"rails":{"nav":"Run on rails","title":"Run the pipeline on rails","subtitle":"Organize specs into lanes, then launch the agents","intro":"The right side of the Dashboard is your <b>Rails</b> — execution lanes. Drag a spec card onto a rail and press <play>▶ Play</play> to launch an implementation job.","jobLabel":"What each job runs","flowCaption":"Every phase streams its logs live as it works.","modeLabel":"Pick how a rail runs","modeBody":"Each rail chooses a mode: <b>Implement</b> (the full structured pipeline), <b>Batch</b> (several specs in sequence), or <b>Ultracode</b> (Claude works autonomously, no fixed pipeline).","profilesLabel":"Agent profiles","profilesBody":"A per-project, declarative catalog that decides which agents run and which model each one uses — picked per rail and snapshotted per job so concurrent work stays isolated.","jobDetailLabel":"Live job detail","jobDetailBody":"Every job shows a ticket-identity header, a live duration ticker and running turn/token counts, with the authoritative cost resolved on exit.","isolationLabel":"Many projects, isolated","isolationBody":"Each project has its own database and job queue. Run different projects at the same time and switch between them from the left sidebar — your place is remembered per project."},"providers":{"nav":"Your agent","title":"Bring your own agent","subtitle":"Claude Code and Codex, as first-class engines","intro":"The app treats <b>Claude Code</b> and <b>Codex CLI</b> as interchangeable engines behind one contract. A project can install one or both — the choice is made at install time.","table":{"capability":"Capability","streamingResume":"Streaming & session resume","native":"Native","costReporting":"Cost reporting","providerBilled":"Provider-billed","estimated":"Estimated (~)","telemetry":"Telemetry (OTEL)","synthesized":"Synthesized","agentProfiles":"Agent profiles"},"calloutLabel":"When both are installed","calloutBody":"Pick the engine <b>per spec, per rail, or per terminal launch</b>. The app remembers your last choice per project. Codex cost is estimated from a local rate-card and always flagged with a <mono>~</mono>."},"cost":{"nav":"Track cost","title":"Track every cent","subtitle":"Every billable invocation, recorded and visualized","intro":"Every AI invocation — across rails, Quick, Explore, AI edits, SMASH and file summaries — is recorded for <b>both Claude and Codex</b>. No more guessing what the agents cost.","analyticsLabel":"Analytics page","analyticsBody":"A burn-rate hero, daily timeline, top tickets, model breakdown and a cost-vs-turns scatter. Filter by period (7d / 30d / 90d / All) and by surface.","perTicketLabel":"Per-ticket spending","perTicketBody":"Each spec's detail shows what it cost and how many turns it took, deep-linking into Analytics filtered to that ticket.","honestLabel":"Honest numbers","honestBody":"Claude cost is the provider-billed figure; Codex is estimated and flagged with <mono>~</mono>. Token totals include the cache tiers, so the figures actually reconcile.","budgetsLabel":"Budgets & alerts","budgetsBody":"Set a daily budget and a per-job cost alert; the app auto-pauses the queue when you cross the line. Export anything to CSV or JSON."},"workspace":{"nav":"Workspace","title":"Make it your workspace","subtitle":"Everything you need without leaving the window","terminalLabel":"Terminal panel","terminalBody":"A real VS-Code-style terminal at the bottom (<mod>{{mod}}</mod> <j>J</j>) — WebGL rendering, search, inline images, drag-drop paths and shell integration. Up to 10 sessions per project.","codeLabel":"Code explorer","codeBody":"A read-only file tree and Monaco viewer with plain-language AI summaries and “touched by AI” provenance chips, so anyone can follow what changed and why.","integrationsLabel":"Integrations","integrationsBody":"A per-project marketplace of MCP integrations — Serena semantic code-navigation is bundled. Installs are additive: adding one never disturbs another.","themesLabel":"Themes","themesBody":"Five built-in themes — specrails (default), dracula, aurora-light, obsidian-dark and matrix — applied before the UI paints, so there's no flash. Change them in Settings → Appearance.","chatsLabel":"Minimizable chats","chatsBody":"Park an Explore or AI-Edit session into a dock chip and pick it back up later — never lost across refreshes or project switches.","desktopLabel":"Desktop or browser","desktopBody":"Run Specrails in your browser, or grab the signed desktop app (macOS & Windows) that bundles its own server and runtimes."},"companion":{"nav":"Mobile companion","title":"Take Specrails with you","subtitle":"Specrails Companion — your pipelines, on your phone","intro":"<b>Specrails Companion</b> is a web app at specrails.dev/companion-app — open it on your phone (or add it to your Home Screen) to browse the specs board, launch and stop rails, follow live job logs and glance at analytics. No install, no app store.","localLabel":"100% local, like everything else","localBody":"Your phone connects straight to this computer — peer-to-peer and encrypted (WebRTC). No cloud relay, no account, and your code never leaves your devices.","downloadLabel":"Open it on your phone","downloadHint":"Scan the code with your phone's camera, or open specrails.dev/companion-app in its browser.","open":"Open Specrails Companion","pairLabel":"Pairing takes ten seconds","pairBody":"On your phone open specrails.dev/companion-app, then here go to Settings → Mobile companion → Pair web companion and follow the on-screen steps."},"moveFast":{"nav":"Move fast","title":"Move at the speed of thought","subtitle":"Keyboard-first, everywhere","paletteLabel":"Command palette","paletteShortcut":"<f>Press</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>anywhere</m>","paletteBody":"Switch projects, run spec commands, jump to any page and find recent jobs — all with fuzzy search.","terminalLabel":"Terminal panel","terminalBody":"Toggle with <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"All shortcuts","shortcutsBody":"Press <q>?</q> to see the full cheat-sheet.","chatLabel":"Chat sidebar","chatBody":"Toggle the right sidebar with <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Projects sidebar","projectsBody":"Toggle the left Arc sidebar with <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>That's the tour.</b> Add a project from the left sidebar and ship your first spec. You can reopen this walkthrough anytime from Settings."},"jira":{"label":"Jira integration","body":"Back any project with a <b>Jira board</b> — each spec becomes a Jira issue, kept in sync both ways: status follows the rail, and a comment is posted when a job finishes. Configure it per project when you add it, or anytime in Settings."}}`),u={wizard:n,addProject:r,prerequisites:i,instructions:a,checkpoints:o,setupChat:s,welcome:c,onboarding:l};export{t};
@@ -1 +1 @@
1
- var e={configureAgents:`Configura gli agenti {{provider}}`,configureSubtitle:`Scegli quali agenti installare e come eseguirli.`,tabs:{agents:`Agenti`,models:`Modelli`},skipForNow:`Salta per ora`,install:`Installa`,nextProvider:`Avanti: {{provider}}`,installingProvider:`Installazione di {{provider}}…`,installingSpecrails:`Installazione di specrails...`,installingFromTemplates:`Installazione degli agenti dai template`,waitingForOutput:`In attesa dell'output...`,checkpoints:{baseInstall:`Installazione di base`,agentSelection:`Selezione degli agenti`,agentGeneration:`Generazione degli agenti`},steps:{configure:`Configura`},summary:{agents:`Agenti`,agentSkills:`Skill degli agenti`,skills:`Skill`,openspecSkills:`Skill OpenSpec`,legacyRemoved_one:`Rimosso {{count}} comando legacy <code>/specrails:*</code>`,legacyRemoved_other:`Rimossi {{count}} comandi legacy <code>/specrails:*</code>`},complete:{welcome:`Benvenuto in <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> è ora configurato con workflow di sviluppo basati sull'IA. I tuoi agenti specializzati e i comandi sono pronti all'uso.`,installedForEngines_one:`Installato per {{count}} engine`,installedForEngines_other:`Installato per {{count}} engine`,learnMore:`Scopri come ottenere il massimo da specrails:`,continueToProject:`Continua al progetto`,jira:{title:`Collega una board Jira`,subtitle:`Facoltativo — appoggia le spec di questo progetto a una board Jira. Puoi farlo anche più tardi nelle Impostazioni.`,configure:`Configura Jira`,optional:`facoltativo`}},error:{title:`Setup non riuscito`,skipSetup:`Salta il setup`,prereqMissing:`Il setup di SpecRails richiede Node.js, npm, npx e Git disponibili sul PATH prima di poter installare questo progetto.`,prereqRetryHint:`Installa gli strumenti mancanti, riavvia Specrails e poi riprova il setup.`}},t={title:`Aggiungi progetto`,description:`Registra una directory di progetto per gestirla da Specrails.`,noProviderDetected:`Nessuna CLI IA rilevata. Installa prima Claude Code o Codex CLI.`,pathLabel:`Percorso del progetto`,pathPlaceholder:`/Users/me/my-project`,pathHint:`Percorso assoluto alla root del progetto`,browseForFolder:`Sfoglia cartelle`,selectProjectFolder:`Seleziona la cartella del progetto`,nameLabel:`Nome visualizzato`,optional:`(facoltativo)`,namePlaceholder:`Il mio progetto`,nameHint:`Per impostazione predefinita usa il nome della directory`,providersLabel:`Provider IA`,notFound:`non trovato`,multiProviderHint:`Verranno configurati entrambi gli engine. Il primo è il predefinito del progetto. Non modificabile dopo la creazione.`,singleProviderHint:`Non modificabile dopo la creazione del progetto.`,adding:`Aggiunta in corso...`,submit:`Aggiungi progetto`,toolsRequired_one:`{{tools}} è richiesto per aggiungere un progetto`,toolsRequired_other:`{{tools}} sono richiesti per aggiungere un progetto`,errors:{pathRequired:`Il percorso del progetto è obbligatorio`,selectProvider:`Seleziona almeno un provider IA`,addFailed:`Aggiunta del progetto non riuscita`},toasts:{registered:`Progetto "{{name}}" registrato`}},n={corruptedBundle:`bundle corrotto — reinstalla l'app`,notInstalled:`non installato`,failedToExecute:`trovato ma esecuzione non riuscita`,failedToExecuteAt:`trovato in {{path}} ma esecuzione non riuscita`,failedToExecuteWithError:`trovato ma esecuzione non riuscita ({{error}})`,failedToExecuteAtWithError:`trovato in {{path}} ma esecuzione non riuscita ({{error}})`,needsMinimum:`{{version}} trovata — serve {{minVersion}}+`,unknownVersion:`sconosciuta`,installedLabel:`installato`,verifyError:`Impossibile verificare localmente gli strumenti di sviluppo — l'installazione li convaliderà.`,allDetected:`Tutti gli strumenti richiesti rilevati`,bundleCorruptedTitle:`Bundle dell'app corrotto`,toolsRequired_one:`{{count}} strumento di sviluppo richiesto`,toolsRequired_other:`{{count}} strumenti di sviluppo richiesti`,reinstallHint:`Reinstalla l'app Specrails per ripristinare gli strumenti inclusi.`,installMissingHint:`Installa gli strumenti mancanti per continuare.`,moreInfo:`Maggiori informazioni`,bundledBadge:`incluso`},r={title:`Installa gli strumenti di sviluppo`,description:`SpecRails richiede Node.js, npm, npx e Git sul PATH. Scegli lo snippet per il tuo sistema operativo, eseguilo e poi clicca "L'ho installato, ricontrolla".`,darwin:{intro:`Con Homebrew ottieni entrambi gli strumenti in una riga. Se non hai brew, usa i download ufficiali.`,installNodeGit:`Installa Node.js e Git con Homebrew`},win32:{intro:`Winget è incluso in Windows 11 e nelle versioni recenti di Windows 10. Apri PowerShell o il Terminale ed esegui:`,installNode:`Installa Node.js LTS`,installGit:`Installa Git`,note:`Dopo l'installazione, riavvia Specrails così Windows aggiorna il PATH.`},linux:{intro:`Usa il package manager della tua distro:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (ufficiale)`,gitOfficial:`Git (ufficiale)`,gitWindows:`Git per Windows (ufficiale)`},showOtherPlatforms:`Mostra altre piattaforme`,hideOtherPlatforms:`Nascondi altre piattaforme`,recheck:`L'ho installato, ricontrolla`,diagnostics:{copy:`Copia diagnostica`,copied:`Diagnostica copiata`,failed:`Copia non riuscita`},corrupted:{title:`Bundle dell'app corrotto`,description:`Non è stato possibile verificare uno o più strumenti inclusi (Node.js, Git).`,body:`Questo strumento è incluso nell'app Specrails e non può essere installato separatamente. Se vedi questo messaggio, il bundle dell'app potrebbe essere corrotto. Reinstalla Specrails.`}},i={title:`Avanzamento del setup`,progress:`{{done}} di {{total}} completati`,rawLog_one:`Log grezzo ({{count}} riga)`,rawLog_other:`Log grezzo ({{count}} righe)`},a={title:`Assistente di setup`,subtitle:`Rispondi ai prompt per configurare il progetto`,settingUp:`Configurazione del progetto in corso...`,placeholder:`Scrivi una risposta...`,keyboardHint:`Invio per inviare, Shift+Invio per andare a capo`},o={title:`Benvenuto in <spec>spec</spec><rails>rails</rails>`,description:`Specrails gestisce più progetti da un'unica interfaccia. Aggiungi il tuo primo progetto per iniziare.`,addFirstProject:`Aggiungi il tuo primo progetto`,jiraHint:`Collega ogni progetto alla sua board Jira — le spec restano sincronizzate in entrambe le direzioni.`},s=JSON.parse(`{"productTour":"Tour del prodotto","stepCount":"Passo {{current}} di {{total}}","goToStep":"Vai al passo {{step}}: {{label}}","stepLabel":"Passo {{step}}","dontShowAgain":"Non mostrare più","skipTour":"Salta il tour","getStarted":"Inizia","flow":{"addSpec":"Aggiungi Spec","dropInRail":"Trascina su un Rail","hitPlay":"Premi Play","ship":"Ship","architect":"Architetto","developer":"Developer","reviewer":"Reviewer"},"language":{"nav":"Lingua","title":"Scegli la tua lingua","subtitle":"Specrails parla la tua lingua","intro":"Seleziona la lingua in cui vuoi usare l'interfaccia. Si applica all'istante — questo tour incluso.","note":"Puoi cambiarla in qualsiasi momento da Impostazioni → Lingua."},"theme":{"nav":"Tema","title":"Scegli il tuo stile","subtitle":"Temi integrati, applicati all'istante","intro":"Scegli l'aspetto di Specrails — il tema si applica appena fai clic.","note":"Puoi cambiarlo in qualsiasi momento da Impostazioni → Aspetto."},"welcome":{"nav":"Benvenuto","title":"Benvenuto in Specrails","subtitle":"La tua cabina di pilotaggio locale per rilasciare software con agenti IA","intro":"Specrails trasforma un'idea in codice rilasciato — e ti permette di <b>vedere, guidare e verificare</b> ogni passo. Abbozza una spec parlando con un'IA, trascinala su un rail di esecuzione e premi Play. La pipeline gestisce architettura, implementazione, review e la pull request, trasmettendo il proprio lavoro in diretta per tutto il tempo.","coreLoopLabel":"Il ciclo fondamentale","flowCaption":"Ogni spec passa automaticamente per <b>Architect → Developer → Reviewer → Ship</b>.","localNote":"<b>100% locale · utente singolo · nessun account.</b> Tutto gira sulla tua macchina. Il tuo codice non lascia mai il laptop a meno che non sia <i>tu</i> a lanciarci sopra un agente.","tourNote":"Questo breve tour mostra tutto ciò che l'app sa fare — circa un minuto."},"authorSpecs":{"nav":"Scrivi le spec","title":"Trasforma le idee in spec","subtitle":"Sei modi per catturare esattamente cosa vuoi costruire","intro":"Una <b>spec</b> è una descrizione del lavoro che vuoi far svolgere. Scrivila come preferisci sul momento — da una riga veloce a una conversazione completa con l'IA.","exploreLabel":"Explore — conversa","exploreBody":"Descrivi cosa vuoi in una chat; una bozza live si ricostruisce a ogni turno. Uno slider di preset regola quanto contesto del progetto vede l'IA — dal solo tuo messaggio fino all'intero codebase più i tuoi server MCP.","quickLabel":"Quick — in un colpo solo","quickBody":"Sai già cosa vuoi? Genera una spec completa in un solo turno. Facoltativamente arricchiscila con un Contract Layer: nomi esatti, forme dei dati, invarianti e un elenco dei file da toccare, così gli agenti non reinventano nulla.","websiteLabel":"Da un sito web","websiteBody":"Apre un browser integrato. Seleziona un elemento al passaggio del mouse o trascina un rettangolo: screenshot, DOM e CSS applicato diventano allegati. La build desktop include il proprio Chromium, quindi funziona offline.","smashLabel":"SMASH su una grande epic","smashBody":"Esplodi una spec grande in una famiglia di sotto-spec più piccole con un clic — ogni figlia porta un breve riassunto sulla sua card.","draftsLabel":"Bozze e ripresa della modifica","draftsBody":"Parcheggia un'esplorazione in corso come ticket in bozza e riprendila più tardi; riapri qualsiasi spec in Explore per continuare a rifinirla.","compareLabel":"Confronta fianco a fianco","compareBody":"Trascina una spec verso il bordo dello schermo e scivola dentro un selettore delle altre spec — esaminane due insieme, in stile tablet."},"rails":{"nav":"Esegui sui rail","title":"Esegui la pipeline sui rail","subtitle":"Organizza le spec in corsie, poi lancia gli agenti","intro":"Il lato destro della Dashboard sono i tuoi <b>Rail</b> — corsie di esecuzione. Trascina una card spec su un rail e premi <play>▶ Play</play> per lanciare un job di implementazione.","jobLabel":"Cosa esegue ogni job","flowCaption":"Ogni fase trasmette i propri log in diretta mentre lavora.","modeLabel":"Scegli come gira un rail","modeBody":"Ogni rail sceglie una modalità: <b>Implement</b> (la pipeline strutturata completa), <b>Batch</b> (più spec in sequenza) o <b>Ultracode</b> (Claude lavora in autonomia, senza pipeline fissa).","profilesLabel":"Profili agente","profilesBody":"Un catalogo dichiarativo per progetto che decide quali agenti girano e quale modello usa ciascuno — scelto per rail e congelato per job, così il lavoro concorrente resta isolato.","jobDetailLabel":"Dettaglio job in diretta","jobDetailBody":"Ogni job mostra un header con l'identità del ticket, un contatore di durata in tempo reale e conteggi correnti di turni e token, con il costo definitivo risolto alla chiusura.","isolationLabel":"Tanti progetti, isolati","isolationBody":"Ogni progetto ha il proprio database e la propria coda di job. Esegui progetti diversi contemporaneamente e passa dall'uno all'altro dalla sidebar sinistra — la tua posizione viene ricordata per progetto."},"providers":{"nav":"Il tuo agente","title":"Porta il tuo agente","subtitle":"Claude Code e Codex come engine di prima classe","intro":"L'app tratta <b>Claude Code</b> e <b>Codex CLI</b> come engine intercambiabili dietro un unico contratto. Un progetto può installarne uno o entrambi — la scelta avviene al momento dell'installazione.","table":{"capability":"Capacità","streamingResume":"Streaming e ripresa della sessione","native":"Nativo","costReporting":"Report dei costi","providerBilled":"Fatturato dal provider","estimated":"Stimato (~)","telemetry":"Telemetria (OTEL)","synthesized":"Sintetizzata","agentProfiles":"Profili agente"},"calloutLabel":"Quando sono installati entrambi","calloutBody":"Scegli l'engine <b>per spec, per rail o per avvio del terminale</b>. L'app ricorda la tua ultima scelta per progetto. Il costo di Codex è stimato da un tariffario locale e sempre contrassegnato con <mono>~</mono>."},"cost":{"nav":"Monitora i costi","title":"Traccia ogni centesimo","subtitle":"Ogni invocazione fatturabile, registrata e visualizzata","intro":"Ogni invocazione IA — su rail, Quick, Explore, modifiche AI, SMASH e riassunti dei file — viene registrata per <b>Claude e Codex</b>. Mai più tirare a indovinare quanto costano gli agenti.","analyticsLabel":"Pagina Analytics","analyticsBody":"Un hero con il burn-rate, timeline giornaliera, ticket principali, ripartizione per modello e uno scatter costo-vs-turni. Filtra per periodo (7d / 30d / 90d / Tutto) e per superficie.","perTicketLabel":"Spesa per ticket","perTicketBody":"Il dettaglio di ogni spec mostra quanto è costata e quanti turni ha richiesto, con un link diretto ad Analytics filtrato su quel ticket.","honestLabel":"Numeri onesti","honestBody":"Il costo di Claude è la cifra fatturata dal provider; quello di Codex è stimato e contrassegnato con <mono>~</mono>. I totali dei token includono i livelli di cache, quindi i conti tornano davvero.","budgetsLabel":"Budget e avvisi","budgetsBody":"Imposta un budget giornaliero e un avviso di costo per job; l'app mette in pausa automaticamente la coda quando superi la soglia. Esporta tutto in CSV o JSON."},"workspace":{"nav":"Workspace","title":"Rendilo il tuo workspace","subtitle":"Tutto ciò che ti serve senza lasciare la finestra","terminalLabel":"Pannello terminale","terminalBody":"Un vero terminale in stile VS Code in basso (<mod>{{mod}}</mod> <j>J</j>) — rendering WebGL, ricerca, immagini inline, trascinamento di percorsi e integrazione con la shell. Fino a 10 sessioni per progetto.","codeLabel":"Esploratore di codice","codeBody":"Un albero dei file in sola lettura e un visualizzatore Monaco con riassunti IA in linguaggio semplice e chip di provenienza “toccato dall'IA”, così chiunque può seguire cosa è cambiato e perché.","integrationsLabel":"Integrazioni","integrationsBody":"Un marketplace per progetto di integrazioni MCP — la navigazione semantica del codice di Serena è inclusa. Le installazioni sono additive: aggiungerne una non disturba mai le altre.","themesLabel":"Temi","themesBody":"Cinque temi integrati — specrails (predefinito), dracula, aurora-light, obsidian-dark e matrix — applicati prima che la UI venga disegnata, quindi nessun flash. Cambiali in Impostazioni → Aspetto.","chatsLabel":"Chat minimizzabili","chatsBody":"Parcheggia una sessione Explore o AI Edit in una chip del dock e riprendila più tardi — mai persa tra refresh o cambi di progetto.","desktopLabel":"Desktop o browser","desktopBody":"Esegui Specrails nel browser, oppure scarica l'app desktop firmata (macOS e Windows) che include il proprio server e i runtime."},"companion":{"nav":"App mobile","title":"Porta Specrails con te","subtitle":"SpecRails Companion — le tue pipeline, sul tuo telefono","intro":"<b>SpecRails Companion</b> è l'app mobile gratuita per iPhone e Android che si associa a questo computer sulla tua rete locale. Sfoglia la board delle spec, lancia e ferma i rail, segui i log dei job in diretta e dai un'occhiata alle Analytics — direttamente dal telefono.","localLabel":"100% locale, come tutto il resto","localBody":"L'app dialoga direttamente con questo computer tramite il tuo Wi-Fi — associazione via QR con pinning TLS. Nessun relay cloud, nessun account, e il tuo codice non esce mai da casa.","downloadLabel":"Scarica l'app","downloadHint":"Scansiona un codice con la fotocamera del telefono, oppure apri il link.","ios":"Scarica per iPhone","android":"Scarica per Android","pairLabel":"L'associazione richiede dieci secondi","pairBody":"Una volta installata l'app, vai su Impostazioni → Companion mobile → Associa dispositivo e scansiona il codice QR che trovi lì."},"moveFast":{"nav":"Vai veloce","title":"Muoviti alla velocità del pensiero","subtitle":"Keyboard-first, ovunque","paletteLabel":"Palette dei comandi","paletteShortcut":"<f>Premi</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>ovunque</m>","paletteBody":"Cambia progetto, esegui comandi spec, salta a qualsiasi pagina e trova i job recenti — tutto con ricerca fuzzy.","terminalLabel":"Pannello terminale","terminalBody":"Attiva/disattiva con <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"Tutte le scorciatoie","shortcutsBody":"Premi <q>?</q> per vedere il cheat-sheet completo.","chatLabel":"Sidebar della chat","chatBody":"Attiva/disattiva la sidebar destra con <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Sidebar dei progetti","projectsBody":"Attiva/disattiva la sidebar Arc sinistra con <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>Il tour finisce qui.</b> Aggiungi un progetto dalla sidebar sinistra e rilascia la tua prima spec. Puoi riaprire questa guida in qualsiasi momento dalle Impostazioni."},"jira":{"label":"Integrazione Jira","body":"Appoggia qualsiasi progetto a una <b>board Jira</b> — ogni spec diventa un ticket Jira, sincronizzato in entrambe le direzioni: lo stato segue il rail e viene pubblicato un commento al termine di un job. Configuralo per progetto quando lo aggiungi, o in qualsiasi momento nelle Impostazioni."}}`),c={wizard:e,addProject:t,prerequisites:n,instructions:r,checkpoints:i,setupChat:a,welcome:o,onboarding:s};export{t as addProject,i as checkpoints,c as default,r as instructions,s as onboarding,n as prerequisites,a as setupChat,o as welcome,e as wizard};
1
+ var e={configureAgents:`Configura gli agenti {{provider}}`,configureSubtitle:`Scegli quali agenti installare e come eseguirli.`,tabs:{agents:`Agenti`,models:`Modelli`},skipForNow:`Salta per ora`,install:`Installa`,nextProvider:`Avanti: {{provider}}`,installingProvider:`Installazione di {{provider}}…`,installingSpecrails:`Installazione di specrails...`,installingFromTemplates:`Installazione degli agenti dai template`,waitingForOutput:`In attesa dell'output...`,checkpoints:{baseInstall:`Installazione di base`,agentSelection:`Selezione degli agenti`,agentGeneration:`Generazione degli agenti`},steps:{configure:`Configura`},summary:{agents:`Agenti`,agentSkills:`Skill degli agenti`,skills:`Skill`,openspecSkills:`Skill OpenSpec`,legacyRemoved_one:`Rimosso {{count}} comando legacy <code>/specrails:*</code>`,legacyRemoved_other:`Rimossi {{count}} comandi legacy <code>/specrails:*</code>`},complete:{welcome:`Benvenuto in <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> è ora configurato con workflow di sviluppo basati sull'IA. I tuoi agenti specializzati e i comandi sono pronti all'uso.`,installedForEngines_one:`Installato per {{count}} engine`,installedForEngines_other:`Installato per {{count}} engine`,learnMore:`Scopri come ottenere il massimo da specrails:`,continueToProject:`Continua al progetto`,jira:{title:`Collega una board Jira`,subtitle:`Facoltativo — appoggia le spec di questo progetto a una board Jira. Puoi farlo anche più tardi nelle Impostazioni.`,configure:`Configura Jira`,optional:`facoltativo`}},error:{title:`Setup non riuscito`,skipSetup:`Salta il setup`,prereqMissing:`Il setup di SpecRails richiede Node.js, npm, npx e Git disponibili sul PATH prima di poter installare questo progetto.`,prereqRetryHint:`Installa gli strumenti mancanti, riavvia Specrails e poi riprova il setup.`}},t={title:`Aggiungi progetto`,description:`Registra una directory di progetto per gestirla da Specrails.`,noProviderDetected:`Nessuna CLI IA rilevata. Installa prima Claude Code o Codex CLI.`,pathLabel:`Percorso del progetto`,pathPlaceholder:`/Users/me/my-project`,pathHint:`Percorso assoluto alla root del progetto`,browseForFolder:`Sfoglia cartelle`,selectProjectFolder:`Seleziona la cartella del progetto`,nameLabel:`Nome visualizzato`,optional:`(facoltativo)`,namePlaceholder:`Il mio progetto`,nameHint:`Per impostazione predefinita usa il nome della directory`,providersLabel:`Provider IA`,notFound:`non trovato`,multiProviderHint:`Verranno configurati entrambi gli engine. Il primo è il predefinito del progetto. Non modificabile dopo la creazione.`,singleProviderHint:`Non modificabile dopo la creazione del progetto.`,adding:`Aggiunta in corso...`,submit:`Aggiungi progetto`,toolsRequired_one:`{{tools}} è richiesto per aggiungere un progetto`,toolsRequired_other:`{{tools}} sono richiesti per aggiungere un progetto`,errors:{pathRequired:`Il percorso del progetto è obbligatorio`,selectProvider:`Seleziona almeno un provider IA`,addFailed:`Aggiunta del progetto non riuscita`},toasts:{registered:`Progetto "{{name}}" registrato`}},n={corruptedBundle:`bundle corrotto — reinstalla l'app`,notInstalled:`non installato`,failedToExecute:`trovato ma esecuzione non riuscita`,failedToExecuteAt:`trovato in {{path}} ma esecuzione non riuscita`,failedToExecuteWithError:`trovato ma esecuzione non riuscita ({{error}})`,failedToExecuteAtWithError:`trovato in {{path}} ma esecuzione non riuscita ({{error}})`,needsMinimum:`{{version}} trovata — serve {{minVersion}}+`,unknownVersion:`sconosciuta`,installedLabel:`installato`,verifyError:`Impossibile verificare localmente gli strumenti di sviluppo — l'installazione li convaliderà.`,allDetected:`Tutti gli strumenti richiesti rilevati`,bundleCorruptedTitle:`Bundle dell'app corrotto`,toolsRequired_one:`{{count}} strumento di sviluppo richiesto`,toolsRequired_other:`{{count}} strumenti di sviluppo richiesti`,reinstallHint:`Reinstalla l'app Specrails per ripristinare gli strumenti inclusi.`,installMissingHint:`Installa gli strumenti mancanti per continuare.`,moreInfo:`Maggiori informazioni`,bundledBadge:`incluso`},r={title:`Installa gli strumenti di sviluppo`,description:`SpecRails richiede Node.js, npm, npx e Git sul PATH. Scegli lo snippet per il tuo sistema operativo, eseguilo e poi clicca "L'ho installato, ricontrolla".`,darwin:{intro:`Con Homebrew ottieni entrambi gli strumenti in una riga. Se non hai brew, usa i download ufficiali.`,installNodeGit:`Installa Node.js e Git con Homebrew`},win32:{intro:`Winget è incluso in Windows 11 e nelle versioni recenti di Windows 10. Apri PowerShell o il Terminale ed esegui:`,installNode:`Installa Node.js LTS`,installGit:`Installa Git`,note:`Dopo l'installazione, riavvia Specrails così Windows aggiorna il PATH.`},linux:{intro:`Usa il package manager della tua distro:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (ufficiale)`,gitOfficial:`Git (ufficiale)`,gitWindows:`Git per Windows (ufficiale)`},showOtherPlatforms:`Mostra altre piattaforme`,hideOtherPlatforms:`Nascondi altre piattaforme`,recheck:`L'ho installato, ricontrolla`,diagnostics:{copy:`Copia diagnostica`,copied:`Diagnostica copiata`,failed:`Copia non riuscita`},corrupted:{title:`Bundle dell'app corrotto`,description:`Non è stato possibile verificare uno o più strumenti inclusi (Node.js, Git).`,body:`Questo strumento è incluso nell'app Specrails e non può essere installato separatamente. Se vedi questo messaggio, il bundle dell'app potrebbe essere corrotto. Reinstalla Specrails.`}},i={title:`Avanzamento del setup`,progress:`{{done}} di {{total}} completati`,rawLog_one:`Log grezzo ({{count}} riga)`,rawLog_other:`Log grezzo ({{count}} righe)`},a={title:`Assistente di setup`,subtitle:`Rispondi ai prompt per configurare il progetto`,settingUp:`Configurazione del progetto in corso...`,placeholder:`Scrivi una risposta...`,keyboardHint:`Invio per inviare, Shift+Invio per andare a capo`},o={title:`Benvenuto in <spec>spec</spec><rails>rails</rails>`,description:`Specrails gestisce più progetti da un'unica interfaccia. Aggiungi il tuo primo progetto per iniziare.`,addFirstProject:`Aggiungi il tuo primo progetto`,jiraHint:`Collega ogni progetto alla sua board Jira — le spec restano sincronizzate in entrambe le direzioni.`},s=JSON.parse(`{"productTour":"Tour del prodotto","stepCount":"Passo {{current}} di {{total}}","goToStep":"Vai al passo {{step}}: {{label}}","stepLabel":"Passo {{step}}","dontShowAgain":"Non mostrare più","skipTour":"Salta il tour","getStarted":"Inizia","flow":{"addSpec":"Aggiungi Spec","dropInRail":"Trascina su un Rail","hitPlay":"Premi Play","ship":"Ship","architect":"Architetto","developer":"Developer","reviewer":"Reviewer"},"language":{"nav":"Lingua","title":"Scegli la tua lingua","subtitle":"Specrails parla la tua lingua","intro":"Seleziona la lingua in cui vuoi usare l'interfaccia. Si applica all'istante — questo tour incluso.","note":"Puoi cambiarla in qualsiasi momento da Impostazioni → Lingua."},"theme":{"nav":"Tema","title":"Scegli il tuo stile","subtitle":"Temi integrati, applicati all'istante","intro":"Scegli l'aspetto di Specrails — il tema si applica appena fai clic.","note":"Puoi cambiarlo in qualsiasi momento da Impostazioni → Aspetto."},"welcome":{"nav":"Benvenuto","title":"Benvenuto in Specrails","subtitle":"La tua cabina di pilotaggio locale per rilasciare software con agenti IA","intro":"Specrails trasforma un'idea in codice rilasciato — e ti permette di <b>vedere, guidare e verificare</b> ogni passo. Abbozza una spec parlando con un'IA, trascinala su un rail di esecuzione e premi Play. La pipeline gestisce architettura, implementazione, review e la pull request, trasmettendo il proprio lavoro in diretta per tutto il tempo.","coreLoopLabel":"Il ciclo fondamentale","flowCaption":"Ogni spec passa automaticamente per <b>Architect → Developer → Reviewer → Ship</b>.","localNote":"<b>100% locale · utente singolo · nessun account.</b> Tutto gira sulla tua macchina. Il tuo codice non lascia mai il laptop a meno che non sia <i>tu</i> a lanciarci sopra un agente.","tourNote":"Questo breve tour mostra tutto ciò che l'app sa fare — circa un minuto."},"authorSpecs":{"nav":"Scrivi le spec","title":"Trasforma le idee in spec","subtitle":"Sei modi per catturare esattamente cosa vuoi costruire","intro":"Una <b>spec</b> è una descrizione del lavoro che vuoi far svolgere. Scrivila come preferisci sul momento — da una riga veloce a una conversazione completa con l'IA.","exploreLabel":"Explore — conversa","exploreBody":"Descrivi cosa vuoi in una chat; una bozza live si ricostruisce a ogni turno. Uno slider di preset regola quanto contesto del progetto vede l'IA — dal solo tuo messaggio fino all'intero codebase più i tuoi server MCP.","quickLabel":"Quick — in un colpo solo","quickBody":"Sai già cosa vuoi? Genera una spec completa in un solo turno. Facoltativamente arricchiscila con un Contract Layer: nomi esatti, forme dei dati, invarianti e un elenco dei file da toccare, così gli agenti non reinventano nulla.","websiteLabel":"Da un sito web","websiteBody":"Apre un browser integrato. Seleziona un elemento al passaggio del mouse o trascina un rettangolo: screenshot, DOM e CSS applicato diventano allegati. La build desktop include il proprio Chromium, quindi funziona offline.","smashLabel":"SMASH su una grande epic","smashBody":"Esplodi una spec grande in una famiglia di sotto-spec più piccole con un clic — ogni figlia porta un breve riassunto sulla sua card.","draftsLabel":"Bozze e ripresa della modifica","draftsBody":"Parcheggia un'esplorazione in corso come ticket in bozza e riprendila più tardi; riapri qualsiasi spec in Explore per continuare a rifinirla.","compareLabel":"Confronta fianco a fianco","compareBody":"Trascina una spec verso il bordo dello schermo e scivola dentro un selettore delle altre spec — esaminane due insieme, in stile tablet."},"rails":{"nav":"Esegui sui rail","title":"Esegui la pipeline sui rail","subtitle":"Organizza le spec in corsie, poi lancia gli agenti","intro":"Il lato destro della Dashboard sono i tuoi <b>Rail</b> — corsie di esecuzione. Trascina una card spec su un rail e premi <play>▶ Play</play> per lanciare un job di implementazione.","jobLabel":"Cosa esegue ogni job","flowCaption":"Ogni fase trasmette i propri log in diretta mentre lavora.","modeLabel":"Scegli come gira un rail","modeBody":"Ogni rail sceglie una modalità: <b>Implement</b> (la pipeline strutturata completa), <b>Batch</b> (più spec in sequenza) o <b>Ultracode</b> (Claude lavora in autonomia, senza pipeline fissa).","profilesLabel":"Profili agente","profilesBody":"Un catalogo dichiarativo per progetto che decide quali agenti girano e quale modello usa ciascuno — scelto per rail e congelato per job, così il lavoro concorrente resta isolato.","jobDetailLabel":"Dettaglio job in diretta","jobDetailBody":"Ogni job mostra un header con l'identità del ticket, un contatore di durata in tempo reale e conteggi correnti di turni e token, con il costo definitivo risolto alla chiusura.","isolationLabel":"Tanti progetti, isolati","isolationBody":"Ogni progetto ha il proprio database e la propria coda di job. Esegui progetti diversi contemporaneamente e passa dall'uno all'altro dalla sidebar sinistra — la tua posizione viene ricordata per progetto."},"providers":{"nav":"Il tuo agente","title":"Porta il tuo agente","subtitle":"Claude Code e Codex come engine di prima classe","intro":"L'app tratta <b>Claude Code</b> e <b>Codex CLI</b> come engine intercambiabili dietro un unico contratto. Un progetto può installarne uno o entrambi — la scelta avviene al momento dell'installazione.","table":{"capability":"Capacità","streamingResume":"Streaming e ripresa della sessione","native":"Nativo","costReporting":"Report dei costi","providerBilled":"Fatturato dal provider","estimated":"Stimato (~)","telemetry":"Telemetria (OTEL)","synthesized":"Sintetizzata","agentProfiles":"Profili agente"},"calloutLabel":"Quando sono installati entrambi","calloutBody":"Scegli l'engine <b>per spec, per rail o per avvio del terminale</b>. L'app ricorda la tua ultima scelta per progetto. Il costo di Codex è stimato da un tariffario locale e sempre contrassegnato con <mono>~</mono>."},"cost":{"nav":"Monitora i costi","title":"Traccia ogni centesimo","subtitle":"Ogni invocazione fatturabile, registrata e visualizzata","intro":"Ogni invocazione IA — su rail, Quick, Explore, modifiche AI, SMASH e riassunti dei file — viene registrata per <b>Claude e Codex</b>. Mai più tirare a indovinare quanto costano gli agenti.","analyticsLabel":"Pagina Analytics","analyticsBody":"Un hero con il burn-rate, timeline giornaliera, ticket principali, ripartizione per modello e uno scatter costo-vs-turni. Filtra per periodo (7d / 30d / 90d / Tutto) e per superficie.","perTicketLabel":"Spesa per ticket","perTicketBody":"Il dettaglio di ogni spec mostra quanto è costata e quanti turni ha richiesto, con un link diretto ad Analytics filtrato su quel ticket.","honestLabel":"Numeri onesti","honestBody":"Il costo di Claude è la cifra fatturata dal provider; quello di Codex è stimato e contrassegnato con <mono>~</mono>. I totali dei token includono i livelli di cache, quindi i conti tornano davvero.","budgetsLabel":"Budget e avvisi","budgetsBody":"Imposta un budget giornaliero e un avviso di costo per job; l'app mette in pausa automaticamente la coda quando superi la soglia. Esporta tutto in CSV o JSON."},"workspace":{"nav":"Workspace","title":"Rendilo il tuo workspace","subtitle":"Tutto ciò che ti serve senza lasciare la finestra","terminalLabel":"Pannello terminale","terminalBody":"Un vero terminale in stile VS Code in basso (<mod>{{mod}}</mod> <j>J</j>) — rendering WebGL, ricerca, immagini inline, trascinamento di percorsi e integrazione con la shell. Fino a 10 sessioni per progetto.","codeLabel":"Esploratore di codice","codeBody":"Un albero dei file in sola lettura e un visualizzatore Monaco con riassunti IA in linguaggio semplice e chip di provenienza “toccato dall'IA”, così chiunque può seguire cosa è cambiato e perché.","integrationsLabel":"Integrazioni","integrationsBody":"Un marketplace per progetto di integrazioni MCP — la navigazione semantica del codice di Serena è inclusa. Le installazioni sono additive: aggiungerne una non disturba mai le altre.","themesLabel":"Temi","themesBody":"Cinque temi integrati — specrails (predefinito), dracula, aurora-light, obsidian-dark e matrix — applicati prima che la UI venga disegnata, quindi nessun flash. Cambiali in Impostazioni → Aspetto.","chatsLabel":"Chat minimizzabili","chatsBody":"Parcheggia una sessione Explore o AI Edit in una chip del dock e riprendila più tardi — mai persa tra refresh o cambi di progetto.","desktopLabel":"Desktop o browser","desktopBody":"Esegui Specrails nel browser, oppure scarica l'app desktop firmata (macOS e Windows) che include il proprio server e i runtime."},"companion":{"nav":"Companion mobile","title":"Porta Specrails con te","subtitle":"Specrails Companion — le tue pipeline, sul tuo telefono","intro":"<b>Specrails Companion</b> è una web app su specrails.dev/companion-app — aprila sul tuo telefono (o aggiungila alla schermata Home) per sfogliare la board delle spec, lanciare e fermare i rail, seguire i log dei job in diretta e dare un'occhiata alle Analytics. Nessuna installazione, nessuno app store.","localLabel":"100% locale, come tutto il resto","localBody":"Il tuo telefono si connette direttamente a questo computer — peer-to-peer e cifrato (WebRTC). Nessun relay cloud, nessun account, e il tuo codice non lascia mai i tuoi dispositivi.","downloadLabel":"Aprila sul tuo telefono","downloadHint":"Scansiona il codice con la fotocamera del telefono, oppure apri specrails.dev/companion-app nel suo browser.","open":"Apri Specrails Companion","pairLabel":"L'associazione richiede dieci secondi","pairBody":"Sul tuo telefono apri specrails.dev/companion-app, poi qui vai su Impostazioni → Companion mobile → Associa companion web e segui i passaggi a schermo."},"moveFast":{"nav":"Vai veloce","title":"Muoviti alla velocità del pensiero","subtitle":"Keyboard-first, ovunque","paletteLabel":"Palette dei comandi","paletteShortcut":"<f>Premi</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>ovunque</m>","paletteBody":"Cambia progetto, esegui comandi spec, salta a qualsiasi pagina e trova i job recenti — tutto con ricerca fuzzy.","terminalLabel":"Pannello terminale","terminalBody":"Attiva/disattiva con <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"Tutte le scorciatoie","shortcutsBody":"Premi <q>?</q> per vedere il cheat-sheet completo.","chatLabel":"Sidebar della chat","chatBody":"Attiva/disattiva la sidebar destra con <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Sidebar dei progetti","projectsBody":"Attiva/disattiva la sidebar Arc sinistra con <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>Il tour finisce qui.</b> Aggiungi un progetto dalla sidebar sinistra e rilascia la tua prima spec. Puoi riaprire questa guida in qualsiasi momento dalle Impostazioni."},"jira":{"label":"Integrazione Jira","body":"Appoggia qualsiasi progetto a una <b>board Jira</b> — ogni spec diventa un ticket Jira, sincronizzato in entrambe le direzioni: lo stato segue il rail e viene pubblicato un commento al termine di un job. Configuralo per progetto quando lo aggiungi, o in qualsiasi momento nelle Impostazioni."}}`),c={wizard:e,addProject:t,prerequisites:n,instructions:r,checkpoints:i,setupChat:a,welcome:o,onboarding:s};export{t as addProject,i as checkpoints,c as default,r as instructions,s as onboarding,n as prerequisites,a as setupChat,o as welcome,e as wizard};
@@ -1 +1 @@
1
- var e={configureAgents:`Configurer les agents {{provider}}`,configureSubtitle:`Choisissez quels agents installer et comment les exécuter.`,tabs:{agents:`Agents`,models:`Modèles`},skipForNow:`Ignorer pour l'instant`,install:`Installer`,nextProvider:`Suivant : {{provider}}`,installingProvider:`Installation de {{provider}}…`,installingSpecrails:`Installation de specrails...`,installingFromTemplates:`Installation des agents à partir des templates`,waitingForOutput:`En attente de sortie...`,checkpoints:{baseInstall:`Installation de base`,agentSelection:`Sélection des agents`,agentGeneration:`Génération des agents`},steps:{configure:`Configurer`},summary:{agents:`Agents`,agentSkills:`Skills d'agent`,skills:`Skills`,openspecSkills:`Skills OpenSpec`,legacyRemoved_one:`{{count}} commande legacy <code>/specrails:*</code> supprimée`,legacyRemoved_other:`{{count}} commandes legacy <code>/specrails:*</code> supprimées`},complete:{welcome:`Bienvenue dans <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> est maintenant configuré avec des workflows de développement pilotés par l'IA. Vos agents spécialisés et vos commandes sont prêts à l'emploi.`,installedForEngines_one:`Installé pour {{count}} moteur`,installedForEngines_other:`Installé pour {{count}} moteurs`,learnMore:`Apprenez à tirer le meilleur de specrails :`,continueToProject:`Continuer vers le projet`,jira:{title:`Connecter un tableau Jira`,subtitle:`Facultatif — adossez les specs de ce projet à un tableau Jira. Vous pourrez aussi le faire plus tard dans les Paramètres.`,configure:`Configurer Jira`,optional:`facultatif`}},error:{title:`Échec de la configuration`,skipSetup:`Ignorer la configuration`,prereqMissing:`La configuration de SpecRails a besoin de Node.js, npm, npx et Git disponibles sur le PATH pour pouvoir installer ce projet.`,prereqRetryHint:`Installez les outils manquants, redémarrez Specrails, puis relancez la configuration.`}},t={title:`Ajouter un projet`,description:`Enregistrez un répertoire de projet pour le gérer depuis Specrails.`,noProviderDetected:`Aucune CLI d'IA détectée. Installez d'abord Claude Code ou Codex CLI.`,pathLabel:`Chemin du projet`,pathPlaceholder:`/Users/moi/mon-projet`,pathHint:`Chemin absolu vers la racine du projet`,browseForFolder:`Parcourir les dossiers`,selectProjectFolder:`Sélectionner le dossier du projet`,nameLabel:`Nom d'affichage`,optional:`(facultatif)`,namePlaceholder:`Mon projet`,nameHint:`Par défaut, le nom du répertoire`,providersLabel:`Fournisseurs d'IA`,notFound:`introuvable`,multiProviderHint:`Les deux moteurs seront configurés. Le premier est le moteur par défaut du projet. Non modifiable après la création.`,singleProviderHint:`Non modifiable après la création du projet.`,adding:`Ajout...`,submit:`Ajouter le projet`,toolsRequired_one:`{{tools}} est requis pour ajouter un projet`,toolsRequired_other:`{{tools}} sont requis pour ajouter un projet`,errors:{pathRequired:`Le chemin du projet est requis`,selectProvider:`Sélectionnez au moins un fournisseur d'IA`,addFailed:`Échec de l'ajout du projet`},toasts:{registered:`Projet « {{name}} » enregistré`}},n={corruptedBundle:`bundle corrompu — réinstallez l'application`,notInstalled:`non installé`,failedToExecute:`trouvé mais impossible à exécuter`,failedToExecuteAt:`trouvé à {{path}} mais impossible à exécuter`,failedToExecuteWithError:`trouvé mais impossible à exécuter ({{error}})`,failedToExecuteAtWithError:`trouvé à {{path}} mais impossible à exécuter ({{error}})`,needsMinimum:`{{version}} trouvé — nécessite {{minVersion}}+`,unknownVersion:`inconnue`,installedLabel:`installé`,verifyError:`Impossible de vérifier les outils de développement en local — l'installation s'en chargera.`,allDetected:`Tous les outils requis sont détectés`,bundleCorruptedTitle:`Bundle de l'application corrompu`,toolsRequired_one:`{{count}} outil de développement requis`,toolsRequired_other:`{{count}} outils de développement requis`,reinstallHint:`Réinstallez l'application Specrails pour restaurer les outils embarqués.`,installMissingHint:`Installez les outils manquants pour continuer.`,moreInfo:`Plus d'infos`,bundledBadge:`embarqué`},r={title:`Installer les outils de développement`,description:`SpecRails a besoin de Node.js, npm, npx et Git sur le PATH. Choisissez le snippet pour votre OS, exécutez-le, puis cliquez sur « Je l'ai installé, revérifier ».`,darwin:{intro:`Homebrew installe les deux outils en une seule ligne. Si vous n'avez pas brew, utilisez les téléchargements officiels.`,installNodeGit:`Installer Node.js et Git via Homebrew`},win32:{intro:`Winget est fourni avec Windows 11 et les versions récentes de Windows 10. Ouvrez PowerShell ou le Terminal et exécutez :`,installNode:`Installer Node.js LTS`,installGit:`Installer Git`,note:`Après l'installation, redémarrez Specrails pour que Windows actualise le PATH.`},linux:{intro:`Utilisez le gestionnaire de paquets de votre distribution :`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (officiel)`,gitOfficial:`Git (officiel)`,gitWindows:`Git pour Windows (officiel)`},showOtherPlatforms:`Afficher les autres plateformes`,hideOtherPlatforms:`Masquer les autres plateformes`,recheck:`Je l'ai installé, revérifier`,diagnostics:{copy:`Copier les diagnostics`,copied:`Diagnostics copiés`,failed:`Échec de la copie`},corrupted:{title:`Bundle de l'application corrompu`,description:`Un ou plusieurs outils embarqués (Node.js, Git) n'ont pas pu être vérifiés.`,body:`Cet outil est embarqué avec l'application Specrails et ne peut pas être installé séparément. Si vous voyez ce message, le bundle de l'application est peut-être corrompu. Veuillez réinstaller Specrails.`}},i={title:`Progression de la configuration`,progress:`{{done}} sur {{total}} terminés`,rawLog_one:`Log brut ({{count}} ligne)`,rawLog_other:`Log brut ({{count}} lignes)`},a={title:`Assistant de configuration`,subtitle:`Répondez aux invites pour configurer votre projet`,settingUp:`Configuration de votre projet...`,placeholder:`Saisissez une réponse...`,keyboardHint:`Entrée pour envoyer, Maj+Entrée pour une nouvelle ligne`},o={title:`Bienvenue dans <spec>spec</spec><rails>rails</rails>`,description:`Specrails gère plusieurs projets depuis une seule interface. Ajoutez votre premier projet pour commencer.`,addFirstProject:`Ajouter votre premier projet`,jiraHint:`Connectez chaque projet à son propre tableau Jira — les specs restent synchronisées dans les deux sens.`},s=JSON.parse(`{"productTour":"Visite guidée","stepCount":"Étape {{current}} sur {{total}}","goToStep":"Aller à l'étape {{step}} : {{label}}","stepLabel":"Étape {{step}}","dontShowAgain":"Ne plus afficher","skipTour":"Passer la visite","getStarted":"Commencer","flow":{"addSpec":"Ajouter une spec","dropInRail":"Déposer dans un rail","hitPlay":"Appuyer sur Play","ship":"Livrer","architect":"Architecte","developer":"Développeur","reviewer":"Relecteur"},"language":{"nav":"Langue","title":"Choisissez votre langue","subtitle":"Specrails parle votre langue","intro":"Choisissez la langue de l'interface. Elle s'applique instantanément — cette visite comprise.","note":"Vous pouvez en changer à tout moment dans Paramètres → Langue."},"theme":{"nav":"Thème","title":"Trouvez votre style","subtitle":"Des thèmes intégrés, appliqués instantanément","intro":"Choisissez l'apparence de Specrails — le thème s'applique dès que vous cliquez.","note":"Vous pouvez en changer à tout moment dans Paramètres → Apparence."},"welcome":{"nav":"Bienvenue","title":"Bienvenue dans Specrails","subtitle":"Votre cockpit local pour livrer du logiciel avec des agents IA","intro":"Specrails transforme une idée en code livré — et vous laisse <b>voir, piloter et vérifier</b> chaque étape. Rédigez une spec en discutant avec une IA, déposez-la sur un rail d'exécution et appuyez sur Play. Le pipeline gère l'architecture, l'implémentation, la revue et la pull request, en streamant son travail en direct du début à la fin.","coreLoopLabel":"La boucle de base","flowCaption":"Chaque spec passe automatiquement par <b>Architecte → Développeur → Relecteur → Livraison</b>.","localNote":"<b>100 % local · mono-utilisateur · sans compte.</b> Tout s'exécute sur votre machine. Votre code ne quitte jamais le laptop, sauf si <i>vous</i> lancez un agent dessus.","tourNote":"Cette visite rapide passe en revue tout ce que l'application sait faire — environ une minute."},"authorSpecs":{"nav":"Rédiger des specs","title":"Transformez vos idées en specs","subtitle":"Six façons de capturer exactement ce que vous voulez construire","intro":"Une <b>spec</b> est une description du travail à réaliser. Rédigez-la comme le moment s'y prête — de la simple phrase à la conversation complète avec l'IA.","exploreLabel":"Explore — conversez","exploreBody":"Décrivez ce que vous voulez dans un chat ; un brouillon vivant se reconstruit à chaque tour. Un curseur de presets règle la quantité de contexte projet que voit l'IA — de votre message seul jusqu'au codebase complet plus vos serveurs MCP.","quickLabel":"Quick — en un coup","quickBody":"Vous savez déjà ce que vous voulez ? Générez une spec complète en un seul tour. Enrichissez-la éventuellement d'un Contract Layer : noms exacts, formes de données, invariants et liste des fichiers touchés, pour que les agents ne réinventent rien.","websiteLabel":"Depuis un site web","websiteBody":"Ouvre un navigateur embarqué. Survolez un élément pour le sélectionner ou tracez un rectangle : la capture d'écran, le DOM et le CSS appliqué deviennent des pièces jointes. La version desktop embarque son propre Chromium, donc ça fonctionne hors ligne.","smashLabel":"SMASH pour les grosses epics","smashBody":"Éclatez une grande spec en une famille de sous-specs plus petites en un clic — chaque enfant porte un court résumé sur sa carte.","draftsLabel":"Brouillons & reprise d'édition","draftsBody":"Mettez une exploration en cours de côté comme ticket brouillon et reprenez-la plus tard ; rouvrez n'importe quelle spec dans Explore pour continuer à l'affiner.","compareLabel":"Comparer côte à côte","compareBody":"Glissez une spec vers le bord de l'écran et un sélecteur de vos autres specs apparaît — passez-en deux en revue ensemble, façon tablette."},"rails":{"nav":"Exécuter sur des rails","title":"Lancez le pipeline sur des rails","subtitle":"Organisez les specs en couloirs, puis lancez les agents","intro":"La partie droite du Dashboard, ce sont vos <b>Rails</b> — des couloirs d'exécution. Glissez une carte de spec sur un rail et appuyez sur <play>▶ Play</play> pour lancer un job d'implémentation.","jobLabel":"Ce que chaque job exécute","flowCaption":"Chaque phase streame ses logs en direct pendant qu'elle travaille.","modeLabel":"Choisissez comment un rail s'exécute","modeBody":"Chaque rail choisit un mode : <b>Implement</b> (le pipeline structuré complet), <b>Batch</b> (plusieurs specs à la suite) ou <b>Ultracode</b> (Claude travaille en autonomie, sans pipeline fixe).","profilesLabel":"Profils d'agents","profilesBody":"Un catalogue déclaratif par projet qui décide quels agents s'exécutent et quel modèle chacun utilise — choisi par rail et snapshotté par job pour que les travaux concurrents restent isolés.","jobDetailLabel":"Détail de job en direct","jobDetailBody":"Chaque job affiche un en-tête d'identité de ticket, un chrono de durée en direct et des compteurs de tours/tokens, avec le coût définitif résolu à la fin.","isolationLabel":"Plusieurs projets, isolés","isolationBody":"Chaque projet a sa propre base de données et sa propre file de jobs. Exécutez plusieurs projets en même temps et passez de l'un à l'autre depuis la barre latérale gauche — votre position est mémorisée par projet."},"providers":{"nav":"Votre agent","title":"Apportez votre propre agent","subtitle":"Claude Code et Codex, des moteurs de premier rang","intro":"L'application traite <b>Claude Code</b> et <b>Codex CLI</b> comme des moteurs interchangeables derrière un même contrat. Un projet peut en installer un ou les deux — le choix se fait à l'installation.","table":{"capability":"Capacité","streamingResume":"Streaming & reprise de session","native":"Natif","costReporting":"Suivi des coûts","providerBilled":"Facturé par le fournisseur","estimated":"Estimé (~)","telemetry":"Télémétrie (OTEL)","synthesized":"Synthétisée","agentProfiles":"Profils d'agents"},"calloutLabel":"Quand les deux sont installés","calloutBody":"Choisissez le moteur <b>par spec, par rail ou par lancement de terminal</b>. L'application mémorise votre dernier choix par projet. Le coût de Codex est estimé à partir d'une grille tarifaire locale et toujours signalé par un <mono>~</mono>."},"cost":{"nav":"Suivre les coûts","title":"Suivez chaque centime","subtitle":"Chaque invocation facturable, enregistrée et visualisée","intro":"Chaque invocation d'IA — rails, Quick, Explore, éditions IA, SMASH et résumés de fichiers — est enregistrée pour <b>Claude comme pour Codex</b>. Fini de deviner ce que coûtent les agents.","analyticsLabel":"Page Analytics","analyticsBody":"Un hero de burn-rate, une timeline quotidienne, le top des tickets, la répartition par modèle et un nuage coût vs tours. Filtrez par période (7 j / 30 j / 90 j / Tout) et par surface.","perTicketLabel":"Dépenses par ticket","perTicketBody":"Le détail de chaque spec montre ce qu'elle a coûté et combien de tours il a fallu, avec un lien direct vers Analytics filtré sur ce ticket.","honestLabel":"Des chiffres honnêtes","honestBody":"Le coût Claude est le montant facturé par le fournisseur ; celui de Codex est estimé et signalé par un <mono>~</mono>. Les totaux de tokens incluent les niveaux de cache, donc les chiffres se recoupent vraiment.","budgetsLabel":"Budgets & alertes","budgetsBody":"Définissez un budget quotidien et une alerte de coût par job ; l'application met automatiquement la file en pause quand vous franchissez la limite. Exportez tout en CSV ou JSON."},"workspace":{"nav":"Espace de travail","title":"Faites-en votre espace de travail","subtitle":"Tout ce qu'il vous faut sans quitter la fenêtre","terminalLabel":"Panneau de terminal","terminalBody":"Un vrai terminal façon VS Code en bas (<mod>{{mod}}</mod> <j>J</j>) — rendu WebGL, recherche, images inline, glisser-déposer de chemins et intégration shell. Jusqu'à 10 sessions par projet.","codeLabel":"Explorateur de code","codeBody":"Une arborescence de fichiers en lecture seule et un viewer Monaco avec des résumés IA en langage clair et des puces de provenance « touché par l'IA », pour que chacun puisse suivre ce qui a changé et pourquoi.","integrationsLabel":"Intégrations","integrationsBody":"Une marketplace d'intégrations MCP par projet — la navigation sémantique de code Serena est incluse. Les installations sont additives : en ajouter une ne perturbe jamais les autres.","themesLabel":"Thèmes","themesBody":"Cinq thèmes intégrés — specrails (par défaut), dracula, aurora-light, obsidian-dark et matrix — appliqués avant le rendu de l'UI, donc sans flash. Changez-les dans Paramètres → Apparence.","chatsLabel":"Chats minimisables","chatsBody":"Rangez une session Explore ou Édition IA dans une puce du dock et reprenez-la plus tard — jamais perdue, même après un rechargement ou un changement de projet.","desktopLabel":"Desktop ou navigateur","desktopBody":"Lancez Specrails dans votre navigateur, ou prenez l'application desktop signée (macOS & Windows) qui embarque son propre serveur et ses runtimes."},"companion":{"nav":"App mobile","title":"Emportez Specrails avec vous","subtitle":"SpecRails Companion — vos pipelines, dans votre poche","intro":"<b>SpecRails Companion</b> est l'application mobile gratuite pour iPhone et Android qui s'appaire avec cet ordinateur via votre réseau local. Parcourez le tableau des specs, lancez et arrêtez des rails, suivez les logs des jobs en direct et jetez un œil aux analytics — directement depuis votre téléphone.","localLabel":"100 % local, comme tout le reste","localBody":"L'application dialogue directement avec cet ordinateur via votre Wi-Fi — appairage par QR avec TLS épinglé. Pas de relais cloud, pas de compte, et votre code ne sort jamais de chez vous.","downloadLabel":"Téléchargez l'application","downloadHint":"Scannez un code avec l'appareil photo de votre téléphone, ou ouvrez le lien.","ios":"Télécharger pour iPhone","android":"Télécharger pour Android","pairLabel":"L'appairage prend dix secondes","pairBody":"Une fois installée, allez dans Paramètres → Compagnon mobile → Appairer un appareil et scannez le code QR qui s'y affiche."},"moveFast":{"nav":"Aller vite","title":"Avancez à la vitesse de la pensée","subtitle":"Le clavier d'abord, partout","paletteLabel":"Palette de commandes","paletteShortcut":"<f>Appuyez sur</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>n'importe où</m>","paletteBody":"Changez de projet, lancez des commandes de spec, sautez vers n'importe quelle page et retrouvez les jobs récents — le tout en recherche floue.","terminalLabel":"Panneau de terminal","terminalBody":"Basculez avec <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"Tous les raccourcis","shortcutsBody":"Appuyez sur <q>?</q> pour voir l'antisèche complète.","chatLabel":"Barre latérale de chat","chatBody":"Basculez la barre latérale droite avec <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Barre latérale des projets","projectsBody":"Basculez la barre latérale Arc de gauche avec <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>La visite est terminée.</b> Ajoutez un projet depuis la barre latérale gauche et livrez votre première spec. Vous pouvez rouvrir cette visite à tout moment depuis les Paramètres."},"jira":{"label":"Intégration Jira","body":"Adossez n'importe quel projet à un <b>tableau Jira</b> — chaque spec devient un ticket Jira, synchronisé dans les deux sens : le statut suit le rail et un commentaire est publié à la fin d'un job. Configurez-le par projet lors de l'ajout, ou à tout moment dans les Paramètres."}}`),c={wizard:e,addProject:t,prerequisites:n,instructions:r,checkpoints:i,setupChat:a,welcome:o,onboarding:s};export{t as addProject,i as checkpoints,c as default,r as instructions,s as onboarding,n as prerequisites,a as setupChat,o as welcome,e as wizard};
1
+ var e={configureAgents:`Configurer les agents {{provider}}`,configureSubtitle:`Choisissez quels agents installer et comment les exécuter.`,tabs:{agents:`Agents`,models:`Modèles`},skipForNow:`Ignorer pour l'instant`,install:`Installer`,nextProvider:`Suivant : {{provider}}`,installingProvider:`Installation de {{provider}}…`,installingSpecrails:`Installation de specrails...`,installingFromTemplates:`Installation des agents à partir des templates`,waitingForOutput:`En attente de sortie...`,checkpoints:{baseInstall:`Installation de base`,agentSelection:`Sélection des agents`,agentGeneration:`Génération des agents`},steps:{configure:`Configurer`},summary:{agents:`Agents`,agentSkills:`Skills d'agent`,skills:`Skills`,openspecSkills:`Skills OpenSpec`,legacyRemoved_one:`{{count}} commande legacy <code>/specrails:*</code> supprimée`,legacyRemoved_other:`{{count}} commandes legacy <code>/specrails:*</code> supprimées`},complete:{welcome:`Bienvenue dans <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> est maintenant configuré avec des workflows de développement pilotés par l'IA. Vos agents spécialisés et vos commandes sont prêts à l'emploi.`,installedForEngines_one:`Installé pour {{count}} moteur`,installedForEngines_other:`Installé pour {{count}} moteurs`,learnMore:`Apprenez à tirer le meilleur de specrails :`,continueToProject:`Continuer vers le projet`,jira:{title:`Connecter un tableau Jira`,subtitle:`Facultatif — adossez les specs de ce projet à un tableau Jira. Vous pourrez aussi le faire plus tard dans les Paramètres.`,configure:`Configurer Jira`,optional:`facultatif`}},error:{title:`Échec de la configuration`,skipSetup:`Ignorer la configuration`,prereqMissing:`La configuration de SpecRails a besoin de Node.js, npm, npx et Git disponibles sur le PATH pour pouvoir installer ce projet.`,prereqRetryHint:`Installez les outils manquants, redémarrez Specrails, puis relancez la configuration.`}},t={title:`Ajouter un projet`,description:`Enregistrez un répertoire de projet pour le gérer depuis Specrails.`,noProviderDetected:`Aucune CLI d'IA détectée. Installez d'abord Claude Code ou Codex CLI.`,pathLabel:`Chemin du projet`,pathPlaceholder:`/Users/moi/mon-projet`,pathHint:`Chemin absolu vers la racine du projet`,browseForFolder:`Parcourir les dossiers`,selectProjectFolder:`Sélectionner le dossier du projet`,nameLabel:`Nom d'affichage`,optional:`(facultatif)`,namePlaceholder:`Mon projet`,nameHint:`Par défaut, le nom du répertoire`,providersLabel:`Fournisseurs d'IA`,notFound:`introuvable`,multiProviderHint:`Les deux moteurs seront configurés. Le premier est le moteur par défaut du projet. Non modifiable après la création.`,singleProviderHint:`Non modifiable après la création du projet.`,adding:`Ajout...`,submit:`Ajouter le projet`,toolsRequired_one:`{{tools}} est requis pour ajouter un projet`,toolsRequired_other:`{{tools}} sont requis pour ajouter un projet`,errors:{pathRequired:`Le chemin du projet est requis`,selectProvider:`Sélectionnez au moins un fournisseur d'IA`,addFailed:`Échec de l'ajout du projet`},toasts:{registered:`Projet « {{name}} » enregistré`}},n={corruptedBundle:`bundle corrompu — réinstallez l'application`,notInstalled:`non installé`,failedToExecute:`trouvé mais impossible à exécuter`,failedToExecuteAt:`trouvé à {{path}} mais impossible à exécuter`,failedToExecuteWithError:`trouvé mais impossible à exécuter ({{error}})`,failedToExecuteAtWithError:`trouvé à {{path}} mais impossible à exécuter ({{error}})`,needsMinimum:`{{version}} trouvé — nécessite {{minVersion}}+`,unknownVersion:`inconnue`,installedLabel:`installé`,verifyError:`Impossible de vérifier les outils de développement en local — l'installation s'en chargera.`,allDetected:`Tous les outils requis sont détectés`,bundleCorruptedTitle:`Bundle de l'application corrompu`,toolsRequired_one:`{{count}} outil de développement requis`,toolsRequired_other:`{{count}} outils de développement requis`,reinstallHint:`Réinstallez l'application Specrails pour restaurer les outils embarqués.`,installMissingHint:`Installez les outils manquants pour continuer.`,moreInfo:`Plus d'infos`,bundledBadge:`embarqué`},r={title:`Installer les outils de développement`,description:`SpecRails a besoin de Node.js, npm, npx et Git sur le PATH. Choisissez le snippet pour votre OS, exécutez-le, puis cliquez sur « Je l'ai installé, revérifier ».`,darwin:{intro:`Homebrew installe les deux outils en une seule ligne. Si vous n'avez pas brew, utilisez les téléchargements officiels.`,installNodeGit:`Installer Node.js et Git via Homebrew`},win32:{intro:`Winget est fourni avec Windows 11 et les versions récentes de Windows 10. Ouvrez PowerShell ou le Terminal et exécutez :`,installNode:`Installer Node.js LTS`,installGit:`Installer Git`,note:`Après l'installation, redémarrez Specrails pour que Windows actualise le PATH.`},linux:{intro:`Utilisez le gestionnaire de paquets de votre distribution :`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (officiel)`,gitOfficial:`Git (officiel)`,gitWindows:`Git pour Windows (officiel)`},showOtherPlatforms:`Afficher les autres plateformes`,hideOtherPlatforms:`Masquer les autres plateformes`,recheck:`Je l'ai installé, revérifier`,diagnostics:{copy:`Copier les diagnostics`,copied:`Diagnostics copiés`,failed:`Échec de la copie`},corrupted:{title:`Bundle de l'application corrompu`,description:`Un ou plusieurs outils embarqués (Node.js, Git) n'ont pas pu être vérifiés.`,body:`Cet outil est embarqué avec l'application Specrails et ne peut pas être installé séparément. Si vous voyez ce message, le bundle de l'application est peut-être corrompu. Veuillez réinstaller Specrails.`}},i={title:`Progression de la configuration`,progress:`{{done}} sur {{total}} terminés`,rawLog_one:`Log brut ({{count}} ligne)`,rawLog_other:`Log brut ({{count}} lignes)`},a={title:`Assistant de configuration`,subtitle:`Répondez aux invites pour configurer votre projet`,settingUp:`Configuration de votre projet...`,placeholder:`Saisissez une réponse...`,keyboardHint:`Entrée pour envoyer, Maj+Entrée pour une nouvelle ligne`},o={title:`Bienvenue dans <spec>spec</spec><rails>rails</rails>`,description:`Specrails gère plusieurs projets depuis une seule interface. Ajoutez votre premier projet pour commencer.`,addFirstProject:`Ajouter votre premier projet`,jiraHint:`Connectez chaque projet à son propre tableau Jira — les specs restent synchronisées dans les deux sens.`},s=JSON.parse(`{"productTour":"Visite guidée","stepCount":"Étape {{current}} sur {{total}}","goToStep":"Aller à l'étape {{step}} : {{label}}","stepLabel":"Étape {{step}}","dontShowAgain":"Ne plus afficher","skipTour":"Passer la visite","getStarted":"Commencer","flow":{"addSpec":"Ajouter une spec","dropInRail":"Déposer dans un rail","hitPlay":"Appuyer sur Play","ship":"Livrer","architect":"Architecte","developer":"Développeur","reviewer":"Relecteur"},"language":{"nav":"Langue","title":"Choisissez votre langue","subtitle":"Specrails parle votre langue","intro":"Choisissez la langue de l'interface. Elle s'applique instantanément — cette visite comprise.","note":"Vous pouvez en changer à tout moment dans Paramètres → Langue."},"theme":{"nav":"Thème","title":"Trouvez votre style","subtitle":"Des thèmes intégrés, appliqués instantanément","intro":"Choisissez l'apparence de Specrails — le thème s'applique dès que vous cliquez.","note":"Vous pouvez en changer à tout moment dans Paramètres → Apparence."},"welcome":{"nav":"Bienvenue","title":"Bienvenue dans Specrails","subtitle":"Votre cockpit local pour livrer du logiciel avec des agents IA","intro":"Specrails transforme une idée en code livré — et vous laisse <b>voir, piloter et vérifier</b> chaque étape. Rédigez une spec en discutant avec une IA, déposez-la sur un rail d'exécution et appuyez sur Play. Le pipeline gère l'architecture, l'implémentation, la revue et la pull request, en streamant son travail en direct du début à la fin.","coreLoopLabel":"La boucle de base","flowCaption":"Chaque spec passe automatiquement par <b>Architecte → Développeur → Relecteur → Livraison</b>.","localNote":"<b>100 % local · mono-utilisateur · sans compte.</b> Tout s'exécute sur votre machine. Votre code ne quitte jamais le laptop, sauf si <i>vous</i> lancez un agent dessus.","tourNote":"Cette visite rapide passe en revue tout ce que l'application sait faire — environ une minute."},"authorSpecs":{"nav":"Rédiger des specs","title":"Transformez vos idées en specs","subtitle":"Six façons de capturer exactement ce que vous voulez construire","intro":"Une <b>spec</b> est une description du travail à réaliser. Rédigez-la comme le moment s'y prête — de la simple phrase à la conversation complète avec l'IA.","exploreLabel":"Explore — conversez","exploreBody":"Décrivez ce que vous voulez dans un chat ; un brouillon vivant se reconstruit à chaque tour. Un curseur de presets règle la quantité de contexte projet que voit l'IA — de votre message seul jusqu'au codebase complet plus vos serveurs MCP.","quickLabel":"Quick — en un coup","quickBody":"Vous savez déjà ce que vous voulez ? Générez une spec complète en un seul tour. Enrichissez-la éventuellement d'un Contract Layer : noms exacts, formes de données, invariants et liste des fichiers touchés, pour que les agents ne réinventent rien.","websiteLabel":"Depuis un site web","websiteBody":"Ouvre un navigateur embarqué. Survolez un élément pour le sélectionner ou tracez un rectangle : la capture d'écran, le DOM et le CSS appliqué deviennent des pièces jointes. La version desktop embarque son propre Chromium, donc ça fonctionne hors ligne.","smashLabel":"SMASH pour les grosses epics","smashBody":"Éclatez une grande spec en une famille de sous-specs plus petites en un clic — chaque enfant porte un court résumé sur sa carte.","draftsLabel":"Brouillons & reprise d'édition","draftsBody":"Mettez une exploration en cours de côté comme ticket brouillon et reprenez-la plus tard ; rouvrez n'importe quelle spec dans Explore pour continuer à l'affiner.","compareLabel":"Comparer côte à côte","compareBody":"Glissez une spec vers le bord de l'écran et un sélecteur de vos autres specs apparaît — passez-en deux en revue ensemble, façon tablette."},"rails":{"nav":"Exécuter sur des rails","title":"Lancez le pipeline sur des rails","subtitle":"Organisez les specs en couloirs, puis lancez les agents","intro":"La partie droite du Dashboard, ce sont vos <b>Rails</b> — des couloirs d'exécution. Glissez une carte de spec sur un rail et appuyez sur <play>▶ Play</play> pour lancer un job d'implémentation.","jobLabel":"Ce que chaque job exécute","flowCaption":"Chaque phase streame ses logs en direct pendant qu'elle travaille.","modeLabel":"Choisissez comment un rail s'exécute","modeBody":"Chaque rail choisit un mode : <b>Implement</b> (le pipeline structuré complet), <b>Batch</b> (plusieurs specs à la suite) ou <b>Ultracode</b> (Claude travaille en autonomie, sans pipeline fixe).","profilesLabel":"Profils d'agents","profilesBody":"Un catalogue déclaratif par projet qui décide quels agents s'exécutent et quel modèle chacun utilise — choisi par rail et snapshotté par job pour que les travaux concurrents restent isolés.","jobDetailLabel":"Détail de job en direct","jobDetailBody":"Chaque job affiche un en-tête d'identité de ticket, un chrono de durée en direct et des compteurs de tours/tokens, avec le coût définitif résolu à la fin.","isolationLabel":"Plusieurs projets, isolés","isolationBody":"Chaque projet a sa propre base de données et sa propre file de jobs. Exécutez plusieurs projets en même temps et passez de l'un à l'autre depuis la barre latérale gauche — votre position est mémorisée par projet."},"providers":{"nav":"Votre agent","title":"Apportez votre propre agent","subtitle":"Claude Code et Codex, des moteurs de premier rang","intro":"L'application traite <b>Claude Code</b> et <b>Codex CLI</b> comme des moteurs interchangeables derrière un même contrat. Un projet peut en installer un ou les deux — le choix se fait à l'installation.","table":{"capability":"Capacité","streamingResume":"Streaming & reprise de session","native":"Natif","costReporting":"Suivi des coûts","providerBilled":"Facturé par le fournisseur","estimated":"Estimé (~)","telemetry":"Télémétrie (OTEL)","synthesized":"Synthétisée","agentProfiles":"Profils d'agents"},"calloutLabel":"Quand les deux sont installés","calloutBody":"Choisissez le moteur <b>par spec, par rail ou par lancement de terminal</b>. L'application mémorise votre dernier choix par projet. Le coût de Codex est estimé à partir d'une grille tarifaire locale et toujours signalé par un <mono>~</mono>."},"cost":{"nav":"Suivre les coûts","title":"Suivez chaque centime","subtitle":"Chaque invocation facturable, enregistrée et visualisée","intro":"Chaque invocation d'IA — rails, Quick, Explore, éditions IA, SMASH et résumés de fichiers — est enregistrée pour <b>Claude comme pour Codex</b>. Fini de deviner ce que coûtent les agents.","analyticsLabel":"Page Analytics","analyticsBody":"Un hero de burn-rate, une timeline quotidienne, le top des tickets, la répartition par modèle et un nuage coût vs tours. Filtrez par période (7 j / 30 j / 90 j / Tout) et par surface.","perTicketLabel":"Dépenses par ticket","perTicketBody":"Le détail de chaque spec montre ce qu'elle a coûté et combien de tours il a fallu, avec un lien direct vers Analytics filtré sur ce ticket.","honestLabel":"Des chiffres honnêtes","honestBody":"Le coût Claude est le montant facturé par le fournisseur ; celui de Codex est estimé et signalé par un <mono>~</mono>. Les totaux de tokens incluent les niveaux de cache, donc les chiffres se recoupent vraiment.","budgetsLabel":"Budgets & alertes","budgetsBody":"Définissez un budget quotidien et une alerte de coût par job ; l'application met automatiquement la file en pause quand vous franchissez la limite. Exportez tout en CSV ou JSON."},"workspace":{"nav":"Espace de travail","title":"Faites-en votre espace de travail","subtitle":"Tout ce qu'il vous faut sans quitter la fenêtre","terminalLabel":"Panneau de terminal","terminalBody":"Un vrai terminal façon VS Code en bas (<mod>{{mod}}</mod> <j>J</j>) — rendu WebGL, recherche, images inline, glisser-déposer de chemins et intégration shell. Jusqu'à 10 sessions par projet.","codeLabel":"Explorateur de code","codeBody":"Une arborescence de fichiers en lecture seule et un viewer Monaco avec des résumés IA en langage clair et des puces de provenance « touché par l'IA », pour que chacun puisse suivre ce qui a changé et pourquoi.","integrationsLabel":"Intégrations","integrationsBody":"Une marketplace d'intégrations MCP par projet — la navigation sémantique de code Serena est incluse. Les installations sont additives : en ajouter une ne perturbe jamais les autres.","themesLabel":"Thèmes","themesBody":"Cinq thèmes intégrés — specrails (par défaut), dracula, aurora-light, obsidian-dark et matrix — appliqués avant le rendu de l'UI, donc sans flash. Changez-les dans Paramètres → Apparence.","chatsLabel":"Chats minimisables","chatsBody":"Rangez une session Explore ou Édition IA dans une puce du dock et reprenez-la plus tard — jamais perdue, même après un rechargement ou un changement de projet.","desktopLabel":"Desktop ou navigateur","desktopBody":"Lancez Specrails dans votre navigateur, ou prenez l'application desktop signée (macOS & Windows) qui embarque son propre serveur et ses runtimes."},"companion":{"nav":"Compagnon mobile","title":"Emportez Specrails avec vous","subtitle":"Specrails Companion — vos pipelines, dans votre poche","intro":"<b>Specrails Companion</b> est une application web disponible sur specrails.dev/companion-app — ouvrez-la sur votre téléphone (ou ajoutez-la à votre écran d'accueil) pour parcourir le tableau des specs, lancer et arrêter des rails, suivre les logs des jobs en direct et jeter un œil aux analytics. Aucune installation, aucun app store.","localLabel":"100 % local, comme tout le reste","localBody":"Votre téléphone se connecte directement à cet ordinateur — en pair-à-pair et chiffré (WebRTC). Pas de relais cloud, pas de compte, et votre code ne quitte jamais vos appareils.","downloadLabel":"Ouvrez-la sur votre téléphone","downloadHint":"Scannez le code avec l'appareil photo de votre téléphone, ou ouvrez specrails.dev/companion-app dans son navigateur.","open":"Ouvrir Specrails Companion","pairLabel":"L'appairage prend dix secondes","pairBody":"Sur votre téléphone, ouvrez specrails.dev/companion-app, puis ici allez dans Paramètres → Compagnon mobile → Appairer le compagnon web et suivez les étapes à l'écran."},"moveFast":{"nav":"Aller vite","title":"Avancez à la vitesse de la pensée","subtitle":"Le clavier d'abord, partout","paletteLabel":"Palette de commandes","paletteShortcut":"<f>Appuyez sur</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>n'importe où</m>","paletteBody":"Changez de projet, lancez des commandes de spec, sautez vers n'importe quelle page et retrouvez les jobs récents — le tout en recherche floue.","terminalLabel":"Panneau de terminal","terminalBody":"Basculez avec <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"Tous les raccourcis","shortcutsBody":"Appuyez sur <q>?</q> pour voir l'antisèche complète.","chatLabel":"Barre latérale de chat","chatBody":"Basculez la barre latérale droite avec <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Barre latérale des projets","projectsBody":"Basculez la barre latérale Arc de gauche avec <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>La visite est terminée.</b> Ajoutez un projet depuis la barre latérale gauche et livrez votre première spec. Vous pouvez rouvrir cette visite à tout moment depuis les Paramètres."},"jira":{"label":"Intégration Jira","body":"Adossez n'importe quel projet à un <b>tableau Jira</b> — chaque spec devient un ticket Jira, synchronisé dans les deux sens : le statut suit le rail et un commentaire est publié à la fin d'un job. Configurez-le par projet lors de l'ajout, ou à tout moment dans les Paramètres."}}`),c={wizard:e,addProject:t,prerequisites:n,instructions:r,checkpoints:i,setupChat:a,welcome:o,onboarding:s};export{t as addProject,i as checkpoints,c as default,r as instructions,s as onboarding,n as prerequisites,a as setupChat,o as welcome,e as wizard};
@@ -1 +1 @@
1
- var e={configureAgents:`{{provider}} エージェントを設定`,configureSubtitle:`インストールするエージェントと実行方法を選択してください。`,tabs:{agents:`エージェント`,models:`モデル`},skipForNow:`今はスキップ`,install:`インストール`,nextProvider:`次へ: {{provider}}`,installingProvider:`{{provider}} をインストール中…`,installingSpecrails:`specrails をインストール中…`,installingFromTemplates:`テンプレートからエージェントをインストール中`,waitingForOutput:`出力を待機中…`,checkpoints:{baseInstall:`ベースインストール`,agentSelection:`エージェント選択`,agentGeneration:`エージェント生成`},steps:{configure:`設定`},summary:{agents:`エージェント`,agentSkills:`エージェントスキル`,skills:`スキル`,openspecSkills:`OpenSpec スキル`,legacyRemoved_one:`レガシーの <code>/specrails:*</code> コマンドを {{count}} 件削除しました`,legacyRemoved_other:`レガシーの <code>/specrails:*</code> コマンドを {{count}} 件削除しました`},complete:{welcome:`<spec>spec</spec><rails>rails</rails> へようこそ`,configured:`<strong>{{projectName}}</strong> に AI 駆動の開発ワークフローが設定されました。専用のエージェントとコマンドが利用できます。`,installedForEngines_one:`{{count}} 個のエンジンにインストールしました`,installedForEngines_other:`{{count}} 個のエンジンにインストールしました`,learnMore:`specrails を最大限に活用する方法:`,continueToProject:`プロジェクトへ進む`,jira:{title:`Jira ボードを接続`,subtitle:`任意 — このプロジェクトのスペックを Jira ボードで裏付けます。後で設定からも行えます。`,configure:`Jira を設定`,optional:`任意`}},error:{title:`セットアップに失敗しました`,skipSetup:`セットアップをスキップ`,prereqMissing:`SpecRails のセットアップには、PATH 上で利用可能な Node.js、npm、npx、Git が必要です。`,prereqRetryHint:`不足しているツールをインストールし、Specrails を再起動してからセットアップを再試行してください。`}},t={title:`プロジェクトを追加`,description:`プロジェクトディレクトリを登録して Specrails から管理します。`,noProviderDetected:`AI CLI が見つかりません。まず Claude Code または Codex CLI をインストールしてください。`,pathLabel:`プロジェクトパス`,pathPlaceholder:`/Users/me/my-project`,pathHint:`プロジェクトルートへの絶対パス`,browseForFolder:`フォルダを参照`,selectProjectFolder:`プロジェクトフォルダを選択`,nameLabel:`表示名`,optional:`(任意)`,namePlaceholder:`マイプロジェクト`,nameHint:`デフォルトはディレクトリ名`,providersLabel:`AI プロバイダー`,notFound:`見つかりません`,multiProviderHint:`両方のエンジンがセットアップされます。最初のものがプロジェクトのデフォルトです。作成後は変更できません。`,singleProviderHint:`プロジェクト作成後は変更できません。`,adding:`追加中…`,submit:`プロジェクトを追加`,toolsRequired_one:`プロジェクトの追加には {{tools}} が必要です`,toolsRequired_other:`プロジェクトの追加には {{tools}} が必要です`,errors:{pathRequired:`プロジェクトパスは必須です`,selectProvider:`AI プロバイダーを1つ以上選択してください`,addFailed:`プロジェクトの追加に失敗しました`},toasts:{registered:`プロジェクト「{{name}}」を登録しました`}},n={corruptedBundle:`バンドル破損 — アプリを再インストールしてください`,notInstalled:`未インストール`,failedToExecute:`見つかりましたが実行できませんでした`,failedToExecuteAt:`{{path}} に見つかりましたが実行できませんでした`,failedToExecuteWithError:`見つかりましたが実行できませんでした({{error}})`,failedToExecuteAtWithError:`{{path}} に見つかりましたが実行できませんでした({{error}})`,needsMinimum:`{{version}} が見つかりました — {{minVersion}} 以上が必要です`,unknownVersion:`不明`,installedLabel:`インストール済み`,verifyError:`開発者ツールをローカルで検証できませんでした — インストール時に検証されます。`,allDetected:`必要なツールはすべて検出されました`,bundleCorruptedTitle:`アプリバンドルが破損しています`,toolsRequired_one:`{{count}} 個の開発者ツールが必要です`,toolsRequired_other:`{{count}} 個の開発者ツールが必要です`,reinstallHint:`Specrails アプリを再インストールしてバンドルツールを復元してください。`,installMissingHint:`続行するには不足しているツールをインストールしてください。`,moreInfo:`詳細`,bundledBadge:`バンドル`},r={title:`開発者ツールをインストール`,description:`SpecRails には PATH 上の Node.js、npm、npx、Git が必要です。お使いの OS のスニペットを選んで実行し、「インストールしました。再チェック」をクリックしてください。`,darwin:{intro:`Homebrew なら1行で両方のツールをインストールできます。brew がない場合は公式ダウンロードを利用してください。`,installNodeGit:`Homebrew で Node.js と Git をインストール`},win32:{intro:`Winget は Windows 11 および最近の Windows 10 に同梱されています。PowerShell またはターミナルを開いて実行してください:`,installNode:`Node.js LTS をインストール`,installGit:`Git をインストール`,note:`インストール後、Windows が PATH を更新するように Specrails を再起動してください。`},linux:{intro:`ディストリビューションのパッケージマネージャーを使用してください:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js(公式)`,gitOfficial:`Git(公式)`,gitWindows:`Git for Windows(公式)`},showOtherPlatforms:`他のプラットフォームを表示`,hideOtherPlatforms:`他のプラットフォームを非表示`,recheck:`インストールしました。再チェック`,diagnostics:{copy:`診断情報をコピー`,copied:`診断情報をコピーしました`,failed:`コピーに失敗しました`},corrupted:{title:`アプリバンドルが破損しています`,description:`バンドルされたツール(Node.js、Git)の一部を検証できませんでした。`,body:`このツールは Specrails アプリにバンドルされており、個別にインストールできません。このメッセージが表示される場合、アプリバンドルが破損している可能性があります。Specrails を再インストールしてください。`}},i={title:`セットアップの進行状況`,progress:`{{done}} / {{total}} 完了`,rawLog_one:`生ログ({{count}} 行)`,rawLog_other:`生ログ({{count}} 行)`},a={title:`セットアップアシスタント`,subtitle:`プロンプトに応答してプロジェクトを設定します`,settingUp:`プロジェクトをセットアップ中…`,placeholder:`返信を入力…`,keyboardHint:`Enter で送信、Shift+Enter で改行`},o={title:`<spec>spec</spec><rails>rails</rails> へようこそ`,description:`Specrails は複数のプロジェクトを単一のインターフェースで管理します。最初のプロジェクトを追加して始めましょう。`,addFirstProject:`最初のプロジェクトを追加`,jiraHint:`各プロジェクトを専用の Jira ボードに接続 — スペックは双方向で同期され続けます。`},s=JSON.parse(`{"productTour":"プロダクトツアー","stepCount":"ステップ {{current}} / {{total}}","goToStep":"ステップ {{step}} へ移動: {{label}}","stepLabel":"ステップ {{step}}","dontShowAgain":"今後表示しない","skipTour":"ツアーをスキップ","getStarted":"始める","flow":{"addSpec":"スペックを追加","dropInRail":"レールにドロップ","hitPlay":"再生を押す","ship":"Ship","architect":"アーキテクト","developer":"デベロッパー","reviewer":"レビュアー"},"language":{"nav":"言語","title":"言語を選ぶ","subtitle":"Specrailsはあなたの言語に対応","intro":"インターフェースで使いたい言語を選んでください。即座に適用されます — このツアーも含めて。","note":"設定 → 言語でいつでも変更できます。"},"theme":{"nav":"テーマ","title":"好みの見た目を選ぶ","subtitle":"内蔵テーマを即座に適用","intro":"Specrailsの見た目を選びましょう — テーマはクリックした瞬間に適用されます。","note":"設定 → 外観でいつでも変更できます。"},"welcome":{"nav":"ようこそ","title":"Specrails へようこそ","subtitle":"AI エージェントでソフトウェアを出荷するためのローカルコックピット","intro":"Specrails はアイデアを出荷済みのコードに変えます — そのすべてのステップを<b>見て、操り、信頼</b>できます。AI と対話してスペックを下書きし、実行レールにドロップして再生を押すだけ。パイプラインがアーキテクチャ、実装、レビュー、プルリクエストまで処理し、その作業をライブでストリーミングします。","coreLoopLabel":"コアループ","flowCaption":"各スペックは <b>アーキテクト → デベロッパー → レビュアー → Ship</b> を自動で流れます。","localNote":"<b>100% ローカル · シングルユーザー · アカウント不要。</b>すべてあなたのマシン上で動作します。<i>あなた</i>がエージェントを起動しない限り、コードがラップトップの外に出ることはありません。","tourNote":"このクイックツアーではアプリの全機能を紹介します — 所要時間は約1分です。"},"authorSpecs":{"nav":"スペック作成","title":"アイデアをスペックに変える","subtitle":"作りたいものを正確に捉える6つの方法","intro":"<b>スペック</b>とは、実行してほしい作業の記述です。短い一文から AI との本格的な対話まで、その時々に合った方法で作成できます。","exploreLabel":"Explore — 対話する","exploreBody":"作りたいものをチャットで説明すると、ライブドラフトがターンごとに再構築されます。プリセットスライダーで AI に見せるプロジェクトコンテキストの量を調整できます — メッセージのみから、コードベース全体 + MCP サーバーまで。","quickLabel":"Quick — 一発生成","quickBody":"作りたいものが明確なら、1ターンで完全なスペックを生成できます。オプションで Contract Layer によるエンリッチも可能: 正確な名前、データ形状、不変条件、変更ファイルリストにより、エージェントが車輪の再発明をしません。","websiteLabel":"ウェブサイトから","websiteBody":"埋め込みブラウザが開きます。要素をホバー選択するか矩形をドラッグすると、スクリーンショット、DOM、適用された CSS が添付ファイルになります。デスクトップ版は独自の Chromium を同梱しているのでオフラインでも動作します。","smashLabel":"大きなエピックを SMASH","smashBody":"大きなスペックをワンクリックで小さなサブスペック群に分解します — 各子スペックのカードには短い要約が付きます。","draftsLabel":"下書きと編集の再開","draftsBody":"進行中の探索を下書きチケットとして保存し、後で再開できます。どのスペックも Explore で開き直して改良を続けられます。","compareLabel":"並べて比較","compareBody":"スペックを画面の端にドラッグすると、他のスペックのピッカーがスライドインします — タブレット風に2つを並べてレビューできます。"},"rails":{"nav":"レールで実行","title":"パイプラインをレールで実行","subtitle":"スペックをレーンに整理してエージェントを起動","intro":"ダッシュボードの右側が<b>レール</b> — 実行レーンです。スペックカードをレールにドラッグして <play>▶ 再生</play> を押すと、実装ジョブが起動します。","jobLabel":"各ジョブの実行内容","flowCaption":"各フェーズは作業中のログをライブでストリーミングします。","modeLabel":"レールの実行方法を選択","modeBody":"各レールはモードを選べます: <b>Implement</b>(完全な構造化パイプライン)、<b>Batch</b>(複数スペックを順次実行)、<b>Ultracode</b>(Claude が固定パイプラインなしで自律的に作業)。","profilesLabel":"エージェントプロファイル","profilesBody":"どのエージェントを実行し、それぞれどのモデルを使うかを決めるプロジェクトごとの宣言的カタログ — レールごとに選択され、ジョブごとにスナップショットされるため並行作業が分離されます。","jobDetailLabel":"ライブジョブ詳細","jobDetailBody":"各ジョブにはチケット識別ヘッダー、ライブの経過時間ティッカー、進行中のターン/トークン数が表示され、確定コストは終了時に解決されます。","isolationLabel":"複数プロジェクト、完全分離","isolationBody":"各プロジェクトは独自のデータベースとジョブキューを持ちます。複数のプロジェクトを同時に実行し、左サイドバーから切り替えられます — 位置はプロジェクトごとに記憶されます。"},"providers":{"nav":"あなたのエージェント","title":"自分のエージェントを持ち込む","subtitle":"Claude Code と Codex をファーストクラスのエンジンとして","intro":"アプリは <b>Claude Code</b> と <b>Codex CLI</b> を、単一のコントラクトの背後で交換可能なエンジンとして扱います。プロジェクトには片方または両方をインストールでき、選択はインストール時に行います。","table":{"capability":"機能","streamingResume":"ストリーミングとセッション再開","native":"ネイティブ","costReporting":"コストレポート","providerBilled":"プロバイダー請求額","estimated":"推定(~)","telemetry":"テレメトリ(OTEL)","synthesized":"合成","agentProfiles":"エージェントプロファイル"},"calloutLabel":"両方インストールされている場合","calloutBody":"<b>スペックごと、レールごと、ターミナル起動ごと</b>にエンジンを選べます。アプリはプロジェクトごとに最後の選択を記憶します。Codex のコストはローカルのレートカードからの推定で、常に <mono>~</mono> が付きます。"},"cost":{"nav":"コスト追跡","title":"1セント単位で追跡","subtitle":"課金対象のすべての呼び出しを記録・可視化","intro":"レール、Quick、Explore、AI 編集、SMASH、ファイル要約にわたるすべての AI 呼び出しが <b>Claude と Codex の両方</b>で記録されます。エージェントのコストを推測する必要はもうありません。","analyticsLabel":"分析ページ","analyticsBody":"バーンレートのヒーロー表示、日次タイムライン、トップチケット、モデル別内訳、コスト対ターン数の散布図。期間(7日 / 30日 / 90日 / 全期間)とサーフェスでフィルタできます。","perTicketLabel":"チケット別の支出","perTicketBody":"各スペックの詳細にはコストと所要ターン数が表示され、そのチケットでフィルタした分析ページへディープリンクします。","honestLabel":"正直な数字","honestBody":"Claude のコストはプロバイダー請求額そのもの。Codex は推定で <mono>~</mono> が付きます。トークン合計にはキャッシュ階層が含まれるため、数字がきちんと一致します。","budgetsLabel":"予算とアラート","budgetsBody":"日次予算とジョブ単位のコストアラートを設定でき、上限を超えるとアプリが自動でキューを一時停止します。すべて CSV または JSON にエクスポートできます。"},"workspace":{"nav":"ワークスペース","title":"あなたのワークスペースに","subtitle":"ウィンドウを離れずに必要なすべてを","terminalLabel":"ターミナルパネル","terminalBody":"画面下部の本格的な VS Code スタイルのターミナル(<mod>{{mod}}</mod> <j>J</j>)— WebGL レンダリング、検索、インライン画像、パスのドラッグ&ドロップ、シェル統合。プロジェクトごとに最大10セッション。","codeLabel":"コードエクスプローラー","codeBody":"読み取り専用のファイルツリーと Monaco ビューアに、平易な AI 要約と「AI が変更」の来歴チップが付き、誰でも何がなぜ変わったかを追えます。","integrationsLabel":"インテグレーション","integrationsBody":"プロジェクトごとの MCP インテグレーションのマーケットプレイス — Serena のセマンティックコードナビゲーションを同梱。インストールは加算式で、追加しても他に影響しません。","themesLabel":"テーマ","themesBody":"5つの組み込みテーマ — specrails(デフォルト)、dracula、aurora-light、obsidian-dark、matrix — を UI の描画前に適用するため、フラッシュがありません。設定 → 外観で変更できます。","chatsLabel":"最小化できるチャット","chatsBody":"Explore や AI 編集のセッションをドックのチップに格納して後で再開 — リフレッシュやプロジェクト切り替えで失われることはありません。","desktopLabel":"デスクトップまたはブラウザ","desktopBody":"ブラウザで Specrails を実行するか、サーバーとランタイムを同梱した署名済みデスクトップアプリ(macOS と Windows)を入手できます。"},"companion":{"nav":"モバイルアプリ","title":"Specrails を持ち歩く","subtitle":"SpecRails Companion — あなたのパイプラインを、スマートフォンで","intro":"<b>SpecRails Companion</b> は、ローカルネットワーク経由でこのデスクトップとペアリングする iPhone / Android 向けの無料モバイルアプリです。スペックボードの閲覧、レールの起動と停止、ジョブログのライブ追跡、分析のチェックまで — すべてスマートフォンから。","localLabel":"ほかのすべてと同じく 100% ローカル","localBody":"アプリは Wi-Fi 経由でこのコンピュータと直接通信します — QR ペアリングと TLS ピンニングで保護。クラウド中継なし、アカウント不要、コードが家の外に出ることはありません。","downloadLabel":"アプリを入手","downloadHint":"スマートフォンのカメラでコードをスキャンするか、リンクを開いてください。","ios":"iPhone 版をダウンロード","android":"Android 版をダウンロード","pairLabel":"ペアリングは10秒で完了","pairBody":"インストールしたら、設定 → モバイルコンパニオン → デバイスをペアリング と進み、表示される QR コードをスキャンしてください。"},"moveFast":{"nav":"高速操作","title":"思考のスピードで動く","subtitle":"どこでもキーボードファースト","paletteLabel":"コマンドパレット","paletteShortcut":"<f>どこでも</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>を押す</m>","paletteBody":"プロジェクトの切り替え、スペックコマンドの実行、任意のページへのジャンプ、最近のジョブの検索 — すべてあいまい検索で。","terminalLabel":"ターミナルパネル","terminalBody":"<mod>{{mod}}</mod> <j>J</j> で切り替え。","shortcutsLabel":"全ショートカット","shortcutsBody":"<q>?</q> を押すと完全なチートシートが表示されます。","chatLabel":"チャットサイドバー","chatBody":"<mod>{{mod}}</mod> <bkey>B</bkey> で右サイドバーを切り替え。","projectsLabel":"プロジェクトサイドバー","projectsBody":"<alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey> で左の Arc サイドバーを切り替え。","outro":"<b>ツアーは以上です。</b>左サイドバーからプロジェクトを追加して、最初のスペックを出荷しましょう。このウォークスルーは設定からいつでも再表示できます。"},"jira":{"label":"Jira 連携","body":"任意のプロジェクトを <b>Jira ボード</b> で裏付けます — 各スペックは Jira の課題になり、双方向で同期されます。ステータスは rail に追従し、job 完了時にコメントが投稿されます。追加時にプロジェクトごとに設定するか、いつでも設定から構成できます。"}}`),c={wizard:e,addProject:t,prerequisites:n,instructions:r,checkpoints:i,setupChat:a,welcome:o,onboarding:s};export{t as addProject,i as checkpoints,c as default,r as instructions,s as onboarding,n as prerequisites,a as setupChat,o as welcome,e as wizard};
1
+ var e={configureAgents:`{{provider}} エージェントを設定`,configureSubtitle:`インストールするエージェントと実行方法を選択してください。`,tabs:{agents:`エージェント`,models:`モデル`},skipForNow:`今はスキップ`,install:`インストール`,nextProvider:`次へ: {{provider}}`,installingProvider:`{{provider}} をインストール中…`,installingSpecrails:`specrails をインストール中…`,installingFromTemplates:`テンプレートからエージェントをインストール中`,waitingForOutput:`出力を待機中…`,checkpoints:{baseInstall:`ベースインストール`,agentSelection:`エージェント選択`,agentGeneration:`エージェント生成`},steps:{configure:`設定`},summary:{agents:`エージェント`,agentSkills:`エージェントスキル`,skills:`スキル`,openspecSkills:`OpenSpec スキル`,legacyRemoved_one:`レガシーの <code>/specrails:*</code> コマンドを {{count}} 件削除しました`,legacyRemoved_other:`レガシーの <code>/specrails:*</code> コマンドを {{count}} 件削除しました`},complete:{welcome:`<spec>spec</spec><rails>rails</rails> へようこそ`,configured:`<strong>{{projectName}}</strong> に AI 駆動の開発ワークフローが設定されました。専用のエージェントとコマンドが利用できます。`,installedForEngines_one:`{{count}} 個のエンジンにインストールしました`,installedForEngines_other:`{{count}} 個のエンジンにインストールしました`,learnMore:`specrails を最大限に活用する方法:`,continueToProject:`プロジェクトへ進む`,jira:{title:`Jira ボードを接続`,subtitle:`任意 — このプロジェクトのスペックを Jira ボードで裏付けます。後で設定からも行えます。`,configure:`Jira を設定`,optional:`任意`}},error:{title:`セットアップに失敗しました`,skipSetup:`セットアップをスキップ`,prereqMissing:`SpecRails のセットアップには、PATH 上で利用可能な Node.js、npm、npx、Git が必要です。`,prereqRetryHint:`不足しているツールをインストールし、Specrails を再起動してからセットアップを再試行してください。`}},t={title:`プロジェクトを追加`,description:`プロジェクトディレクトリを登録して Specrails から管理します。`,noProviderDetected:`AI CLI が見つかりません。まず Claude Code または Codex CLI をインストールしてください。`,pathLabel:`プロジェクトパス`,pathPlaceholder:`/Users/me/my-project`,pathHint:`プロジェクトルートへの絶対パス`,browseForFolder:`フォルダを参照`,selectProjectFolder:`プロジェクトフォルダを選択`,nameLabel:`表示名`,optional:`(任意)`,namePlaceholder:`マイプロジェクト`,nameHint:`デフォルトはディレクトリ名`,providersLabel:`AI プロバイダー`,notFound:`見つかりません`,multiProviderHint:`両方のエンジンがセットアップされます。最初のものがプロジェクトのデフォルトです。作成後は変更できません。`,singleProviderHint:`プロジェクト作成後は変更できません。`,adding:`追加中…`,submit:`プロジェクトを追加`,toolsRequired_one:`プロジェクトの追加には {{tools}} が必要です`,toolsRequired_other:`プロジェクトの追加には {{tools}} が必要です`,errors:{pathRequired:`プロジェクトパスは必須です`,selectProvider:`AI プロバイダーを1つ以上選択してください`,addFailed:`プロジェクトの追加に失敗しました`},toasts:{registered:`プロジェクト「{{name}}」を登録しました`}},n={corruptedBundle:`バンドル破損 — アプリを再インストールしてください`,notInstalled:`未インストール`,failedToExecute:`見つかりましたが実行できませんでした`,failedToExecuteAt:`{{path}} に見つかりましたが実行できませんでした`,failedToExecuteWithError:`見つかりましたが実行できませんでした({{error}})`,failedToExecuteAtWithError:`{{path}} に見つかりましたが実行できませんでした({{error}})`,needsMinimum:`{{version}} が見つかりました — {{minVersion}} 以上が必要です`,unknownVersion:`不明`,installedLabel:`インストール済み`,verifyError:`開発者ツールをローカルで検証できませんでした — インストール時に検証されます。`,allDetected:`必要なツールはすべて検出されました`,bundleCorruptedTitle:`アプリバンドルが破損しています`,toolsRequired_one:`{{count}} 個の開発者ツールが必要です`,toolsRequired_other:`{{count}} 個の開発者ツールが必要です`,reinstallHint:`Specrails アプリを再インストールしてバンドルツールを復元してください。`,installMissingHint:`続行するには不足しているツールをインストールしてください。`,moreInfo:`詳細`,bundledBadge:`バンドル`},r={title:`開発者ツールをインストール`,description:`SpecRails には PATH 上の Node.js、npm、npx、Git が必要です。お使いの OS のスニペットを選んで実行し、「インストールしました。再チェック」をクリックしてください。`,darwin:{intro:`Homebrew なら1行で両方のツールをインストールできます。brew がない場合は公式ダウンロードを利用してください。`,installNodeGit:`Homebrew で Node.js と Git をインストール`},win32:{intro:`Winget は Windows 11 および最近の Windows 10 に同梱されています。PowerShell またはターミナルを開いて実行してください:`,installNode:`Node.js LTS をインストール`,installGit:`Git をインストール`,note:`インストール後、Windows が PATH を更新するように Specrails を再起動してください。`},linux:{intro:`ディストリビューションのパッケージマネージャーを使用してください:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js(公式)`,gitOfficial:`Git(公式)`,gitWindows:`Git for Windows(公式)`},showOtherPlatforms:`他のプラットフォームを表示`,hideOtherPlatforms:`他のプラットフォームを非表示`,recheck:`インストールしました。再チェック`,diagnostics:{copy:`診断情報をコピー`,copied:`診断情報をコピーしました`,failed:`コピーに失敗しました`},corrupted:{title:`アプリバンドルが破損しています`,description:`バンドルされたツール(Node.js、Git)の一部を検証できませんでした。`,body:`このツールは Specrails アプリにバンドルされており、個別にインストールできません。このメッセージが表示される場合、アプリバンドルが破損している可能性があります。Specrails を再インストールしてください。`}},i={title:`セットアップの進行状況`,progress:`{{done}} / {{total}} 完了`,rawLog_one:`生ログ({{count}} 行)`,rawLog_other:`生ログ({{count}} 行)`},a={title:`セットアップアシスタント`,subtitle:`プロンプトに応答してプロジェクトを設定します`,settingUp:`プロジェクトをセットアップ中…`,placeholder:`返信を入力…`,keyboardHint:`Enter で送信、Shift+Enter で改行`},o={title:`<spec>spec</spec><rails>rails</rails> へようこそ`,description:`Specrails は複数のプロジェクトを単一のインターフェースで管理します。最初のプロジェクトを追加して始めましょう。`,addFirstProject:`最初のプロジェクトを追加`,jiraHint:`各プロジェクトを専用の Jira ボードに接続 — スペックは双方向で同期され続けます。`},s=JSON.parse(`{"productTour":"プロダクトツアー","stepCount":"ステップ {{current}} / {{total}}","goToStep":"ステップ {{step}} へ移動: {{label}}","stepLabel":"ステップ {{step}}","dontShowAgain":"今後表示しない","skipTour":"ツアーをスキップ","getStarted":"始める","flow":{"addSpec":"スペックを追加","dropInRail":"レールにドロップ","hitPlay":"再生を押す","ship":"Ship","architect":"アーキテクト","developer":"デベロッパー","reviewer":"レビュアー"},"language":{"nav":"言語","title":"言語を選ぶ","subtitle":"Specrailsはあなたの言語に対応","intro":"インターフェースで使いたい言語を選んでください。即座に適用されます — このツアーも含めて。","note":"設定 → 言語でいつでも変更できます。"},"theme":{"nav":"テーマ","title":"好みの見た目を選ぶ","subtitle":"内蔵テーマを即座に適用","intro":"Specrailsの見た目を選びましょう — テーマはクリックした瞬間に適用されます。","note":"設定 → 外観でいつでも変更できます。"},"welcome":{"nav":"ようこそ","title":"Specrails へようこそ","subtitle":"AI エージェントでソフトウェアを出荷するためのローカルコックピット","intro":"Specrails はアイデアを出荷済みのコードに変えます — そのすべてのステップを<b>見て、操り、信頼</b>できます。AI と対話してスペックを下書きし、実行レールにドロップして再生を押すだけ。パイプラインがアーキテクチャ、実装、レビュー、プルリクエストまで処理し、その作業をライブでストリーミングします。","coreLoopLabel":"コアループ","flowCaption":"各スペックは <b>アーキテクト → デベロッパー → レビュアー → Ship</b> を自動で流れます。","localNote":"<b>100% ローカル · シングルユーザー · アカウント不要。</b>すべてあなたのマシン上で動作します。<i>あなた</i>がエージェントを起動しない限り、コードがラップトップの外に出ることはありません。","tourNote":"このクイックツアーではアプリの全機能を紹介します — 所要時間は約1分です。"},"authorSpecs":{"nav":"スペック作成","title":"アイデアをスペックに変える","subtitle":"作りたいものを正確に捉える6つの方法","intro":"<b>スペック</b>とは、実行してほしい作業の記述です。短い一文から AI との本格的な対話まで、その時々に合った方法で作成できます。","exploreLabel":"Explore — 対話する","exploreBody":"作りたいものをチャットで説明すると、ライブドラフトがターンごとに再構築されます。プリセットスライダーで AI に見せるプロジェクトコンテキストの量を調整できます — メッセージのみから、コードベース全体 + MCP サーバーまで。","quickLabel":"Quick — 一発生成","quickBody":"作りたいものが明確なら、1ターンで完全なスペックを生成できます。オプションで Contract Layer によるエンリッチも可能: 正確な名前、データ形状、不変条件、変更ファイルリストにより、エージェントが車輪の再発明をしません。","websiteLabel":"ウェブサイトから","websiteBody":"埋め込みブラウザが開きます。要素をホバー選択するか矩形をドラッグすると、スクリーンショット、DOM、適用された CSS が添付ファイルになります。デスクトップ版は独自の Chromium を同梱しているのでオフラインでも動作します。","smashLabel":"大きなエピックを SMASH","smashBody":"大きなスペックをワンクリックで小さなサブスペック群に分解します — 各子スペックのカードには短い要約が付きます。","draftsLabel":"下書きと編集の再開","draftsBody":"進行中の探索を下書きチケットとして保存し、後で再開できます。どのスペックも Explore で開き直して改良を続けられます。","compareLabel":"並べて比較","compareBody":"スペックを画面の端にドラッグすると、他のスペックのピッカーがスライドインします — タブレット風に2つを並べてレビューできます。"},"rails":{"nav":"レールで実行","title":"パイプラインをレールで実行","subtitle":"スペックをレーンに整理してエージェントを起動","intro":"ダッシュボードの右側が<b>レール</b> — 実行レーンです。スペックカードをレールにドラッグして <play>▶ 再生</play> を押すと、実装ジョブが起動します。","jobLabel":"各ジョブの実行内容","flowCaption":"各フェーズは作業中のログをライブでストリーミングします。","modeLabel":"レールの実行方法を選択","modeBody":"各レールはモードを選べます: <b>Implement</b>(完全な構造化パイプライン)、<b>Batch</b>(複数スペックを順次実行)、<b>Ultracode</b>(Claude が固定パイプラインなしで自律的に作業)。","profilesLabel":"エージェントプロファイル","profilesBody":"どのエージェントを実行し、それぞれどのモデルを使うかを決めるプロジェクトごとの宣言的カタログ — レールごとに選択され、ジョブごとにスナップショットされるため並行作業が分離されます。","jobDetailLabel":"ライブジョブ詳細","jobDetailBody":"各ジョブにはチケット識別ヘッダー、ライブの経過時間ティッカー、進行中のターン/トークン数が表示され、確定コストは終了時に解決されます。","isolationLabel":"複数プロジェクト、完全分離","isolationBody":"各プロジェクトは独自のデータベースとジョブキューを持ちます。複数のプロジェクトを同時に実行し、左サイドバーから切り替えられます — 位置はプロジェクトごとに記憶されます。"},"providers":{"nav":"あなたのエージェント","title":"自分のエージェントを持ち込む","subtitle":"Claude Code と Codex をファーストクラスのエンジンとして","intro":"アプリは <b>Claude Code</b> と <b>Codex CLI</b> を、単一のコントラクトの背後で交換可能なエンジンとして扱います。プロジェクトには片方または両方をインストールでき、選択はインストール時に行います。","table":{"capability":"機能","streamingResume":"ストリーミングとセッション再開","native":"ネイティブ","costReporting":"コストレポート","providerBilled":"プロバイダー請求額","estimated":"推定(~)","telemetry":"テレメトリ(OTEL)","synthesized":"合成","agentProfiles":"エージェントプロファイル"},"calloutLabel":"両方インストールされている場合","calloutBody":"<b>スペックごと、レールごと、ターミナル起動ごと</b>にエンジンを選べます。アプリはプロジェクトごとに最後の選択を記憶します。Codex のコストはローカルのレートカードからの推定で、常に <mono>~</mono> が付きます。"},"cost":{"nav":"コスト追跡","title":"1セント単位で追跡","subtitle":"課金対象のすべての呼び出しを記録・可視化","intro":"レール、Quick、Explore、AI 編集、SMASH、ファイル要約にわたるすべての AI 呼び出しが <b>Claude と Codex の両方</b>で記録されます。エージェントのコストを推測する必要はもうありません。","analyticsLabel":"分析ページ","analyticsBody":"バーンレートのヒーロー表示、日次タイムライン、トップチケット、モデル別内訳、コスト対ターン数の散布図。期間(7日 / 30日 / 90日 / 全期間)とサーフェスでフィルタできます。","perTicketLabel":"チケット別の支出","perTicketBody":"各スペックの詳細にはコストと所要ターン数が表示され、そのチケットでフィルタした分析ページへディープリンクします。","honestLabel":"正直な数字","honestBody":"Claude のコストはプロバイダー請求額そのもの。Codex は推定で <mono>~</mono> が付きます。トークン合計にはキャッシュ階層が含まれるため、数字がきちんと一致します。","budgetsLabel":"予算とアラート","budgetsBody":"日次予算とジョブ単位のコストアラートを設定でき、上限を超えるとアプリが自動でキューを一時停止します。すべて CSV または JSON にエクスポートできます。"},"workspace":{"nav":"ワークスペース","title":"あなたのワークスペースに","subtitle":"ウィンドウを離れずに必要なすべてを","terminalLabel":"ターミナルパネル","terminalBody":"画面下部の本格的な VS Code スタイルのターミナル(<mod>{{mod}}</mod> <j>J</j>)— WebGL レンダリング、検索、インライン画像、パスのドラッグ&ドロップ、シェル統合。プロジェクトごとに最大10セッション。","codeLabel":"コードエクスプローラー","codeBody":"読み取り専用のファイルツリーと Monaco ビューアに、平易な AI 要約と「AI が変更」の来歴チップが付き、誰でも何がなぜ変わったかを追えます。","integrationsLabel":"インテグレーション","integrationsBody":"プロジェクトごとの MCP インテグレーションのマーケットプレイス — Serena のセマンティックコードナビゲーションを同梱。インストールは加算式で、追加しても他に影響しません。","themesLabel":"テーマ","themesBody":"5つの組み込みテーマ — specrails(デフォルト)、dracula、aurora-light、obsidian-dark、matrix — を UI の描画前に適用するため、フラッシュがありません。設定 → 外観で変更できます。","chatsLabel":"最小化できるチャット","chatsBody":"Explore や AI 編集のセッションをドックのチップに格納して後で再開 — リフレッシュやプロジェクト切り替えで失われることはありません。","desktopLabel":"デスクトップまたはブラウザ","desktopBody":"ブラウザで Specrails を実行するか、サーバーとランタイムを同梱した署名済みデスクトップアプリ(macOS と Windows)を入手できます。"},"companion":{"nav":"モバイルコンパニオン","title":"Specrails を持ち歩く","subtitle":"Specrails Companion — あなたのパイプラインを、スマートフォンで","intro":"<b>Specrails Companion</b> は specrails.dev/companion-app で使える Web アプリです — スマートフォンで開く(またはホーム画面に追加する)だけで、スペックボードの閲覧、レールの起動と停止、ジョブログのライブ追跡、分析のチェックができます。インストール不要、アプリストアも不要。","localLabel":"ほかのすべてと同じく 100% ローカル","localBody":"スマートフォンはこのコンピュータに直接接続します — ピアツーピアで暗号化(WebRTC)。クラウド中継なし、アカウント不要、コードがあなたのデバイスの外に出ることはありません。","downloadLabel":"スマートフォンで開く","downloadHint":"スマートフォンのカメラでコードをスキャンするか、ブラウザで specrails.dev/companion-app を開いてください。","open":"Specrails Companion を開く","pairLabel":"ペアリングは10秒で完了","pairBody":"スマートフォンで specrails.dev/companion-app を開き、こちらで 設定 → モバイルコンパニオン → Web コンパニオンをペアリング と進んで、画面の手順に従ってください。"},"moveFast":{"nav":"高速操作","title":"思考のスピードで動く","subtitle":"どこでもキーボードファースト","paletteLabel":"コマンドパレット","paletteShortcut":"<f>どこでも</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>を押す</m>","paletteBody":"プロジェクトの切り替え、スペックコマンドの実行、任意のページへのジャンプ、最近のジョブの検索 — すべてあいまい検索で。","terminalLabel":"ターミナルパネル","terminalBody":"<mod>{{mod}}</mod> <j>J</j> で切り替え。","shortcutsLabel":"全ショートカット","shortcutsBody":"<q>?</q> を押すと完全なチートシートが表示されます。","chatLabel":"チャットサイドバー","chatBody":"<mod>{{mod}}</mod> <bkey>B</bkey> で右サイドバーを切り替え。","projectsLabel":"プロジェクトサイドバー","projectsBody":"<alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey> で左の Arc サイドバーを切り替え。","outro":"<b>ツアーは以上です。</b>左サイドバーからプロジェクトを追加して、最初のスペックを出荷しましょう。このウォークスルーは設定からいつでも再表示できます。"},"jira":{"label":"Jira 連携","body":"任意のプロジェクトを <b>Jira ボード</b> で裏付けます — 各スペックは Jira の課題になり、双方向で同期されます。ステータスは rail に追従し、job 完了時にコメントが投稿されます。追加時にプロジェクトごとに設定するか、いつでも設定から構成できます。"}}`),c={wizard:e,addProject:t,prerequisites:n,instructions:r,checkpoints:i,setupChat:a,welcome:o,onboarding:s};export{t as addProject,i as checkpoints,c as default,r as instructions,s as onboarding,n as prerequisites,a as setupChat,o as welcome,e as wizard};
@@ -1 +1 @@
1
- var e={title:`Spec`,dropHere:`Hier ablegen`,emptyNoSpecs:`Noch keine Specs`,emptyNoLabelMatch:`Keine Specs entsprechen den aktiven Labels`,emptyNoActiveSpecs:`Keine aktiven Specs`,emptyHint:`Klicke auf „+ Hinzufügen“, um loszulegen`,dropToMarkDone:`Ablegen, um als fertig zu markieren`,emptyNoDoneLabelMatch:`Keine fertigen Specs entsprechen den aktiven Labels`,emptyNoCompleted:`Noch keine abgeschlossenen Specs`,untitledSpec:`Unbenannte Spec`},t={todo:`To-do`,inProgress:`In Arbeit`,done:`Fertig`,cancelled:`Abgebrochen`},n={critical:`kritisch`,high:`hoch`,medium:`mittel`,low:`niedrig`},r={epic:`Epic`,epicWithCount:`Epic · {{count}}`,subSpec:`↑ Sub-Spec`,review:`Review`,needsReviewTitle:`Diese Spec wurde als fertig markiert, aber ihr Job ist fehlgeschlagen – bitte prüfen`,raw:`Raw`,rawTitle:`Raw-Spec – keine KI-Generierung bei der Erfassung`,contract:`Contract`,openParentEpicTitle:`Übergeordnetes Epic #{{id}} öffnen · {{title}}`},i={deleteSpec:`Spec #{{id}} löschen`,deleteTicket:`Ticket #{{id}} löschen`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Hängt von {{count}} ab`,continueEditing:`Weiter bearbeiten`,continueEditingTitle:`Diese Spec weiter bearbeiten`,moveToRail:`Auf Rail verschieben`},a={noTickets:`Noch keine Tickets`,noTicketsHint:`Erstelle dein erstes Ticket oder führe einen Product-Backlog-Befehl aus, um Tickets zu befüllen`,createFirst:`Erstes Ticket erstellen`},o={loadFailed:`Tickets konnten nicht geladen werden`},s={status:{draft:`Entwurf`,todo:`To-do`,inProgress:`in Arbeit`,done:`fertig`,cancelled:`abgebrochen`},filterAll:`Alle ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`Alle Labels`,searchPlaceholder:`Suchen…`,columns:{status:`Status`,title:`Titel`,priority:`Priorität`,labels:`Labels`,updated:`Aktualisiert`},noMatch:`Keine Tickets entsprechen deinen Filtern`,clearFilters:`Filter zurücksetzen`,loadMore:`Mehr laden ({{count}} verbleibend)`},c={emptyTodo:`Keine offenen Tickets`,emptyInProgress:`Nichts in Arbeit`,emptyDone:`Keine abgeschlossenen Tickets`,cancelledSection:`Abgebrochen ({{count}})`},l={ariaLabel:`Nach Status filtern`,all:`Alle`,todo:`To-do`,done:`Fertig`},u={modeAriaLabel:`Sortiermodus`,tooltip:`Sortierung: {{mode}}`,toggleDirAriaLabel:`Sortierrichtung umschalten`,ascending:`Aufsteigend`,descending:`Absteigend`,modes:{default:`Standard`,ticketId:`Ticket #`,priority:`Priorität`}},d={ariaLabel:`Spec-Ansicht`,listView:`Listenansicht`,postitView:`Post-it-Ansicht`},f={ariaLabel:`Nach Labels filtern`,all:`Alle`,empty:`Keine Labels in diesem Projekt.`,selected_one:`{{count}} Label`,selected_other:`{{count}} Labels`,clear:`zurücksetzen`},p={all:`Alle Epics`,ariaLabel:`Nach Epic filtern`},m={current:`Aktuell`,all:`Alle Sprints`,ariaLabel:`Nach Sprint filtern`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
1
+ var e={title:`Spec`,dropHere:`Hier ablegen`,emptyNoSpecs:`Noch keine Specs`,emptyNoLabelMatch:`Keine Specs entsprechen den aktiven Labels`,emptyNoActiveSpecs:`Keine aktiven Specs`,emptyHint:`Klicke auf „+ Hinzufügen“, um loszulegen`,dropToMarkDone:`Ablegen, um als fertig zu markieren`,emptyNoDoneLabelMatch:`Keine fertigen Specs entsprechen den aktiven Labels`,emptyNoCompleted:`Noch keine abgeschlossenen Specs`,untitledSpec:`Unbenannte Spec`},t={todo:`To-do`,inProgress:`In Arbeit`,done:`Fertig`,cancelled:`Abgebrochen`},n={critical:`kritisch`,high:`hoch`,medium:`mittel`,low:`niedrig`},r={epic:`Epic`,epicWithCount:`Epic · {{count}}`,subSpec:`↑ Sub-Spec`,review:`Review`,needsReviewTitle:`Diese Spec wurde als fertig markiert, aber ihr Job ist fehlgeschlagen – bitte prüfen`,raw:`Raw`,rawTitle:`Raw-Spec – keine KI-Generierung bei der Erfassung`,contract:`Contract`,openParentEpicTitle:`Übergeordnetes Epic #{{id}} öffnen · {{title}}`},i={deleteSpec:`Spec #{{id}} löschen`,deleteTicket:`Ticket #{{id}} löschen`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Hängt von {{count}} ab`,continueEditing:`Weiter bearbeiten`,continueEditingTitle:`Diese Spec weiter bearbeiten`,moveToRail:`Auf Rail verschieben`},a={noTickets:`Noch keine Tickets`,noTicketsHint:`Erstelle dein erstes Ticket oder führe einen Product-Backlog-Befehl aus, um Tickets zu befüllen`,createFirst:`Erstes Ticket erstellen`},o={loadFailed:`Tickets konnten nicht geladen werden`},s={status:{draft:`Entwurf`,todo:`To-do`,inProgress:`in Arbeit`,done:`fertig`,cancelled:`abgebrochen`},filterAll:`Alle ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`Alle Labels`,searchPlaceholder:`Suchen…`,columns:{status:`Status`,title:`Titel`,priority:`Priorität`,labels:`Labels`,updated:`Aktualisiert`},noMatch:`Keine Tickets entsprechen deinen Filtern`,clearFilters:`Filter zurücksetzen`,loadMore:`Mehr laden ({{count}} verbleibend)`},c={emptyTodo:`Keine offenen Tickets`,emptyInProgress:`Nichts in Arbeit`,emptyDone:`Keine abgeschlossenen Tickets`,cancelledSection:`Abgebrochen ({{count}})`},l={ariaLabel:`Nach Status filtern`,all:`Alle`,todo:`To-do`,done:`Fertig`},u={modeAriaLabel:`Sortiermodus`,tooltip:`Sortierung: {{mode}}`,toggleDirAriaLabel:`Sortierrichtung umschalten`,ascending:`Aufsteigend`,descending:`Absteigend`,modes:{default:`Standard`,ticketId:`Ticket #`,priority:`Priorität`,jiraKey:`Jira-Ticket #`}},d={ariaLabel:`Spec-Ansicht`,listView:`Listenansicht`,postitView:`Post-it-Ansicht`},f={ariaLabel:`Nach Labels filtern`,all:`Alle`,empty:`Keine Labels in diesem Projekt.`,selected_one:`{{count}} Label`,selected_other:`{{count}} Labels`,clear:`zurücksetzen`},p={all:`Alle Epics`,ariaLabel:`Nach Epic filtern`},m={current:`Aktuell`,all:`Alle Sprints`,ariaLabel:`Nach Sprint filtern`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
@@ -1 +1 @@
1
- var e={title:`Spec`,dropHere:`Déposer ici`,emptyNoSpecs:`Aucune spec pour l'instant`,emptyNoLabelMatch:`Aucune spec ne correspond aux labels actifs`,emptyNoActiveSpecs:`Aucune spec active`,emptyHint:`Cliquez sur « + Ajouter » pour commencer`,dropToMarkDone:`Déposez pour marquer comme terminée`,emptyNoDoneLabelMatch:`Aucune spec terminée ne correspond aux labels actifs`,emptyNoCompleted:`Aucune spec terminée pour l'instant`,untitledSpec:`Spec sans titre`},t={todo:`À faire`,inProgress:`En cours`,done:`Terminé`,cancelled:`Annulé`},n={critical:`critique`,high:`haute`,medium:`moyenne`,low:`basse`},r={epic:`Epic`,epicWithCount:`Epic · {{count}}`,subSpec:`↑ Sous-spec`,review:`À revoir`,needsReviewTitle:`Cette spec a été marquée comme terminée mais son job a échoué — vérifiez-la`,raw:`Raw`,rawTitle:`Spec Raw — aucune génération IA à la création`,contract:`Contract`,openParentEpicTitle:`Ouvrir l'Epic parent #{{id}} · {{title}}`},i={deleteSpec:`Supprimer la spec #{{id}}`,deleteTicket:`Supprimer le ticket #{{id}}`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Dépend de {{count}}`,continueEditing:`Continuer l'édition`,continueEditingTitle:`Continuer à éditer cette spec`,moveToRail:`Déplacer vers un rail`},a={noTickets:`Aucun ticket pour l'instant`,noTicketsHint:`Créez votre premier ticket ou exécutez une commande de product backlog pour remplir les tickets`,createFirst:`Créer votre premier ticket`},o={loadFailed:`Échec du chargement des tickets`},s={status:{draft:`brouillon`,todo:`à faire`,inProgress:`en cours`,done:`terminé`,cancelled:`annulé`},filterAll:`Tous ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`Tous les labels`,searchPlaceholder:`Rechercher…`,columns:{status:`Statut`,title:`Titre`,priority:`Priorité`,labels:`Labels`,updated:`Mis à jour`},noMatch:`Aucun ticket ne correspond à vos filtres`,clearFilters:`Effacer les filtres`,loadMore:`Charger plus ({{count}} restants)`},c={emptyTodo:`Aucun ticket à faire`,emptyInProgress:`Rien en cours`,emptyDone:`Aucun ticket terminé`,cancelledSection:`Annulés ({{count}})`},l={ariaLabel:`Filtrer par statut`,all:`Tous`,todo:`À faire`,done:`Terminé`},u={modeAriaLabel:`Mode de tri`,tooltip:`Tri : {{mode}}`,toggleDirAriaLabel:`Inverser le sens du tri`,ascending:`Croissant`,descending:`Décroissant`,modes:{default:`Par défaut`,ticketId:`Ticket #`,priority:`Priorité`}},d={ariaLabel:`Vue des specs`,listView:`Vue liste`,postitView:`Vue post-it`},f={ariaLabel:`Filtrer par labels`,all:`Tous`,empty:`Aucun label dans ce projet.`,selected_one:`{{count}} label`,selected_other:`{{count}} labels`,clear:`effacer`},p={all:`Toutes les épopées`,ariaLabel:`Filtrer par épopée`},m={current:`Actuel`,all:`Tous les sprints`,ariaLabel:`Filtrer par sprint`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
1
+ var e={title:`Spec`,dropHere:`Déposer ici`,emptyNoSpecs:`Aucune spec pour l'instant`,emptyNoLabelMatch:`Aucune spec ne correspond aux labels actifs`,emptyNoActiveSpecs:`Aucune spec active`,emptyHint:`Cliquez sur « + Ajouter » pour commencer`,dropToMarkDone:`Déposez pour marquer comme terminée`,emptyNoDoneLabelMatch:`Aucune spec terminée ne correspond aux labels actifs`,emptyNoCompleted:`Aucune spec terminée pour l'instant`,untitledSpec:`Spec sans titre`},t={todo:`À faire`,inProgress:`En cours`,done:`Terminé`,cancelled:`Annulé`},n={critical:`critique`,high:`haute`,medium:`moyenne`,low:`basse`},r={epic:`Epic`,epicWithCount:`Epic · {{count}}`,subSpec:`↑ Sous-spec`,review:`À revoir`,needsReviewTitle:`Cette spec a été marquée comme terminée mais son job a échoué — vérifiez-la`,raw:`Raw`,rawTitle:`Spec Raw — aucune génération IA à la création`,contract:`Contract`,openParentEpicTitle:`Ouvrir l'Epic parent #{{id}} · {{title}}`},i={deleteSpec:`Supprimer la spec #{{id}}`,deleteTicket:`Supprimer le ticket #{{id}}`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Dépend de {{count}}`,continueEditing:`Continuer l'édition`,continueEditingTitle:`Continuer à éditer cette spec`,moveToRail:`Déplacer vers un rail`},a={noTickets:`Aucun ticket pour l'instant`,noTicketsHint:`Créez votre premier ticket ou exécutez une commande de product backlog pour remplir les tickets`,createFirst:`Créer votre premier ticket`},o={loadFailed:`Échec du chargement des tickets`},s={status:{draft:`brouillon`,todo:`à faire`,inProgress:`en cours`,done:`terminé`,cancelled:`annulé`},filterAll:`Tous ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`Tous les labels`,searchPlaceholder:`Rechercher…`,columns:{status:`Statut`,title:`Titre`,priority:`Priorité`,labels:`Labels`,updated:`Mis à jour`},noMatch:`Aucun ticket ne correspond à vos filtres`,clearFilters:`Effacer les filtres`,loadMore:`Charger plus ({{count}} restants)`},c={emptyTodo:`Aucun ticket à faire`,emptyInProgress:`Rien en cours`,emptyDone:`Aucun ticket terminé`,cancelledSection:`Annulés ({{count}})`},l={ariaLabel:`Filtrer par statut`,all:`Tous`,todo:`À faire`,done:`Terminé`},u={modeAriaLabel:`Mode de tri`,tooltip:`Tri : {{mode}}`,toggleDirAriaLabel:`Inverser le sens du tri`,ascending:`Croissant`,descending:`Décroissant`,modes:{default:`Par défaut`,ticketId:`Ticket #`,priority:`Priorité`,jiraKey:`Ticket Jira #`}},d={ariaLabel:`Vue des specs`,listView:`Vue liste`,postitView:`Vue post-it`},f={ariaLabel:`Filtrer par labels`,all:`Tous`,empty:`Aucun label dans ce projet.`,selected_one:`{{count}} label`,selected_other:`{{count}} labels`,clear:`effacer`},p={all:`Toutes les épopées`,ariaLabel:`Filtrer par épopée`},m={current:`Actuel`,all:`Tous les sprints`,ariaLabel:`Filtrer par sprint`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
@@ -1 +1 @@
1
- var e={title:`Spec`,dropHere:`Rilascia qui`,emptyNoSpecs:`Ancora nessuna spec`,emptyNoLabelMatch:`Nessuna spec corrisponde alle etichette attive`,emptyNoActiveSpecs:`Nessuna spec attiva`,emptyHint:`Clicca "+ Aggiungi" per iniziare`,dropToMarkDone:`Rilascia per contrassegnare come completata`,emptyNoDoneLabelMatch:`Nessuna spec completata corrisponde alle etichette attive`,emptyNoCompleted:`Ancora nessuna spec completata`,untitledSpec:`Spec senza titolo`},t={todo:`Da fare`,inProgress:`In corso`,done:`Completato`,cancelled:`Annullato`},n={critical:`critica`,high:`alta`,medium:`media`,low:`bassa`},r={epic:`Epic`,epicWithCount:`Epic · {{count}}`,subSpec:`↑ Sub-Spec`,review:`Revisione`,needsReviewTitle:`Questa spec è stata contrassegnata come completata ma il suo job è terminato con un errore — rivedila`,raw:`Raw`,rawTitle:`Spec Raw — nessuna generazione AI alla creazione`,contract:`Contract`,openParentEpicTitle:`Apri l'Epic padre #{{id}} · {{title}}`},i={deleteSpec:`Elimina spec #{{id}}`,deleteTicket:`Elimina ticket #{{id}}`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Dipende da {{count}}`,continueEditing:`Continua a modificare`,continueEditingTitle:`Continua a modificare questa spec`,moveToRail:`Sposta su un rail`},a={noTickets:`Ancora nessun ticket`,noTicketsHint:`Crea il tuo primo ticket o esegui un comando di product backlog per popolare i ticket`,createFirst:`Crea il tuo primo ticket`},o={loadFailed:`Impossibile caricare i ticket`},s={status:{draft:`bozza`,todo:`da fare`,inProgress:`in corso`,done:`completato`,cancelled:`annullato`},filterAll:`Tutti ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`Tutte le etichette`,searchPlaceholder:`Cerca...`,columns:{status:`Stato`,title:`Titolo`,priority:`Priorità`,labels:`Etichette`,updated:`Aggiornato`},noMatch:`Nessun ticket corrisponde ai filtri`,clearFilters:`Cancella filtri`,loadMore:`Carica altri ({{count}} rimanenti)`},c={emptyTodo:`Nessun ticket da fare`,emptyInProgress:`Niente in corso`,emptyDone:`Nessun ticket completato`,cancelledSection:`Annullati ({{count}})`},l={ariaLabel:`Filtra per stato`,all:`Tutti`,todo:`Da fare`,done:`Completati`},u={modeAriaLabel:`Modalità di ordinamento`,tooltip:`Ordina: {{mode}}`,toggleDirAriaLabel:`Inverti direzione di ordinamento`,ascending:`Crescente`,descending:`Decrescente`,modes:{default:`Predefinito`,ticketId:`Ticket #`,priority:`Priorità`}},d={ariaLabel:`Vista delle spec`,listView:`Vista elenco`,postitView:`Vista post-it`},f={ariaLabel:`Filtra per etichette`,all:`Tutte`,empty:`Nessuna etichetta in questo progetto.`,selected_one:`{{count}} etichetta`,selected_other:`{{count}} etichette`,clear:`cancella`},p={all:`Tutte le epiche`,ariaLabel:`Filtra per epica`},m={current:`Attuale`,all:`Tutti gli sprint`,ariaLabel:`Filtra per sprint`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
1
+ var e={title:`Spec`,dropHere:`Rilascia qui`,emptyNoSpecs:`Ancora nessuna spec`,emptyNoLabelMatch:`Nessuna spec corrisponde alle etichette attive`,emptyNoActiveSpecs:`Nessuna spec attiva`,emptyHint:`Clicca "+ Aggiungi" per iniziare`,dropToMarkDone:`Rilascia per contrassegnare come completata`,emptyNoDoneLabelMatch:`Nessuna spec completata corrisponde alle etichette attive`,emptyNoCompleted:`Ancora nessuna spec completata`,untitledSpec:`Spec senza titolo`},t={todo:`Da fare`,inProgress:`In corso`,done:`Completato`,cancelled:`Annullato`},n={critical:`critica`,high:`alta`,medium:`media`,low:`bassa`},r={epic:`Epic`,epicWithCount:`Epic · {{count}}`,subSpec:`↑ Sub-Spec`,review:`Revisione`,needsReviewTitle:`Questa spec è stata contrassegnata come completata ma il suo job è terminato con un errore — rivedila`,raw:`Raw`,rawTitle:`Spec Raw — nessuna generazione AI alla creazione`,contract:`Contract`,openParentEpicTitle:`Apri l'Epic padre #{{id}} · {{title}}`},i={deleteSpec:`Elimina spec #{{id}}`,deleteTicket:`Elimina ticket #{{id}}`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Dipende da {{count}}`,continueEditing:`Continua a modificare`,continueEditingTitle:`Continua a modificare questa spec`,moveToRail:`Sposta su un rail`},a={noTickets:`Ancora nessun ticket`,noTicketsHint:`Crea il tuo primo ticket o esegui un comando di product backlog per popolare i ticket`,createFirst:`Crea il tuo primo ticket`},o={loadFailed:`Impossibile caricare i ticket`},s={status:{draft:`bozza`,todo:`da fare`,inProgress:`in corso`,done:`completato`,cancelled:`annullato`},filterAll:`Tutti ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`Tutte le etichette`,searchPlaceholder:`Cerca...`,columns:{status:`Stato`,title:`Titolo`,priority:`Priorità`,labels:`Etichette`,updated:`Aggiornato`},noMatch:`Nessun ticket corrisponde ai filtri`,clearFilters:`Cancella filtri`,loadMore:`Carica altri ({{count}} rimanenti)`},c={emptyTodo:`Nessun ticket da fare`,emptyInProgress:`Niente in corso`,emptyDone:`Nessun ticket completato`,cancelledSection:`Annullati ({{count}})`},l={ariaLabel:`Filtra per stato`,all:`Tutti`,todo:`Da fare`,done:`Completati`},u={modeAriaLabel:`Modalità di ordinamento`,tooltip:`Ordina: {{mode}}`,toggleDirAriaLabel:`Inverti direzione di ordinamento`,ascending:`Crescente`,descending:`Decrescente`,modes:{default:`Predefinito`,ticketId:`Ticket #`,priority:`Priorità`,jiraKey:`Ticket Jira #`}},d={ariaLabel:`Vista delle spec`,listView:`Vista elenco`,postitView:`Vista post-it`},f={ariaLabel:`Filtra per etichette`,all:`Tutte`,empty:`Nessuna etichetta in questo progetto.`,selected_one:`{{count}} etichetta`,selected_other:`{{count}} etichette`,clear:`cancella`},p={all:`Tutte le epiche`,ariaLabel:`Filtra per epica`},m={current:`Attuale`,all:`Tutti gli sprint`,ariaLabel:`Filtra per sprint`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
@@ -1 +1 @@
1
- import{n as e}from"./chunk-CilyBKbf.js";var t=e({badges:()=>a,board:()=>n,card:()=>o,default:()=>_,emptyState:()=>s,epicFilter:()=>h,errors:()=>c,gridView:()=>u,labelFilter:()=>m,listView:()=>l,priority:()=>i,sortControl:()=>f,sprintFilter:()=>g,status:()=>r,statusFilter:()=>d,viewTier:()=>p}),n={title:`Spec`,dropHere:`Drop here`,emptyNoSpecs:`No specs yet`,emptyNoLabelMatch:`No specs match the active labels`,emptyNoActiveSpecs:`No active specs`,emptyHint:`Click "+ Add" to get started`,dropToMarkDone:`Drop to mark as done`,emptyNoDoneLabelMatch:`No done specs match the active labels`,emptyNoCompleted:`No completed specs yet`,untitledSpec:`Untitled spec`},r={todo:`Todo`,inProgress:`In Progress`,done:`Done`,cancelled:`Cancelled`},i={critical:`critical`,high:`high`,medium:`medium`,low:`low`},a={epic:`Epic`,epicWithCount:`Epic · {{count}}`,subSpec:`↑ Sub-Spec`,review:`Review`,needsReviewTitle:`This spec was marked done but its job ended in failure — review it`,raw:`Raw`,rawTitle:`Raw spec — no AI generation at intake`,contract:`Contract`,openParentEpicTitle:`Open parent Epic #{{id}} · {{title}}`},o={deleteSpec:`Delete spec #{{id}}`,deleteTicket:`Delete ticket #{{id}}`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Depends on {{count}}`,continueEditing:`Continue Editing`,continueEditingTitle:`Continue editing this spec`,moveToRail:`Move to Rail`},s={noTickets:`No tickets yet`,noTicketsHint:`Create your first ticket or run a product backlog command to populate tickets`,createFirst:`Create your first ticket`},c={loadFailed:`Failed to load tickets`},l={status:{draft:`draft`,todo:`todo`,inProgress:`in progress`,done:`done`,cancelled:`cancelled`},filterAll:`All ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`All labels`,searchPlaceholder:`Search...`,columns:{status:`Status`,title:`Title`,priority:`Priority`,labels:`Labels`,updated:`Updated`},noMatch:`No tickets match your filters`,clearFilters:`Clear filters`,loadMore:`Load more ({{count}} remaining)`},u={emptyTodo:`No tickets to do`,emptyInProgress:`Nothing in progress`,emptyDone:`No completed tickets`,cancelledSection:`Cancelled ({{count}})`},d={ariaLabel:`Filter by status`,all:`All`,todo:`ToDo`,done:`Done`},f={modeAriaLabel:`Sort mode`,tooltip:`Sort: {{mode}}`,toggleDirAriaLabel:`Toggle sort direction`,ascending:`Ascending`,descending:`Descending`,modes:{default:`Default`,ticketId:`Ticket #`,priority:`Priority`}},p={ariaLabel:`Specs view`,listView:`List view`,postitView:`Post-it view`},m={ariaLabel:`Filter by labels`,all:`All`,empty:`No labels in this project.`,selected_one:`{{count}} label`,selected_other:`{{count}} labels`,clear:`clear`},h={all:`All epics`,ariaLabel:`Filter by epic`},g={current:`Current`,all:`All sprints`,ariaLabel:`Filter by sprint`},_={board:n,status:r,priority:i,badges:a,card:o,emptyState:s,errors:c,listView:l,gridView:u,statusFilter:d,sortControl:f,viewTier:p,labelFilter:m,epicFilter:h,sprintFilter:g};export{t};
1
+ import{n as e}from"./chunk-CilyBKbf.js";var t=e({badges:()=>a,board:()=>n,card:()=>o,default:()=>_,emptyState:()=>s,epicFilter:()=>h,errors:()=>c,gridView:()=>u,labelFilter:()=>m,listView:()=>l,priority:()=>i,sortControl:()=>f,sprintFilter:()=>g,status:()=>r,statusFilter:()=>d,viewTier:()=>p}),n={title:`Spec`,dropHere:`Drop here`,emptyNoSpecs:`No specs yet`,emptyNoLabelMatch:`No specs match the active labels`,emptyNoActiveSpecs:`No active specs`,emptyHint:`Click "+ Add" to get started`,dropToMarkDone:`Drop to mark as done`,emptyNoDoneLabelMatch:`No done specs match the active labels`,emptyNoCompleted:`No completed specs yet`,untitledSpec:`Untitled spec`},r={todo:`Todo`,inProgress:`In Progress`,done:`Done`,cancelled:`Cancelled`},i={critical:`critical`,high:`high`,medium:`medium`,low:`low`},a={epic:`Epic`,epicWithCount:`Epic · {{count}}`,subSpec:`↑ Sub-Spec`,review:`Review`,needsReviewTitle:`This spec was marked done but its job ended in failure — review it`,raw:`Raw`,rawTitle:`Raw spec — no AI generation at intake`,contract:`Contract`,openParentEpicTitle:`Open parent Epic #{{id}} · {{title}}`},o={deleteSpec:`Delete spec #{{id}}`,deleteTicket:`Delete ticket #{{id}}`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Depends on {{count}}`,continueEditing:`Continue Editing`,continueEditingTitle:`Continue editing this spec`,moveToRail:`Move to Rail`},s={noTickets:`No tickets yet`,noTicketsHint:`Create your first ticket or run a product backlog command to populate tickets`,createFirst:`Create your first ticket`},c={loadFailed:`Failed to load tickets`},l={status:{draft:`draft`,todo:`todo`,inProgress:`in progress`,done:`done`,cancelled:`cancelled`},filterAll:`All ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`All labels`,searchPlaceholder:`Search...`,columns:{status:`Status`,title:`Title`,priority:`Priority`,labels:`Labels`,updated:`Updated`},noMatch:`No tickets match your filters`,clearFilters:`Clear filters`,loadMore:`Load more ({{count}} remaining)`},u={emptyTodo:`No tickets to do`,emptyInProgress:`Nothing in progress`,emptyDone:`No completed tickets`,cancelledSection:`Cancelled ({{count}})`},d={ariaLabel:`Filter by status`,all:`All`,todo:`ToDo`,done:`Done`},f={modeAriaLabel:`Sort mode`,tooltip:`Sort: {{mode}}`,toggleDirAriaLabel:`Toggle sort direction`,ascending:`Ascending`,descending:`Descending`,modes:{default:`Default`,ticketId:`Ticket #`,priority:`Priority`,jiraKey:`Jira Ticket #`}},p={ariaLabel:`Specs view`,listView:`List view`,postitView:`Post-it view`},m={ariaLabel:`Filter by labels`,all:`All`,empty:`No labels in this project.`,selected_one:`{{count}} label`,selected_other:`{{count}} labels`,clear:`clear`},h={all:`All epics`,ariaLabel:`Filter by epic`},g={current:`Current`,all:`All sprints`,ariaLabel:`Filter by sprint`},_={board:n,status:r,priority:i,badges:a,card:o,emptyState:s,errors:c,listView:l,gridView:u,statusFilter:d,sortControl:f,viewTier:p,labelFilter:m,epicFilter:h,sprintFilter:g};export{t};
@@ -1 +1 @@
1
- var e={title:`Spec`,dropHere:`Largar aqui`,emptyNoSpecs:`Ainda não há specs`,emptyNoLabelMatch:`Nenhuma spec corresponde às etiquetas ativas`,emptyNoActiveSpecs:`Sem specs ativas`,emptyHint:`Clique em "+ Adicionar" para começar`,dropToMarkDone:`Largue para marcar como concluída`,emptyNoDoneLabelMatch:`Nenhuma spec concluída corresponde às etiquetas ativas`,emptyNoCompleted:`Ainda não há specs concluídas`,untitledSpec:`Spec sem título`},t={todo:`Por fazer`,inProgress:`Em curso`,done:`Concluído`,cancelled:`Cancelado`},n={critical:`crítica`,high:`alta`,medium:`média`,low:`baixa`},r={epic:`Épico`,epicWithCount:`Épico · {{count}}`,subSpec:`↑ Sub-Spec`,review:`Revisão`,needsReviewTitle:`Esta spec foi marcada como concluída mas o job terminou em falha — reveja-a`,raw:`Raw`,rawTitle:`Spec Raw — sem geração por IA na criação`,contract:`Contract`,openParentEpicTitle:`Abrir o Épico pai #{{id}} · {{title}}`},i={deleteSpec:`Eliminar spec #{{id}}`,deleteTicket:`Eliminar ticket #{{id}}`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Depende de {{count}}`,continueEditing:`Continuar a editar`,continueEditingTitle:`Continuar a editar esta spec`,moveToRail:`Mover para um rail`},a={noTickets:`Ainda não há tickets`,noTicketsHint:`Crie o seu primeiro ticket ou execute um comando de product backlog para preencher os tickets`,createFirst:`Criar o seu primeiro ticket`},o={loadFailed:`Falha ao carregar os tickets`},s={status:{draft:`rascunho`,todo:`por fazer`,inProgress:`em curso`,done:`concluído`,cancelled:`cancelado`},filterAll:`Todos ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`Todas as etiquetas`,searchPlaceholder:`Pesquisar...`,columns:{status:`Estado`,title:`Título`,priority:`Prioridade`,labels:`Etiquetas`,updated:`Atualizado`},noMatch:`Nenhum ticket corresponde aos seus filtros`,clearFilters:`Limpar filtros`,loadMore:`Carregar mais ({{count}} restantes)`},c={emptyTodo:`Sem tickets por fazer`,emptyInProgress:`Nada em curso`,emptyDone:`Sem tickets concluídos`,cancelledSection:`Cancelados ({{count}})`},l={ariaLabel:`Filtrar por estado`,all:`Todos`,todo:`Por fazer`,done:`Concluído`},u={modeAriaLabel:`Modo de ordenação`,tooltip:`Ordenar: {{mode}}`,toggleDirAriaLabel:`Inverter a direção da ordenação`,ascending:`Ascendente`,descending:`Descendente`,modes:{default:`Predefinida`,ticketId:`Ticket #`,priority:`Prioridade`}},d={ariaLabel:`Vista de specs`,listView:`Vista de lista`,postitView:`Vista de post-its`},f={ariaLabel:`Filtrar por etiquetas`,all:`Todas`,empty:`Não há etiquetas neste projeto.`,selected_one:`{{count}} etiqueta`,selected_other:`{{count}} etiquetas`,clear:`limpar`},p={all:`Todos os épicos`,ariaLabel:`Filtrar por épico`},m={current:`Atual`,all:`Todos os sprints`,ariaLabel:`Filtrar por sprint`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
1
+ var e={title:`Spec`,dropHere:`Largar aqui`,emptyNoSpecs:`Ainda não há specs`,emptyNoLabelMatch:`Nenhuma spec corresponde às etiquetas ativas`,emptyNoActiveSpecs:`Sem specs ativas`,emptyHint:`Clique em "+ Adicionar" para começar`,dropToMarkDone:`Largue para marcar como concluída`,emptyNoDoneLabelMatch:`Nenhuma spec concluída corresponde às etiquetas ativas`,emptyNoCompleted:`Ainda não há specs concluídas`,untitledSpec:`Spec sem título`},t={todo:`Por fazer`,inProgress:`Em curso`,done:`Concluído`,cancelled:`Cancelado`},n={critical:`crítica`,high:`alta`,medium:`média`,low:`baixa`},r={epic:`Épico`,epicWithCount:`Épico · {{count}}`,subSpec:`↑ Sub-Spec`,review:`Revisão`,needsReviewTitle:`Esta spec foi marcada como concluída mas o job terminou em falha — reveja-a`,raw:`Raw`,rawTitle:`Spec Raw — sem geração por IA na criação`,contract:`Contract`,openParentEpicTitle:`Abrir o Épico pai #{{id}} · {{title}}`},i={deleteSpec:`Eliminar spec #{{id}}`,deleteTicket:`Eliminar ticket #{{id}}`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Depende de {{count}}`,continueEditing:`Continuar a editar`,continueEditingTitle:`Continuar a editar esta spec`,moveToRail:`Mover para um rail`},a={noTickets:`Ainda não há tickets`,noTicketsHint:`Crie o seu primeiro ticket ou execute um comando de product backlog para preencher os tickets`,createFirst:`Criar o seu primeiro ticket`},o={loadFailed:`Falha ao carregar os tickets`},s={status:{draft:`rascunho`,todo:`por fazer`,inProgress:`em curso`,done:`concluído`,cancelled:`cancelado`},filterAll:`Todos ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`Todas as etiquetas`,searchPlaceholder:`Pesquisar...`,columns:{status:`Estado`,title:`Título`,priority:`Prioridade`,labels:`Etiquetas`,updated:`Atualizado`},noMatch:`Nenhum ticket corresponde aos seus filtros`,clearFilters:`Limpar filtros`,loadMore:`Carregar mais ({{count}} restantes)`},c={emptyTodo:`Sem tickets por fazer`,emptyInProgress:`Nada em curso`,emptyDone:`Sem tickets concluídos`,cancelledSection:`Cancelados ({{count}})`},l={ariaLabel:`Filtrar por estado`,all:`Todos`,todo:`Por fazer`,done:`Concluído`},u={modeAriaLabel:`Modo de ordenação`,tooltip:`Ordenar: {{mode}}`,toggleDirAriaLabel:`Inverter a direção da ordenação`,ascending:`Ascendente`,descending:`Descendente`,modes:{default:`Predefinida`,ticketId:`Ticket #`,priority:`Prioridade`,jiraKey:`Ticket do Jira #`}},d={ariaLabel:`Vista de specs`,listView:`Vista de lista`,postitView:`Vista de post-its`},f={ariaLabel:`Filtrar por etiquetas`,all:`Todas`,empty:`Não há etiquetas neste projeto.`,selected_one:`{{count}} etiqueta`,selected_other:`{{count}} etiquetas`,clear:`limpar`},p={all:`Todos os épicos`,ariaLabel:`Filtrar por épico`},m={current:`Atual`,all:`Todos os sprints`,ariaLabel:`Filtrar por sprint`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
@@ -1 +1 @@
1
- var e={title:`スペック`,dropHere:`ここにドロップ`,emptyNoSpecs:`スペックはまだありません`,emptyNoLabelMatch:`アクティブなラベルに一致するスペックはありません`,emptyNoActiveSpecs:`アクティブなスペックはありません`,emptyHint:`「+ 追加」をクリックして開始`,dropToMarkDone:`ドロップして完了にする`,emptyNoDoneLabelMatch:`アクティブなラベルに一致する完了スペックはありません`,emptyNoCompleted:`完了したスペックはまだありません`,untitledSpec:`無題のスペック`},t={todo:`Todo`,inProgress:`進行中`,done:`完了`,cancelled:`キャンセル`},n={critical:`クリティカル`,high:`高`,medium:`中`,low:`低`},r={epic:`エピック`,epicWithCount:`エピック · {{count}}`,subSpec:`↑ Sub-Spec`,review:`レビュー`,needsReviewTitle:`このスペックは完了とマークされましたが、ジョブが失敗で終了しました — 確認してください`,raw:`Raw`,rawTitle:`Raw スペック — 取り込み時に AI 生成なし`,contract:`Contract`,openParentEpicTitle:`親エピック #{{id}} を開く · {{title}}`},i={deleteSpec:`スペック #{{id}} を削除`,deleteTicket:`チケット #{{id}} を削除`,ticketFallbackLabel:`チケット #{{id}}`,dependsOn:`{{count}} 件に依存`,continueEditing:`編集を続ける`,continueEditingTitle:`このスペックの編集を続ける`,moveToRail:`レールに移動`},a={noTickets:`チケットはまだありません`,noTicketsHint:`最初のチケットを作成するか、プロダクトバックログコマンドを実行してチケットを生成してください`,createFirst:`最初のチケットを作成`},o={loadFailed:`チケットの読み込みに失敗しました`},s={status:{draft:`下書き`,todo:`Todo`,inProgress:`進行中`,done:`完了`,cancelled:`キャンセル`},filterAll:`すべて ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`すべてのラベル`,searchPlaceholder:`検索...`,columns:{status:`ステータス`,title:`タイトル`,priority:`優先度`,labels:`ラベル`,updated:`更新`},noMatch:`フィルターに一致するチケットはありません`,clearFilters:`フィルターをクリア`,loadMore:`さらに読み込む(残り {{count}} 件)`},c={emptyTodo:`未着手のチケットはありません`,emptyInProgress:`進行中のものはありません`,emptyDone:`完了したチケットはありません`,cancelledSection:`キャンセル ({{count}})`},l={ariaLabel:`ステータスで絞り込み`,all:`すべて`,todo:`ToDo`,done:`完了`},u={modeAriaLabel:`並べ替えモード`,tooltip:`並べ替え: {{mode}}`,toggleDirAriaLabel:`並べ替え方向を切り替え`,ascending:`昇順`,descending:`降順`,modes:{default:`デフォルト`,ticketId:`チケット #`,priority:`優先度`}},d={ariaLabel:`スペック表示`,listView:`リスト表示`,postitView:`付箋表示`},f={ariaLabel:`ラベルで絞り込み`,all:`すべて`,empty:`このプロジェクトにラベルはありません。`,selected_one:`{{count}} 件のラベル`,selected_other:`{{count}} 件のラベル`,clear:`クリア`},p={all:`すべてのエピック`,ariaLabel:`エピックで絞り込み`},m={current:`現在`,all:`すべてのスプリント`,ariaLabel:`スプリントで絞り込み`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
1
+ var e={title:`スペック`,dropHere:`ここにドロップ`,emptyNoSpecs:`スペックはまだありません`,emptyNoLabelMatch:`アクティブなラベルに一致するスペックはありません`,emptyNoActiveSpecs:`アクティブなスペックはありません`,emptyHint:`「+ 追加」をクリックして開始`,dropToMarkDone:`ドロップして完了にする`,emptyNoDoneLabelMatch:`アクティブなラベルに一致する完了スペックはありません`,emptyNoCompleted:`完了したスペックはまだありません`,untitledSpec:`無題のスペック`},t={todo:`Todo`,inProgress:`進行中`,done:`完了`,cancelled:`キャンセル`},n={critical:`クリティカル`,high:`高`,medium:`中`,low:`低`},r={epic:`エピック`,epicWithCount:`エピック · {{count}}`,subSpec:`↑ Sub-Spec`,review:`レビュー`,needsReviewTitle:`このスペックは完了とマークされましたが、ジョブが失敗で終了しました — 確認してください`,raw:`Raw`,rawTitle:`Raw スペック — 取り込み時に AI 生成なし`,contract:`Contract`,openParentEpicTitle:`親エピック #{{id}} を開く · {{title}}`},i={deleteSpec:`スペック #{{id}} を削除`,deleteTicket:`チケット #{{id}} を削除`,ticketFallbackLabel:`チケット #{{id}}`,dependsOn:`{{count}} 件に依存`,continueEditing:`編集を続ける`,continueEditingTitle:`このスペックの編集を続ける`,moveToRail:`レールに移動`},a={noTickets:`チケットはまだありません`,noTicketsHint:`最初のチケットを作成するか、プロダクトバックログコマンドを実行してチケットを生成してください`,createFirst:`最初のチケットを作成`},o={loadFailed:`チケットの読み込みに失敗しました`},s={status:{draft:`下書き`,todo:`Todo`,inProgress:`進行中`,done:`完了`,cancelled:`キャンセル`},filterAll:`すべて ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`すべてのラベル`,searchPlaceholder:`検索...`,columns:{status:`ステータス`,title:`タイトル`,priority:`優先度`,labels:`ラベル`,updated:`更新`},noMatch:`フィルターに一致するチケットはありません`,clearFilters:`フィルターをクリア`,loadMore:`さらに読み込む(残り {{count}} 件)`},c={emptyTodo:`未着手のチケットはありません`,emptyInProgress:`進行中のものはありません`,emptyDone:`完了したチケットはありません`,cancelledSection:`キャンセル ({{count}})`},l={ariaLabel:`ステータスで絞り込み`,all:`すべて`,todo:`ToDo`,done:`完了`},u={modeAriaLabel:`並べ替えモード`,tooltip:`並べ替え: {{mode}}`,toggleDirAriaLabel:`並べ替え方向を切り替え`,ascending:`昇順`,descending:`降順`,modes:{default:`デフォルト`,ticketId:`チケット #`,priority:`優先度`,jiraKey:`Jira チケット #`}},d={ariaLabel:`スペック表示`,listView:`リスト表示`,postitView:`付箋表示`},f={ariaLabel:`ラベルで絞り込み`,all:`すべて`,empty:`このプロジェクトにラベルはありません。`,selected_one:`{{count}} 件のラベル`,selected_other:`{{count}} 件のラベル`,clear:`クリア`},p={all:`すべてのエピック`,ariaLabel:`エピックで絞り込み`},m={current:`現在`,all:`すべてのスプリント`,ariaLabel:`スプリントで絞り込み`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
@@ -1 +1 @@
1
- var e={title:`Spec`,dropHere:`拖放到此处`,emptyNoSpecs:`暂无 spec`,emptyNoLabelMatch:`没有符合所选标签的 spec`,emptyNoActiveSpecs:`没有进行中的 spec`,emptyHint:`点击“+ 添加”开始`,dropToMarkDone:`拖放至此标记为完成`,emptyNoDoneLabelMatch:`没有符合所选标签的已完成 spec`,emptyNoCompleted:`暂无已完成的 spec`,untitledSpec:`未命名 spec`},t={todo:`待办`,inProgress:`进行中`,done:`完成`,cancelled:`已取消`},n={critical:`紧急`,high:`高`,medium:`中`,low:`低`},r={epic:`Epic`,epicWithCount:`Epic · {{count}}`,subSpec:`↑ 子 Spec`,review:`待审查`,needsReviewTitle:`此 spec 已标记为完成,但其任务以失败告终——请审查`,raw:`Raw`,rawTitle:`Raw spec——录入时不经过 AI 生成`,contract:`Contract`,openParentEpicTitle:`打开父级 Epic #{{id}} · {{title}}`},i={deleteSpec:`删除 spec #{{id}}`,deleteTicket:`删除工单 #{{id}}`,ticketFallbackLabel:`工单 #{{id}}`,dependsOn:`依赖 {{count}} 项`,continueEditing:`继续编辑`,continueEditingTitle:`继续编辑此 spec`,moveToRail:`放入 Rail`},a={noTickets:`暂无工单`,noTicketsHint:`创建第一个工单,或运行 product backlog 命令来填充工单`,createFirst:`创建第一个工单`},o={loadFailed:`加载工单失败`},s={status:{draft:`草稿`,todo:`待办`,inProgress:`进行中`,done:`完成`,cancelled:`已取消`},filterAll:`全部({{count}})`,statusWithCount:`{{status}}({{count}})`,allLabels:`全部标签`,searchPlaceholder:`搜索…`,columns:{status:`状态`,title:`标题`,priority:`优先级`,labels:`标签`,updated:`更新时间`},noMatch:`没有符合筛选条件的工单`,clearFilters:`清除筛选`,loadMore:`加载更多(剩余 {{count}} 个)`},c={emptyTodo:`没有待办工单`,emptyInProgress:`没有进行中的工单`,emptyDone:`没有已完成的工单`,cancelledSection:`已取消({{count}})`},l={ariaLabel:`按状态筛选`,all:`全部`,todo:`待办`,done:`完成`},u={modeAriaLabel:`排序方式`,tooltip:`排序:{{mode}}`,toggleDirAriaLabel:`切换排序方向`,ascending:`升序`,descending:`降序`,modes:{default:`默认`,ticketId:`工单 #`,priority:`优先级`}},d={ariaLabel:`Spec 视图`,listView:`列表视图`,postitView:`便签视图`},f={ariaLabel:`按标签筛选`,all:`全部`,empty:`此项目没有标签。`,selected_one:`{{count}} 个标签`,selected_other:`{{count}} 个标签`,clear:`清除`},p={all:`所有史诗`,ariaLabel:`按史诗筛选`},m={current:`当前`,all:`所有冲刺`,ariaLabel:`按冲刺筛选`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
1
+ var e={title:`Spec`,dropHere:`拖放到此处`,emptyNoSpecs:`暂无 spec`,emptyNoLabelMatch:`没有符合所选标签的 spec`,emptyNoActiveSpecs:`没有进行中的 spec`,emptyHint:`点击“+ 添加”开始`,dropToMarkDone:`拖放至此标记为完成`,emptyNoDoneLabelMatch:`没有符合所选标签的已完成 spec`,emptyNoCompleted:`暂无已完成的 spec`,untitledSpec:`未命名 spec`},t={todo:`待办`,inProgress:`进行中`,done:`完成`,cancelled:`已取消`},n={critical:`紧急`,high:`高`,medium:`中`,low:`低`},r={epic:`Epic`,epicWithCount:`Epic · {{count}}`,subSpec:`↑ 子 Spec`,review:`待审查`,needsReviewTitle:`此 spec 已标记为完成,但其任务以失败告终——请审查`,raw:`Raw`,rawTitle:`Raw spec——录入时不经过 AI 生成`,contract:`Contract`,openParentEpicTitle:`打开父级 Epic #{{id}} · {{title}}`},i={deleteSpec:`删除 spec #{{id}}`,deleteTicket:`删除工单 #{{id}}`,ticketFallbackLabel:`工单 #{{id}}`,dependsOn:`依赖 {{count}} 项`,continueEditing:`继续编辑`,continueEditingTitle:`继续编辑此 spec`,moveToRail:`放入 Rail`},a={noTickets:`暂无工单`,noTicketsHint:`创建第一个工单,或运行 product backlog 命令来填充工单`,createFirst:`创建第一个工单`},o={loadFailed:`加载工单失败`},s={status:{draft:`草稿`,todo:`待办`,inProgress:`进行中`,done:`完成`,cancelled:`已取消`},filterAll:`全部({{count}})`,statusWithCount:`{{status}}({{count}})`,allLabels:`全部标签`,searchPlaceholder:`搜索…`,columns:{status:`状态`,title:`标题`,priority:`优先级`,labels:`标签`,updated:`更新时间`},noMatch:`没有符合筛选条件的工单`,clearFilters:`清除筛选`,loadMore:`加载更多(剩余 {{count}} 个)`},c={emptyTodo:`没有待办工单`,emptyInProgress:`没有进行中的工单`,emptyDone:`没有已完成的工单`,cancelledSection:`已取消({{count}})`},l={ariaLabel:`按状态筛选`,all:`全部`,todo:`待办`,done:`完成`},u={modeAriaLabel:`排序方式`,tooltip:`排序:{{mode}}`,toggleDirAriaLabel:`切换排序方向`,ascending:`升序`,descending:`降序`,modes:{default:`默认`,ticketId:`工单 #`,priority:`优先级`,jiraKey:`Jira 工单 #`}},d={ariaLabel:`Spec 视图`,listView:`列表视图`,postitView:`便签视图`},f={ariaLabel:`按标签筛选`,all:`全部`,empty:`此项目没有标签。`,selected_one:`{{count}} 个标签`,selected_other:`{{count}} 个标签`,clear:`清除`},p={all:`所有史诗`,ariaLabel:`按史诗筛选`},m={current:`当前`,all:`所有冲刺`,ariaLabel:`按冲刺筛选`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
@@ -1 +1 @@
1
- var e={title:`Spec`,dropHere:`Suelta aquí`,emptyNoSpecs:`Aún no hay specs`,emptyNoLabelMatch:`Ninguna spec coincide con las etiquetas activas`,emptyNoActiveSpecs:`No hay specs activas`,emptyHint:`Haz clic en «+ Añadir» para empezar`,dropToMarkDone:`Suelta para marcar como hecha`,emptyNoDoneLabelMatch:`Ninguna spec hecha coincide con las etiquetas activas`,emptyNoCompleted:`Aún no hay specs completadas`,untitledSpec:`Spec sin título`},t={todo:`Por hacer`,inProgress:`En curso`,done:`Hecho`,cancelled:`Cancelado`},n={critical:`crítica`,high:`alta`,medium:`media`,low:`baja`},r={epic:`Épica`,epicWithCount:`Épica · {{count}}`,subSpec:`↑ Sub-Spec`,review:`Revisar`,needsReviewTitle:`Esta spec se marcó como hecha pero su job terminó en fallo — revísala`,raw:`Raw`,rawTitle:`Spec Raw — sin generación con IA al crearla`,contract:`Contract`,openParentEpicTitle:`Abrir la épica padre #{{id}} · {{title}}`},i={deleteSpec:`Eliminar spec #{{id}}`,deleteTicket:`Eliminar ticket #{{id}}`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Depende de {{count}}`,continueEditing:`Seguir editando`,continueEditingTitle:`Seguir editando esta spec`,moveToRail:`Mover a un rail`},a={noTickets:`Aún no hay tickets`,noTicketsHint:`Crea tu primer ticket o ejecuta un comando de product backlog para generar tickets`,createFirst:`Crea tu primer ticket`},o={loadFailed:`No se pudieron cargar los tickets`},s={status:{draft:`borrador`,todo:`por hacer`,inProgress:`en curso`,done:`hecho`,cancelled:`cancelado`},filterAll:`Todos ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`Todas las etiquetas`,searchPlaceholder:`Buscar...`,columns:{status:`Estado`,title:`Título`,priority:`Prioridad`,labels:`Etiquetas`,updated:`Actualizado`},noMatch:`Ningún ticket coincide con tus filtros`,clearFilters:`Limpiar filtros`,loadMore:`Cargar más ({{count}} restantes)`},c={emptyTodo:`No hay tickets por hacer`,emptyInProgress:`Nada en curso`,emptyDone:`No hay tickets completados`,cancelledSection:`Cancelados ({{count}})`},l={ariaLabel:`Filtrar por estado`,all:`Todos`,todo:`Por hacer`,done:`Hechos`},u={modeAriaLabel:`Modo de ordenación`,tooltip:`Ordenar: {{mode}}`,toggleDirAriaLabel:`Cambiar dirección de ordenación`,ascending:`Ascendente`,descending:`Descendente`,modes:{default:`Por defecto`,ticketId:`Ticket #`,priority:`Prioridad`}},d={ariaLabel:`Vista de specs`,listView:`Vista de lista`,postitView:`Vista post-it`},f={ariaLabel:`Filtrar por etiquetas`,all:`Todas`,empty:`No hay etiquetas en este proyecto.`,selected_one:`{{count}} etiqueta`,selected_other:`{{count}} etiquetas`,clear:`limpiar`},p={all:`Todas las épicas`,ariaLabel:`Filtrar por épica`},m={current:`Actual`,all:`Todos los sprints`,ariaLabel:`Filtrar por sprint`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
1
+ var e={title:`Spec`,dropHere:`Suelta aquí`,emptyNoSpecs:`Aún no hay specs`,emptyNoLabelMatch:`Ninguna spec coincide con las etiquetas activas`,emptyNoActiveSpecs:`No hay specs activas`,emptyHint:`Haz clic en «+ Añadir» para empezar`,dropToMarkDone:`Suelta para marcar como hecha`,emptyNoDoneLabelMatch:`Ninguna spec hecha coincide con las etiquetas activas`,emptyNoCompleted:`Aún no hay specs completadas`,untitledSpec:`Spec sin título`},t={todo:`Por hacer`,inProgress:`En curso`,done:`Hecho`,cancelled:`Cancelado`},n={critical:`crítica`,high:`alta`,medium:`media`,low:`baja`},r={epic:`Épica`,epicWithCount:`Épica · {{count}}`,subSpec:`↑ Sub-Spec`,review:`Revisar`,needsReviewTitle:`Esta spec se marcó como hecha pero su job terminó en fallo — revísala`,raw:`Raw`,rawTitle:`Spec Raw — sin generación con IA al crearla`,contract:`Contract`,openParentEpicTitle:`Abrir la épica padre #{{id}} · {{title}}`},i={deleteSpec:`Eliminar spec #{{id}}`,deleteTicket:`Eliminar ticket #{{id}}`,ticketFallbackLabel:`Ticket #{{id}}`,dependsOn:`Depende de {{count}}`,continueEditing:`Seguir editando`,continueEditingTitle:`Seguir editando esta spec`,moveToRail:`Mover a un rail`},a={noTickets:`Aún no hay tickets`,noTicketsHint:`Crea tu primer ticket o ejecuta un comando de product backlog para generar tickets`,createFirst:`Crea tu primer ticket`},o={loadFailed:`No se pudieron cargar los tickets`},s={status:{draft:`borrador`,todo:`por hacer`,inProgress:`en curso`,done:`hecho`,cancelled:`cancelado`},filterAll:`Todos ({{count}})`,statusWithCount:`{{status}} ({{count}})`,allLabels:`Todas las etiquetas`,searchPlaceholder:`Buscar...`,columns:{status:`Estado`,title:`Título`,priority:`Prioridad`,labels:`Etiquetas`,updated:`Actualizado`},noMatch:`Ningún ticket coincide con tus filtros`,clearFilters:`Limpiar filtros`,loadMore:`Cargar más ({{count}} restantes)`},c={emptyTodo:`No hay tickets por hacer`,emptyInProgress:`Nada en curso`,emptyDone:`No hay tickets completados`,cancelledSection:`Cancelados ({{count}})`},l={ariaLabel:`Filtrar por estado`,all:`Todos`,todo:`Por hacer`,done:`Hechos`},u={modeAriaLabel:`Modo de ordenación`,tooltip:`Ordenar: {{mode}}`,toggleDirAriaLabel:`Cambiar dirección de ordenación`,ascending:`Ascendente`,descending:`Descendente`,modes:{default:`Por defecto`,ticketId:`Ticket #`,priority:`Prioridad`,jiraKey:`Ticket de Jira #`}},d={ariaLabel:`Vista de specs`,listView:`Vista de lista`,postitView:`Vista post-it`},f={ariaLabel:`Filtrar por etiquetas`,all:`Todas`,empty:`No hay etiquetas en este proyecto.`,selected_one:`{{count}} etiqueta`,selected_other:`{{count}} etiquetas`,clear:`limpiar`},p={all:`Todas las épicas`,ariaLabel:`Filtrar por épica`},m={current:`Actual`,all:`Todos los sprints`,ariaLabel:`Filtrar por sprint`},h={board:e,status:t,priority:n,badges:r,card:i,emptyState:a,errors:o,listView:s,gridView:c,statusFilter:l,sortControl:u,viewTier:d,labelFilter:f,epicFilter:p,sprintFilter:m};export{r as badges,e as board,i as card,h as default,a as emptyState,p as epicFilter,o as errors,c as gridView,f as labelFilter,s as listView,n as priority,u as sortControl,m as sprintFilter,t as status,l as statusFilter,d as viewTier};
@@ -1 +1 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{on as t}from"./index-DGIXKRHE.js";var n=e(t(),1),r=new Map;function i(e,t){return`${e}:${t}`}function a({namespace:e,projectId:t,initialValue:a,fetcher:o,pollInterval:s=0}){let c=t?i(t,e):null,[l,u]=(0,n.useState)(()=>c&&r.has(c)?r.get(c):a),[d,f]=(0,n.useState)(()=>c?!r.has(c):!0),[p,m]=(0,n.useState)(d),h=(0,n.useRef)(o);h.current=o;let g=(0,n.useRef)(c);return g.current=c,(0,n.useEffect)(()=>{if(!c)return;let e=r.get(c);e===void 0?(u(a),f(!0),m(!0)):(u(e),f(!1),m(!1));let t=!1;async function n(){try{let e=await h.current();if(t)return;r.set(c,e),u(e)}catch{}finally{t||(m(!1),f(!1))}}n();let i;return s>0&&(i=setInterval(n,s)),()=>{t=!0,i&&clearInterval(i)}},[c,s]),{data:l,isLoading:p,isFirstLoad:d,refresh:(0,n.useCallback)(()=>{if(!c)return;let e=c;h.current().then(t=>{r.set(e,t),g.current===e&&u(t)}).catch(()=>{})},[c])}}export{a as t};
1
+ import{r as e}from"./chunk-CilyBKbf.js";import{sn as t}from"./index-B9IKK_QQ.js";var n=e(t(),1),r=new Map;function i(e,t){return`${e}:${t}`}function a({namespace:e,projectId:t,initialValue:a,fetcher:o,pollInterval:s=0}){let c=t?i(t,e):null,[l,u]=(0,n.useState)(()=>c&&r.has(c)?r.get(c):a),[d,f]=(0,n.useState)(()=>c?!r.has(c):!0),[p,m]=(0,n.useState)(d),h=(0,n.useRef)(o);h.current=o;let g=(0,n.useRef)(c);return g.current=c,(0,n.useEffect)(()=>{if(!c)return;let e=r.get(c);e===void 0?(u(a),f(!0),m(!0)):(u(e),f(!1),m(!1));let t=!1;async function n(){try{let e=await h.current();if(t)return;r.set(c,e),u(e)}catch{}finally{t||(m(!1),f(!1))}}n();let i;return s>0&&(i=setInterval(n,s)),()=>{t=!0,i&&clearInterval(i)}},[c,s]),{data:l,isLoading:p,isFirstLoad:d,refresh:(0,n.useCallback)(()=>{if(!c)return;let e=c;h.current().then(t=>{r.set(e,t),g.current===e&&u(t)}).catch(()=>{})},[c])}}export{a as t};