copilot-operator 0.1.10 → 0.1.12

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 (58) hide show
  1. package/dist/src/api/operator.controller.js +12 -1
  2. package/dist/src/api/operator.service.js +92 -7
  3. package/dist/src/config/schema.js +20 -3
  4. package/dist/src/context/desktopMirror.js +34 -12
  5. package/dist/src/context/projectMirror.js +69 -1
  6. package/dist/src/orchestrator/contract.js +56 -1
  7. package/dist/src/orchestrator/taskRunner.js +160 -13
  8. package/dist/src/plan/brief.js +20 -8
  9. package/dist/src/plan/systemGuide.js +74 -10
  10. package/dist/src/session/compose.js +17 -2
  11. package/dist/src/session/exportRecord.js +8 -1
  12. package/dist/src/session/handoff.js +41 -3
  13. package/dist/src/session/model.js +9 -0
  14. package/dist/src/session/store.js +11 -7
  15. package/dist/src/session/story.js +74 -18
  16. package/dist/src/transport/chatTransport.js +1 -0
  17. package/dist/src/transport/copilotTransport.js +89 -8
  18. package/dist/src/vcs/git.js +15 -0
  19. package/dist/src/vcs/syncCommand.js +105 -0
  20. package/dist/src/vcs/taskVcs.js +29 -6
  21. package/dist/web/404.html +2 -2
  22. package/dist/web/_next/static/chunks/295-04151ded0741d18d.js +1 -0
  23. package/dist/web/_next/static/chunks/36-c3dd06c6a459c114.js +1 -0
  24. package/dist/web/_next/static/chunks/549-a5a59a94f92bb3eb.js +1 -0
  25. package/dist/web/_next/static/chunks/867-b64c436f5b25f39e.js +1 -0
  26. package/dist/web/_next/static/chunks/app/defaults/page-5f180a88398be4c9.js +1 -0
  27. package/dist/web/_next/static/chunks/app/history/page-854e3dde672e38a2.js +1 -0
  28. package/dist/web/_next/static/chunks/app/page-13572a726de0b7db.js +1 -0
  29. package/dist/web/_next/static/chunks/app/sessions/view/page-cc99401da5173b36.js +1 -0
  30. package/dist/web/_next/static/css/{20c6b36996df5e4c.css → a0642fdb8adf9edb.css} +1 -1
  31. package/dist/web/appearance.html +2 -2
  32. package/dist/web/appearance.txt +12 -12
  33. package/dist/web/defaults.html +2 -2
  34. package/dist/web/defaults.txt +12 -12
  35. package/dist/web/history.html +2 -2
  36. package/dist/web/history.txt +12 -12
  37. package/dist/web/import.html +2 -2
  38. package/dist/web/import.txt +12 -12
  39. package/dist/web/index.html +2 -2
  40. package/dist/web/index.txt +12 -12
  41. package/dist/web/level1.html +2 -2
  42. package/dist/web/level1.txt +12 -12
  43. package/dist/web/presets.html +2 -2
  44. package/dist/web/presets.txt +12 -12
  45. package/dist/web/sessions/view.html +2 -2
  46. package/dist/web/sessions/view.txt +12 -12
  47. package/dist/web/system.html +2 -2
  48. package/dist/web/system.txt +12 -12
  49. package/package.json +7 -3
  50. package/dist/web/_next/static/chunks/36-17a3bcb0c2553c7c.js +0 -1
  51. package/dist/web/_next/static/chunks/549-43d1a5681752fbd4.js +0 -1
  52. package/dist/web/_next/static/chunks/867-5ae3adf431bd10a2.js +0 -1
  53. package/dist/web/_next/static/chunks/app/defaults/page-0f88c46dcd9dd52c.js +0 -1
  54. package/dist/web/_next/static/chunks/app/history/page-a9f2060f86a4a10e.js +0 -1
  55. package/dist/web/_next/static/chunks/app/page-2ac6b67f4ddcb808.js +0 -1
  56. package/dist/web/_next/static/chunks/app/sessions/view/page-fb634b39ce9ba4a3.js +0 -1
  57. /package/dist/web/_next/static/{d6YL07r-SeksvVLrCSZ3o → bcBE4tY_aNh6kzLzN1luP}/_buildManifest.js +0 -0
  58. /package/dist/web/_next/static/{d6YL07r-SeksvVLrCSZ3o → bcBE4tY_aNh6kzLzN1luP}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[867],{867:(e,t,s)=>{s.d(t,{LanguageProvider:()=>h,c5:()=>l,W3:()=>c,kj:()=>d});var n=s(3365),o=s(1521);let a={en:{"nav.label":"Main","nav.sessions":"Sessions","nav.live":"live","nav.liveTitle":"The bot is working right now: {n} session(s) running. Open the register to watch it.","nav.history":"Task register","nav.level1":"Level 1 prompt","nav.presets":"Level 2 presets","nav.appearance":"Appearance","nav.system":"System","dialog.confirmTitle":"Are you sure?","dialog.noticeTitle":"Notice","dialog.ok":"OK","dialog.cancel":"Cancel","batch.runName":"Name of this run","batch.runNamePlaceholder":"e.g. rules-engine, second attempt","batch.runNameWhy":"The register groups the tasks of a run under it and the exported files are named after it. Left empty, the plan the sessions came from gives its name; without one, the run goes by its id.","reg.runUnnamed":"Unnamed run","reg.runBy":"{name} \xb7 {t} task(s) in {s} session(s)","reg.runCounts":"{done} done \xb7 {failed} failed","reg.exportTitle":"Download as JSON","reg.exportPlan":"plan","reg.exportPlanWhy":"What was asked: the tasks in the plan format, as they are now, with the edits made in the UI. Imports again.","reg.exportDomain":"work","reg.exportDomainWhy":"What happened to the work: the task, what the chat tried, what was actually done, and why it did not end done.","reg.exportBot":"runner","reg.exportBotWhy":"What the runner did: environment, every event and step with its exit code, the transport, the reaper, the review machinery.","reg.exportRunTitle":"The whole run as JSON","reg.pick":"Choose tasks","reg.pickWhy":"Tick the tasks you want in one file, across runs and sessions. Nothing else changes.","reg.pickDone":"Done choosing","reg.pickAll":"All of them","reg.pickNone":"None","reg.pickedN":"{n} chosen","reg.pickedNone":"Nothing chosen yet — tick a task below.","reg.bundle":"Download plan, work and runner for the {n} chosen, as one file","reg.bundleWhy":"One JSON holding all three views of exactly the tasks you ticked: what was asked, what happened to it, and what the machine did. This is the file to hand to a chat model when you want it to work out why something went the way it did.","reg.bundleSaved":"Saved as {name}.","reg.fixPrompt":"Fix the prompt and queue it again","reg.fixPromptTitle":'The prompt of "{title}"',"reg.fixPromptHint":"The task text, as it will be sent, and below it which of its checks still apply and what it may change. Level 2 and the git names stay as they are. Saving queues the task again; the attempt that ran keeps the text it ran with.","reg.fixPromptSave":"Save and queue again","reg.newPrompt":"Give it a new prompt and queue it again","reg.newPromptHint":'The task ended done. Write what it should do now: the new attempt works on top of what it did — on its branch, with its files in place — and is told this is a new instruction. Below: which of its checks still apply (none are kept unless ticked) and what it may change. Saving starts nothing: then "Continue" and "only this one".',"reg.fixPromptSaved":'"{title}" is queued again with the new prompt. Start the session, or run it again from here.',"reg.fixPromptLoading":"reading the task…","reg.newTask":"New task","reg.newTaskIn":"in session","reg.newTaskNoSessions":"There is no session yet; create one first.","reg.newSession":"New session","reg.newTaskPick":"choose a session…","reg.retriedFreshDone":"blocked, then done in a fresh chat ({n}\xd7)","reg.retriedFreshStill":"still blocked after {n} fresh chat(s)","reg.retriedFreshWhy":"The runner ran this task again in a new conversation after it ended blocked. Done afterwards means the chat was the cause; blocked again means it was not: read the task text, the checks and the machine.","exec.title":"Execution","exec.intro":"How a run behaves when a task does not end done. Saved in data/settings.json; applies to runs started from now on.","exec.maxIterations":"Most messages to the chat in one task","exec.maxIterationsUnit":'messages, then the task stops as "limit reached"',"exec.maxIterationsWhy":"Each message is one round: the chat sends steps, the runner runs them and reports back. This stops a task that goes round in circles; it is not what limits traffic — that is the hourly cap, which waits instead of stopping. A task that stops here can be continued in the same chat.","exec.maxRunMinutes":"Longest a task may run","exec.maxRunMinutesUnit":"minutes","exec.maxRunMinutesWhy":"Counted from the task's first message, waits for the hourly cap included. A task that stops here can be continued in the same chat.","exec.replyTimeout":"How long to wait for a reply from the chat","exec.replyTimeoutUnit":"seconds (900 = 15 minutes)","exec.replyTimeoutWhy":'From sending a message to the reply having finished. A reply not finished by then ends the task as failed — "Copilot did not finish a reply within …" — with a screenshot of the chat in the run folder. The slower models and long answers can take several minutes. Applies to runs started from now on.',"sync.show":"Command to bring this project back to the remote main branch","sync.what":"The command below fetches, puts the current branch {branch} exactly where {target} is, and deletes the new files git does not ignore.","sync.fetchedAt":"What would be lost is measured against {target} as last fetched, {when}.","sync.neverFetched":"This repository has not fetched yet, so what would be lost is measured against an old copy of the remote.","sync.nothingLost":"Nothing would be lost: no commits of its own, no changes, no new files.","sync.loses":"This would be lost:","sync.commits":"{n} commit(s) on this branch that the remote main does not have (git keeps them in its reflog for a while):","sync.changed":"{n} changed file(s) that are not committed:","sync.untracked":"{n} new file(s) or folder(s) git does not ignore:","sync.more":"and {n} more","sync.keeps":"Ignored files — node_modules, .env, build output — are left alone, and so is anything you have stashed.","sync.copyPreview":"Copy the preview (changes nothing)","sync.copyCommand":"Copy the command","sync.howToRun":"Paste it into PowerShell and run it yourself. The bot never runs it: it throws work away. Run the preview first if in doubt.","exec.minApproaches":"Approaches the chat must try before it may give up","exec.minApproachesUnit":'different approaches, then "blocked" is accepted',"exec.minApproachesWhy":'A task ends "blocked" when the chat says it cannot finish and lists what it tried. With fewer approaches than this, the runner sends it back asking for another, different one. The format\'s own minimum is 2. Three "blocked" replies in a row with nothing new tried are accepted anyway.',"exec.retryBlocked":"When a task ends blocked, run it again in a fresh conversation","exec.retryBlockedTimes":"times, then accept the verdict","exec.retryBlockedWhy":"The runner cannot tell why a task blocked: the prompt, the machine, or the chat itself — a long conversation whose early turns Copilot can no longer see. A fresh chat, with the contract sent again, cures a cause in the chat and nothing else. A task that comes back done was blocked by the chat; one that blocks again was not, and both attempts stay on its record. 0 turns this off.","exec.isolation":"Where the bot runs","exec.isolationNone":"Nowhere in particular — this account","exec.isolationNoneAccepted":"This account — I accept unattended runs without isolation","exec.isolationAccount":"A separate low-privilege Windows account","exec.isolationSandbox":"Windows Sandbox","exec.isolationVm":"A virtual machine","exec.isolationWhy":'Commands written by the model run as whoever this process is. Saying so here is what lets a run go unattended: with "nowhere in particular" chosen, a run without a person watching is refused, because nobody watching and nothing containing is the combination this will not be — unless you choose "I accept unattended runs without isolation", which allows it on your responsibility and is recorded with every run as exactly that. It is your statement, not a check — the runner records it, notes the account it actually holds, and says so when the two disagree.',"exec.startMode":"Starting a run without supervision","exec.startModeAsk":'Ask "are you sure" every time',"exec.startModeAuto":"Start it without asking","exec.startModeWhy":'The run buttons that work through the queue on their own ask "are you sure" before they start. Choose "Start it without asking" and they simply start — you decided once, here. "Step by step" is still there beside them, and the list of forbidden commands still applies. A run on this machine can only go without supervision if "Where the bot runs" above allows it.',"exec.networkFetch":"A command that downloads, in a run without supervision","exec.networkFetchAsk":"Wait for me on the approval screen","exec.networkFetchRefuse":"Refuse it and tell the chat why — the run never waits","exec.networkFetchRun":"Run it without asking","exec.networkFetchWhy":"Invoke-WebRequest, curl, wget and the like. Waiting for you is the one stop a run without supervision still makes. Refusing sends the chat the reason and what to do instead (the project’s package manager, or writing the file with a step), so the run goes on without you. Running it means a later step can run what arrived without anyone having read it — choose it only on a machine where that is acceptable; every task records the choice. npm, dotnet, pip and git are never held, and a step-by-step run shows every command whatever is chosen here.","exec.save":"Save","exec.saved":"Saved. Applies to runs started from now on.","story.show":"What happened","story.hide":"Hide what happened","story.why":"The task as given, every message and reply, every command with its output, the review rounds, and how it ended — live while it runs.","story.loading":"reading the run folder…","story.showChat":"the conversation","story.showCommands":"the commands and their output","story.live":"live","story.follow":"↓ follow the newest","diff.open":"See the changes ({n} file(s))","diff.openWhy":"Every file this attempt changed, before on the left and after on the right, with the differences marked.","diff.title":'Changes in "{title}"',"diff.summary":"{n} file(s), +{a} −{r}","diff.keys":"n / p: next and previous change \xb7 ] / [: next and previous file \xb7 Esc: close","diff.close":"Close","diff.loading":"reading…","diff.nothing":"The commit changed no file.","diff.files":"Changed files","diff.binaryShort":"binary","diff.added":"new file","diff.deleted":"deleted","diff.renamed":"renamed","diff.prevChange":"Previous change","diff.nextChange":"Next change","diff.changeN":"change {i} of {n}","diff.prevFile":"Previous file","diff.nextFile":"Next file","diff.whole":"Show the whole file","diff.wrap":"Wrap long lines","diff.binary":"A binary file: its contents are not shown.","diff.tooLarge":"Over 2 MB: too large to show here.","diff.eol":"The line endings changed ({from} → {to}); the lines themselves are compared without them.","diff.sameText":"The text is the same; only the file mode or the line endings changed.","diff.before":"Before","diff.after":"After","diff.gap":"⋯ {n} unchanged line(s) — show them","story.followWhy":"You scrolled up, so the view stopped following. This goes back to the newest line and follows it again.","scroll.top":"To the top of the page","scroll.bottom":"To the bottom of the page","story.showLive":"What is happening now","story.showLiveWhy":"The task is running as you read this: the messages, the commands and their output arrive here as they happen.","row.info":"What are these?","row.infoTitle":"What each of these gives you","row.infoOpenTask":"Opens this task on its session page: the text it was sent, its checks, the review verdict, and the buttons that edit or queue it again.","row.infoChat":"Opens the Microsoft 365 Copilot conversation itself, in a new tab. The bot drives that chat; this is the same thing a person sees.","row.infoExports":"Three JSON files, all about this one task. Hand one to a chat model when you want it to help; they answer different questions:","row.infoWhich":"Debugging a failure usually starts with **work**. **plan** is what you edit and import again. **runner** is for when the machine is the suspect — a missing tool, a held port, a crashed browser.","story.prompt":"The task, as given","story.bot":"bot → chat","story.chat":"chat → bot","story.review":"Review round {n}","story.step":"step {it}.{id}","story.running":"running","story.failedHere":"failed here","story.showOutput":"show output ({n} chars)","story.hideOutput":"hide output","story.showText":"show text ({n} chars)","story.hideText":"hide text","story.ended":"How it ended: done","story.endedBadly":"How it ended: {status}","story.notEnded":"Not ended yet.","sys.profileBot":"In use by the bot's own run right now ({n} Edge process(es)). That is expected while a session runs.","reg.continue":"Continue: run the {n} queued task(s) in {s} session(s)","reg.continueWhy":"Starts every session that still has something queued, in the order shown here, asking before each command.","reg.continueUnattended":"Continue without asking","reg.continueUnattendedWhy":"The same, running every command without stopping for approval.","reg.continueStarted":"Started: {n} session(s), one after another. Watch this page.","reg.continueRunning":"A session is running; it will take its queued tasks in turn.","reg.continuePanelTitle":"Before it continues","reg.continueChain":"These sessions are chains: a failed task stops the rest, and the tasks behind it were written assuming it worked. Each goes back into the queue, in its place — or fix its prompt first:","reg.continueIndependent":"These sessions run independent tasks. Their failed ones are offered; untick any you would rather leave:","reg.continueQueued":"Waiting in the queue:","reg.willContinue":"continues where it stopped","reg.continueHere":"Continue where it stopped","reg.continueHereWhy":"Carries this task on in its own chat and on its own branch, with the count started again. Shows what will happen first.","reg.continueHereTitle":"Continue “{title}” where it stopped","reg.continueHereChat":"Chat: the same conversation. The task is not sent again; the chat is told why it stopped, which steps had run, and to carry on from its plan.","reg.continueHereCommitted":"Branch: {branch}. The work so far is committed there ({commit}), uncommitted and new files included; the task carries on from it.","reg.continueHereNothingNew":"Branch: {branch}. There was nothing new to commit; the task carries on from it.","reg.continueHereNotCommitted":"Branch: {branch}. Nothing was committed: {problem} The files stay as they are in the working tree and the task carries on over them.","reg.continueHereVcsInactive":"Version control was not active for this attempt: {problem} The files stay as they are in the project folder and the task carries on over them.","reg.continueHereNoVcs":"Version control is off for this session: the files stay as they are in the project folder, uncommitted, and the task carries on over them.","reg.continueHereCount":"The limit that stopped it counts from zero again. The attempt that stopped stays on the record.","reg.continueHereStarted":"Continuing “{title}”. Watch this page.","reg.limitChip":"stopped at a limit: {limit}","reg.limitChipWhy":"A limit from the settings ended this attempt, not a verdict on the work. “Continue where it stopped” carries it on.","limit.maxRunMinutes":"{n} minutes per task","limit.maxIterations":"{n} messages per task","limit.replyTimeoutSec":"{n} s waiting for a reply","limit.maxFormatRetries":"{n} replies in the wrong format","limit.maxCheckRounds":"{n} rounds of fixing checks","limit.maxReviewRounds":"{n} rounds of fixing review findings","reg.interruptedTitle":"The bot stopped in the middle of the work.","reg.interrupted":'{n} task(s) were in progress when it stopped — the program was closed, the machine went off or it crashed. Their work so far is kept. "Continue" below carries them on where they stopped, with the rest of the queue.',"reg.continueSummary":"{q} queued task(s) plus {r} put back, in {s} session(s), in the order shown above. Unticked tasks stay where they are.","reg.pickOnly":"only this one","reg.pickOnlyWhy":"Unticks everything else, so this run takes this task alone — for example the one whose prompt you just fixed.","reg.continueGap":"“{task}” ({session}) is part of a chain and runs without “{before}”, which comes before it. Run it alone only if it does not need that task’s work.","reg.continueGo":"Continue, asking before each command","reg.continueNameWhy":"Suggested from the work this continues, and from how many goes at it there have been. The register groups under it and the downloaded files are named after it, so change it if it is wrong.","reg.continueWithFailed":"Continue: run {f} unfinished and {n} queued task(s) in {s} session(s)","reg.willRequeueFirst":"failed — goes back into the queue first","reg.willRequeueFirstWhy":'This session is a chain: the tasks behind this one were written assuming it worked. "Continue" puts it back in the queue in its place; fix its prompt first if it needs it.',"tree.load":"Show the folders","tree.reload":"Read the folders again","tree.hint":"Click a folder to include it with everything beneath; click again to take it out. The − on a row carves that folder out of an included parent. The lists above are what is saved.","tree.fold":"fold","tree.unfold":"unfold","tree.stateIn":"included, with everything beneath it — click to take it out","tree.stateInherited":"included through a folder above it — click to name it on its own","tree.stateOut":"carved out — press − again to put it back","tree.stateOutInherited":"carved out through a folder above it","tree.stateNone":"not included — click to include it with everything beneath","tree.insideIn":"{n} inside","tree.insideOut":"{n} carved out inside","tree.insideBoth":"{i} inside, {e} carved out","tree.insideWhy":"Folders named in the two lists that this one contains. Unfold it to see them.","tree.alsoOut":"Left out without being listed:","tree.alsoGitignore":"everything .gitignore lists, while that switch is on","tree.alsoEnv":".env files, while that switch is off","tree.alsoAlways":"node_modules, .git, dist and the rest of the build output, always","tree.exclude":"carve this folder out","tree.unexclude":"stop carving this folder out","proj.mirrorToDesktop":"Keep the projects on the Desktop","proj.mirrorToDesktopWhy":"The master switch. On, the projects listed here are copied to the Desktop — one folder per project under {root}, each file's name carrying the project's name — and refreshed before a run and after every round of steps while it works, which is how the copies reach OneDrive and the chat's file picker. Each project below has its own tick for whether it is copied, and its own selection of folders. Off, all project folders are removed from the Desktop.","proj.mirrorOn":"Every project is on the Desktop under {root}.","proj.desktopThis":"Keep a copy of this project on the Desktop","proj.desktopMasterOff":'off while "Keep the projects on the Desktop" is off',"proj.desktopOn":"This project is kept on the Desktop.","proj.desktopOff":"This project is no longer kept on the Desktop; its folder there was removed.","proj.mirrorOff":"Nothing is kept on the Desktop.","proj.folders":"Folders that go to the Desktop","proj.foldersHint":"Which of this project's folders are copied. Empty means the whole project, minus what .gitignore lists.","proj.foldersSave":"Save the selection","proj.foldersSaved":"Selection saved.","proj.foldersEdit":"folders","lang.label":"Language","a11y.skip":"Skip to the content","theme.light":"Light","theme.dark":"Dark","theme.toLight":"Switch to the light theme","theme.toDark":"Switch to the dark theme","home.apiDown":"The API is not reachable.","home.noToken":"This browser does not have the key to the API yet.","home.noTokenHint":"Start the interface with {cmd}, which hands it the key; started any other way it has none.","home.apiHint":"Start it from the project folder with {cmd}. Expected at {url}.","home.new":"New session","home.newHint":"A session is one Copilot conversation. Tasks inside it run one after another in that same chat, so later tasks can build on earlier ones.","home.namePlaceholder":"Session name, e.g. payments-service","home.create":"Create","home.sessions":"Sessions","home.loading":"Loading…","home.none":"None yet.","home.col.name":"Name","home.col.tasks":"Tasks","home.col.state":"State","home.col.chat":"Chat","home.col.created":"Created","home.tasksDetail":"({done} done, {queued} queued)","home.notOpened":"not opened","home.col.remove":"Remove","home.delete":"Delete","home.deleteWhy":"Deleting a session removes it from this list and nothing else.","home.deleteConfirm":'Delete the session "{name}" and its {n} task(s)?\n\nWhat it already executed stays in its folders under runs/, and the conversation in Copilot is not touched. This cannot be undone.',"home.deleteRunning":"Stop the session before deleting it.","home.deleted":'"{name}" was deleted.',"home.selectAll":"Select every session","home.selected":"{n} selected","home.deleteSelected":"Delete the {n} selected","home.deleteSelectedConfirm":"Delete {n} session(s)?\n\n{names}\n\nWhat they already executed stays in their folders under runs/, and the conversations in Copilot are not touched. This cannot be undone.","home.deletedMany":"{n} session(s) deleted.","home.deleteSomeFailed":"{n} deleted; {m} could not be: {why}","home.tickForBoth":"The first column of ticks manages the list — status and delete — and works while a run is going, except on the session running now. The second chooses what to run; only active sessions with something queued can be run.","home.managed":"{n} ticked to manage","home.manageAll":"Tick every session that is not running, to manage","home.manageRow":"Manage {name}","home.manageRunning":"Running now: its status cannot be changed and it cannot be deleted until it stops.","home.makeActive":"Make active","home.makeInactive":"Make inactive","home.madeActive":"{n} session(s) are active.","home.madeInactive":"{n} session(s) are inactive: they will not be started until made active again.","home.statusSomeFailed":"{n} changed; {m} could not be: {why}","home.statusActive":"active","home.statusInactive":"inactive","home.activeWhy":"Active: it runs when started, alone or in a run of several.","home.inactiveWhy":'Inactive: set aside, so nothing starts it — not a run of several, not "Continue". Make it active to run it again; nothing in it is lost.',"state.running":"running","state.idle":"idle","state.stopping":"stopping","state.completed":"completed","state.completedTitle":"Every task of this session ended done. Nothing is queued.","state.ended":"ended, with failures","state.endedTitle":"Every task ended, but not all of them done: {n} failed, blocked or stopped. Nothing is queued.","status.queued":"queued","status.running":"running","status.waiting-approval":"waiting for approval","status.done":"done","status.blocked":"not done","status.failed":"failed","status.aborted":"aborted","status.limit-reached":"limit reached","session.crumb":"Sessions","batch.moveUp":"Move {name} up","batch.moveDown":"Move {name} down","session.noId":"No session is named in the address. Open one from the Sessions page.","session.stale":"The page could not refresh this session, so what it shows may be out of date: {err}","session.streamClosed":"The live log has disconnected; the page still refreshes every few seconds. Reload it to reconnect.","session.run":"Run {n} task(s)","session.runWhy":"Works through the queue on its own, without stopping to ask. This is the ordinary way to run: start it and come back when it has finished.","session.runStep":"Step by step","session.runStepWhy":"Shows you every command before it runs and waits for your decision. For when something has gone wrong, or a task is new and you want to watch what it actually does.","session.unattendedConfirm":"This runs on its own: the commands Copilot writes will be executed without asking you, until the queue is finished. The list of forbidden commands still applies. Start it?","session.stop":"Stop after current step","session.startedAuto":"started — it will work through the queue on its own","session.startedStep":"started — it will ask you before every command","session.notStarted":"not started: {reason}","session.modeUnattended":"not asking any more","session.askAgain":"Ask me again on every step","session.askingAgain":"every further step will be shown for approval","session.stopping":"stopping after the current step","session.willUseModel":"Model: {name}.","session.willUseFiles":"Project files: {root} ({dirs}).","session.noFiles":"Project files: none are attached to these tasks.","session.openChat":"open chat: {name}","session.noChat":"no conversation yet; the first run opens one","session.group":"Share a conversation","session.groupWhy":"Sessions with the same name here run in one Copilot chat: the first to run opens it, the rest join it and see its history. Leave it empty and this session gets a conversation of its own, which is the usual answer.","session.groupPlaceholder":"a name, the same in every session that should share","session.groupSaved":"saved","session.groupHasChat":"This session is already in a conversation, so it stays there. The group decides where a session goes the first time it runs.","approval.title":"Step {n} is waiting for you","approval.run":"Run","approval.runAll":"Run this and the rest without asking","approval.runAllWhy":"Answers this step with Run and stops asking for every step after it, for the rest of this run. Commands on the deny list are still refused, and a command that downloads from the internet does what Settings → Execution says (by default it still asks).","approval.runAllConfirm":"From here on, commands written by Copilot will run without asking, until this run ends. Commands on the deny list are still refused, and a command that downloads from the internet does what Settings → Execution says (by default it still asks). Continue?","approval.network":"This command downloads from the internet. A run that does not ask still stops for this one (unless Settings → Execution says otherwise), because a later step could run what arrived. Run it only if you know what it fetches and why.","approval.skip":"Skip","approval.abort":"Abort task","model.title":"Copilot model","model.hint":"The list is read from the chat’s own model picker, so it is whatever your tenant offers today. Leave it on the chat default and nothing is touched; pick one and the conversation is switched to it at the start of each run.","model.default":"whatever the chat is set to (default)","model.followsDefault":"from Settings: {name}","model.refresh":"Read the list from Copilot","model.refreshConfirm":"This opens the bot’s Edge window, reads the model picker and closes it again. It cannot run while a session is running. Continue?","model.refreshing":"opening the chat and reading the picker…","model.refreshed":"read {n} model(s) from the chat","model.readAt":"Read {t}: {n} option(s).","model.chatWasOn":"The chat was on {name}.","model.neverRead":"The list has never been read on this machine. Press the button to read it from the chat.","model.none":"The chat did not offer a model picker.","model.saved":"runs will use {name}","model.savedDefault":"left on the chat default","model.lastUsed":"last run used {name}","model.notInList":"{name} (saved, not in the list that was read)","model.unavailable":"not available","model.defaultIs":"Sessions without a model of their own use {name}.","model.defaultIsNone":"Sessions without a model of their own use whatever the chat is set to.","model.makeDefault":"Start new sessions on {name}","model.clearDefault":"Stop setting a model on new sessions","model.defaultSaved":"new sessions will start on {name}","model.defaultCleared":"new sessions will be left on the chat default","model.showDetails":"show what the picker said","l1.title":"Level 1: the base prompt","l1.sent":"sent in this conversation","l1.notSent":"sent with the first task","l1.edit":"edit","l1.hint":"The prompt about how the bot works, sent once per conversation with priority over the level 2 instructions of every task below: the phases of a task, the JSON reply format, the stop word, how to verify before closing, when to declare a task blocked, a deviation or a disputed finding, and the rules level 2 cannot override.","l1.customised":"Using your customised copy.","l1.show":"show the prompt","vcs.title":"Version control","vcs.on":"on","vcs.off":"off","vcs.hint":"The runner does the git itself, before and after every task, and level 1 tells Copilot not to branch or commit. Two of you doing it would leave the repository in a state neither expects.","vcs.enable":"Work on branches and commit what was changed","vcs.enableWhy":"Recommended, and on by default. Without it a task edits your working tree with nothing to go back to. Pushing stays yours: nothing is ever pushed from here.","vcs.repo":"Repository","vcs.repoIs":"Working in {dir}.","vcs.repoNone":"No repository. Set one here, or set the project root under project files.","vcs.branches":"How branches are made","vcs.perTask":"A branch of its own for every task","vcs.perTaskWhy":"Every task branches from the same starting point, so it never sees what the task before it changed. Independent checks against one known state. A task that reads or checks earlier work will not find it here.","vcs.perSession":"One branch for the whole session","vcs.perSessionWhy":"Every task continues on the branch the one before it left, so a later task builds on the earlier work.","vcs.branchName":"Name of that one branch","vcs.branchNameWhy":"Without the prefix. Empty means it is built from the session name, the way it always was. It has no effect in the other mode, where each task names its own.","vcs.startFrom":"Where this session starts","vcs.startBranch":"From a local branch (main)","vcs.startBranchWhy":"The session starts from the branch named below, as it is on this machine. Every session set this way starts from the same clean code and sees no other session’s work.","vcs.startPrevious":"From the previous session’s branch","vcs.startPreviousWhy":"The session carries on from the end of the branch of the session that last committed work in this same repository — in a run of several sessions, the one before it — so the sessions form a chain. Sessions in other repositories do not count. With no earlier session here, it starts from the branch named below.","vcs.startHead":"From wherever the repository is (as until now)","vcs.startHeadWhy":"Whatever branch is checked out when the session first runs — often the one the previous session left. Kept for sessions that relied on it.","vcs.baseBranch":"Local branch to start from","vcs.baseBranchWhy":"Empty means main. Decided at the session’s first run; changing any of this applies from the next task that runs.","vcs.startedPrevious":"Started from the end of {branch} ({commit}), the branch of the session “{name}”.","vcs.startedBranch":"Started from the local branch {branch} ({commit}).","vcs.startedHead":"Started from where the repository was ({commit}).","vcs.commit":"Commit when a task finishes","vcs.commitWhy":"One local commit per task, whatever the outcome, with the summary in the message. Off leaves the changes in the working tree.","vcs.notReady":"Version control is on, but it cannot work yet.","vcs.noRepo":"This folder cannot be used for version control","vcs.noRepoHow":'Version control needs a git repository: a folder with a .git in it. Make one there with "git init", or point this at a project that already is one. Until then the switch stays off, because a switch that is on and does nothing is worse than one that is off.',"vcs.pickFirst":"Choose the project folder first, then turn version control on.","vcs.repoOk":"This folder is a git repository.","vcs.repoField":"Project folder","vcs.ready":"Ready: {dir}, currently on {branch}.","vcs.completeOn":"The complete work of this session is on {branch}.","vcs.noSingleBranch":"There is no single branch with all of this session’s work: each of the {n} task(s) has its own, and HEAD is on whichever ran last.","vcs.pushIsYours":"Nothing is ever pushed. Review the branch and push it yourself.","vcs.saved":"saved","vcs.taskBranch":"branch {branch}","vcs.taskCommit":"commit {commit}","vcs.taskBase":"started from {commit}","vcs.taskProblem":"version control did not run: {problem}","vcs.taskFiles":"{n} file(s) changed","vcs.foreignCommits":"Commits on this branch that the runner did not make ({n}) — made while the task ran, by someone or something else:","vcs.suspicious":"Committed although it looks like tool output or secrets ({n}) — pointed out once and left in place:","vcs.taskNoFiles":"nothing was committed — the task changed no files","vcs.taskBinary":"binary","mirror.title":"Project files for the chat","mirror.hint":"Selected directories are copied to one flat folder on the Desktop with the path in the file name ({example}), only changed files are rewritten, and the files are attached to the first message of each task. Attaching uploads a copy to your OneDrive.","mirror.enable":"attach project files","mirror.root":"Project root","mirror.listDirs":"List directories","mirror.noDirs":"no selectable directories","mirror.include":"Include (one per line; a directory includes everything beneath it)","mirror.exclude":"Exclude (one per line)","mirror.save":"Save","mirror.stateOn":"files are attached","mirror.stateOff":"no files attached","mirror.unsaved":"Not saved yet.","mirror.unsavedWhy":"These settings take effect only after Save. A run started now would use what was stored before.","mirror.saved":"saved","mirror.browse":"Browse…","mirror.browsing":"pick the folder in the window that opened","mirror.browseCancelled":"no folder picked","mirror.rootHint":"The folder the paths below are relative to.","mirror.rules":"What is copied from it","mirror.gitignore":"Leave out what .gitignore lists","mirror.gitignoreWhy":"On by default. Build output, local scratch files and anything else the project already ignores stay out of the chat. Never decides .env files.","mirror.env":"Copy .env files as well","mirror.envWhy":"Off by default. This switch alone decides the .env files: it does not matter whether the option above is ticked or what the .gitignore says about them.","mirror.envWarn":"The .env files of this project will be copied to the Desktop folder, uploaded to your OneDrive and attached to the chat. They usually hold passwords, keys and tokens. Turn this on?","mirror.envOn":"Secrets will be attached to every task of this session.","mirror.alwaysOut":"Always left out, whatever is ticked: {dirs}.","mirror.conflict":"The same directory cannot be both included and excluded.","mirror.conflictSame":'"{dir}" is in both lists.',"mirror.conflictParent":'"{exclude}" is excluded, but "{include}" is included and lies inside it.',"mirror.conflictFix":"Remove it from one of the two lists. Nothing is saved until you do.","mirror.needRoot":"Enter the project root first.","mirror.check":"Check what would be copied","mirror.checking":"checking…","mirror.checked":"{files} file(s), {size}.","mirror.checkedEnv":"{n} of them are .env files.","mirror.checkedSkipped":"{n} left out.","mirror.checkedNone":"Nothing would be copied with this selection.","mirror.showFiles":"show the list","mirror.showSkipped":"show what was left out","tasks.title":"Tasks","tasks.hint":"Run in this order, in the same conversation. When one finishes with a summary, the next queued one starts. A task that ends any other way stops the run and leaves the rest queued.","chain.title":"What happens when a task does not finish","chain.stop":"Stop the queue at the first failure","chain.stopWhy":"Treats the queue as one chain, which is what a suite usually is: a later task builds on what an earlier one did, so running it against a machine in an unplanned state is worse than not running it. The rest stay queued and can be run once the failure is dealt with.","chain.continue":"Carry on with the next task","chain.continueWhy":"Treats the tasks as independent checks that happen to share one conversation. One failing says nothing about the next, and the failures are read afterwards in the register.","chain.savedStop":"the queue will stop at the first failure","chain.savedContinue":"the queue will carry on past a failure","chain.locked":"This cannot be changed while the session is running.","tasks.none":"No tasks yet. Add one below.","task.iterations":"{n} iteration(s)","task.edit":"Edit","task.cancel":"Cancel","task.delete":"Delete","task.branch":"Branch for this task","task.branchWhy":"Without the prefix, which the runner adds. Empty means the name is built from the session and the task title, the way it always was.","task.branchIgnored":"This session works on one branch, so a name here is ignored. The branch is named in the version-control panel above.","task.commitMessage":"Commit message","task.commitWhy":"The first line is the subject. Copilot's summary and how the task ended are added underneath either way. Empty means the subject is the task title.","task.gitNames":'git: branch {branch} \xb7 commit "{subject}"',"task.gitBranchOnly":"git: branch {branch}","task.gitCommitOnly":'git: commit "{subject}"',"task.editAll":"Edit — title, instructions, prompt, branch and commit","checks.title":"Checks","run.unattended":"on its own, without stopping to ask","run.confirm":"step by step, asking before each command","restart.button":"Run again from here","restart.why":"Puts the code back to before this task, then queues this task and every one after it in the same run — including the ones that never got their turn — and starts them.","restart.checking":"working out what that would do…","restart.cannot":"Cannot start again from here: {problem}","restart.noRepo":" (no repository — version control is off for this work)","restart.alreadyQueued":" (already waiting, so it is left alone)","restart.repoLine":" {repo}\n back to {commit} on a new branch {branch}, and {n} later commit(s) stay on {kept}","restart.confirm":'Start again from "{title}"?\n\nThe code goes back first:\n{repos}\n\nNothing is deleted — the later commits stay on the branch they were made on, one checkout away.\n\nThen {tasks} task(s) in {sessions} session(s) are queued again and started {mode}:\n{list}\n\nAnything those tasks already produced is replaced by what they produce this time.',"restart.failed":"It did not start: {problem}","restart.started":"Started again: {requeued} task(s) queued, {repos} repository(ies) taken back.","review.title":"Independent review","review.hint":"When a task finishes and its checks pass, a second conversation is opened that had no part in the work. It is given the task and the files that changed — not the summary — and it decides by running the work, not by reading it. If it finds problems they go back to be fixed, and the task cannot close until it passes or the rounds run out.","review.on":"on","review.off":"off","review.enable":"Check every task with a second conversation","review.enableWhy":"Catches the class of defect neither the checks nor the task itself can: a claim nobody thought to test. Costs an extra conversation per task.","review.modelField":"Model for the review","review.modelWhy":"Leave empty to use this session’s own model. A different one is worth setting: a fresh conversation removes attachment to the work, but not the blind spots of the model that did it.","review.modelSame":"the same model as the work","review.save":"Save","review.saved":"Saved.","review.verdict.pass":"review passed","review.verdict.fail":"review found problems","review.verdict.error":"review did not run","review.verdict.skipped":"not reviewed","review.ran":"after running {n} command(s)","review.rounds":"{n} round(s)","review.onModel":"on {model}","review.findings":"what it found ({n})","review.evidence":"Evidence","review.problem":"The review could not be carried out: {problem}. The work was accepted unreviewed.","review.skippedWhy":"Not reviewed: {why}.","review.taskOff":"This task is not reviewed.","review.aboutTask":"about the task, not the work","review.repeated":"came back after a reported fix","task.deviations":"Not as the task said ({n})","task.deviationDid":"Did instead","task.deviationWhy":"Because","reg.deviations":"{n} deviation(s)","reg.deviationsWhy":"The model could not follow every instruction as written and said what it did instead. Open the task to read them.","task.disputes":"Review findings the model disputed ({n})","reg.disputes":"{n} dispute(s)","reg.disputesWhy":"The model said a review finding was wrong and gave evidence; the next reviewer was told. Open the task to read both sides.","task.readOnly":"read-only","task.readOnlyEdit":"Read-only: this task must not change any file","task.readOnlyEditWhy":"For an audit or a check-up that reports and changes nothing. With version control on, whatever a round changes is put back and the chat is told.","task.scopeEdit":"Files this task may change","task.scopeEditWhy":"One path or pattern per line: a file, a folder ending in /, or * and **. Empty means anywhere in the project. An audit that writes a report is not read-only: put the report's path here.","task.newIntentNote":"A new prompt is a new question: the checks earlier reviews added are dropped, and the task's own checks decide it only if you keep them. Remove any written for the old prompt.","reg.keepChecks":"Checks that still apply to the new prompt","reg.keepChecksWhy":"Untick any that belong to the old prompt — a check that no longer fits would decide the new task. Checks added by earlier reviews are dropped.","stop.why":"Why the attempt stopped, when its status does not say it.","stop.format-repair-exhausted":"format repair exhausted","stop.contract-conflict":"task contradicts itself","stop.no-progress":"no progress","stop.invalid-check":"a check could not run","stop.environment":"a shell is missing","metrics.title":"How the bot is doing","metrics.hint":'Added up from every task on record; each figure counts things the runner saw, never what a chat said about itself. "So many of so many", so a rate over three tasks is not read as one over three hundred.',"metrics.olderAttempts":"{n} attempt(s) ran before the runner counted these things, and are left out of the figures that need the counts.","metrics.col.measure":"Measure","metrics.col.all":"All tasks","metrics.tasks":"Tasks that have run","metrics.attemptsN":"{n} attempt(s)","metrics.firstPass":"Done at the first attempt","metrics.doneInTheEnd":"Done in the end","metrics.falseCompletion":'"Done" that the checks turned down (attempts)',"metrics.reviewRejection":"Sent back by the review (reviewed attempts)","metrics.repeatedCommands":"A repeated command refused (attempts)","metrics.noProgress":"Stopped for making no progress (attempts)","metrics.scopeViolation":"Changed files outside its scope (attempts with a scope)","metrics.unrelatedDiff":"Committed something suspicious, or found foreign commits (attempts)","metrics.resumed":"Carried on where it stopped, and finished (continued attempts)","metrics.freshRetries":"Run again in a fresh chat by the runner","metrics.manual":"Times a person stepped in (runs again, skips, stops)","metrics.ended":"Where the latest attempts ended","handoff.title":"How it ended — from the runner's records","handoff.outcome":"Outcome:","handoff.files":"Changed files:","handoff.noFiles":"none committed","handoff.validation":"Validation:","handoff.passed":"{n} of {of} check(s) passed","handoff.review":"review {verdict}, {open} finding(s) open","handoff.issues":"Known issues:","handoff.noIssues":"none recorded","handoff.evidence":"Evidence (run folder):","handoff.vcs":"Branch:","handoff.notPushed":"not pushed","handoff.noCommit":"nothing committed","handoff.manual":"Left for you:","handoff.notRun":"Not run:","task.scope":"may change only: {paths}","task.scopeWhy":"The plan limited this task to these paths. With version control on, the runner puts back any change outside them after every round of steps and tells the chat.","task.scopeReverted":"Put back because outside the task’s scope ({n}): {paths}","reg.readOnlyWhy":"This task must not change files. The runner fails it if the working tree changed when it ended.","task.leftovers":"Left running and stopped by the runner ({n}):","task.leftoverPorts":"listening on {ports}","task.ranWith":"Ran with Node {node} \xb7 npm {npm} \xb7 git {git} \xb7 PowerShell {pwsh}","task.took":"took {d}","task.runningFor":"running for {d}","reg.runTook":"took {d}","reg.runRunning":"running for {d}","session.runClock":"This run: {n} task(s) \xb7 {d}","session.runClockLive":"This run: {n} task(s) \xb7 {d} so far","restore.button":"Restore","restore.why":"Put the repository back to the code as it was before this task started.","restore.checking":"checking…","restore.cannot":"Cannot restore: {problem}","restore.confirm":'Put {repo} back to the code as it was before "{title}"?\n\nA new branch {branch} is created at commit {commit} and checked out. Nothing is deleted and no history is rewritten.',"restore.confirmLosing":'Put {repo} back to the code as it was before "{title}"?\n\nA new branch {branch} is created at commit {commit} and checked out.\n\n{n} commit(s) made after that point will NOT be on it:\n{list}\n\nThey are not lost — they stay on {kept}, and you can switch back to it at any time. But the working tree will no longer contain that work, and anything built from it will need building again.',"restore.done":"The repository is on {branch} at {commit}. {n} later commit(s) stay on {kept}.","restore.doneNothing":"The repository is on {branch} at {commit}. There was nothing after it.","restore.failed":"The restore did not happen: {problem}","checks.why":"What has to be true before this task is allowed to end. The runner runs these itself after Copilot reports the task as done: if one fails, the failure goes back into the chat with its output and the task carries on until they pass or it runs out of attempts.","checks.none":"No checks. This task ends when Copilot says it has.","checks.noneWhy":"Add one for anything a command can settle: a compile, a test run, a file that must exist.","checks.add":"Add a check","checks.remove":"Remove","checks.name":"What it checks","checks.namePlaceholder":"the tests pass","checks.kind":"Must be","checks.run":"Command","checks.file":"File","checks.value":"Text","checks.valueRegex":"Pattern","checks.cwd":"In folder","checks.results":"Last time these ran","checks.passed":"passed","checks.failed":"failed","checks.n":"{n} check(s)","checks.fromReview":"From reviews ({n})","checks.fromReviewWhy":"Checks reviewers gave with their findings: the mechanical test that would have caught each one. They stay with the task for every later attempt, so what one review noticed is never again found by chance.","checks.state.suspended":"suspended — disputed, until the next review rules","checks.state.dropped":"dropped — the next review did not raise it again","checks.kind.exit-zero":"the command succeeds","checks.kind.exit-nonzero":"the command fails","checks.kind.output-contains":"its output contains","checks.kind.output-omits":"its output does not contain","checks.kind.output-matches":"its output matches","checks.kind.file-exists":"the file exists","checks.kind.file-missing":"the file does not exist","checks.kind.file-contains":"the file contains","task.continue":"Continue in the same chat","task.continueWhy":"Carries on where the task stopped — at the runner's limit, when the bot itself stopped (power, Ctrl+C, a crash) or when it was stopped: the same conversation, the same branch, a fresh count of messages. The chat is told what had already run and to carry on, not start over.","task.continueConfirm":'Continue "{title}" where it stopped? It goes back to the same chat and branch; the attempt that stopped is kept.',"task.rerun":"Run again","task.rerunWhy":"Puts this task back in the queue. What the earlier attempt did is kept and shown under the task.","task.rerunConfirm":'Queue "{title}" again? The earlier attempt is kept, with its own log.',"task.saveAndRerun":"Save and queue it again","task.editRanConfirm":'Save this edit to "{title}" and queue the task again? The attempt that already ran is kept, with the text it ran with.',"task.editRanWhy":"This task has already run, so saving an edit queues it again. The attempt that ran keeps its own text, its log and its summary.","task.attemptText":"the task as this attempt ran it","task.attempts":"earlier attempts ({n})","task.attemptN":"attempt {n}","task.deleteConfirm":'Delete queued task "{title}"?',"task.deleteConfirmRan":'Remove "{title}" from this session? It has already run; what it executed stays in its run folder under runs/.',"task.started":"started {t}","task.added":"added {t}","task.finished":"finished {t}","task.save":"Save","task.whatWasDone":"What was done","task.l2Show":"level 2 for this task ({n} line(s))","task.noL2":"no level 2 instructions for this task","task.promptAndL2":"task prompt and level 2","task.l2":"level 2","task.prompt":"task","task.firstMessage":"the exact first message that opened this task","task.files":"everything executed, and the files","task.log":"task-log.txt: the whole task as text","task.reports":"reports sent to Copilot:","task.artifacts":"downloaded files:","task.replies":"raw replies:","task.finalReply":"the last message Copilot sent","save.log":"save the log","save.attemptLog":"save this attempt's log","save.attemptRecord":"download plan, work and runner of this attempt","save.attemptRecordWhy":"This attempt as it ran — the text it was given, what it did, what the machine did — as one file, even if the task has been edited since. An attempt that did not end done also keeps these three as plan.json, work.json and runner.json in its run folder.","save.saving":"saving…","save.why":"Writes the file into a folder on the Desktop and opens Explorer with it already selected, so it can be dragged straight into the chat that orchestrates the work.","save.done":"Saved to {path} — Explorer is open on it, ready to drag.","save.savedOnly":"Saved to {path}. {note}","save.failed":"It could not be saved: {problem}","form.title":"Add a task","form.hint":"Goes to the end of the queue. If the session is running it will be picked up after the current tasks; if it is idle, press Run above. Level 2 is prefilled from the previous task so a series of tasks shares it.","form.titleLabel":"Title","form.titlePlaceholder":"short name, e.g. run the unit tests","form.taskLabel":"Task","form.taskPlaceholder":"What to do, what the result should be, what is out of bounds.","form.add":"Add to queue","form.queued":"queued","export.title":"Download the work","export.hint":"The conversation of the tasks you pick, as one text file. Nothing is sent anywhere: the file is built here and saved by your browser.","export.nothing":"Nothing has run in this session yet.","export.all":"Select all","export.none":"Clear the selection","export.selected":"{n} selected.","export.allOf":"Nothing ticked, so all {n} that have run.","export.outcome":"Expected and actual ({n})","export.full":"The whole conversation ({n})","export.outcomeWhy":"Expected and actual is the short one: for each task, the message that opened it and the answer that closed it. The whole conversation adds every report sent in between and every reply that came back.","l2.label":"Level 2: project, domain and team instructions for this task","l2.loadPreset":"load a preset…","l2.saveAs":"Save as preset","l2.saveAsPrompt":"Save these level 2 instructions as a preset named:","l2.savedAs":'saved as "{name}"',"l2.placeholder":"What the runner cannot know: the project, its layout, how tests run, the conventions, what never to touch.\nLeave empty if there is nothing to add. Level 1 always wins over anything here.","live.title":"Live","live.none":"Nothing yet. Events appear here while a run is in progress.","l1page.title":"Level 1: the base prompt","l1page.hint":'The prompt about how the bot works. It is sent once at the start of every conversation, before any project instructions, and a later task in the same conversation gets a short reminder of it. It tells the model the phases of a task (receive, plan a step, emit, read the results, repeat, verify, close), the JSON reply format the runner parses, the stop word, what a "done" needs (a verification it has run and read), when a task is "blocked" (at least two real approaches and something specific in the way), how to declare an instruction that cannot be followed as written and how to dispute a review finding, how the results file and refused steps come back, and the rules that level 2 cannot override. The independent review has its own prompt (prompts/review1.md). Edit it only if you know why: the parser expects exactly the format described here.',"l1page.custom":"Customised copy in data/level1.md","l1page.shipped":"Shipped version, prompts/level1.md","l1page.unsaved":"unsaved changes","l1page.save":"Save","l1page.saved":"Saved. Applies to sessions started from now on.","l1page.reset":"Reset to shipped","l1page.resetConfirm":"Discard your edits and go back to the base prompt shipped with the project?","l1page.resetDone":"Reset to the shipped base prompt.","presets.title":"Level 2 presets","presets.hint":"Level 2 is what you know and the runner does not: the project, the domain, the team's conventions, the tools in use. It is sent with every task and can be different for every task. Save the ones you reuse here and pick them when adding a task. Level 1 always has priority over anything written here.","presets.name":"Name","presets.namePlaceholder":"e.g. payments-service team","presets.content":"Instructions","presets.contentPlaceholder":"Project: ...\nRepository layout: ...\nHow we run tests: ...\nThings never to touch: ...","presets.save":"Save preset","presets.saved":'Saved "{name}".',"presets.list":"Saved","presets.none":"None yet.","presets.edit":"Edit","presets.delete":"Delete","presets.deleteConfirm":'Delete preset "{name}"?',"presets.show":"show","sys.machine":"This machine","sys.loading":"Loading…","sys.node":"Node","sys.edge":"Edge","sys.edgeMissing":"not found","sys.profile":"Bot profile","sys.profileMissing":"(not created yet: run cop login)","sys.profileInUse":"Profile in use","sys.profileHeld":"Edge is holding the profile (pids {pids}). A run would fail. Close that Edge window.","sys.profileUnknown":"could not check","sys.profileFree":"free","sys.desktop":"Desktop","sys.desktopSynced":"(backed up by OneDrive)","sys.desktopLocal":"(not backed up by OneDrive; mirror stays local)","sys.cwd":"Fallback folder for commands (a session runs in its own project folder)","sys.runs":"Runs folder","sys.data":"Data folder","sys.mode":"Default mode","sys.settings":"Settings","sys.settingsHint":"Read from {file} next to the project. It has the same shape as {example}; anything missing takes the default. Edit the file and restart the API.","sys.asSaved":"As saved","sys.resolved":"Resolved paths","sys.signin":"Sign-in","sys.signinHint":"Signing in is done once, from the terminal, so that the bot never handles credentials:","reg.title":"Task register","reg.hint":"Every task of every session in one place: what has been done, what is being done right now and what is still ahead. The order inside a session is the order it runs in.","reg.total":"tasks","reg.done":"done","reg.open":"ahead","reg.failedCount":"did not finish","reg.activeNow":"Running now","reg.upcoming":"What is next","reg.upcomingHint":"In the order they will run. A session runs its queue from the top; the first one of a session is the next one out.","reg.past":"What has been done","reg.pastHint":"Newest first. A task that did not end with a summary stopped its session and left the rest of the queue waiting.","reg.none":"No tasks yet.","reg.noUpcoming":"Nothing queued. Every task has run.","reg.noPast":"Nothing has run yet.","reg.noMatch":"Nothing matches the filter.","reg.next":"next in this session","reg.queuePos":"{n} in the queue","reg.waitingRun":"waiting for the session to be started","reg.willFollow":"runs after the {n} task(s) above it","reg.sessionRunning":"the session is running","reg.iterations":"{n} iteration(s)","reg.took":"took {d}","reg.filterSession":"Session","reg.filterStatus":"Status","reg.allSessions":"all sessions","reg.allStatuses":"all statuses","reg.search":"Search in the titles and the summaries","reg.searchPlaceholder":"a word from the task","reg.clear":"Clear the filters","reg.viewFlow":"Flow","reg.viewList":"List","reg.viewLabel":"View","reg.openTask":"task details","reg.openLog":"log","reg.runningCount":"running now","reg.attempts":"this is attempt {n} — see the {m} before it","reg.attemptsOne":"this is attempt {n} — see the one before it","reg.attemptN":"attempt {n}","reg.attemptLog":"log of this attempt","reg.blockedWhat":"The task ended without the work being done. What was tried and what is in the way is in the reason below.","reg.runGroup":"Started together","reg.runGroupHint":"One run is one press of a start button. Everything below was sent off together, in this order, through one browser window.","reg.runOf":"Run of {t} task(s) in {s} session(s)","reg.runAt":"started {when}","reg.runWith":"ran with {n} other task(s)","reg.runAlone":"ran on its own","reg.runTitle":"Run of {t} task(s) in {s} session(s), started {when}","reg.groupBy":"By run","reg.notInARun":"Not part of a run","reg.notInARunHint":"Tasks still waiting, and tasks that ran before this system began recording which of them were started together.","reg.col.task":"Task","reg.col.session":"Session","reg.col.status":"Status","reg.col.started":"Started","reg.col.took":"Took","reg.col.result":"Result","reg.stopped":"stopped: {reason}","reg.refresh":"Refresh","reg.updated":"updated {t}","ap.title":"Appearance","ap.hint":"Kept in this browser only. Nothing here is sent anywhere or shared with another machine.","ap.theme":"Theme","ap.themeWhy":"Warm light for a bright room, warm dark for a dim one.","ap.a11y":"Accessibility","ap.a11yHint":"Each of these can be turned on by itself; they are independent of the theme and of the language.","ap.size":"Text size","ap.sizeSmall":"Small","ap.sizeNormal":"Normal","ap.sizeLarge":"Large","ap.sizeHuge":"Larger","ap.sizeGiant":"Largest","ap.sizeWhy":"One step below normal and three above. Scales the whole interface, not only the body text, and is remembered in this browser.","ap.contrast":"Higher contrast","ap.contrastWhy":"Stronger borders and darker text. Drops some of the warmth in exchange for legibility.","ap.motion":"Less motion","ap.motionWhy":"No transitions, and the live log stops scrolling itself while a run is in progress.","ap.links":"Underline every link","ap.linksWhy":"Links stop relying on colour alone to be recognisable.","ap.focus":"Thick focus outline","ap.focusWhy":"Makes what the keyboard is on impossible to lose, when tabbing through a page.","ap.reset":"Back to the defaults","ap.example":"How it looks","ap.exampleText":"A task that ended with a summary, one waiting for approval, and a link.","ap.exampleLink":"a link in a sentence","nav.import":"Plan from JSON","nav.defaults":"Settings","def.title":"What every new session starts with","def.intro":"Three things are chosen here once instead of in every session: the folders being worked on, the model that does the work, and the model that reviews it. Sessions keep their own copies, so any of them can be changed afterwards without touching these.","def.autoSave":"Everything on this page saves itself as you change it. There is nothing to press.","def.savedAutomatically":"saved as you type","def.saveAnyway":"Save","def.saveAnywayWhy":"It is already saved. This button exists for the comfort of pressing one.","proj.nameField":"Name of the project","proj.namePlaceholder":"the folder's own name","proj.nameWhy":"What this project is called everywhere else: its folder on the Desktop, the name in front of every mirrored file, and the list Kerrigan is given. Empty means the folder's own name.","proj.nameSaved":"Name saved.","def.reviewTitle":"Model for the review","def.reviewIntro":"The model a new session's independent review starts on. A different model from the one doing the work is the cheapest way to make the second opinion genuinely second: a fresh conversation removes attachment to the work, not the model's blind spots.","def.reviewField":"Review model","def.reviewNone":"The session's own model","def.reviewSaved":"New sessions will be reviewed by {name}.","def.reviewCleared":"Cleared. New sessions are reviewed by their own model.","def.reviewSame":"This is the same model as the one doing the work. A different one would catch more.","def.reviewAffectsNew":"Every session without a review model of its own uses this one when it runs — sessions made before it was chosen, and sessions from a plan that names none, included.","def.reviewAffectsExisting":"A session given its own review model, by the plan or in its review panel, keeps it.","def.reviewAffectsBatch":"A run of several sessions starts with this review model chosen, and says so before it writes it onto them.","def.reviewDefaultIs":"Default review model: {name}","def.reviewNoneShort":"No default review model is set.","def.modelTitle":"Model for new sessions","def.modelIntro":"The model a session starts on, by the exact name the chat's own picker shows. The list is whatever was read from the chat last; it belongs to Microsoft and differs per tenant, so it is never a list written into this project.","def.modelField":"Model","def.modelNone":"Leave the chat on whatever it is set to","def.modelSaved":"New sessions will start on {name}.","def.modelCleared":"Cleared. New sessions leave the chat on whatever it is set to.","def.modelAffectsNew":"Every session without a model of its own runs on this one — sessions made before it was chosen, and sessions from a plan that names none, included.","def.modelAffectsExisting":"A session given its own model, by the plan or in its picker, keeps it.","def.modelAffectsBatch":"A run of several sessions starts with this model chosen, and says so before it writes it onto them.","def.modelDefaultIs":"Default model: {name}","def.modelNoneShort":"No default model is set.","def.modelUseIt":"use it here","proj.title":"The project you are working on","proj.intro":"Set the folder once here and every new session starts pointed at it, instead of it being typed in again each time. Sessions keep their own folders, so any of them can be pointed somewhere else afterwards.","proj.field":"Project folder","proj.save":"Save","proj.saved":"New sessions will start in {dir}.","proj.clear":"Clear","proj.cleared":"Cleared. New sessions start with no folder chosen.","proj.none":"No project folder is set, so every session starts with its folders empty.","proj.isRepo":"This folder is a git repository, so sessions pointed at it can branch and commit.","proj.notRepo":"This folder is not a git repository","proj.notRepoWhy":"It can still be the project: the files are there and tasks can work in it. What it cannot do is carry version control, so the switch for that stays off until the folder is a repository.","proj.affects":"What this changes, and what it does not","proj.affectsNew":"A new session starts with this folder in both its project-files field and its version-control field. Neither is switched on by being filled in.","proj.affectsExisting":"Sessions that already exist are untouched. Their folder fields offer this one with a button, and taking it is your decision.","proj.affectsPlan":"The brief for a chat model is offered this folder, so the model neither has to ask for it nor invent one.","proj.affectsNever":"Nothing here ever changes what a running session is doing.","proj.toSessions":"To the sessions","proj.toImport":"To the plan import","proj.defaultIs":"Default project: {dir}","proj.noneShort":"No default project is set.","proj.useIt":"use it here","proj.setIt":"set one","proj.change":"change it","proj.others":"Other projects","proj.isDefault":"the default","proj.isDefaultWhy":"New sessions start in this one, and the plan brief offers it first.","proj.entryName":"Name","proj.entryDir":"Folder","proj.addTitle":"Add another project","proj.listIntro":"Every project this machine works in. The first is the default: new sessions start there. The others are named so a plan can send work to them. All of them are described the same way, and all of them save as you type.","proj.othersIntro":"The rest of the folders you work in — a front end, a back end, the test suite — each with a short name. New sessions still start on the default above. These are offered with a button wherever a folder is chosen, and the plan brief lists them by path, so a plan across several repositories is written with the folders that exist instead of asking for each one.","proj.otherName":"Name","proj.otherDir":"Folder","proj.otherAdd":"Add","proj.otherRemove":"Remove","proj.othersNone":"No other projects yet.","proj.othersSaved":"Saved: {n} other project(s).","proj.otherRepo":"git repository","proj.otherNotRepo":"not a git repository","proj.otherUse":"use {name}","plan.title":"A plan written by a chat model","plan.intro":"Describe the work to any chat model you like, let it ask you the questions, and paste what it writes back here. This page creates the sessions and the tasks; it starts nothing.","plan.step1":"1. Take this to the chat","plan.step1Hint":"Copy the whole text into a new conversation with a model of your choice. It explains what this runner is, makes the model interview you about the work, and pins the exact format it must answer in.","plan.persona":"Kerrigan, the persona: two levels","plan.personaWhy":"What you copy is one text in two parts. The software part is this project's and does not change: what the bot is, the plan format, how to read the register's exports when a task fails, and how to check the finished run against the assignment. The organisation part is yours: where tickets come from, which company sources to search, how your machine is laid out, your team's conventions. While it is empty, the brief tells Kerrigan to interview you about all of that first, write the text, and ask you to paste it below and save; once saved it travels with every copy and the questions stop. Delete it and they come back.","plan.softwarePart":"Software level (fixed)","plan.orgPart":"How work is done here: the organisation and the projects","plan.orgHint":"What anybody doing a task here would need to know: where tickets come from, where to search, the conventions and templates, and for each project its path, what it does, what it needs before it builds, how it is built and tested, and what goes wrong there. Not what the organisation or the projects are called — a name helps with no task. Written once and read for months. Paste here the first of the documents Kerrigan hands back.","plan.personaPart":"How the tasks are carried out: the agent's persona","plan.personaHint":"How the agent that does the work goes about it: what it is responsible for and what it is not, its approach, the phases it works through, and what it hands back at the end. It has no name — it is a way of working, not a character — so you can swap it when different work needs a different approach. Written into every task when a plan is imported, so a session keeps the approach it was created with. Paste your own here, or the second of the documents Kerrigan hands back.","plan.workPart":"This work","plan.workHint":"What this group of tasks is about: the ticket, the goal, which projects it touches, what has already been decided or tried, what must not change meanwhile. Replaced whenever the work changes. Paste here the last of the documents Kerrigan hands back.","plan.ctxWritten":"written","plan.ctxEmpty":"empty — Kerrigan will ask","plan.ctxSaved":"saved; the next copy of the brief carries it","plan.ctxClear":"Empty this","plan.personaSaved":"Saved personas","plan.personaPick":"choose one to put it in the box","plan.personaNone":"none saved yet","plan.personaNamePlaceholder":"a name for the persona in the box, e.g. playwright-tests","plan.personaSaveAs":"Save under this name","plan.personaDelete":"Delete the chosen one","plan.personaSavedWhy":"One persona for each kind of work, switched with one choice. Choosing one puts it in the box below and saves the box, as typing would; the brief carries whatever is in the box.","plan.personaLoaded":'"{name}" is in the box; the next copy of the brief carries it',"plan.personaSavedAs":'saved as "{name}"',"plan.personaDeleted":'"{name}" deleted; the box is unchanged',"plan.personaReplaceConfirm":'The persona in the box is not saved under any name. Replace it with "{name}"?',"plan.personaOverwriteConfirm":'A persona named "{name}" is saved already. Replace it with the one in the box?',"plan.personaDeleteConfirm":'Delete the saved persona "{name}"? The box itself is not changed.',"plan.ctxCleared":"emptied; Kerrigan will ask about it again","plan.ctxClearConfirm":"Empty this text? Kerrigan will ask about it again the next time you copy the brief.","plan.copyBrief":"Copy the brief","plan.saveBrief":"Save the brief as a file","plan.briefTooLong":"The brief is {n} characters — more than Copilot takes in one message (about 120 000; this page switches at {limit}). Save it as a file, attach the file to a fresh chat, and send the short message below with it.","plan.copyBriefNote":"Copy the message for the file","plan.briefFileMessage":"The attached file is your complete instructions: the brief for writing a copilot-operator plan. Read the whole file first, then follow it from the beginning exactly as if I had pasted it here.","plan.copied":"copied","plan.copyFailed":"The browser would not let the page copy. Select the text and copy it by hand.","plan.showBrief":"Show the text","plan.hideBrief":"Hide the text","plan.briefLang":"The brief is in the language this interface is in.","plan.briefAsks":"The brief does the asking","plan.briefAsksWhy":"Nothing is set here. The brief makes the model ask you whether the runner should do version control and which folder to work in, and the answers go into the JSON, per session. A plan that leaves them out is refused on import, with the exact wording to hand back to the chat.","plan.step2":"2. Bring the answer back","plan.step2Hint":"Paste it, drop the file on the box, or pick a file. Prose and code fences around the JSON are fine; they are stripped.","plan.placeholder":"Paste the JSON the chat model wrote…","plan.drop":"Drop a .json file here","plan.dropActive":"Let go to read the file","plan.browse":"Choose a file…","plan.clear":"Clear","plan.check":"Check it","plan.checking":"checking…","plan.import":"Create the sessions and tasks","plan.importing":"creating…","plan.fileError":"That file could not be read: {reason}","plan.fileTooBig":"That file is {size}, which is far larger than any plan. Nothing was read.","plan.valid":"This is a plan this system can read: {sessions} session(s), {tasks} task(s).","plan.invalid":"This is not a plan this system can read yet.","plan.issues":"What is wrong","plan.issuesHint":"Copy these back into the same conversation and ask for the whole corrected JSON. The paths say where in the document each problem is.","plan.copyIssues":"Copy the errors","plan.warnings":"Worth knowing","plan.duplicates":"This is already here","plan.duplicatesHint":"These sessions exist already, with exactly these tasks. Importing makes a second copy, which is allowed but is usually a mis-paste. Check that this is the corrected plan and not the old one.","plan.duplicateRow":"{name} — {tasks} identical task(s), imported {when}","plan.duplicateConfirm":"These sessions already exist with exactly these tasks:\n\n{names}\n\nImporting creates a second copy of them. Continue?","plan.cleared":"The box was emptied, so the same plan cannot be imported twice by accident.","plan.col.planFail":"If a session fails","plan.runThese":"Run these sessions","plan.preview":"What will be created","plan.notes":"Notes from the model","plan.col.session":"Session","plan.col.tasks":"Tasks","plan.col.chain":"On a failed task","plan.col.repo":"Repository","plan.noRepo":"none","plan.step3":"3. Check it, then start it yourself","plan.step3Hint":"Nothing runs on its own. Read what was created, change anything you want to change, and start it from the sessions list.","plan.imported":"Created {sessions} session(s) with {tasks} task(s). Nothing has started.","plan.toSessions":"To the sessions list","batch.title":"Run several sessions","batch.hint":"Tick the sessions to run, and they run one after another, in the order they are listed here. Two conversations cannot run at the same time: the browser profile belongs to one at a time.","batch.selected":"{n} selected, {tasks} queued task(s)","batch.notRunnable":"{n} of them have nothing queued and are left out of the run.","batch.pickFirst":"Choose which sessions to run","batch.pickFirstWhy":"Tick them in the list below and the two buttons come alive. They run in the order shown here, one after another.","batch.nothingRunnable":"None of the ticked sessions has anything queued","batch.nothingRunnableWhy":"Only tasks still waiting in a queue are run. Add a task to one of them, or tick a session that has some.","batch.oneRunning":"A session is already running on its own","batch.oneRunningWhy":"Two conversations cannot run at the same time, so a run of several has to wait. Let it finish, or stop it from its own page.","batch.selectQueued":"Select every session with something queued","batch.selectNone":"Select none","batch.onFailure":"If a session fails","batch.model":"Model for this run","batch.waiting":"{n} step(s) waiting for you","approval.tabTitle":"waiting for you","approval.waitingHere":"A step is waiting for your decision","approval.waitingHereWhy":"Shown on every page while a step waits, so a run never looks stuck because the page that asks is not the one open.","batch.reviewModel":"Model that reviews the work","batch.reviewModelKeep":"Each session keeps its own","batch.reviewModelWhy":"The independent review runs in its own conversation after each task. Putting it on a different model from the one doing the work is the cheapest way to make the second opinion genuinely second: a fresh conversation removes attachment to the work, but not the blind spots of the model that produced it.","batch.reviewSame":"This is the same model that does the work. A different one would catch more.","batch.reviewOffIn":"The review is switched off in {n} of the selected session(s); a model here does not turn it on.","batch.modelKeep":"Each session keeps its own","batch.modelWhy":"Choosing one here writes it onto every selected session before the run starts, so what a session says it uses and what it used stay the same thing afterwards.","batch.modelOverrides":"{n} of the selected session(s) are on a different model and will be changed to this one.","batch.modelNone":"No models have been read from the chat yet.","batch.modelRunning":"On {name}.","batch.vcsProblem":"Version control cannot run in these sessions","batch.vcsProblemWhy":"They will still run, but no branch will be made and nothing will be committed, so the work is left loose in the working tree. The commonest cause is an earlier run that was interrupted before the runner could commit.","batch.vcsProblemRow":"{name}: {problem}","batch.hiddenWhileRunning":"Choosing sessions, the model and what a failure means are hidden while a run is in progress, because none of them can change what is already running. They come back when it ends.","batch.fromPlan":"Selected from the plan you just imported, in its order.","batch.chain":"Stop, and leave the rest as they are","batch.chainWhy":"The sessions are one piece of work in order. A later session usually assumes the earlier ones worked, so running it after a failure tests nothing.","batch.independent":"Carry on with the next session","batch.independentWhy":"The sessions are separate pieces of work that happen to have been started together. One failing says nothing about the next.","batch.run":"Run {n} session(s)","batch.runWhy":"Works through the selected sessions one after another, on its own, without stopping to ask. This is the ordinary way to run.","batch.runStep":"Step by step","batch.runStepWhy":"Stops before every command in every session and waits for you. For chasing a problem down, or when a plan is new.","batch.unattendedConfirm":"This runs on its own, across {n} session(s): the commands Copilot writes will be executed without asking you, until every one of them is finished. The list of forbidden commands still applies. Start them?","batch.stop":"Stop after the current step","batch.pause":"Pause after this task","batch.pauseWhy":"Lets the task that is running finish properly — its checks, its review, its commit — and then holds. Everything still queued stays queued, and Continue picks it up where it left off.","batch.pausing":"pausing: the task that is running will finish first, and the rest of the queue is kept","batch.resume":"Take the hold off","batch.resumeWhy":"Carries on with the queue, as though the pause had not been pressed. Only works while the paused task is still running.","batch.stopWhy":'Cuts in after the current step. The task it interrupts ends "aborted", part-done. Use Pause instead if you only want to think.',"batch.notStarted":"not started: {reason}","batch.notStartedTitle":"The run did not start","batch.notStartedIsolation":'Settings → "Where the bot runs": choose where the bot runs, or accept unattended runs without isolation',"batch.nothingQueued":"nothing queued","batch.progress":"Running {name} — {done} of {total} done.","batch.finished":"Finished: {done} done, {failed} failed, {skipped} not run.","batch.stopping":"stopping after the current step; the sessions after this one stay as they are","batch.col.session":"Session","batch.debug":"Download everything as JSON","batch.debugWhy":"One file with what ran and what happened across these sessions: every step and its exit code, every summary, every check, and what each task committed. For handing to someone — or something — that has to work out why a run went the way it did.","batch.debugSelected":"for the {n} selected session(s)","batch.debugLast":"for the sessions of the last run","batch.col.state":"State","batch.col.ran":"Tasks","batch.col.why":"Why","batch.state.waiting":"waiting","batch.state.running":"running","batch.state.done":"done","batch.state.failed":"failed","batch.state.stopped":"stopped","batch.state.skipped":"not run","batch.ranOf":"{ran} ran, {failed} failed"},bg:{"nav.label":"Основно","nav.sessions":"Сесии","nav.live":"live","nav.liveTitle":"Ботът работи в момента: {n} сесия(и). Отворете регистъра, за да гледате.","nav.history":"Регистър на задачите","nav.level1":"Основен prompt","nav.presets":"Шаблони ниво 2","nav.appearance":"Изглед","nav.system":"Система","dialog.confirmTitle":"Сигурни ли сте?","dialog.noticeTitle":"Съобщение","dialog.ok":"Добре","dialog.cancel":"Отказ","batch.runName":"Име на това пускане","batch.runNamePlaceholder":"напр. rules-engine, втори опит","batch.runNameWhy":"Регистърът групира задачите на едно пускане под него, а изтеглените файлове носят името му. Оставено празно, името идва от плана, от който са сесиите; без такъв пускането се води по своето id.","reg.runUnnamed":"Пускане без име","reg.runBy":"{name} \xb7 {t} задачи в {s} сесии","reg.runCounts":"{done} готови \xb7 {failed} провалени","reg.exportTitle":"Изтегли като JSON","reg.exportPlan":"план","reg.exportPlanWhy":"Какво е поискано: задачите във формата на плана, както са сега, с редакциите от интерфейса. Внася се отново.","reg.exportDomain":"работа","reg.exportDomainWhy":"Какво се случи с работата: задачата, какво пробва чатът, какво реално е направено и защо не е завършила готова.","reg.exportBot":"runner","reg.exportBotWhy":"Какво направи runner-ът: среда, всяко събитие и стъпка с кода ѝ на изход, транспортът, спирането на процеси, механиката на рецензията.","reg.exportRunTitle":"Цялото пускане като JSON","reg.pick":"Избери задачи","reg.pickWhy":"Отметни задачите, които искаш в един файл, през пускания и сесии. Нищо друго не се променя.","reg.pickDone":"Готово с избора","reg.pickAll":"Всички","reg.pickNone":"Нито една","reg.pickedN":"избрани: {n}","reg.pickedNone":"Още нищо не е избрано — отметни задача по-долу.","reg.bundle":"Изтегли план, работа и runner за избраните {n}, в един файл","reg.bundleWhy":"Един JSON с трите изгледа на точно отметнатите задачи: какво е поискано, какво се е случило с него и какво е направила машината. Това е файлът, който се подава на чат модел, когато искаш да проумее защо нещо е тръгнало така.","reg.bundleSaved":"Запазен като {name}.","reg.fixPrompt":"Поправи prompt-а и върни в опашката","reg.fixPromptTitle":'Prompt-ът на „{title}"',"reg.fixPromptHint":"Текстът на задачата, както ще бъде изпратен, а под него кои от проверките ѝ още важат и какво може да променя. Ниво 2 и имената за git остават каквито са. Запазването връща задачата в опашката; опитът, който е минал, пази текста, с който е минал.","reg.fixPromptSave":"Запази и върни в опашката","reg.newPrompt":"Нов prompt и върни в опашката","reg.newPromptHint":"Задачата е завършила готова. Напишете какво да направи сега: новият опит работи върху това, което е направила — на нейния клон, с файловете ѝ на място — и научава, че това е нова инструкция. Отдолу: кои от проверките ѝ още важат (не се пазят, ако не са отметнати) и какво може да променя. Запазването не пуска нищо: после „Продължи“ и „само тази“.","reg.fixPromptSaved":'„{title}" е върната в опашката с новия prompt. Пуснете сесията или „Пусни отново оттук".',"reg.fixPromptLoading":"чета задачата…","reg.newTask":"Нова задача","reg.newTaskIn":"в сесия","reg.newTaskNoSessions":"Още няма сесия; първо създайте една.","reg.newSession":"Нова сесия","reg.newTaskPick":"изберете сесия…","reg.retriedFreshDone":"блокира, после готова в нов чат ({n}\xd7)","reg.retriedFreshStill":"още блокирана след {n} нови чата","reg.retriedFreshWhy":"Runner-ът пусна тази задача отново в нов разговор, след като завърши блокирана. Готова след това означава, че причината е била чатът; блокирана отново означава, че не е: четете текста на задачата, проверките и машината.","exec.title":"Изпълнение","exec.intro":"Как се държи едно пускане, когато задача не завърши готова. Пази се в data/settings.json; важи за пускания, започнати от сега нататък.","exec.maxIterations":"Най-много съобщения към чата в една задача","exec.maxIterationsUnit":"съобщения, после задачата спира като „достигнат лимит“","exec.maxIterationsWhy":"Всяко съобщение е един кръг: чатът праща стъпки, runner-ът ги изпълнява и докладва. Това спира задача, която се върти в кръг; не то ограничава трафика — това прави часовият таван, който изчаква, вместо да спира. Задача, спряла тук, може да продължи в същия чат.","exec.maxRunMinutes":"Най-дълго време за една задача","exec.maxRunMinutesUnit":"минути","exec.maxRunMinutesWhy":"Броено от първото съобщение на задачата, включително изчакванията заради часовия таван. Задача, спряла тук, може да продължи в същия чат.","exec.replyTimeout":"Колко да се чака отговор от чата","exec.replyTimeoutUnit":"секунди (900 = 15 минути)","exec.replyTimeoutWhy":"От изпращането на съобщение до завършването на отговора. Отговор, незавършен дотогава, приключва задачата като провалена — „Copilot did not finish a reply within …“ — със снимка на чата в папката на пускането. По-бавните модели и дългите отговори може да отнемат няколко минути. Важи за пускания, започнати от сега нататък.","sync.show":"Команда за връщане на проекта към основния клон на отдалеченото хранилище","sync.what":"Командата по-долу изтегля промените, поставя текущия клон {branch} точно там, където е {target}, и изтрива новите файлове, които git не игнорира.","sync.fetchedAt":"Какво ще се загуби е изчислено спрямо {target} при последното изтегляне, {when}.","sync.neverFetched":"Това хранилище още не е изтегляло, така че какво ще се загуби е изчислено спрямо стар вариант на отдалеченото.","sync.nothingLost":"Нищо няма да се загуби: няма собствени commit-и, промени или нови файлове.","sync.loses":"Ще се загуби:","sync.commits":"{n} commit(а) в този клон, които ги няма в основния клон (git ги пази известно време в reflog):","sync.changed":"{n} променени файла, които не са commit-нати:","sync.untracked":"{n} нови файла или папки, които git не игнорира:","sync.more":"и още {n}","sync.keeps":"Игнорираните файлове — node_modules, .env, резултати от build — остават, както и всичко скрито със stash.","sync.copyPreview":"Копирай прегледа (не променя нищо)","sync.copyCommand":"Копирай командата","sync.howToRun":"Поставете я в PowerShell и я изпълнете сами. Ботът никога не я пуска: тя изхвърля работа. Ако не сте сигурни, първо пуснете прегледа.","exec.minApproaches":"Подходи, които чатът трябва да опита, преди да се откаже","exec.minApproachesUnit":"различни подхода, после „blocked“ се приема","exec.minApproachesWhy":"Задача завършва „blocked“, когато чатът каже, че не може да я довърши, и изброи какво е опитал. С по-малко подходи от този брой runner-ът я връща с молба за друг, различен подход. Минимумът на формата е 2. Три поредни отговора „blocked“ без нищо ново опитано се приемат все пак.","exec.retryBlocked":"Когато задача завърши блокирана, пусни я отново в нов разговор","exec.retryBlockedTimes":"пъти, после приеми присъдата","exec.retryBlockedWhy":"Runner-ът не може да отсъди защо задача е блокирала: prompt-ът, машината или самият чат — дълъг разговор, чиито ранни ходове Copilot вече не вижда. Нов чат, с изпратен наново договор, лекува причина в чата и нищо друго. Задача, която след това е готова, е била блокирана от чата; задача, която блокира пак, не е, и двата опита остават в записа ѝ. 0 го изключва.","exec.isolation":"Къде върви ботът","exec.isolationNone":"Никъде специално — в този акаунт","exec.isolationNoneAccepted":"В този акаунт — приемам пускане без надзор без изолация","exec.isolationAccount":"Отделен Windows акаунт с малки права","exec.isolationSandbox":"Windows Sandbox","exec.isolationVm":"Виртуална машина","exec.isolationWhy":"Командите, написани от модела, вървят като този процес. Да го кажете тук е това, което позволява пускане без надзор: при избрано „никъде специално“ пускане без човек се отказва, защото никой да не гледа и нищо да не огражда е комбинацията, която това няма да бъде — освен ако не изберете „приемам пускане без надзор без изолация“, което го позволява на ваша отговорност и се записва с всяко пускане точно като това. Това е ваше твърдение, не проверка — runner-ът го записва, отбелязва акаунта, който всъщност държи, и казва, когато двете не съвпадат.","exec.startMode":"Пускане без надзор","exec.startModeAsk":"Питай „сигурен ли си“ всеки път","exec.startModeAuto":"Пускай, без да питаш","exec.startModeWhy":"Бутоните, които минават през опашката сами, питат „сигурен ли си“, преди да тръгнат. Изберете „Пускай, без да питаш“ и те просто тръгват — решили сте веднъж, тук. „Стъпка по стъпка“ си остава до тях, а списъкът със забранени команди важи. Пускане без надзор на тази машина е възможно само ако „Къде върви ботът“ по-горе го позволява.","exec.networkFetch":"Команда, която тегли от интернет, при пускане без надзор","exec.networkFetchAsk":"Чакай ме на екрана за одобрение","exec.networkFetchRefuse":"Откажи я и кажи на чата защо — пускането никога не чака","exec.networkFetchRun":"Изпълни я, без да питаш","exec.networkFetchWhy":"Invoke-WebRequest, curl, wget и подобни. Чакането за вас е единственото спиране, което пускане без надзор още прави. При отказ чатът получава причината и какво да направи вместо това (пакетния мениджър на проекта или файл, написан със стъпка), и пускането продължава без вас. При изпълнение следваща стъпка може да пусне изтегленото, без някой да го е прочел — изберете го само на машина, където това е приемливо; всяка задача записва избора. npm, dotnet, pip и git никога не се задържат, а при „стъпка по стъпка“ всяка команда се показва, каквото и да е избрано тук.","exec.save":"Запази","exec.saved":"Запазено. Важи за пускания, започнати от сега нататък.","story.show":"Какво се случи","story.hide":"Скрий какво се случи","story.why":"Заданието както е дадено, всяко съобщение и отговор, всяка команда с изхода ѝ, кръговете на рецензията и как е завършило — на живо, докато върви.","story.loading":"чета папката на изпълнението…","story.showChat":"разговорът","story.showCommands":"командите и изходът им","story.live":"на живо","story.follow":"↓ следвай най-новото","diff.open":"Виж промените ({n} файла)","diff.openWhy":"Всеки файл, който този опит е променил — преди вляво и след вдясно, с отбелязани разлики.","diff.title":"Промени в „{title}“","diff.summary":"{n} файла, +{a} −{r}","diff.keys":"n / p: следваща и предишна промяна \xb7 ] / [: следващ и предишен файл \xb7 Esc: затваря","diff.close":"Затвори","diff.loading":"чете се…","diff.nothing":"Комитът не е променил нито един файл.","diff.files":"Променени файлове","diff.binaryShort":"двоичен","diff.added":"нов файл","diff.deleted":"изтрит","diff.renamed":"преименуван","diff.prevChange":"Предишна промяна","diff.nextChange":"Следваща промяна","diff.changeN":"промяна {i} от {n}","diff.prevFile":"Предишен файл","diff.nextFile":"Следващ файл","diff.whole":"Покажи целия файл","diff.wrap":"Пренасяй дългите редове","diff.binary":"Двоичен файл: съдържанието му не се показва.","diff.tooLarge":"Над 2 MB: твърде голям, за да се покаже тук.","diff.eol":"Краищата на редовете са сменени ({from} → {to}); самите редове се сравняват без тях.","diff.sameText":"Текстът е същият; сменени са само правата на файла или краищата на редовете.","diff.before":"Преди","diff.after":"След","diff.gap":"⋯ {n} непроменени реда — покажи ги","story.followWhy":"Превъртяхте нагоре и изгледът спря да следва. Това го връща на най-новия ред и следва отново.","scroll.top":"Най-горе на страницата","scroll.bottom":"Най-долу на страницата","story.showLive":"Какво се случва в момента","story.showLiveWhy":"Задачата се изпълнява, докато четете това: съобщенията, командите и изходът им пристигат тук, докато се случват.","row.info":"Какво са тези?","row.infoTitle":"Какво дава всяко от тях","row.infoOpenTask":"Отваря задачата на страницата на сесията ѝ: текста, който ѝ е изпратен, проверките ѝ, присъдата на рецензията и бутоните, с които се редактира или се връща в опашката.","row.infoChat":"Отваря самия разговор в Microsoft 365 Copilot, в нов таб. Ботът кара този чат; това е същото, което вижда и човек.","row.infoExports":"Три JSON файла, всички за тази една задача. Подайте някой от тях на чат модел, когато искате помощ; те отговарят на различни въпроси:","row.infoWhich":"Дебъгването на провал обикновено започва с **работа**. **план** е това, което редактирате и внасяте отново. **runner** е за когато заподозреният е машината — липсващ инструмент, зает порт, паднал браузър.","story.prompt":"Заданието, както е дадено","story.bot":"бот → чат","story.chat":"чат → бот","story.review":"Рецензия, кръг {n}","story.step":"стъпка {it}.{id}","story.running":"работи","story.failedHere":"провали се тук","story.showOutput":"покажи изхода ({n} знака)","story.hideOutput":"скрий изхода","story.showText":"покажи текста ({n} знака)","story.hideText":"скрий текста","story.ended":"Как завърши: готова","story.endedBadly":"Как завърши: {status}","story.notEnded":"Още не е завършила.","sys.profileBot":"В момента се ползва от собственото изпълнение на бота ({n} процеса на Edge). Това е очаквано, докато сесия работи.","reg.continue":"Продължи: пусни {n} чакащи задачи в {s} сесии","reg.continueWhy":"Пуска всяка сесия, в която още има нещо в опашката, в показания тук ред, с питане преди всяка команда.","reg.continueUnattended":"Продължи без да пита","reg.continueUnattendedWhy":"Същото, но всяка команда се изпълнява без спиране за одобрение.","reg.continueStarted":"Пуснато: {n} сесии, една след друга. Гледайте тази страница.","reg.continueRunning":"Сесия работи; тя ще вземе чакащите си задачи поред.","reg.continuePanelTitle":"Преди да продължи","reg.continueChain":"Тези сесии са вериги: провалена задача спира останалите, а задачите след нея са писани с презумпцията, че е минала. Всяка се връща в опашката, на мястото си — или първо ѝ поправете prompt-а:","reg.continueIndependent":"Тези сесии пускат независими задачи. Провалените им се предлагат; махнете отметката на тези, които предпочитате да оставите:","reg.continueQueued":"Чакащи в опашката:","reg.willContinue":"продължава откъдето спря","reg.continueHere":"Продължи откъдето спря","reg.continueHereWhy":"Продължава задачата в собствения ѝ чат и на собствения ѝ клон, с брояча от нула. Първо показва какво ще стане.","reg.continueHereTitle":"Продължи „{title}“ откъдето спря","reg.continueHereChat":"Чат: същият разговор. Задачата не се праща наново; на чата се казва защо е спряла, кои стъпки са минали и да продължи от плана си.","reg.continueHereCommitted":"Клон: {branch}. Свършеното досега е комитнато там ({commit}), включително незакомитнатите и новите файлове; задачата продължава от него.","reg.continueHereNothingNew":"Клон: {branch}. Нямаше нищо ново за комитване; задачата продължава от него.","reg.continueHereNotCommitted":"Клон: {branch}. Нищо не е комитнато: {problem} Файловете остават, както са в работната папка, и задачата продължава върху тях.","reg.continueHereVcsInactive":"Контролът на версиите не е бил активен за този опит: {problem} Файловете остават, както са в папката на проекта, и задачата продължава върху тях.","reg.continueHereNoVcs":"Контролът на версиите е изключен за тази сесия: файловете остават, както са в папката на проекта, незакомитнати, и задачата продължава върху тях.","reg.continueHereCount":"Лимитът, който я спря, започва да брои отначало. Спрелият опит остава в записа.","reg.continueHereStarted":"Продължава „{title}“. Следи тази страница.","reg.limitChip":"спряна от лимит: {limit}","reg.limitChipWhy":"Този опит е спрян от лимит в настройките, а не от присъда за работата. „Продължи откъдето спря“ я продължава.","limit.maxRunMinutes":"{n} минути на задача","limit.maxIterations":"{n} съобщения на задача","limit.replyTimeoutSec":"{n} s чакане на отговор","limit.maxFormatRetries":"{n} отговора в грешен формат","limit.maxCheckRounds":"{n} кръга поправки на проверките","limit.maxReviewRounds":"{n} кръга поправки по ревюто","reg.interruptedTitle":"Ботът спря посред работата.","reg.interrupted":"{n} задачи бяха в ход, когато спря — програмата е затворена, машината е изгаснала или е сринала. Свършеното дотук е запазено. „Продължи“ по-долу ги продължава оттам, където спряха, заедно с останалата опашка.","reg.continueSummary":"{q} чакащи задачи плюс {r} върнати, в {s} сесии, в показания по-горе ред. Задачите без отметка остават, където са.","reg.pickOnly":"само тази","reg.pickOnlyWhy":"Маха отметките от всички останали, така че това пускане взима само тази задача — например тази, на която току-що поправихте prompt-а.","reg.continueGap":"„{task}“ ({session}) е част от верига и тръгва без „{before}“, която е преди нея. Пуснете я сама, само ако не ѝ трябва работата на онази задача.","reg.continueGo":"Продължи, с питане преди всяка команда","reg.continueNameWhy":"Предложено от работата, която продължава, и от това кой пореден опит е. Регистърът групира под него, а изтеглените файлове го носят — така че го променете, ако не е вярно.","reg.continueWithFailed":"Продължи: пусни {f} недовършени и {n} чакащи задачи в {s} сесии","reg.willRequeueFirst":"провалена — връща се в опашката първа","reg.willRequeueFirstWhy":'Тази сесия е верига: задачите след тази са писани с презумпцията, че е минала. „Продължи" я връща в опашката на мястото ѝ; ако трябва, първо ѝ поправете prompt-а.',"tree.load":"Покажи папките","tree.reload":"Прочети папките отново","tree.hint":"Кликнете папка, за да я включите с всичко под нея; кликнете пак, за да я махнете. Знакът − на реда изрязва тази папка от включена родителска. Списъците горе са това, което се запазва.","tree.fold":"сгъни","tree.unfold":"разгъни","tree.stateIn":"включена, с всичко под нея — кликнете, за да я махнете","tree.stateInherited":"включена през папка над нея — кликнете, за да я именувате отделно","tree.stateOut":"изрязана — натиснете − пак, за да я върнете","tree.stateOutInherited":"изрязана през папка над нея","tree.stateNone":"не е включена — кликнете, за да я включите с всичко под нея","tree.insideIn":"{n} вътре","tree.insideOut":"{n} изрязани вътре","tree.insideBoth":"{i} вътре, {e} изрязани","tree.insideWhy":"Папки от двата списъка, които се намират в тази. Разгънете я, за да ги видите.","tree.alsoOut":"Остава навън, без да е изброено:","tree.alsoGitignore":"всичко, което .gitignore изброява, докато този превключвател е включен","tree.alsoEnv":".env файловете, докато този превключвател е изключен","tree.alsoAlways":"node_modules, .git, dist и останалият build изход, винаги","tree.exclude":"изрежи тази папка","tree.unexclude":"спри да изрязваш тази папка","proj.mirrorToDesktop":"Дръж проектите на Desktop-а","proj.mirrorToDesktopWhy":"Главният ключ. Включено, проектите от списъка се копират на Desktop-а — по една папка на проект под {root}, като името на всеки файл носи името на проекта — и се обновяват преди пускане и след всеки кръг стъпки, докато то върви; така копията стигат до OneDrive и до избора на файлове в чата. Всеки проект по-долу има собствена отметка дали да се копира и собствен избор на папки. Изключено, всички папки на проектите се махат от Desktop-а.","proj.mirrorOn":"Всички проекти са на Desktop-а под {root}.","proj.desktopThis":"Дръж копие на този проект на Desktop-а","proj.desktopMasterOff":"изключено, докато „Дръж проектите на Desktop-а“ е изключено","proj.desktopOn":"Този проект се държи на Desktop-а.","proj.desktopOff":"Този проект вече не се държи на Desktop-а; папката му там е махната.","proj.mirrorOff":"Нищо не се държи на Desktop-а.","proj.folders":"Папки, които отиват на Desktop-а","proj.foldersHint":"Кои папки от този проект се копират. Празно означава целият проект, без това, което .gitignore изброява.","proj.foldersSave":"Запази избора","proj.foldersSaved":"Изборът е запазен.","proj.foldersEdit":"папки","lang.label":"Език","a11y.skip":"Към съдържанието","theme.light":"Светла","theme.dark":"Тъмна","theme.toLight":"Превключи към светлата тема","theme.toDark":"Превключи към тъмната тема","home.apiDown":"API-то не отговаря.","home.noToken":"Този браузър още няма ключа за API-то.","home.noTokenHint":"Пуснете интерфейса с {cmd}, който му дава ключа; пуснат по друг начин, той няма такъв.","home.apiHint":"Пуснете го от папката на проекта с {cmd}. Очаква се на {url}.","home.new":"Нова сесия","home.newHint":"Сесията е един разговор с Copilot. Задачите в нея се изпълняват една след друга в същия чат, така че следващите могат да стъпват на предишните.","home.namePlaceholder":"Име на сесията, напр. payments-service","home.create":"Създай","home.sessions":"Сесии","home.loading":"Зареждане…","home.none":"Още няма.","home.col.name":"Име","home.col.tasks":"Задачи","home.col.state":"Състояние","home.col.chat":"Чат","home.col.created":"Създадена","home.tasksDetail":"({done} готови, {queued} чакащи)","home.notOpened":"не е отворен","home.col.remove":"Махане","home.delete":"Изтрий","home.deleteWhy":"Изтриването на сесия я маха от този списък и нищо повече.","home.deleteConfirm":"Да изтрия ли сесията „{name}“ и нейните {n} задача(и)?\n\nВече изпълненото остава в папките ѝ под runs/, а разговорът в Copilot не се пипа. Това не може да се върне.","home.deleteRunning":"Спрете сесията, преди да я изтриете.","home.deleted":"„{name}“ беше изтрита.","home.selectAll":"Избери всички сесии","home.selected":"{n} избрани","home.deleteSelected":"Изтрий избраните {n}","home.deleteSelectedConfirm":"Да изтрия ли {n} сесия(и)?\n\n{names}\n\nВече изпълненото остава в папките им под runs/, а разговорите в Copilot не се пипат. Това не може да се върне.","home.deletedMany":"Изтрити са {n} сесия(и).","home.deleteSomeFailed":"{n} изтрити; {m} не можаха: {why}","home.tickForBoth":"Първата колона отметки управлява списъка — статус и изтриване — и работи и докато тече пускане, освен за сесията, която работи в момента. Втората избира какво да се пусне; пускат се само активни сесии с нещо в опашката.","home.managed":"{n} отметнати за управление","home.manageAll":"Отметни всички сесии, които не работят, за управление","home.manageRow":"Управление на {name}","home.manageRunning":"Работи в момента: статусът ѝ не може да се сменя и не може да се изтрие, докато не спре.","home.makeActive":"Направи активни","home.makeInactive":"Направи неактивни","home.madeActive":"{n} сесия(и) са активни.","home.madeInactive":"{n} сесия(и) са неактивни: няма да се пускат, докато не станат отново активни.","home.statusSomeFailed":"{n} променени; {m} не можаха: {why}","home.statusActive":"активна","home.statusInactive":"неактивна","home.activeWhy":"Активна: пуска се, когато бъде пусната — сама или в пускане на няколко.","home.inactiveWhy":"Неактивна: оставена настрана, така че нищо не я пуска — нито пускане на няколко, нито „Продължи“. Направете я активна, за да се пуска отново; нищо в нея не се губи.","state.running":"работи","state.idle":"свободна","state.stopping":"спира","state.completed":"завършена","state.completedTitle":"Всички задачи на тази сесия са приключили готови. Нищо не чака в опашката.","state.ended":"приключила, с провали","state.endedTitle":"Всички задачи са приключили, но не всички готови: {n} провалени, блокирани или спрени. Нищо не чака в опашката.","status.queued":"чака","status.running":"работи","status.waiting-approval":"чака одобрение","status.done":"готова","status.blocked":"неизпълнена","status.failed":"провалена","status.aborted":"прекратена","status.limit-reached":"достигнат лимит","session.crumb":"Сесии","batch.moveUp":"Премести {name} нагоре","batch.moveDown":"Премести {name} надолу","session.noId":"В адреса не е посочена сесия. Отворете една от страницата „Сесии“.","session.stale":"Страницата не успя да опресни тази сесия, така че показаното може да е остаряло: {err}","session.streamClosed":"Живият дневник се разкачи; страницата пак се опреснява на няколко секунди. Презаредете я, за да се свърже отново.","session.run":"Пусни {n} задача(и)","session.runWhy":"Минава през опашката сама, без да спира да пита. Това е обичайният начин: пускате и се връщате, когато приключи.","session.runStep":"Стъпка по стъпка","session.runStepWhy":"Показва ви всяка команда, преди да я изпълни, и чака решението ви. За когато нещо се е объркало или задачата е нова и искате да видите какво прави в действителност.","session.unattendedConfirm":"Това се изпълнява само: командите, които Copilot напише, ще се пускат, без да ви питат, докато опашката не свърши. Списъкът със забранени команди продължава да важи. Да я пуснем ли?","session.stop":"Спри след текущата стъпка","session.startedAuto":"стартира — ще мине през опашката сама","session.startedStep":"стартира — ще пита преди всяка команда","session.notStarted":"не е стартирано: {reason}","session.modeUnattended":"вече не пита","session.askAgain":"Питай ме пак на всяка стъпка","session.askingAgain":"всяка следваща стъпка ще чака одобрение","session.stopping":"спира след текущата стъпка","session.willUseModel":"Модел: {name}.","session.willUseFiles":"Файлове на проекта: {root} ({dirs}).","session.noFiles":"Файлове на проекта: не се прикачат към тези задачи.","session.openChat":"отвори чата: {name}","session.noChat":"още няма разговор; първото изпълнение го отваря","session.group":"Споделяне на разговор","session.groupWhy":"Сесиите с едно и също име тук се изпълняват в един чат на Copilot: първата, която тръгне, го отваря, а останалите се присъединяват към него и виждат историята му. Оставено празно, сесията получава собствен разговор — което е обичайният отговор.","session.groupPlaceholder":"име, едно и също във всички сесии, които да споделят","session.groupSaved":"запазено","session.groupHasChat":"Тази сесия вече е в разговор и остава в него. Групата решава къде отива сесията при първото ѝ пускане.","approval.title":"Стъпка {n} чака вашето решение","approval.run":"Изпълни","approval.runAll":"Изпълни без да питаш повече","approval.runAllWhy":"Отговаря на тази стъпка с Изпълни и престава да пита за следващите до края на това изпълнение. Забранените команди пак се отказват, а команда, която тегли от интернет, прави каквото казват Настройки → Изпълнение (по подразбиране пак пита).","approval.runAllConfirm":"Оттук нататък командите, написани от Copilot, ще се изпълняват без да питат, докато това изпълнение приключи. Забранените команди пак се отказват, а команда, която тегли от интернет, прави каквото казват Настройки → Изпълнение (по подразбиране пак пита). Продължавате ли?","approval.network":"Тази команда тегли от интернет. Пускане без питане също спира за нея (освен ако Настройки → Изпълнение не казва друго), защото следваща стъпка може да пусне изтегленото. Изпълнете я само ако знаете какво тегли и защо.","approval.skip":"Пропусни","approval.abort":"Прекрати задачата","model.title":"Модел на Copilot","model.hint":"Списъкът се чете от самия избор на модел в чата, така че съдържа това, което вашият тенант предлага днес. Ако оставите по подразбиране, нищо не се пипа; ако изберете модел, разговорът се превключва на него в началото на всяко изпълнение.","model.default":"каквото е настроено в чата (по подразбиране)","model.followsDefault":"от Настройки: {name}","model.refresh":"Прочети списъка от Copilot","model.refreshConfirm":"Това отваря прозореца на Edge на бота, прочита избора на модел и го затваря. Не може да се изпълни, докато тече сесия. Продължавате ли?","model.refreshing":"отварям чата и чета избора…","model.refreshed":"прочетени са {n} модела от чата","model.readAt":"Прочетено на {t}: {n} опции.","model.chatWasOn":"Чатът беше на {name}.","model.neverRead":"Списъкът никога не е четен на тази машина. Натиснете бутона, за да го прочетете от чата.","model.none":"Чатът не показва избор на модел.","model.saved":"изпълненията ще ползват {name}","model.savedDefault":"оставено по подразбиране на чата","model.lastUsed":"последното изпълнение ползва {name}","model.notInList":"{name} (запазен, но го няма в прочетения списък)","model.unavailable":"не е наличен","model.defaultIs":"Сесиите без собствен модел ползват {name}.","model.defaultIsNone":"Сесиите без собствен модел ползват това, което е настроено в чата.","model.makeDefault":"Новите сесии да тръгват с {name}","model.clearDefault":"Да не се задава модел на новите сесии","model.defaultSaved":"новите сесии ще тръгват с {name}","model.defaultCleared":"новите сесии ще остават на настроеното в чата","model.showDetails":"покажи какво каза изборът","l1.title":"Ниво 1: основен prompt","l1.sent":"изпратен в този разговор","l1.notSent":"изпраща се с първата задача","l1.edit":"редактирай","l1.hint":"Prompt-ът за начина, по който работи ботът, изпращан веднъж на разговор с приоритет над инструкциите от ниво 2 на всяка задача по-долу: фазите на една задача, JSON форматът на отговора, стоп думата, как се проверява преди затваряне, кога задача е блокирана, отклонение или оспорена находка, и правилата, които ниво 2 не може да промени.","l1.customised":"Използва се вашето редактирано копие.","l1.show":"покажи prompt-а","vcs.title":"Контрол на версиите","vcs.on":"включен","vcs.off":"изключен","vcs.hint":"Изпълнителят сам прави git преди и след всяка задача, а ниво 1 казва на Copilot да не прави клонове и комити. Ако и двамата го правите, хранилището остава в състояние, което никой от двамата не очаква.","vcs.enable":"Работи по клонове и комитвай промененото","vcs.enableWhy":"Препоръчва се и е включено по подразбиране. Без него задачата променя работното ви дърво без път назад. Push-ването остава ваше: оттук никога не се push-ва.","vcs.repo":"Хранилище","vcs.repoIs":"Работи се в {dir}.","vcs.repoNone":"Няма хранилище. Задайте го тук или задайте корен на проекта при файловете.","vcs.branches":"Как се правят клоновете","vcs.perTask":"Отделен клон за всяка задача","vcs.perTaskWhy":"Всяка задача тръгва от една и съща точка и никога не вижда промените на предишната. Независими проверки срещу едно известно състояние. Задача, която чете или проверява по-ранна работа, няма да я намери тук.","vcs.perSession":"Един клон за цялата сесия","vcs.perSessionWhy":"Всяка задача продължава оттам, където е спряла предишната, така че по-късната стъпва върху предишната работа.","vcs.branchName":"Име на този един клон","vcs.branchNameWhy":"Без представката. Празно значи, че се сглобява от името на сесията, както винаги е било. В другия режим няма ефект — там всяка задача си именува своя.","vcs.startFrom":"Откъде тръгва тази сесия","vcs.startBranch":"От локален клон (main)","vcs.startBranchWhy":"Сесията тръгва от клона, посочен отдолу, какъвто е на тази машина. Всяка сесия с този избор тръгва от един и същ чист код и не вижда работата на другите.","vcs.startPrevious":"От клона на предната сесия","vcs.startPreviousWhy":"Сесията продължава от края на клона на сесията, която последна е комитнала работа в същото хранилище — при пускане на няколко сесии това е предната — така че сесиите образуват верига. Сесии в други хранилища не се броят. Ако тук няма по-ранна сесия, тръгва от клона, посочен отдолу.","vcs.startHead":"Откъдето е хранилището (както досега)","vcs.startHeadWhy":"Какъвто клон е избран при първото пускане на сесията — често този, който е оставила предната. Запазено за сесии, които разчитат на него.","vcs.baseBranch":"Локален клон, от който да тръгне","vcs.baseBranchWhy":"Празно значи main. Решава се при първото пускане на сесията; промяна тук важи от следващата задача, която тръгне.","vcs.startedPrevious":"Тръгна от края на {branch} ({commit}) — клона на сесията „{name}“.","vcs.startedBranch":"Тръгна от локалния клон {branch} ({commit}).","vcs.startedHead":"Тръгна оттам, където беше хранилището ({commit}).","vcs.commit":"Комит при приключване на задача","vcs.commitWhy":"По един локален комит на задача, независимо от изхода, с обяснението в съобщението. Изключено оставя промените в работното дърво.","vcs.notReady":"Контролът на версиите е включен, но още не може да работи.","vcs.noRepo":"Тази папка не може да се ползва за контрол на версиите","vcs.noRepoHow":"Контролът на версиите иска git хранилище — папка, в която има .git. Направете такова с „git init“ там или посочете проект, който вече е хранилище. Дотогава превключвателят остава изключен, защото включен превключвател, който не прави нищо, е по-лош от изключен.","vcs.pickFirst":"Първо изберете папката на проекта, после включете контрола на версиите.","vcs.repoOk":"Тази папка е git хранилище.","vcs.repoField":"Папка на проекта","vcs.ready":"Готово: {dir}, в момента на {branch}.","vcs.completeOn":"Цялата работа на тази сесия е на {branch}.","vcs.noSingleBranch":"Няма един клон с цялата работа на сесията: всяка от {n} задачи има свой, а HEAD е на последно изпълнената.","vcs.pushIsYours":"Нищо не се push-ва. Прегледайте клона и го качете сами.","vcs.saved":"запазено","vcs.taskBranch":"клон {branch}","vcs.taskCommit":"комит {commit}","vcs.taskBase":"тръгнала от {commit}","vcs.taskProblem":"контролът на версиите не се изпълни: {problem}","vcs.taskFiles":"{n} променени файла","vcs.foreignCommits":"Commit-и в този клон, които не са на runner-а ({n}) — направени докато задачата вървеше, от някой или нещо друго:","vcs.suspicious":"Комитнато, макар да прилича на изход на инструмент или на тайни ({n}) — посочено веднъж и оставено:","vcs.taskNoFiles":"нищо не беше комитнато — задачата не промени файлове","vcs.taskBinary":"двоичен","mirror.title":"Файлове на проекта за чата","mirror.hint":"Избраните директории се копират в една плоска папка на Desktop с пътя в името на файла ({example}), презаписват се само променените файлове, и файловете се прикачат към първото съобщение на всяка задача. Прикачването качва копие в OneDrive.","mirror.enable":"прикачай файловете на проекта","mirror.root":"Корен на проекта","mirror.listDirs":"Покажи директориите","mirror.noDirs":"няма подходящи директории","mirror.include":"Включи (по една на ред; директория включва всичко под нея)","mirror.exclude":"Изключи (по една на ред)","mirror.save":"Запази","mirror.stateOn":"файловете се прикачат","mirror.stateOff":"не се прикачат файлове","mirror.unsaved":"Още не е запазено.","mirror.unsavedWhy":"Тези настройки влизат в сила едва след Запази. Изпълнение, започнато сега, ще ползва записаното преди това.","mirror.saved":"запазено","mirror.browse":"Избери папка…","mirror.browsing":"изберете папката в отворилия се прозорец","mirror.browseCancelled":"не е избрана папка","mirror.rootHint":"Папката, спрямо която са пътищата по-долу.","mirror.rules":"Какво се копира от него","mirror.gitignore":"Не добавяй това, което е в .gitignore","mirror.gitignoreWhy":"Включено по подразбиране. Компилираното, локалните временни файлове и всичко останало, което проектът вече игнорира, не влиза в чата. Няма отношение към .env файловете.","mirror.env":"Копирай и .env файловете","mirror.envWhy":"Изключено по подразбиране. Само тази отметка решава за .env файловете: няма значение дали опцията отгоре е маркирана, нито какво пише за тях в .gitignore.","mirror.envWarn":"Ще копирам .env файловете на този проект в папката на Desktop, ще се качат в OneDrive и ще се прикачат към чата. В тях обикновено има пароли, ключове и токени. Да включа ли това?","mirror.envOn":"Тайните ще се прикачат към всяка задача на тази сесия.","mirror.alwaysOut":"Винаги остават навън, независимо от отметките: {dirs}.","mirror.conflict":"Една и съща директория не може да е едновременно включена и изключена.","mirror.conflictSame":"„{dir}“ е и в двата списъка.","mirror.conflictParent":"„{exclude}“ е изключена, а „{include}“ е включена и се намира в нея.","mirror.conflictFix":"Махнете я от единия списък. Дотогава нищо не се запазва.","mirror.needRoot":"Първо въведете корена на проекта.","mirror.check":"Провери какво ще се копира","mirror.checking":"проверявам…","mirror.checked":"{files} файла, {size}.","mirror.checkedEnv":"От тях {n} са .env файлове.","mirror.checkedSkipped":"{n} остават навън.","mirror.checkedNone":"С този избор нищо няма да се копира.","mirror.showFiles":"покажи списъка","mirror.showSkipped":"покажи какво остава навън","tasks.title":"Задачи","tasks.hint":"Изпълняват се в този ред, в същия разговор. Когато една приключи с обяснение, започва следващата чакаща. Задача, която приключи по друг начин, спира изпълнението и останалите остават да чакат.","chain.title":"Какво става, когато задача не приключи успешно","chain.stop":"Спри опашката при първата провалена","chain.stopWhy":"Третира опашката като една верига, каквото обикновено е един suite: следващата задача стъпва върху направеното от предишната, затова да се изпълнява върху машина в непланирано състояние е по-злото. Останалите остават да чакат и могат да се пуснат, след като провалът е отстранен.","chain.continue":"Продължи със следващата задача","chain.continueWhy":"Третира задачите като независими проверки, които просто споделят един разговор. Провалът на една не казва нищо за следващата, а провалите се четат после в регистъра.","chain.savedStop":"опашката ще спира при първата провалена","chain.savedContinue":"опашката ще продължава след провал","chain.locked":"Това не може да се променя, докато сесията работи.","tasks.none":"Още няма задачи. Добавете по-долу.","task.iterations":"{n} итерация(и)","task.edit":"Редактирай","task.cancel":"Отказ","task.delete":"Изтрий","task.branch":"Клон за тази задача","task.branchWhy":"Без представката — нея я слага runner-ът. Празно значи, че името се сглобява от сесията и заглавието на задачата, както винаги е било.","task.branchIgnored":"Тази сесия работи по един клон, така че име тук се игнорира. Клонът се именува в панела за контрол на версиите по-горе.","task.commitMessage":"Текст на комита","task.commitWhy":"Първият ред е заглавният. Резюмето на Copilot и как е приключила задачата се добавят отдолу така или иначе. Празно значи, че заглавният ред е заглавието на задачата.","task.gitNames":"git: клон {branch} \xb7 комит „{subject}“","task.gitBranchOnly":"git: клон {branch}","task.gitCommitOnly":"git: комит „{subject}“","task.editAll":"Промени — заглавие, инструкции, текст, клон и комит","checks.title":"Проверки","run.unattended":"самостоятелно, без да спира да пита","run.confirm":"стъпка по стъпка, с питане преди всяка команда","restart.button":"Пусни отново оттук","restart.why":"Връща кода отпреди тази задача, след което пуска нея и всички след нея от същото изпълнение — включително онези, които изобщо не са стигнали до ред.","restart.checking":"изчислява се какво би станало…","restart.cannot":"Не може да се пусне отново оттук: {problem}","restart.noRepo":" (няма хранилище — контролът на версиите е изключен за тази работа)","restart.alreadyQueued":" (вече чака, затова се оставя както си е)","restart.repoLine":" {repo}\n назад до {commit} на нов клон {branch}, а {n} по-късни комита остават на {kept}","restart.confirm":"Да пусна ли отново от „{title}“?\n\nПърво кодът се връща:\n{repos}\n\nНищо не се трие — по-късните комити остават на клона, на който са направени, на един checkout разстояние.\n\nСлед това {tasks} задача(и) в {sessions} сесия(и) се нареждат отново и тръгват {mode}:\n{list}\n\nВсичко, което тези задачи вече са произвели, се заменя с това, което произведат сега.","restart.failed":"Не тръгна: {problem}","restart.started":"Пуснато отново: {requeued} задача(и) в опашката, {repos} хранилище(а) върнати назад.","review.title":"Независима рецензия","review.hint":"Когато задачата приключи и проверките ѝ минат, се отваря втори разговор, който не е участвал в работата. Получава задачата и променените файлове — не и резюмето — и решава, като изпълни работата, а не като я прочете. Ако намери проблеми, те се връщат за поправка, и задачата не може да приключи, докато не мине или не свършат рундовете.","review.on":"включена","review.off":"изключена","review.enable":"Проверявай всяка задача с втори разговор","review.enableWhy":"Хваща класа дефекти, който нито проверките, нито самата задача могат: твърдение, за което никой не се е сетил да провери. Струва по един допълнителен разговор на задача.","review.modelField":"Модел за рецензията","review.modelWhy":"Остави празно, за да ползва модела на сесията. Друг модел си струва: свежият разговор маха привързаността към работата, но не и слепите петна на модела, който я е свършил.","review.modelSame":"същият модел като на работата","review.save":"Запази","review.saved":"Запазено.","review.verdict.pass":"рецензията мина","review.verdict.fail":"рецензията намери проблеми","review.verdict.error":"рецензията не се проведе","review.verdict.skipped":"без рецензия","review.ran":"след {n} изпълнени команди","review.rounds":"{n} рунд(а)","review.onModel":"на {model}","review.findings":"какво намери ({n})","review.evidence":"Доказателство","review.problem":"Рецензията не можа да се проведе: {problem}. Работата е приета без рецензия.","review.skippedWhy":"Без рецензия: {why}.","review.taskOff":"Тази задача не се рецензира.","review.aboutTask":"за задачата, не за работата","review.repeated":"върна се след докладвана поправка","task.deviations":"Не както задачата казва ({n})","task.deviationDid":"Направено вместо това","task.deviationWhy":"Защото","reg.deviations":"{n} отклонение(я)","reg.deviationsWhy":"Моделът не е могъл да следва всяка инструкция буквално и е казал какво е направил вместо това. Отвори задачата, за да ги прочетеш.","task.disputes":"Оспорени находки на рецензията ({n})","reg.disputes":"{n} оспорване(ия)","reg.disputesWhy":"Моделът е казал, че находка на рецензията е грешна, с доказателство; следващият рецензент е уведомен. Отвори задачата за двете страни.","task.readOnly":"само за четене","task.readOnlyEdit":"Само за четене: задачата не бива да променя нито един файл","task.readOnlyEditWhy":"За одит или проверка, която докладва и не променя нищо. При включен контрол на версиите каквото промени един кръг, се връща, и чатът научава.","task.scopeEdit":"Файлове, които задачата може да променя","task.scopeEditWhy":"По един път или шаблон на ред: файл, папка, завършваща с /, или * и **. Празно значи навсякъде в проекта. Одит, който пише доклад, не е само за четене: сложете пътя на доклада тук.","task.newIntentNote":"Нов prompt е нов въпрос: проверките, добавени от предишни прегледи, отпадат, а собствените проверки на задачата решават само ако ги запазите. Махнете писаните за стария prompt.","reg.keepChecks":"Проверки, които важат и за новия prompt","reg.keepChecksWhy":"Махнете отметката на писаните за стария prompt — проверка, която вече не пасва, би решила новата задача. Проверките от предишни прегледи отпадат.","stop.why":"Защо опитът е спрял, когато статусът не го казва.","stop.format-repair-exhausted":"изчерпана поправка на формата","stop.contract-conflict":"задачата си противоречи","stop.no-progress":"няма напредък","stop.invalid-check":"проверка не можа да се изпълни","stop.environment":"липсва shell","metrics.title":"Как се справя ботът","metrics.hint":"Сбор от всички записани задачи; всеки показател брои неща, които runner-ът е видял, никога какво чатът е казал за себе си. „Толкова от толкова“, за да не се чете процент от три задачи като процент от триста.","metrics.olderAttempts":"{n} опит(а) са минали, преди runner-ът да брои тези неща, и не влизат в показателите, които се нуждаят от броенето.","metrics.col.measure":"Показател","metrics.col.all":"Всички задачи","metrics.tasks":"Изпълнени задачи","metrics.attemptsN":"{n} опит(а)","metrics.firstPass":"Готови от първия опит","metrics.doneInTheEnd":"Готови накрая","metrics.falseCompletion":"„Done“, отхвърлено от проверките (опити)","metrics.reviewRejection":"Върнати от прегледа (прегледани опити)","metrics.repeatedCommands":"Отказана повторена команда (опити)","metrics.noProgress":"Спрени, защото не напредват (опити)","metrics.scopeViolation":"Променили файлове извън обхвата (опити с обхват)","metrics.unrelatedDiff":"Комитнали нещо подозрително или с чужди commit-и (опити)","metrics.resumed":"Продължени оттам, където са спрели, и завършени (продължени опити)","metrics.freshRetries":"Пуснати отново в нов чат от runner-а","metrics.manual":"Пъти, в които човек се е намесил (ново пускане, пропускане, спиране)","metrics.ended":"Как са завършили последните опити","handoff.title":"Как завърши — по записите на runner-а","handoff.outcome":"Резултат:","handoff.files":"Променени файлове:","handoff.noFiles":"нищо не е комитнато","handoff.validation":"Проверки:","handoff.passed":"{n} от {of} проверки минаха","handoff.review":"преглед {verdict}, {open} отворени бележки","handoff.issues":"Известни проблеми:","handoff.noIssues":"няма записани","handoff.evidence":"Доказателства (папка на изпълнението):","handoff.vcs":"Клон:","handoff.notPushed":"не е push-нат","handoff.noCommit":"нищо не е комитнато","handoff.manual":"Остава за вас:","handoff.notRun":"Не е изпълнено:","task.scope":"може да променя само: {paths}","task.scopeWhy":"Планът е ограничил задачата до тези пътища. При включен контрол на версиите runner-ът връща всяка промяна извън тях след всеки кръг стъпки и казва на чата.","task.scopeReverted":"Върнато, защото е извън обхвата на задачата ({n}): {paths}","reg.readOnlyWhy":"Тази задача не бива да променя файлове. Runner-ът я проваля, ако работното дърво е променено в края ѝ.","task.leftovers":"Оставени работещи и спрени от runner-а ({n}):","task.leftoverPorts":"слуша на {ports}","task.ranWith":"Изпълнено с Node {node} \xb7 npm {npm} \xb7 git {git} \xb7 PowerShell {pwsh}","task.took":"отне {d}","task.runningFor":"работи от {d}","reg.runTook":"отне {d}","reg.runRunning":"работи от {d}","session.runClock":"Това пускане: {n} задачи \xb7 {d}","session.runClockLive":"Това пускане: {n} задачи \xb7 {d} досега","restore.button":"Върни","restore.why":"Връща хранилището към кода, какъвто е бил преди тази задача да започне.","restore.checking":"проверява се…","restore.cannot":"Не може да се върне: {problem}","restore.confirm":"Да върна ли {repo} към кода отпреди „{title}“?\n\nСъздава се нов клон {branch} на комита {commit} и се превключва на него. Нищо не се изтрива и никаква история не се пренаписва.","restore.confirmLosing":"Да върна ли {repo} към кода отпреди „{title}“?\n\nСъздава се нов клон {branch} на комита {commit} и се превключва на него.\n\n{n} комита, направени след този момент, НЯМА да са в него:\n{list}\n\nТе не са изгубени — остават на {kept} и можете да се върнете на него по всяко време. Но работното дърво вече няма да съдържа тази работа, и всичко построено от нея ще трябва да се построи наново.","restore.done":"Хранилището е на {branch}, на комит {commit}. {n} по-късни комита остават на {kept}.","restore.doneNothing":"Хранилището е на {branch}, на комит {commit}. След него нямаше нищо.","restore.failed":"Връщането не се случи: {problem}","checks.why":"Какво трябва да е вярно, преди задачата да има право да приключи. Runner-ът ги изпълнява сам, след като Copilot докладва задачата за готова: ако някоя не мине, провалът се връща в чата заедно с изхода си и задачата продължава, докато не минат или не ѝ свършат опитите.","checks.none":"Няма проверки. Тази задача приключва, когато Copilot каже, че е приключила.","checks.noneWhy":"Добавете за всичко, което една команда може да реши: компилация, пускане на тестове, файл, който трябва да съществува.","checks.add":"Добави проверка","checks.remove":"Махни","checks.name":"Какво проверява","checks.namePlaceholder":"тестовете минават","checks.kind":"Трябва","checks.run":"Команда","checks.file":"Файл","checks.value":"Текст","checks.valueRegex":"Израз","checks.cwd":"В папка","checks.results":"Последното им изпълнение","checks.passed":"мина","checks.failed":"не мина","checks.n":"{n} проверки","checks.fromReview":"От рецензии ({n})","checks.fromReviewWhy":"Проверки, дадени от рецензентите заедно с находките им: механичният тест, който би хванал всяка. Остават със задачата за всеки следващ опит, така че забелязаното веднъж не се намира повече по случайност.","checks.state.suspended":"спряна — оспорена, до присъдата на следващата рецензия","checks.state.dropped":"отпаднала — следващата рецензия не повдигна находката отново","checks.kind.exit-zero":"командата да успее","checks.kind.exit-nonzero":"командата да се провали","checks.kind.output-contains":"изходът ѝ да съдържа","checks.kind.output-omits":"изходът ѝ да не съдържа","checks.kind.output-matches":"изходът ѝ да съвпада с","checks.kind.file-exists":"файлът да съществува","checks.kind.file-missing":"файлът да не съществува","checks.kind.file-contains":"файлът да съдържа","task.continue":"Продължи в същия чат","task.continueWhy":"Продължава оттам, където задачата спря — на лимита, когато самият бот е спрял (ток, Ctrl+C, срив) или когато е спряна: същият разговор, същият клон, нов брояч на съобщенията. На чата се казва да тръгне от плана си, а не отначало.","task.continueConfirm":"Да продължи ли „{title}“ оттам, където спря? Връща се в същия чат и клон; спрелият опит се запазва.","task.rerun":"Пусни отново","task.rerunWhy":"Връща задачата в опашката. Направеното от предишния опит се запазва и се показва под задачата.","task.rerunConfirm":"Да върна ли „{title}“ в опашката? Предишният опит се запазва, със собствен дневник.","task.saveAndRerun":"Запази и върни в опашката","task.editRanConfirm":"Да запазя ли промяната в „{title}“ и да върна задачата в опашката? Вече изпълненият опит се запазва с текста, с който е изпълнен.","task.editRanWhy":"Тази задача вече е изпълнявана, затова записът на промяна я връща в опашката. Изпълненият опит си остава със собствен текст, дневник и обяснение.","task.attemptText":"задачата, както е изпълнена в този опит","task.attempts":"предишни опити ({n})","task.attemptN":"опит {n}","task.deleteConfirm":"Да изтрия ли чакащата задача „{title}“?","task.deleteConfirmRan":"Да махна ли „{title}“ от сесията? Тя вече е изпълнена; изпълненото остава в папката ѝ под runs/.","task.started":"започната {t}","task.added":"добавена {t}","task.finished":"приключила {t}","task.save":"Запази","task.whatWasDone":"Какво е направено","task.l2Show":"ниво 2 за тази задача ({n} реда)","task.noL2":"тази задача няма инструкции от ниво 2","task.promptAndL2":"задачата и ниво 2","task.l2":"ниво 2","task.prompt":"задача","task.firstMessage":"точното първо съобщение, с което започна задачата","task.files":"всичко изпълнено и файловете","task.log":"task-log.txt: цялата задача като текст","task.reports":"отчети, пратени на Copilot:","task.artifacts":"свалени файлове:","task.replies":"сурови отговори:","task.finalReply":"последното съобщение от Copilot","save.log":"запази log-а","save.attemptLog":"запази log-а на този опит","save.attemptRecord":"изтегли план, работа и runner на този опит","save.attemptRecordWhy":"Този опит, както е вървял — текстът, който е получил, какво е направил, какво е направила машината — в един файл, дори ако задачата е редактирана след това. Опит, който не е завършил готов, пази тези три и като plan.json, work.json и runner.json в папката на пускането си.","save.saving":"запазва се…","save.why":"Записва файла в папка на десктопа и отваря Explorer с вече избран файл, за да може да се влачи направо в чата, който води работата.","save.done":"Запазен в {path} — Explorer е отворен върху него, готов за влачене.","save.savedOnly":"Запазен в {path}. {note}","save.failed":"Не можа да бъде запазен: {problem}","form.title":"Добави задача","form.hint":"Отива в края на опашката. Ако сесията работи, ще бъде поета след текущите задачи; ако е свободна, натиснете Изпълни горе. Ниво 2 се попълва от предишната задача, така че серия от задачи го споделя.","form.titleLabel":"Заглавие","form.titlePlaceholder":"кратко име, напр. пусни unit тестовете","form.taskLabel":"Задача","form.taskPlaceholder":"Какво да се направи, какъв трябва да е резултатът, какво е извън обхвата.","form.add":"Добави в опашката","form.queued":"добавена","export.title":"Изтегли свършената работа","export.hint":"Разговорът на избраните задачи, като един текстов файл. Нищо не се изпраща навън: файлът се съставя тук и се записва от браузъра ви.","export.nothing":"В тази сесия още нищо не е изпълнявано.","export.all":"Избери всички","export.none":"Изчисти избора","export.selected":"избрани: {n}.","export.allOf":"Няма отметнати, затова всички {n} изпълнени.","export.outcome":"Очаквано и получено ({n})","export.full":"Целият разговор ({n})","export.outcomeWhy":"„Очаквано и получено“ е краткият вариант: за всяка задача първото съобщение и отговорът, с който тя приключва. Целият разговор добавя и всички отчети помежду и всички отговори.","l2.label":"Ниво 2: инструкции за проекта, домейна и екипа за тази задача","l2.loadPreset":"зареди шаблон…","l2.saveAs":"Запази като шаблон","l2.saveAsPrompt":"Запази тези инструкции от ниво 2 като шаблон с име:","l2.savedAs":"запазено като „{name}“","l2.placeholder":"Това, което изпълнителят не може да знае: проектът, структурата му, как се пускат тестовете, конвенциите, какво никога да не се пипа.\nОставете празно, ако няма какво да добавите. Ниво 1 винаги има предимство пред написаното тук.","live.title":"На живо","live.none":"Още нищо. Събитията се появяват тук, докато тече изпълнение.","l1page.title":"Ниво 1: основен prompt","l1page.hint":'Prompt-ът за начина, по който работи ботът. Изпраща се веднъж в началото на всеки разговор, преди инструкциите за проекта, а следваща задача в същия разговор получава кратко напомняне за него. Казва на модела фазите на една задача (получи, планирай стъпка, изпрати, прочети резултата, повтори, провери, затвори), JSON формата на отговора, който runner-ът парсва, стоп думата, какво изисква „done" (проверка, която сам е пуснал и прочел), кога задача е „blocked" (поне два реални подхода и нещо конкретно на пътя), как се обявява инструкция, която не може да се изпълни както е написана, и как се оспорва находка от рецензия, как се връщат файлът с резултатите и отказаните стъпки, и правилата, които ниво 2 не може да промени. Независимата рецензия има собствен prompt (prompts/review1.md). Редактирайте го само ако знаете защо: парсърът очаква точно описания тук формат.',"l1page.custom":"Редактирано копие в data/level1.md","l1page.shipped":"Оригиналът от проекта, prompts/level1.md","l1page.unsaved":"незапазени промени","l1page.save":"Запази","l1page.saved":"Запазено. Важи за сесии, започнати от сега нататък.","l1page.reset":"Върни оригинала","l1page.resetConfirm":"Да отхвърля ли редакциите ви и да върна основния prompt, доставен с проекта?","l1page.resetDone":"Върнат е оригиналният основен prompt.","presets.title":"Шаблони за ниво 2","presets.hint":"Ниво 2 е това, което вие знаете, а изпълнителят не: проектът, домейнът, конвенциите на екипа, използваните инструменти. Изпраща се с всяка задача и може да е различно за всяка. Запазете тук тези, които преизползвате, и ги избирайте при добавяне на задача. Ниво 1 винаги има предимство пред написаното тук.","presets.name":"Име","presets.namePlaceholder":"напр. екип payments-service","presets.content":"Инструкции","presets.contentPlaceholder":"Проект: ...\nСтруктура на репото: ...\nКак пускаме тестове: ...\nКакво никога да не се пипа: ...","presets.save":"Запази шаблона","presets.saved":"Запазено „{name}“.","presets.list":"Запазени","presets.none":"Още няма.","presets.edit":"Редактирай","presets.delete":"Изтрий","presets.deleteConfirm":"Да изтрия ли шаблона „{name}“?","presets.show":"покажи","sys.machine":"Тази машина","sys.loading":"Зареждане…","sys.node":"Node","sys.edge":"Edge","sys.edgeMissing":"не е намерен","sys.profile":"Профил на бота","sys.profileMissing":"(още не е създаден: пуснете cop login)","sys.profileInUse":"Профилът се ползва от","sys.profileHeld":"Edge държи профила (pid {pids}). Изпълнение би се провалило. Затворете този прозорец на Edge.","sys.profileUnknown":"не можа да се провери","sys.profileFree":"свободен","sys.desktop":"Desktop","sys.desktopSynced":"(архивира се в OneDrive)","sys.desktopLocal":"(не се архивира в OneDrive; огледалото остава локално)","sys.cwd":"Резервна папка за командите (сесията работи в собствената си папка на проекта)","sys.runs":"Папка с изпълненията","sys.data":"Папка с данните","sys.mode":"Режим по подразбиране","sys.settings":"Настройки","sys.settingsHint":"Четат се от {file} до проекта. Има същата форма като {example}; липсващото взема стойността по подразбиране. Редактирайте файла и рестартирайте API-то.","sys.asSaved":"Както е записано","sys.resolved":"Изчислени пътища","sys.signin":"Вписване","sys.signinHint":"Вписването става веднъж, от терминала, за да не работи ботът никога с пароли:","reg.title":"Регистър на задачите","reg.hint":"Всички задачи от всички сесии на едно място: какво е направено, какво се изпълнява в момента и какво предстои. Редът в една сесия е редът на изпълнение.","reg.total":"задачи","reg.done":"готови","reg.open":"предстоят","reg.failedCount":"не са приключили","reg.activeNow":"В момента","reg.upcoming":"Какво следва","reg.upcomingHint":"В реда, в който ще се изпълнят. Сесията върви по опашката си отгоре надолу; първата в една сесия е следващата на ход.","reg.past":"Какво е направено","reg.pastHint":"Най-новите отгоре. Задача, която не е приключила с обяснение, е спряла сесията си и е оставила останалите да чакат.","reg.none":"Още няма задачи.","reg.noUpcoming":"Няма чакащи. Всички задачи са минали.","reg.noPast":"Още нищо не е изпълнявано.","reg.noMatch":"Нищо не отговаря на филтъра.","reg.next":"следваща в тази сесия","reg.queuePos":"{n}-а в опашката","reg.waitingRun":"чака сесията да бъде стартирана","reg.willFollow":"тръгва след {n} задача(и) преди нея","reg.sessionRunning":"сесията работи","reg.iterations":"{n} итерация(и)","reg.took":"отне {d}","reg.filterSession":"Сесия","reg.filterStatus":"Състояние","reg.allSessions":"всички сесии","reg.allStatuses":"всички състояния","reg.search":"Търсене в заглавията и обясненията","reg.searchPlaceholder":"дума от задачата","reg.clear":"Изчисти филтрите","reg.viewFlow":"Поток","reg.viewList":"Списък","reg.viewLabel":"Изглед","reg.openTask":"детайли на задачата","reg.openLog":"log","reg.runningCount":"в момента","reg.attempts":"това е опит {n} — виж {m}-те преди него","reg.attemptsOne":"това е опит {n} — виж този преди него","reg.attemptN":"опит {n}","reg.attemptLog":"log на този опит","reg.blockedWhat":"Задачата приключи, без работата да е свършена. Какво е опитано и какво пречи, пише в причината отдолу.","reg.runGroup":"Пуснати заедно","reg.runGroupHint":"Едно изпълнение е едно натискане на бутона за старт. Всичко отдолу е тръгнало наведнъж, в този ред, през един прозорец на браузъра.","reg.runOf":"Изпълнение на {t} задача(и) в {s} сесия(и)","reg.runAt":"пуснато {when}","reg.runWith":"заедно с още {n} задача(и)","reg.runAlone":"пусната сама","reg.runTitle":"Изпълнение на {t} задача(и) в {s} сесия(и), пуснато {when}","reg.groupBy":"По изпълнение","reg.notInARun":"Извън изпълнение","reg.notInARunHint":"Задачи, които още чакат, и задачи, изпълнени преди системата да започне да записва кои от тях са пуснати заедно.","reg.col.task":"Задача","reg.col.session":"Сесия","reg.col.status":"Състояние","reg.col.started":"Започната","reg.col.took":"Времетраене","reg.col.result":"Резултат","reg.stopped":"спряна: {reason}","reg.refresh":"Обнови","reg.updated":"обновено в {t}","ap.title":"Изглед","ap.hint":"Пази се само в този браузър. Нищо оттук не се изпраща никъде и не се споделя с друга машина.","ap.theme":"Тема","ap.themeWhy":"Топла светла за светла стая, топла тъмна за тъмна.","ap.a11y":"Достъпност","ap.a11yHint":"Всяка от тези настройки работи сама за себе си; не зависят нито от темата, нито от езика.","ap.size":"Размер на текста","ap.sizeSmall":"Малък","ap.sizeNormal":"Нормален","ap.sizeLarge":"Голям","ap.sizeHuge":"По-голям","ap.sizeGiant":"Най-голям","ap.sizeWhy":"Една степен под нормалния и три над него. Мащабира целия интерфейс, не само основния текст, и се помни в този браузър.","ap.contrast":"По-висок контраст","ap.contrastWhy":"По-плътни рамки и по-тъмен текст. Жертва част от топлината в името на четимостта.","ap.motion":"По-малко движение","ap.motionWhy":"Без плавни преходи; дневникът на живо спира сам да се превърта, докато тече изпълнение.","ap.links":"Подчертавай всички връзки","ap.linksWhy":"Връзките престават да се разпознават само по цвят.","ap.focus":"Дебел фокусен контур","ap.focusWhy":"Прави невъзможно да изгубите къде е клавиатурата, докато обхождате страницата с Tab.","ap.reset":"Върни настройките по подразбиране","ap.example":"Как изглежда","ap.exampleText":"Задача, приключила с обяснение, друга, която чака одобрение, и една връзка.","ap.exampleLink":"връзка в изречение","nav.import":"План от JSON","nav.defaults":"Настройки","def.title":"С какво тръгва всяка нова сесия","def.intro":"Тук се избират веднъж три неща, вместо във всяка сесия: папките, по които се работи, моделът, който върши работата, и моделът, който я проверява. Сесиите си пазят собствени копия, така че всяка от тях може да бъде променена после, без това да пипа зададеното тук.","def.autoSave":"Всичко на тази страница се запазва само, докато го променяте. Няма какво да натискате.","def.savedAutomatically":"запазва се, докато пишете","def.saveAnyway":"Запази","def.saveAnywayWhy":"Вече е запазено. Този бутон съществува заради удоволствието да натиснеш бутон.","proj.nameField":"Име на проекта","proj.namePlaceholder":"името на самата папка","proj.nameWhy":"Как се казва този проект навсякъде другаде: папката му на Desktop-а, името пред всеки копиран файл и списъкът, който получава Kerrigan. Празно означава името на самата папка.","proj.nameSaved":"Името е запазено.","def.reviewTitle":"Модел за рецензията","def.reviewIntro":"Моделът, с който тръгва независимата рецензия на новата сесия. Модел, различен от този, който върши работата, е най-евтиният начин второто мнение наистина да е второ: новият разговор маха привързаността към работата, но не и слепите петна на модела.","def.reviewField":"Модел за рецензията","def.reviewNone":"Собственият модел на сесията","def.reviewSaved":"Новите сесии ще бъдат проверявани от {name}.","def.reviewCleared":"Изчистено. Новите сесии се проверяват от собствения си модел.","def.reviewSame":"Това е същият модел, който върши работата. Друг би хванал повече.","def.reviewAffectsNew":"Всяка сесия без собствен модел за рецензията ползва този при пускане — включително създадените преди избора му и сесиите от план, който не назовава такъв.","def.reviewAffectsExisting":"Сесия със собствен модел за рецензията — от плана или от панела ѝ — си го пази.","def.reviewAffectsBatch":"Изпълнението на няколко сесии тръгва с този модел за рецензията избран и го казва, преди да го запише върху тях.","def.reviewDefaultIs":"Модел за рецензията по подразбиране: {name}","def.reviewNoneShort":"Няма зададен модел за рецензията по подразбиране.","def.modelTitle":"Модел за новите сесии","def.modelIntro":"Моделът, с който тръгва една сесия, с точното име от менюто на самия чат. Списъкът е този, който е прочетен от чата последно; той принадлежи на Microsoft и е различен за всеки клиент, затова никога не е списък, записан в този проект.","def.modelField":"Модел","def.modelNone":"Остави чата на каквото е настроен","def.modelSaved":"Новите сесии ще тръгват на {name}.","def.modelCleared":"Изчистено. Новите сесии оставят чата на каквото е настроен.","def.modelAffectsNew":"Всяка сесия без собствен модел върви на този — включително създадените преди избора му и сесиите от план, който не назовава модел.","def.modelAffectsExisting":"Сесия със собствен модел — от плана или от менюто ѝ — си го пази.","def.modelAffectsBatch":"Изпълнението на няколко сесии тръгва с този модел избран и го казва, преди да го запише върху тях.","def.modelDefaultIs":"Модел по подразбиране: {name}","def.modelNoneShort":"Няма зададен модел по подразбиране.","def.modelUseIt":"ползвай го тук","proj.title":"Проектът, по който се работи","proj.intro":"Задайте папката веднъж тук и всяка нова сесия тръгва насочена към нея, вместо да я въвеждате наново всеки път. Сесиите пазят собствените си папки, така че всяка от тях може да бъде насочена другаде после.","proj.field":"Папка на проекта","proj.save":"Запази","proj.saved":"Новите сесии ще тръгват в {dir}.","proj.clear":"Изчисти","proj.cleared":"Изчистено. Новите сесии тръгват без избрана папка.","proj.none":"Няма зададена папка на проекта, така че всяка сесия тръгва с празни полета.","proj.isRepo":"Тази папка е git хранилище, така че сесиите, насочени към нея, могат да правят клонове и комити.","proj.notRepo":"Тази папка не е git хранилище","proj.notRepoWhy":"Пак може да е проектът: файловете са там и задачите могат да работят в нея. Това, което не може, е да носи контрол на версиите — превключвателят за него остава изключен, докато папката не стане хранилище.","proj.affects":"Какво променя това и какво не","proj.affectsNew":"Новата сесия тръгва с тази папка и в полето за файлове на проекта, и в полето за контрол на версиите. Нито едното не се включва само защото е попълнено.","proj.affectsExisting":"Вече съществуващите сесии не се пипат. Техните полета ви предлагат тази папка с бутон, а дали да я вземете е ваше решение.","proj.affectsPlan":"Заданието за чат модела получава тази папка, така че моделът нито трябва да пита за нея, нито да си я измисля.","proj.affectsNever":"Нищо тук никога не променя това, което една работеща сесия прави в момента.","proj.toSessions":"Към сесиите","proj.toImport":"Към внасянето на план","proj.defaultIs":"Проект по подразбиране: {dir}","proj.noneShort":"Няма зададен проект по подразбиране.","proj.useIt":"ползвай го тук","proj.setIt":"задайте такъв","proj.change":"смени","proj.others":"Други проекти","proj.isDefault":"по подразбиране","proj.isDefaultWhy":"Новите сесии тръгват в този, а заданието за плана го предлага пръв.","proj.entryName":"Име","proj.entryDir":"Папка","proj.addTitle":"Добави още един проект","proj.listIntro":"Всички проекти, в които тази машина работи. Първият е по подразбиране: новите сесии тръгват там. Останалите са именувани, за да може план да прати работа към тях. Всички се описват по един и същи начин и всички се запазват, докато пишете.","proj.othersIntro":"Останалите папки, по които работите — front end, back end, тестовете — всяка с кратко име. Новите сесии пак тръгват от папката по подразбиране горе. Тези се предлагат с бутон навсякъде, където се избира папка, а заданието за план ги изброява с пътищата им, така че план през няколко хранилища се пише с папките, които съществуват, вместо да пита за всяка.","proj.otherName":"Име","proj.otherDir":"Папка","proj.otherAdd":"Добави","proj.otherRemove":"Махни","proj.othersNone":"Още няма други проекти.","proj.othersSaved":"Запазено: {n} други проекта.","proj.otherRepo":"git хранилище","proj.otherNotRepo":"не е git хранилище","proj.otherUse":"ползвай {name}","plan.title":"План, написан от чат модел","plan.intro":"Опишете работата на кой да е чат модел, оставете го да ви зададе въпросите и поставете тук това, което ви е написал. Тази страница създава сесиите и задачите; не стартира нищо.","plan.step1":"1. Занесете това в чата","plan.step1Hint":"Копирайте целия текст в нов разговор с модел по ваш избор. Той обяснява какво представлява този runner, кара модела да ви разпита за работата и фиксира точния формат, в който трябва да отговори.","plan.persona":"Kerrigan, персоната: две нива","plan.personaWhy":"Това, което копирате, е един текст от три части. Софтуерната част е на този проект и не се променя: какво е ботът, форматът на плана, как се четат файловете от регистъра, когато задача се провали, и как се проверява готовото пускане спрямо заданието. Другите две са ваши и са разделени, защото се менят с различна скорост: организацията и проектите се пишат веднъж и се четат с месеци, а описанието на работата се сменя, когато се смени работата. Докато някое от двете е празно, заданието казва на Kerrigan първо да ви разпита и да върне и двете като JSON, с указание къде да ги поставите; веднъж запазени, те пътуват с всяко копие и въпросите спират.","plan.softwarePart":"Софтуерно ниво (фиксирано)","plan.orgPart":"Как се работи тук: организацията и проектите","plan.orgHint":"Каквото би трябвало да знае всеки, който върши задача тук: откъде идват ticket-ите, къде да се търси, правилата и шаблоните, а за всеки проект — пътят му, какво прави, какво му трябва, преди да се строи, как се строи и тества, и какво се чупи там. Не как се казват организацията или проектите — името не помага на никоя задача. Пише се веднъж и се чете с месеци. Тук поставете първия от документите, които Kerrigan връща.","plan.personaPart":"Как се изпълняват задачите: персоната на агента","plan.personaHint":"Как агентът, който върши работата, подхожда към нея: за какво отговаря и за какво не, подходът му, фазите, през които минава, и какво предава накрая. Няма име — това е начин на работа, не герой — затова може да го смените, когато друга работа иска друг подход. Вписва се във всяка задача при импорт на план, така че сесията пази подхода, с който е създадена. Поставете тук своя собствена или втория от документите, които Kerrigan връща.","plan.workPart":"Тази работа","plan.workHint":"За какво е тази група задачи: ticket-ът, целта, кои проекти засяга, какво вече е решено или пробвано, какво не бива да се променя междувременно. Сменя се, когато се смени работата. Тук поставете последния от документите, които Kerrigan връща.","plan.ctxWritten":"написано","plan.ctxEmpty":"празно — Kerrigan ще пита","plan.ctxSaved":"запазено; следващото копиране на заданието го носи","plan.ctxClear":"Изпразни","plan.personaSaved":"Запазени персони","plan.personaPick":"изберете, за да я поставите в полето","plan.personaNone":"още няма запазени","plan.personaNamePlaceholder":"име за персоната в полето, напр. playwright-tests","plan.personaSaveAs":"Запази под това име","plan.personaDelete":"Изтрий избраната","plan.personaSavedWhy":"По една персона за всеки вид работа, сменяни с един избор. Изборът я поставя в полето отдолу и го запазва, както ако я напишете; заданието носи това, което е в полето.","plan.personaLoaded":"„{name}“ е в полето; следващото копиране на заданието я носи","plan.personaSavedAs":"запазена като „{name}“","plan.personaDeleted":"„{name}“ е изтрита; полето не е променено","plan.personaReplaceConfirm":"Персоната в полето не е запазена под име. Да я заменя ли с „{name}“?","plan.personaOverwriteConfirm":"Вече има запазена персона „{name}“. Да я заменя ли с тази от полето?","plan.personaDeleteConfirm":"Да изтрия ли запазената персона „{name}“? Самото поле не се променя.","plan.ctxCleared":"изпразнено; Kerrigan пак ще пита за него","plan.ctxClearConfirm":"Да изпразня ли този текст? Kerrigan ще пита за него отново при следващото копиране на заданието.","plan.copyBrief":"Копирай заданието","plan.saveBrief":"Запази заданието като файл","plan.briefTooLong":"Заданието е {n} знака — повече, отколкото Copilot приема в едно съобщение (около 120 000; страницата превключва при {limit}). Запазете го като файл, прикачете файла в нов разговор и изпратете с него краткото съобщение по-долу.","plan.copyBriefNote":"Копирай съобщението към файла","plan.briefFileMessage":"Прикаченият файл е пълните ти инструкции: заданието за писане на план за copilot-operator. Първо прочети целия файл, после го следвай от самото начало точно както ако го бях поставил тук.","plan.copied":"копирано","plan.copyFailed":"Браузърът не позволи копиране от страницата. Маркирайте текста и го копирайте ръчно.","plan.showBrief":"Покажи текста","plan.hideBrief":"Скрий текста","plan.briefLang":"Заданието е на езика, на който е този интерфейс.","plan.briefAsks":"Заданието пита вместо вас","plan.briefAsksWhy":"Тук не се настройва нищо. Заданието кара модела да ви попита дали runner-ът да прави контрол на версиите и в коя папка се работи, а отговорите влизат в самия JSON, за всяка сесия. План, който ги пропусне, се отказва при внасяне, с готов текст, който да върнете в чата.","plan.step2":"2. Върнете отговора тук","plan.step2Hint":"Поставете го, пуснете файла върху полето или изберете файл. Текст и ограждащи блокове около JSON-а не пречат; премахват се.","plan.placeholder":"Поставете JSON-а, който чат моделът е написал…","plan.drop":"Пуснете .json файл тук","plan.dropActive":"Пуснете, за да се прочете файлът","plan.browse":"Изберете файл…","plan.clear":"Изчисти","plan.check":"Провери","plan.checking":"проверява се…","plan.import":"Създай сесиите и задачите","plan.importing":"създава се…","plan.fileError":"Файлът не можа да бъде прочетен: {reason}","plan.fileTooBig":"Този файл е {size} — многократно повече от какъвто и да е план. Нищо не беше прочетено.","plan.valid":"Това е план, който системата разбира: {sessions} сесия(и), {tasks} задача(и).","plan.invalid":"Това още не е план, който системата може да прочете.","plan.issues":"Какво не е наред","plan.issuesHint":"Копирайте това обратно в същия разговор и поискайте целия поправен JSON. Пътищата казват къде в документа е всеки проблем.","plan.copyIssues":"Копирай грешките","plan.warnings":"Добре е да знаете","plan.duplicates":"Това вече го има","plan.duplicatesHint":"Тези сесии вече съществуват, с точно тези задачи. Импортът прави второ копие — позволено е, но обикновено значи, че е поставен грешният текст. Проверете дали това е поправеният план, а не старият.","plan.duplicateRow":"{name} — {tasks} еднакви задачи, внесени {when}","plan.duplicateConfirm":"Тези сесии вече съществуват с точно тези задачи:\n\n{names}\n\nИмпортът ще направи второ тяхно копие. Да продължим ли?","plan.cleared":"Полето беше изчистено, за да не се внесе същият план втори път по невнимание.","plan.col.planFail":"При провалена сесия","plan.runThese":"Пусни тези сесии","plan.preview":"Какво ще бъде създадено","plan.notes":"Бележки от модела","plan.col.session":"Сесия","plan.col.tasks":"Задачи","plan.col.chain":"При провалена задача","plan.col.repo":"Хранилище","plan.noRepo":"няма","plan.step3":"3. Прегледайте и стартирайте сами","plan.step3Hint":"Нищо не тръгва само. Прочетете какво е създадено, променете каквото искате да промените, и го пуснете от списъка със сесии.","plan.imported":"Създадени са {sessions} сесия(и) с {tasks} задача(и). Нищо не е стартирано.","plan.toSessions":"Към списъка със сесии","batch.title":"Пускане на няколко сесии","batch.hint":"Отбележете кои сесии да се изпълнят и те тръгват една след друга, в реда, в който са изброени тук. Два разговора не могат да вървят едновременно: профилът на браузъра е на един по едно и също време.","batch.selected":"{n} избрани, {tasks} задача(и) в опашката","batch.notRunnable":"{n} от тях нямат нищо в опашката и не влизат в изпълнението.","batch.pickFirst":"Изберете кои сесии да се изпълнят","batch.pickFirstWhy":"Отметнете ги в списъка по-долу и двата бутона се отключват. Изпълняват се в реда, показан тук, една след друга.","batch.nothingRunnable":"Нито една от отметнатите сесии няма нещо в опашката","batch.nothingRunnableWhy":"Изпълняват се само задачи, които още чакат в опашка. Добавете задача в някоя от тях или отметнете сесия, която има.","batch.oneRunning":"Една сесия вече върви сама","batch.oneRunningWhy":"Два разговора не могат да вървят едновременно, затова изпълнението на няколко трябва да изчака. Оставете я да приключи или я спрете от нейната страница.","batch.selectQueued":"Избери всички сесии с нещо в опашката","batch.selectNone":"Изчисти избора","batch.onFailure":"Ако сесия се провали","batch.model":"Модел за това изпълнение","batch.waiting":"{n} стъпка(и) чакат вас","approval.tabTitle":"чака вас","approval.waitingHere":"Стъпка чака вашето решение","approval.waitingHereWhy":"Показва се на всяка страница, докато стъпка чака, за да не изглежда пускането забило само защото отворената страница не е тази, която пита.","batch.reviewModel":"Модел, който проверява работата","batch.reviewModelKeep":"Всяка сесия си остава със своя","batch.reviewModelWhy":"Независимата рецензия върви в собствен разговор след всяка задача. Да я сложите на модел, различен от този, който върши работата, е най-евтиният начин второто мнение да е наистина второ: свежият разговор маха привързаността към работата, но не и слепите петна на модела, който я е произвел.","batch.reviewSame":"Това е същият модел, който върши работата. Друг би хванал повече.","batch.reviewOffIn":"Рецензията е изключена в {n} от избраните сесии; моделът тук не я включва.","batch.modelKeep":"Всяка сесия със своя","batch.modelWhy":"Ако изберете един тук, той се записва върху всяка избрана сесия преди старта, така че после това, което сесията казва, че ползва, и това, което е ползвала, остават едно и също.","batch.modelOverrides":"{n} от избраните сесии са на друг модел и ще бъдат сменени на този.","batch.modelNone":"Още не са прочетени модели от чата.","batch.modelRunning":"Върви на {name}.","batch.vcsProblem":"Контролът на версиите не може да работи в тези сесии","batch.vcsProblemWhy":"Те пак ще се изпълнят, но няма да се направи клон и нищо няма да се комитне, тоест работата остава разхвърляна в работното дърво. Най-честата причина е предишно изпълнение, прекъснато преди runner-ът да успее да комитне.","batch.vcsProblemRow":"{name}: {problem}","batch.hiddenWhileRunning":"Изборът на сесии, на модел и на поведение при провал се скриват, докато тече изпълнение, защото нито едно от тях не може да промени вече започналото. Връщат се, щом то приключи.","batch.fromPlan":"Избрани от плана, който току-що внесохте, в неговия ред.","batch.chain":"Спри и остави останалите както са","batch.chainWhy":"Сесиите са една работа, подредена по ред. По-късната обикновено разчита, че по-ранните са минали, така че пускането ѝ след провал не проверява нищо.","batch.independent":"Продължи със следващата сесия","batch.independentWhy":"Сесиите са отделни парчета работа, които просто са стартирани заедно. Провалът на едната не казва нищо за следващата.","batch.run":"Пусни {n} сесия(и)","batch.runWhy":"Минава през избраните сесии една след друга, сама, без да спира да пита. Това е обичайният начин.","batch.runStep":"Стъпка по стъпка","batch.runStepWhy":"Спира преди всяка команда във всяка сесия и чака вас. За проследяване на проблем или когато планът е нов.","batch.unattendedConfirm":"Това се изпълнява само, през {n} сесия(и): командите, които Copilot напише, ще се пускат, без да ви питат, докато всички не приключат. Списъкът със забранени команди продължава да важи. Да ги пуснем ли?","batch.stop":"Спри след текущата стъпка","batch.pause":"Пауза след тази задача","batch.pauseWhy":"Оставя задачата, която върви, да приключи както трябва — проверките ѝ, рецензията ѝ, комита ѝ — и чак тогава спира. Всичко останало в опашката си остава там, а „Продължи“ го подхваща оттам, докъдето е стигнало.","batch.pausing":"пауза: задачата, която върви, първо ще приключи, а останалата опашка се запазва","batch.resume":"Махни паузата","batch.resumeWhy":"Продължава с опашката, все едно паузата не е натискана. Работи само докато паузираната задача още върви.","batch.stopWhy":"Прекъсва след текущата стъпка. Задачата, която прекъсва, завършва „прекратена“, наполовина свършена. Ако само искате да помислите, ползвайте паузата.","batch.notStarted":"не стартира: {reason}","batch.notStartedTitle":"Пускането не тръгна","batch.notStartedIsolation":"Настройки → „Къде върви ботът“: изберете къде върви ботът или приемете пускане без надзор без изолация","batch.nothingQueued":"няма нищо в опашката","batch.progress":"Изпълнява се {name} — {done} от {total} приключили.","batch.finished":"Приключи: {done} успешни, {failed} провалени, {skipped} неизпълнени.","batch.stopping":"спира след текущата стъпка; сесиите след тази остават както са","batch.col.session":"Сесия","batch.debug":"Изтегли всичко като JSON","batch.debugWhy":"Един файл с това какво се е изпълнило и какво е станало в тези сесии: всяка стъпка и кодът ѝ на изход, всяко резюме, всяка проверка и какво е комитнала всяка задача. За подаване на някого — или нещо — което трябва да разбере защо изпълнението е минало така.","batch.debugSelected":"за {n}-те избрани сесии","batch.debugLast":"за сесиите от последното изпълнение","batch.col.state":"Състояние","batch.col.ran":"Задачи","batch.col.why":"Защо","batch.state.waiting":"чака","batch.state.running":"изпълнява се","batch.state.done":"готова","batch.state.failed":"провалена","batch.state.stopped":"спряна","batch.state.skipped":"неизпълнена","batch.ranOf":"{ran} изпълнени, {failed} провалени"}},i="cop.locale",r=(0,o.createContext)({locale:"en",setLocale:()=>void 0});function h(e){let{children:t}=e,[s,a]=(0,o.useState)("en");return(0,o.useEffect)(()=>{let e="en";try{let t=window.localStorage.getItem(i);"en"===t||"bg"===t?e=t:navigator.language.toLowerCase().startsWith("bg")&&(e="bg")}catch(e){}a(e),document.documentElement.lang=e},[]),(0,n.jsx)(r.Provider,{value:{locale:s,setLocale:e=>{a(e);try{window.localStorage.setItem(i,e)}catch(e){}document.documentElement.lang=e}},children:t})}function d(){let{locale:e}=(0,o.useContext)(r);return{t:function(t){var s,n;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null!=(n=null!=(s=a[e][t])?s:a.en[t])?n:t;for(let[e,t]of Object.entries(o))i=i.split("{".concat(e,"}")).join(String(t));return i},locale:e}}function l(){let{locale:e,setLocale:t}=(0,o.useContext)(r),{t:s}=d();return(0,n.jsxs)("select",{"aria-label":s("lang.label"),value:e,onChange:e=>t(e.target.value),style:{width:"auto"},children:[(0,n.jsx)("option",{value:"en",children:"English"}),(0,n.jsx)("option",{value:"bg",children:"Български"})]})}function c(){let{locale:e}=(0,o.useContext)(r);return t=>t?new Date(t).toLocaleString("bg"===e?"bg-BG":void 0,{hour12:!1}):""}}}]);