copilot-operator 0.1.41 → 0.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/api/operator.controller.js +28 -6
- package/dist/src/api/operator.service.js +82 -7
- package/dist/src/config/schema.js +7 -0
- package/dist/src/orchestrator/planMode.js +102 -0
- package/dist/src/orchestrator/review.js +8 -4
- package/dist/src/orchestrator/taskRunner.js +137 -2
- package/dist/src/plan/brief.js +12 -0
- package/dist/src/plan/importPlan.js +2 -0
- package/dist/src/plan/schema.js +10 -0
- package/dist/src/plan/systemGuide.js +193 -2
- package/dist/src/protocol/parser.js +26 -2
- package/dist/src/protocol/replySchema.js +28 -4
- package/dist/src/session/compose.js +62 -7
- package/dist/src/session/exports.js +1 -0
- package/dist/src/session/model.js +38 -0
- package/dist/src/session/store.js +30 -3
- package/dist/src/vcs/startChoice.js +80 -8
- package/dist/src/vcs/taskVcs.js +16 -7
- package/dist/web/404.html +2 -2
- package/dist/web/_next/static/chunks/{584-578be94a0786334b.js → 204-db82ca47ff211e21.js} +1 -1
- package/dist/web/_next/static/chunks/499-39b2c00bda3656f0.js +1 -0
- package/dist/web/_next/static/chunks/549-348b0a1404407e5a.js +1 -0
- package/dist/web/_next/static/chunks/867-7d86a692260006f1.js +1 -0
- package/dist/web/_next/static/chunks/app/defaults/page-a25c40436fc312db.js +1 -0
- package/dist/web/_next/static/chunks/app/history/page-47973539ceff81d6.js +1 -0
- package/dist/web/_next/static/chunks/app/layout-6ee612d25e78b246.js +1 -0
- package/dist/web/_next/static/chunks/app/sessions/view/page-872d8b9fe8eedbbf.js +1 -0
- package/dist/web/_next/static/css/{cea7913ba416dbb7.css → 0e55721108c300f2.css} +1 -1
- package/dist/web/appearance.html +2 -2
- package/dist/web/appearance.txt +13 -13
- package/dist/web/defaults.html +2 -2
- package/dist/web/defaults.txt +13 -13
- package/dist/web/history.html +2 -2
- package/dist/web/history.txt +13 -13
- package/dist/web/import.html +2 -2
- package/dist/web/import.txt +13 -13
- package/dist/web/index.html +2 -2
- package/dist/web/index.txt +13 -13
- package/dist/web/level1.html +2 -2
- package/dist/web/level1.txt +13 -13
- package/dist/web/presets.html +2 -2
- package/dist/web/presets.txt +13 -13
- package/dist/web/sessions/view.html +2 -2
- package/dist/web/sessions/view.txt +13 -13
- package/dist/web/system.html +2 -2
- package/dist/web/system.txt +13 -13
- package/package.json +159 -158
- package/dist/web/_next/static/chunks/499-28e118e33ce07935.js +0 -1
- package/dist/web/_next/static/chunks/549-f295c8429e83b25b.js +0 -1
- package/dist/web/_next/static/chunks/867-8dc5bbb092ca2c5c.js +0 -1
- package/dist/web/_next/static/chunks/app/defaults/page-879158e9e550eea7.js +0 -1
- package/dist/web/_next/static/chunks/app/history/page-9f69ccde726c9be2.js +0 -1
- package/dist/web/_next/static/chunks/app/layout-73f28bc065a46ed3.js +0 -1
- package/dist/web/_next/static/chunks/app/sessions/view/page-0485ee7f781156ec.js +0 -1
- /package/dist/web/_next/static/{-htN5GTSrd3W3f5j_QC2y → lDmqS7pWU_B_Ac5idPvdS}/_buildManifest.js +0 -0
- /package/dist/web/_next/static/{-htN5GTSrd3W3f5j_QC2y → lDmqS7pWU_B_Ac5idPvdS}/_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:()=>c,W3:()=>l,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":"Tick all","reg.pickNone":"Untick all","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.',"reg.fixPromptLoading":"reading the task…","reg.newTask":"New task","fup.button":"Continue with a new prompt","fup.buttonWhy":"The task failed: say what to do now, and it carries on from where it got to — in its own chat and on its own branch, with the chat told how it ended and why.","fup.title":"Continue “{title}” with a new prompt","fup.ended":"How it ended: {status}","fup.failedChecks":"Checks that did not pass:","fup.findings":"What the independent review found:","fup.summary":"Its own summary:","fup.chat":"Chat: the same conversation. It is told how the attempt ended and why — everything above — and then given your prompt.","fup.branch":"Branch: {branch}. The work so far is there ({commit}), and the task carries on from it, not from the start.","fup.branchNotCommitted":"Branch: {branch}. The files stay as the attempt left them in the working tree, and the task carries on over them.","fup.noVcs":"Version control is off: the files stay as the attempt left them in the project folder, and the task carries on over them.","fup.kept":"The task’s own prompt stays as it is; yours is added to it and wins where the two disagree. The attempt that failed stays on the record.","fup.original":"The task’s prompt as it stands","fup.prompt":"New prompt","fup.placeholder":"What to do now. For example: the test fails because the Okta URL is wrong — read it from config/okta.json instead, then run the tests again.","fup.save":"Queue it to continue with this prompt","fup.saved":"“{title}” is queued to continue with the new prompt.","fup.loading":"reading the task…","fup.startOver":"To start the task over instead, with its prompt changed and the failed work set aside: “{fix}”.","reg.continueHerePrompt":"New prompt (optional)","reg.continueHerePromptWhy":"Added to the task, for the chat to do as it carries on; it wins where the two disagree. Empty: it just carries on.","task.continuedWith":"Continues attempt {n} with a new prompt:","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.retriedFreshOther":"blocked, then run again in a fresh chat ({n}\xd7)","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.',"prep.show":"Prepare the folder from the remote main branch","prep.why":"Fetches, keeps every uncommitted change and new file on a branch of its own, then puts the folder on the remote main branch with nothing uncommitted — ready for you to add the files a task needs. Nothing is thrown away and no branch is deleted.","prep.where":"{target} is at {commit}. The folder is on {branch} at {head}.","prep.already":"The folder is already exactly there, with nothing uncommitted. Nothing to do.","prep.willDo":'On "Confirm":',"prep.keepChanges":"{changed} changed and {untracked} new file(s) are kept as one commit on {saved} (take a file back with: git restore --source {saved} -- <file>):","prep.keepMain":"{n} commit(s) of the local {branch} that the remote does not have are kept on {saved}:","prep.moveTo":"{branch} is set to {commit}, the same as {target}, and checked out; the new files leave the folder (they are on the saved branch).","prep.branchStays":"{branch} keeps its {n} commit(s) that are not on the remote.","prep.ignored":"Ignored files — node_modules, .env, build output — are not touched.","prep.confirm":"Confirm","prep.cancel":"Cancel","prep.password":"If the remote asks for a password or for your SSH key's passphrase, Git's own window opens for it (it may open behind the browser). What you type goes straight to git; the bot never sees or keeps it.","prep.fetching":"Fetching… if Git's password window opened, type it there.","prep.fetchFailed":"The remote could not be fetched:","prep.fetchAuth":"It looks like the password or the key was not accepted, or the window was closed.","prep.retry":"Try again","prep.ownTerminal":"Or fetch in your own PowerShell, where ssh asks you directly, then continue with what was fetched:","prep.copyFetch":"Copy the fetch command","prep.copied":"Copied","prep.useFetched":"Continue with what was last fetched","prep.lastFetched":"Last fetched: {when}.","prep.lastFetchedUnknown":"When it was last fetched cannot be told here (the last attempt did not get through); the remote may have moved on since.","prep.notFetched":"Not fetched now: measured against the remote as it was last fetched.","prep.more":"and {n} more","startdlg.title":"Where the work starts","startdlg.intro":"Choose, for each session, the branch its work starts from. This is asked every time a run is started.","startdlg.repoOn":"{repo} — now on {branch}","startdlg.vcsOff":"Version control is off for this session, so the bot does no git: the work runs in the folder as it is, on whatever branch is checked out. Turn it on on the session's page to choose a branch.","startdlg.fixed":"Started already: {start}.","startdlg.branchNow":"Its branch {branch} is now at {now}; the session started at {recorded}.","startdlg.branchGone":"Its branch {branch} is not here any more; the session started at {recorded}.","startdlg.branchRemote":"On the remote, as last fetched: {name} at {commit}.","startdlg.differs":"The repository is on {current} ({head}), not on {branch}.","startdlg.keepStarted":"Keep: carry on {branch}","startdlg.keepStartedNoBranch":"Keep the start it has","startdlg.useCurrent":"The branch checked out now: {branch} ({commit})","startdlg.rechooseNote":"Another start for a session that has run: the tasks that run next start from it — a task run again too, not from where it first started. What already ran stays on its branches.","startdlg.rechooseBlocked":"{tasks} carry an earlier attempt on, on its own branch, so the start stays as it is. To start one of them from another branch, use “Fix the prompt and queue it again” on it.","startdlg.refresh":"Read the branches again","pm.setting":"Plan first","pm.off":"Off — the work starts at once","pm.auto":"On — the plan is approved without asking","pm.approveMode":"On — I approve the plan when the run asks before each command","pm.settingWhy":'With plan first on, each task starts by looking at the code without changing anything — what is already there, how to do the work, its steps, the files, how to show it is done — and starts the work only once that plan is approved. A run that does not ask (unattended, or "run all") approves it itself and records why, so it never waits. The review then checks that the work followed the approved plan. A task carried on with a new prompt or after a limit keeps its plan. Each session can set its own.',"pm.sessionSetting":"Plan first, for this session","pm.followSettings":"As in Settings","pm.sessionWhy":"Overrides Settings → Execution → Plan first for this session only.","pm.saved":"Saved. The next run uses it.","pm.cardTitle":"Plan for “{title}”, waiting for approval","pm.cardWhy":"Nothing has been changed yet. The work starts once you approve this plan.","pm.note":"Note for the chat (optional when approving; says what to change when asking for another plan)","pm.notePlaceholder":"e.g. Keep the old endpoint working; do not touch the migrations.","pm.approve":"Approve and start the work","pm.revise":"Ask for another plan","pm.reviseWhy":"The chat makes a new plan with your note; the same card comes back with it.","pm.reviseNeedsNote":"Say in the note what the new plan should change.","pm.stop":"Stop the task","pm.stopConfirm":"Stop this task without doing the work? It ends as stopped and can be run again.","pm.version":"Plan version {n}, {at}","pm.approvedByOperator":"Approved by the operator, {at}.","pm.approvedAuto":"Approved by the runner, {at}.","pm.approvedNote":"Note: {note}","pm.existing":"Already there","pm.approach":"Approach","pm.steps":"Steps","pm.files":"Files it expects to change","pm.verification":"How it will show the work is done","pm.risks":"Risks","pm.revisions":"Earlier versions, and what was asked to change","pm.revision":"Version {n} ({at}):","pm.taskApproved":"Plan (version {n}, approved)","pm.taskWaiting":"Plan (version {n}, waiting for approval)","startdlg.goStepOn":"Start, asking before each command — on {where}","startdlg.goUnattendedOn":"Start without asking — on {where}","startdlg.prepared":"Prepared before this run: {start}. Choosing another branch below drops it.","startdlg.keep":"Keep the start prepared before this run","startfail.laterSession":"A session of a run that was going could not begin:","startdlg.repoProblem":"The branches cannot be read: {problem}","startdlg.local":"Local branch","startdlg.localWhy":"As it is in this folder: nothing is fetched.","startdlg.localBranch":"Local branch to start from","startdlg.remote":"Remote branch (fetched now)","startdlg.remoteWhy":"The code as it is on the server, fetched when you press Start. Your local branch of that name is not touched.","startdlg.remoteName":"Remote","startdlg.remoteBranch":"Remote branch to start from","startdlg.refreshRemote":"Get the list of branches from the remote","startdlg.lastFetched":"The list is as the remote was last fetched: {when}.","startdlg.neverFetched":"Nothing has been fetched from this remote here yet: type the branch name, or get the list.","startdlg.lastFetchedUnknown":"The list is as the remote was when this folder last got it (when, cannot be told here); the remote may have moved on since.","startdlg.noRemote":"This repository has no remote.","startdlg.previous":"Carry on from the session before it","startdlg.previousWhy":"Starts from the end of the branch of the session that last worked in this repository — in this run, the one before it.","startdlg.onBranch":"Work directly on this branch, without a new branch","startdlg.onBranchWhy":"Off, as usual: the bot cuts a branch of its own from the one chosen and commits there. On: every task commits on the chosen branch itself; from a remote branch, the local branch is made from it, or brought up to it (fast-forward only), first.","startdlg.goStep":"Start, asking before each command","startdlg.goUnattended":"Start without asking","startdlg.needBranch":'Choose a branch for "{name}".',"startdlg.fetching":"Fetching {what}… if Git's password window opened, type your SSH key's passphrase there (it may be behind the browser).","startdlg.starting":"Starting…","startdlg.loading":"Reading the branches…","startdlg.fetchFailed":"{what} could not be fetched:","startdlg.missing":"The remote has no branch {names}. Check the name, or get the list of branches.","startdlg.retryFetch":"Fetch again","startdlg.useFetched":"Go on with what was last fetched","startdlg.useFetchedNo":"Going on without fetching is not offered: {what} has never been fetched here.","startdlg.back":"Back to the choice","startdlg.tryAgain":"Try to start again","startdlg.vcsFix":'Version control has to be made ready first; the fixes are below. Then press "Try to start again".',"startfail.title":"The work did not start","startfail.where":"Where it stopped: {stage}.","startfail.stage.refused":"the start was not let in, before anything opened","startfail.stage.branch":"the branch chosen to start from","startfail.stage.preflight":"the version control check, before the browser opened","startfail.stage.browser":"opening the browser (Edge), its profile or the chat","startfail.stage.run":"the run, before its first task began","startfail.stage.at-turn":"this session's turn in the run, before its first task","startfail.stage.error":"the bot itself, while starting","startfail.when":"{when}, run {run}","startfail.whenNoRun":"{when}","startfail.download":"Download what happened (error, run record and terminal)","startfail.terminal":"Download what the terminal showed","startfail.downloadWhy":"A text file with the error, where it stopped, the run's own record, the sessions' events and every line the bot's console printed from the press to a few seconds after. Secret-shaped text is taken out.","startfail.dismiss":"Close this notice","startfail.later":"This run was accepted and then could not begin:","sys.terminalWhy":"The bot's console — what npm start or cop start printed — as a text file: the latest lines, each with its time, secret-shaped text taken out. Everything since the bot started is also in the data folder, logs\\terminal.log.","exec.maxReviewRounds":"Rounds of fixing after a failed review","exec.maxReviewRoundsUnit":'rounds, then the task ends "blocked" with the review\'s findings',"exec.maxReviewRoundsWhy":"When the independent review fails the work, its findings go back to the chat to fix, and the work is reviewed again. This is how many times. It is a separate limit from the approaches above: those count how the chat gives up, these count reviews. 3 or 4 gives the work one or two more chances; more rarely helps — a finding that survives several fixes usually means the task itself has to be worded differently.","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.continueHereAlone":"Only this task runs; the rest of the queue stays where it is.","reg.rerunHere":"Run only this one again","reg.rerunHereWhy":"A new attempt at this task alone, now. The rest of the queue stays where it is. Shows what will happen first.","reg.rerunHereTitle":"Run “{title}” again, on its own","reg.rerunHereChat":"Chat: the session’s conversation. The task is sent again as it is written now — fix its prompt first if that was the problem.","reg.rerunHereBranch":"Branch: from where this task first started, without the failed attempt’s work (that stays on its own branch) — per session too, unless later tasks of the session ran after it: then on top of it. To keep that work and go on from it: “Continue with a new prompt”.","reg.rerunHereKept":"The attempt that failed stays on the record, with its branch, reports and changes.","reg.pickedCount":"{n} of {of} ticked","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.',"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.order":"Order","home.moveUp":"Move {name} up in the list","home.moveDown":"Move {name} down in the list","home.dragHint":"Drag the row onto another to move it there","home.orderWhy":"The order is yours: drag a row onto another, or use the arrows. An imported plan comes in on top, in the order the plan gives; a run of several takes the ticked sessions top to bottom.","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.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.modelTitle":"Choose the model — the bot could not","approval.manualTitle":"Choose the model for this run","approval.manualAsk":'In the Copilot window, open the model picker and choose "{model}". Then press "Ready": the bot checks the picker and starts.',"approval.manualAskAny":'In the Copilot window, open the model picker and choose the model you want. Then press "Ready": the bot starts on it.',"approval.manualReady":"Ready — check and continue","def.manualModel":"Choose the model by hand at the start of each run","def.manualModelWhy":'The bot leaves the model picker alone. At the start of a run, and of a review, a card appears here asking you to choose the model in the Copilot window and press "Ready"; the bot checks it and goes on. A conversation already on the model is not asked about — the chat keeps its model. A workaround while choosing it automatically is unreliable.',"approval.modelAsk":'In the Copilot window, open the model picker and choose "{model}". Then press the button below: the bot checks the picker and goes on.',"approval.modelShown":"The picker shows now: {shown}","approval.modelWhy":"Why the bot could not: {why} (asked {tries} time(s))","approval.modelChosen":"I chose it — check and continue","approval.modelAsItIs":"Continue on the model it is on","approval.modelStop":"Stop","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.planOutranked":'The plan named "{name}"; the model chosen in Settings is used instead. Choose a model here to give this session its own.',"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.startedRemote":"Started from the remote branch {branch} ({commit}), as fetched when the run was started.","vcs.startAsked":"Asked every time a run is started, in the start window: what is set here is what that window offers first.","vcs.fromRemote":"Chosen last time in the start window: the remote branch {remote}/{branch}, as it is on the server.","vcs.startedHead":"Started from where the repository was ({commit}).","vcs.startExisting":"Carry on an existing branch","vcs.startExistingWhy":"No new branch: every task of this session works on the branch named below, exactly as it is in git, and builds on what is already on it. If the branch is missing or the tree has uncommitted changes, the task is refused and nothing runs.","vcs.existingBranch":"The branch to carry on","vcs.existingBranchWhy":"Its exact name in git, prefix and all (for example recovery/apz-migration). The local branches of the repository are offered as you type.","vcs.existingBranchMissing":'The repository has no local branch "{branch}" right now: a task would be refused.',"vcs.startedExisting":"Carries on the existing branch {branch}, from {commit}.","vcs.branchesExisting":"Does not apply: every task works on the existing branch {branch}, one after another.","vcs.updateFromRemote":"Bring the starting branch up to date from the remote first","vcs.updateFromRemoteWhy":"Before the session’s first branch: git fetch, then the local branch is moved forward to the remote’s — never reset or merged. A branch with commits of its own is left as it is and that is said. Off: it starts from the branch as this checkout has it.","vcs.updated":"{branch} was brought up to date with {remote}: {from} → {to}.","vcs.upToDate":"{branch} was already up to date with {remote}.","vcs.notUpdated":"{branch} was not updated from the remote: {why}.","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.dirty":"Uncommitted changes","vcs.dirtyReject":"Refuse to start until they are committed","vcs.dirtyRejectWhy":"When the repository has uncommitted changes, the task is refused and nothing runs: a task whose work could not be committed is not run. Commit them yourself, or take them as a starting snapshot.","vcs.dirtySnapshot":"Take them as a starting snapshot","vcs.dirtySnapshotWhy":'Before the first task your uncommitted changes become one commit, "Capture operator baseline before run", on a branch of their own, and the session starts from it. Your branch is not touched. Secrets (.env), tool output and files outside the project are never taken; an ignored file only when a task’s scope names it.',"vcs.dirtyTracked":"Take tracked changes only as a starting snapshot","vcs.dirtyTrackedWhy":"The same, with changes to files git already tracks. New files can only be left out.","vcs.dirtyApproval":"Show me the list to approve first","vcs.dirtyApprovalWhy":"On: the exact list appears here before the run, and a run is refused until you take the snapshot. Off: it is taken when the first task starts, and refused if anything would have to be left out.","vcs.snapshotList":"{n} uncommitted file(s). Taken, they become one commit on {branch}, and the session starts from it. Left out, a file is added to this repository’s .git/info/exclude (local, never committed) so no task commits or removes it.","vcs.inputs":"Input files","vcs.inputsField":"Your input files, one pattern per line (repository-relative)","vcs.inputsWhy":"Files you provide for the work — schemas, test data. Before the first task they go into the commit the session starts from (new, changed or ignored ones in the starting snapshot, listed for your approval), and a later session whose start lacks them gets them committed on top of it. Their SHA-256 sums are recorded. Secrets and files outside the project are never inputs.","vcs.inputsReadOnly":"Read-only while the tasks run","vcs.inputsReadOnlyWhy":"After every round of steps a changed, deleted or added input file is put back and the chat told. A task that ends with one that could not be put back fails.","vcs.inputsRecorded":"{n} input file(s) recorded with their sums in the session’s start ({commit}).","vcs.inputsCarried":"{n} input file(s): the start ({onto}) did not have them, so they were committed on top of it as {branch}.","vcs.artifacts":"Artifacts","vcs.artifactsField":"Evidence the work writes, one pattern per line (repository-relative)","vcs.artifactsWhy":"Reports, ZIP archives, test results. Never committed — kept out through this repository’s .git/info/exclude, .gitignore untouched — and copied into each attempt’s record with their sums when the task ends.","vcs.snapshotInput":"input","vcs.snapshotKind.tracked":"changed","vcs.snapshotKind.untracked":"new","vcs.snapshotKind.ignored":"ignored, named by a scope","vcs.snapshotInclude":"Include in the starting snapshot","vcs.snapshotLeaveOut":"Leave out of the run","vcs.snapshotBlocked":"can be neither taken nor left out","vcs.snapshotTake":"Take the starting snapshot","vcs.snapshotCancelWhy":"To cancel the start, do not take it: nothing in the repository changes, and a run of this session is refused until you do.","vcs.snapshotTaken":"Taken: {commit} on {branch}. The session starts from it.","vcs.startedSnapshot":"Started from a snapshot of your uncommitted changes: {branch} ({commit}), taken on {from} — {n} file(s) in, {out} left out.","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.browse":"Browse…","mirror.browsing":"pick the folder in the window that opened","mirror.browseCancelled":"no folder picked","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: it runs as it is)","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.stepByStep":"\n\nThe run it repeats went on its own, and this machine no longer allows that: {reason}\nSo this one goes step by step.","restart.started":"Started again: {requeued} task(s) queued, {repos} repository(ies) taken back.","restart.commitsHead":" these commits leave the line the work goes on from (nothing is deleted; they stay on {kept}):","restart.commitsMore":" … and {n} more","restart.laterSession":' then "{session}" goes onto a new branch; its {n} commit(s) stay on {branch}:',"restart.taskRedo":" ({status} — runs again, and what it produced is replaced)","runq.button":"Run this task","runq.buttonWhy":"Starts this queued task now: on its own, or with the queued tasks after it in its session. Nothing that has already run is touched.","runq.title":'Run "{title}"',"runq.loading":"reading the session…","runq.onlyThis":"Only this task","runq.following":'This one and the {n} queued after it in "{session}"',"runq.followingWhy":"The queued tasks after it in the same session, in their order. The tasks before it, and any after it that have already run, are left as they are.","runq.willRun":"Will run, in this order:","runq.untouched":"{n} earlier task(s) of this session have already run, done or not; they are not touched.","runq.laterRan":'After it but already run, so left as they are: {list}. "Run again from here" is the way to redo them.',"runq.restWait":"{n} queued task(s) after it keep waiting.","runq.chainGap":'"{before}" comes before it in this chain and is {status}. This task was written assuming that one worked; it runs anyway if you start it.',"runq.go":"Run, asking before each command","runq.goWhy":"Starts only the task(s) listed above, in this order, asking before each command.","runq.unattendedWhy":"The same, running every command without stopping for approval.","runq.sessionInactive":"Its session is set aside (inactive); make it active on the Sessions page to run it.","runq.chainStops":"In this chain, a task that does not end done stops the ones after it.","runq.chainGapLater":'"{between}" comes between them in this chain and is {status}; it is not run again, and the tasks after it were written assuming it worked.',"runq.unattended":"Run without asking","runq.sessionRunning":"Its session is running now; start this when it has finished, or stop it first.","runq.started":"Started: {n} task(s).","runq.notQueued":"This task is not waiting any more ({status}).","runq.savedOffer":"It is back in the queue. Run it now?","runq.ask":"Run it now?","runq.later":"Later","cfix.button":"Fix the contradiction","cfix.buttonWhy":"The task contradicts itself, so it was not started. This offers the smallest change to its scope, read-only or checks that removes each contradiction, and queues it again. The prompt is not changed.","cfix.title":'How "{title}" contradicts itself',"cfix.why":"For each contradiction, the change that touches least is chosen. Only the contract changes — what the task may change and its own checks — never the prompt.","cfix.loading":"checking the task…","cfix.none":"No contradiction is found now. It can be queued again, or run, as it is.","cfix.leave":"Leave this one as it is","cfix.noFix":"There is no automatic way out of this one; edit the task","cfix.minimal":"(least change)","cfix.addToScope":"Add {path} to the paths it may change","cfix.notReadOnly":"Let it change files, but only {paths}","cfix.notReadOnlyAll":"Let it change files","cfix.dropScope":"Keep it read-only and drop its list of paths it may change","cfix.dropCheck":'Drop the check "{check}"',"cfix.apply":"Apply and queue it again","cfix.applyQueued":"Apply","cfix.applied":"Changed: {list}.","cfix.remaining":"It still contradicts itself in {n} way(s).","cfix.chReadOnlyOff":"no longer read-only","cfix.chReadOnlyOn":"now read-only","cfix.chScope":"may change only {paths}","cfix.chScopeRemoved":"its list of paths removed","cfix.chDropped":'the check "{check}" dropped',"cfix.chNothing":"nothing","twin.sameTitle":"same title in {n} other session(s)","twin.alsoIn":'"{session}", added {when}: {status}, attempt {attempt}',"twin.mark":"same title elsewhere; this one added {when}, attempt {attempt}","twin.why":"Another session has a task with the same title: a copy, or another task of the same name. This one was added {mine} and is on attempt {attempt}. Check the session before acting on either.","flow.markWhy":"Status: {status}. Only a marker, not a button — the buttons are under the task.","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}","task.readOnlyReverted":"Put back because the task is read-only ({n}): {paths}","task.inputsRestored":"Input files put back because the task changed them ({n}): {paths}","task.artifactsKept":"Artifacts kept with this attempt’s record, not committed ({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…","runvcs.title":"Prepare version control for this run","runvcs.why":"Checked before the browser opens: the run starts only once every repository below is ready. Each fix says exactly what it does before you press it.","runvcs.repo":"Repository","runvcs.current":"Current branch and HEAD","runvcs.base":"Requested base branch and HEAD","runvcs.workBranch":"Branch the run works on","runvcs.sessions":"Sessions","runvcs.role.first":"first","runvcs.role.shares":"starts from the same base","runvcs.role.inherits":"carries on the one before","runvcs.role.own":"its own start","runvcs.patterns":"Input file patterns","runvcs.problem":"In the way:","runvcs.inputsCount":"{n} input file(s) matched.","runvcs.unrelated":"Other uncommitted files, not inputs ({n}):","runvcs.review":"Review input files","runvcs.snapshotOnBase":"Create starting snapshot on {branch}","runvcs.snapshotHere":"Create starting snapshot on {current}","runvcs.useCurrent":"Use the current branch instead of {branch}","runvcs.allowSnapshot":"Take uncommitted changes as a starting snapshot","runvcs.recommended":"recommended","runvcs.notNow":"Not available:","runvcs.cancel":"Cancel","runvcs.cancelWhy":"Nothing is changed. The run stays off until version control is ready here.","runvcs.cancelled":"Left as it is; the run stays off until this repository is ready.","runvcs.showAgain":"Show the fixes again","runvcs.choose":"What goes into the starting snapshot ({n} file(s)) — choose for each before you press it:","runvcs.ready":"Version control is ready for this run.","sys.version":"copilot-operator version","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; what is saved there 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.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.","login.title":"Sign in to Copilot","login.intro":'The bot works in an Edge profile of its own. It has to be signed in to Microsoft 365 Copilot before a run can start or the models can be read; this is what "cop login" does in a terminal. The window opens, you sign in there yourself (the bot never types a password, and any verification is yours to complete), and it closes once the chat appears.',"login.account":"Account (optional)","login.accountWhy":"Empty: whatever account you sign in with. With an address, the profile is signed out first and Microsoft is asked for that account, because Edge on a work machine otherwise signs in with whichever account Windows knows.","login.button":"Sign in to Copilot","login.busy":"Waiting for you to sign in…","login.waiting":"An Edge window has opened. Sign in there; this page waits until the chat appears.","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 as its project folder, where its commands run, and in its version-control field. Version control is not 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.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":"Нова задача","fup.button":"Продължи с нов prompt","fup.buttonWhy":"Задачата не успя: кажи какво да направи сега и тя продължава оттам, докъдето е стигнала — в собствения си чат и на собствения си клон, а чатът научава как и защо е завършила.","fup.title":"Продължи „{title}“ с нов prompt","fup.ended":"Как завърши: {status}","fup.failedChecks":"Проверки, които не минаха:","fup.findings":"Какво откри независимата рецензия:","fup.summary":"Собственото му обяснение:","fup.chat":"Чат: същият разговор. Научава как и защо е завършил опитът — всичко по-горе — и след това получава твоя prompt.","fup.branch":"Клон: {branch}. Работата досега е там ({commit}) и задачата продължава от нея, не отначало.","fup.branchNotCommitted":"Клон: {branch}. Файловете остават в работното дърво, както ги е оставил опитът, и задачата продължава върху тях.","fup.noVcs":"Контролът на версиите е изключен: файловете остават в папката на проекта, както ги е оставил опитът, и задачата продължава върху тях.","fup.kept":"Собственият prompt на задачата остава какъвто е; твоят се добавя към него и надделява, където двата си противоречат. Неуспешният опит остава в записа.","fup.original":"Prompt-ът на задачата, какъвто е","fup.prompt":"Нов prompt","fup.placeholder":"Какво да направи сега. Например: тестът пада, защото адресът на Okta е грешен — вземи го от config/okta.json и пусни тестовете отново.","fup.save":"Върни в опашката да продължи с този prompt","fup.saved":"„{title}“ е върната в опашката да продължи с новия prompt.","fup.loading":"чета задачата…","fup.startOver":"Ако вместо това задачата трябва да започне отначало, с променен prompt и без неуспешната работа: „{fix}“.","reg.continueHerePrompt":"Нов prompt (по желание)","reg.continueHerePromptWhy":"Добавя се към задачата, за да го изпълни чатът, докато продължава; надделява, където двата си противоречат. Празно: просто продължава.","task.continuedWith":"Продължава опит {n} с нов prompt:","reg.newTaskIn":"в сесия","reg.newTaskNoSessions":"Още няма сесия; първо създайте една.","reg.newSession":"Нова сесия","reg.newTaskPick":"изберете сесия…","reg.retriedFreshDone":"блокира, после готова в нов чат ({n}\xd7)","reg.retriedFreshStill":"още блокирана след {n} нови чата","reg.retriedFreshOther":"блокира, после пусната отново в нов чат ({n}\xd7)","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 …“ — със снимка на чата в папката на пускането. По-бавните модели и дългите отговори може да отнемат няколко минути. Важи за пускания, започнати от сега нататък.","prep.show":"Подготви папката от remote main","prep.why":"Изтегля, запазва всяка некомитната промяна и нов файл в отделен клон, след което поставя папката на основния клон на remote без некомитнати промени — готова да добавиш файловете, нужни за задачата. Нищо не се изхвърля и никой клон не се трие.","prep.where":"{target} е на {commit}. Папката е на {branch} @ {head}.","prep.already":"Папката вече е точно там, без некомитнати промени. Няма какво да се прави.","prep.willDo":"С „Потвърди“:","prep.keepChanges":"{changed} променени и {untracked} нови файла се запазват като един комит в {saved} (файл се връща с: git restore --source {saved} -- <файл>):","prep.keepMain":"{n} комит(а) на локалния {branch}, които ги няма в remote, се запазват в {saved}:","prep.moveTo":"{branch} се поставя на {commit}, същото като {target}, и се избира; новите файлове излизат от папката (те са в запазения клон).","prep.branchStays":"{branch} запазва своите {n} комит(а), които ги няма в remote.","prep.ignored":"Игнорираните файлове — node_modules, .env, резултати от build — не се пипат.","prep.confirm":"Потвърди","prep.cancel":"Отказ","prep.password":"Ако remote поиска парола или passphrase за SSH ключа, се отваря собственият прозорец на Git за нея (може да е зад браузъра). Каквото въведеш, отива направо в git; ботът не го вижда и не го пази.","prep.fetching":"Изтегляне… ако се е отворил прозорецът на Git за парола, въведи я там.","prep.fetchFailed":"Remote не можа да бъде изтеглен:","prep.fetchAuth":"Изглежда паролата или ключът не са приети, или прозорецът е затворен.","prep.retry":"Опитай пак","prep.ownTerminal":"Или изтегли в собствения си PowerShell, където ssh те пита директно, и продължи с изтегленото:","prep.copyFetch":"Копирай командата за изтегляне","prep.copied":"Копирано","prep.useFetched":"Продължи с последно изтегленото","prep.lastFetched":"Последно изтегляне: {when}.","prep.lastFetchedUnknown":"Кога е изтеглено последно не може да се каже (последният опит не е минал); remote може да се е променил оттогава.","prep.notFetched":"Без ново изтегляне: сравнено с remote, както е бил изтеглен последно.","prep.more":"и още {n}","startdlg.title":"Откъде да тръгне работата","startdlg.intro":"Избери за всяка сесия клона, от който тръгва работата ѝ. Пита се всеки път, когато се пуска изпълнение.","startdlg.repoOn":"{repo} — в момента на {branch}","startdlg.vcsOff":"Контролът на версиите е изключен за тази сесия, затова ботът не прави нищо с git: работата върви в папката, както е, на клона, който е избран в момента. Включи го на страницата на сесията, за да избираш клон.","startdlg.fixed":"Вече е започнала: {start}.","startdlg.branchNow":"Клонът ѝ {branch} сега е на {now}; сесията е тръгнала от {recorded}.","startdlg.branchGone":"Клонът ѝ {branch} вече го няма тук; сесията е тръгнала от {recorded}.","startdlg.branchRemote":"В remote, според последното изтегляне: {name} на {commit}.","startdlg.differs":"Хранилището е на {current} ({head}), а не на {branch}.","startdlg.keepStarted":"Запази: продължи на {branch}","startdlg.keepStartedNoBranch":"Запази началото, което има","startdlg.useCurrent":"Клонът, избран в момента: {branch} ({commit})","startdlg.rechooseNote":"Ново начало за сесия, която вече е вървяла: задачите, които тръгнат оттук нататък, тръгват от него — и пуснатата отново задача, а не оттам, откъдето е тръгнала първия път. Каквото вече е изпълнено, остава в своите клонове.","startdlg.rechooseBlocked":"{tasks} продължават по-ранен опит, на собствения му клон, затова началото остава същото. За да тръгне някоя от тях от друг клон, използвай „Поправи prompt-а и върни в опашката“ за нея.","startdlg.refresh":"Прочети клоновете отново","pm.setting":"Първо план","pm.off":"Изключено — работата започва веднага","pm.auto":"Включено — планът се одобрява без питане","pm.approveMode":"Включено — аз одобрявам плана, когато пускането пита преди всяка команда","pm.settingWhy":"С „Първо план“ всяка задача започва с разглеждане на кода, без да променя нищо — какво вече има, как да се свърши работата, стъпките, файловете, как ще покаже, че е готово — и започва работата едва след като планът е одобрен. Пускане, което не пита (без надзор или „изпълни всички“), го одобрява само и записва защо, така че никога не чака. После прегледът проверява дали работата следва одобрения план. Задача, продължена с нов prompt или след лимит, запазва плана си. Всяка сесия може да има своя настройка.","pm.sessionSetting":"Първо план, за тази сесия","pm.followSettings":"Както е в Настройки","pm.sessionWhy":"Отменя Настройки → Изпълнение → Първо план само за тази сесия.","pm.saved":"Записано. Следващото пускане го използва.","pm.cardTitle":"План за „{title}“, чака одобрение","pm.cardWhy":"Още нищо не е променено. Работата започва, когато одобриш този план.","pm.note":"Бележка за чата (по желание при одобрение; казва какво да се промени, когато искаш друг план)","pm.notePlaceholder":"напр. Старият endpoint да продължи да работи; не пипай миграциите.","pm.approve":"Одобри и започни работата","pm.revise":"Поискай друг план","pm.reviseWhy":"Чатът прави нов план с бележката ти; същата карта се връща с него.","pm.reviseNeedsNote":"Напиши в бележката какво да промени новият план.","pm.stop":"Спри задачата","pm.stopConfirm":"Да спра ли задачата, без да се свърши работата? Тя приключва като спряна и може да се пусне отново.","pm.version":"План, версия {n}, {at}","pm.approvedByOperator":"Одобрен от оператора, {at}.","pm.approvedAuto":"Одобрен от runner-а, {at}.","pm.approvedNote":"Бележка: {note}","pm.existing":"Какво вече има","pm.approach":"Подход","pm.steps":"Стъпки","pm.files":"Файлове, които очаква да промени","pm.verification":"Как ще покаже, че работата е готова","pm.risks":"Рискове","pm.revisions":"По-ранни версии и какво е поискано да се промени","pm.revision":"Версия {n} ({at}):","pm.taskApproved":"План (версия {n}, одобрен)","pm.taskWaiting":"План (версия {n}, чака одобрение)","startdlg.goStepOn":"Започни, с питане преди всяка команда — на {where}","startdlg.goUnattendedOn":"Започни без питане — на {where}","startdlg.prepared":"Подготвено преди това пускане: {start}. Ако избереш друг клон по-долу, отпада.","startdlg.keep":"Запази началото, подготвено преди това пускане","startfail.laterSession":"Сесия от пускане, което вървеше, не можа да започне:","startdlg.repoProblem":"Клоновете не могат да се прочетат: {problem}","startdlg.local":"Локален клон","startdlg.localWhy":"Такъв, какъвто е в тази папка: нищо не се изтегля.","startdlg.localBranch":"Локален клон, от който да тръгне","startdlg.remote":"Remote клон (изтегля се сега)","startdlg.remoteWhy":"Кодът, какъвто е на сървъра, изтеглен при натискане на „Започни“. Локалният ти клон със същото име не се пипа.","startdlg.remoteName":"Remote","startdlg.remoteBranch":"Remote клон, от който да тръгне","startdlg.refreshRemote":"Вземи списъка с клонове от remote","startdlg.lastFetched":"Списъкът е според последното изтегляне от remote: {when}.","startdlg.neverFetched":"От този remote още нищо не е изтегляно тук: напиши името на клона или вземи списъка.","startdlg.lastFetchedUnknown":"Списъкът е такъв, какъвто беше remote, когато тази папка последно го е взела (кога — не може да се каже тук); remote може да се е променил оттогава.","startdlg.noRemote":"Това хранилище няма remote.","startdlg.previous":"Продължи от предната сесия","startdlg.previousWhy":"Тръгва от края на клона на сесията, която последна е работила в това хранилище — при това пускане, предната.","startdlg.onBranch":"Работи направо на този клон, без нов клон","startdlg.onBranchWhy":"Изключено, както обикновено: ботът прави свой клон от избрания и комитва там. Включено: всяка задача комитва направо на избрания клон; при remote клон първо локалният клон се създава от него или се довежда до него (само fast-forward).","startdlg.goStep":"Започни, с питане преди всяка команда","startdlg.goUnattended":"Започни без питане","startdlg.needBranch":"Избери клон за „{name}“.","startdlg.fetching":"Изтегляне на {what}… ако се е отворил прозорецът на Git за парола, въведи там passphrase-а на SSH ключа си (може да е зад браузъра).","startdlg.starting":"Стартиране…","startdlg.loading":"Четене на клоновете…","startdlg.fetchFailed":"{what} не можа да бъде изтеглен:","startdlg.missing":"Remote няма клон {names}. Провери името или вземи списъка с клонове.","startdlg.retryFetch":"Изтегли отново","startdlg.useFetched":"Продължи с последно изтегленото","startdlg.useFetchedNo":"Продължаване без изтегляне не се предлага: {what} никога не е изтеглян тук.","startdlg.back":"Обратно към избора","startdlg.tryAgain":"Опитай пак да започнеш","startdlg.vcsFix":"Първо контролът на версиите трябва да се подготви; поправките са по-долу. След това натисни „Опитай пак да започнеш“.","startfail.title":"Работата не започна","startfail.where":"Къде спря: {stage}.","startfail.stage.refused":"пускането не беше допуснато, преди да се отвори каквото и да е","startfail.stage.branch":"клонът, избран за начало","startfail.stage.preflight":"проверката на контрола на версиите, преди да се отвори браузърът","startfail.stage.browser":"отварянето на браузъра (Edge), профила му или чата","startfail.stage.run":"изпълнението, преди първата му задача","startfail.stage.at-turn":"редът на тази сесия в изпълнението, преди първата ѝ задача","startfail.stage.error":"самият бот, докато стартира","startfail.when":"{when}, изпълнение {run}","startfail.whenNoRun":"{when}","startfail.download":"Изтегли какво се случи (грешка, запис на пускането и терминал)","startfail.terminal":"Изтегли какво показа терминалът","startfail.downloadWhy":"Текстов файл с грешката, къде е спряло, собствения запис на пускането, събитията на сесиите и всеки ред, който конзолата на бота е отпечатала от натискането до няколко секунди след това. Текст, който прилича на тайна, е премахнат.","startfail.dismiss":"Затвори съобщението","startfail.later":"Това пускане беше прието, но после не можа да започне:","sys.terminalWhy":"Конзолата на бота — каквото са отпечатали npm start или cop start — като текстов файл: последните редове, всеки с часа си, без текст, който прилича на тайна. Всичко от стартирането на бота е и в папката с данни, logs\\terminal.log.","exec.maxReviewRounds":"Кръгове поправка след неуспешен преглед","exec.maxReviewRoundsUnit":"кръга, после задачата завършва „blocked“ с находките на прегледа","exec.maxReviewRoundsWhy":"Когато независимият преглед не приеме работата, находките му се връщат на чата за поправка и работата се преглежда отново. Това е колко пъти. Лимитът е отделен от подходите по-горе: те броят как чатът се отказва, тези — прегледите. 3 или 4 дават на работата още един-два шанса; повече рядко помага — находка, оцеляла след няколко поправки, обикновено значи, че самата задача трябва да се формулира другояче.","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.continueHereAlone":"Пуска се само тази задача; останалите в опашката остават, където са.","reg.rerunHere":"Пусни само тази отново","reg.rerunHereWhy":"Нов опит само за тази задача, сега. Останалите в опашката остават, където са. Първо показва какво ще стане.","reg.rerunHereTitle":"Пусни „{title}“ отново, сама","reg.rerunHereChat":"Чат: разговорът на сесията. Задачата се праща отново такава, каквато е написана сега — поправи prompt-а ѝ първо, ако проблемът е бил в него.","reg.rerunHereBranch":"Клон: оттам, откъдето задачата е тръгнала първия път, без работата на неуспешния опит (тя остава в своя клон) — и при per-session, освен ако след нея са вървели други задачи от сесията: тогава върху нея. За да запазиш тази работа и да продължиш от нея: „Продължи с нов prompt“.","reg.rerunHereKept":"Провалилият се опит остава в записа, с клона, отчетите и промените си.","reg.pickedCount":"Отметнати: {n} от {of}","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-а.',"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.order":"Ред","home.moveUp":"Премести {name} нагоре в списъка","home.moveDown":"Премести {name} надолу в списъка","home.dragHint":"Плъзнете реда върху друг, за да го преместите там","home.orderWhy":"Редът е ваш: плъзнете ред върху друг или ползвайте стрелките. Импортиран план идва най-отгоре, в реда, в който е даден; пускане на няколко взима отметнатите сесии отгоре надолу.","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.openChat":"отвори чата: {name}","session.noChat":"още няма разговор; първото изпълнение го отваря","session.group":"Споделяне на разговор","session.groupWhy":"Сесиите с едно и също име тук се изпълняват в един чат на Copilot: първата, която тръгне, го отваря, а останалите се присъединяват към него и виждат историята му. Оставено празно, сесията получава собствен разговор — което е обичайният отговор.","session.groupPlaceholder":"име, едно и също във всички сесии, които да споделят","session.groupSaved":"запазено","session.groupHasChat":"Тази сесия вече е в разговор и остава в него. Групата решава къде отива сесията при първото ѝ пускане.","approval.title":"Стъпка {n} чака вашето решение","approval.modelTitle":"Изберете модела — ботът не успя","approval.manualTitle":"Изберете модела за това пускане","approval.manualAsk":"В прозореца на Copilot отворете менюто с моделите и изберете „{model}“. После натиснете „Готово“: ботът проверява менюто и започва.","approval.manualAskAny":"В прозореца на Copilot отворете менюто с моделите и изберете модела, който искате. После натиснете „Готово“: ботът започва на него.","approval.manualReady":"Готово — провери и продължи","def.manualModel":"Избирай модела ръчно в началото на всяко пускане","def.manualModelWhy":"Ботът не пипа менюто с моделите. В началото на пускане и на преглед тук се появява карта, която ви моли да изберете модела в прозореца на Copilot и да натиснете „Готово“; ботът проверява и продължава. Разговор, който вече е на модела, не се пита — чатът пази модела си. Заобиколно решение, докато автоматичният избор е ненадежден.","approval.modelAsk":"В прозореца на Copilot отворете менюто с моделите и изберете „{model}“. После натиснете бутона отдолу: ботът проверява менюто и продължава.","approval.modelShown":"Менюто показва сега: {shown}","approval.modelWhy":"Защо ботът не успя: {why} (питано {tries} път/и)","approval.modelChosen":"Избрах го — провери и продължи","approval.modelAsItIs":"Продължи на текущия модел","approval.modelStop":"Спри","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.planOutranked":"Планът посочва „{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.startedRemote":"Тръгна от remote клона {branch} ({commit}), както беше изтеглен при пускането.","vcs.startAsked":"Пита се всеки път, когато се пуска изпълнение, в прозореца за старт: каквото е зададено тук, това прозорецът предлага първо.","vcs.fromRemote":"Избрано последния път в прозореца за старт: remote клонът {remote}/{branch}, какъвто е на сървъра.","vcs.startedHead":"Тръгна оттам, където беше хранилището ({commit}).","vcs.startExisting":"Продължи съществуващ клон","vcs.startExistingWhy":"Без нов клон: всяка задача от сесията работи на клона, посочен отдолу, точно както е в git, и стъпва върху това, което вече е там. Ако клонът липсва или има незакомитнати промени, задачата се отказва и нищо не се изпълнява.","vcs.existingBranch":"Клонът, който да продължи","vcs.existingBranchWhy":"Точното му име в git, с представката (например recovery/apz-migration). Докато пишеш, се предлагат локалните клонове на хранилището.","vcs.existingBranchMissing":"В момента хранилището няма локален клон „{branch}“: задачата ще бъде отказана.","vcs.startedExisting":"Продължава съществуващия клон {branch}, от {commit}.","vcs.branchesExisting":"Не се прилага: всяка задача работи на съществуващия клон {branch}, една след друга.","vcs.updateFromRemote":"Първо обнови началния клон от отдалеченото хранилище","vcs.updateFromRemoteWhy":"Преди първия клон на сесията: git fetch, после локалният клон се придвижва напред до този на сървъра — никога reset или merge. Клон със свои commit-и се оставя както е и това се казва. Изключено: тръгва от клона, както е в това копие.","vcs.updated":"{branch} е обновен от {remote}: {from} → {to}.","vcs.upToDate":"{branch} вече беше обновен спрямо {remote}.","vcs.notUpdated":"{branch} не е обновен от отдалеченото хранилище: {why}.","vcs.commit":"Комит при приключване на задача","vcs.commitWhy":"По един локален комит на задача, независимо от изхода, с обяснението в съобщението. Изключено оставя промените в работното дърво.","vcs.dirty":"Некомитнати промени","vcs.dirtyReject":"Откажи старта, докато не са комитнати","vcs.dirtyRejectWhy":"Ако хранилището има некомитнати промени, задачата се отказва и нищо не се изпълнява: задача, чиято работа не може да се комитне, не се пуска. Комитни ги сам или ги вземи като начална снимка.","vcs.dirtySnapshot":"Запази ги като начална снимка","vcs.dirtySnapshotWhy":"Преди първата задача некомитнатите ти промени стават един комит, „Capture operator baseline before run“, на отделен клон, и сесията тръгва от него. Твоят клон не се пипа. Тайни (.env), изход от инструменти и файлове извън проекта никога не се вземат; ignored файл — само когато scope на задача го посочва.","vcs.dirtyTracked":"Запази само tracked промените като начална снимка","vcs.dirtyTrackedWhy":"Същото, но само за файлове, които git вече следи. Новите файлове могат само да се оставят извън.","vcs.dirtyApproval":"Покажи ми списъка за одобрение първо","vcs.dirtyApprovalWhy":"Включено: точният списък се показва тук преди пускането и пускане се отказва, докато не направиш снимката. Изключено: прави се при старта на първата задача и се отказва, ако нещо трябва да остане извън.","vcs.snapshotList":"{n} некомитнат(и) файл(а). Включените стават един комит на {branch} и сесията тръгва от него. Оставен извън, файлът се добавя в .git/info/exclude на това хранилище (локално, никога не се комитва), за да не го комитне или изтрие задача.","vcs.inputs":"Входни файлове","vcs.inputsField":"Твоите входни файлове, по един шаблон на ред (спрямо хранилището)","vcs.inputsWhy":"Файлове, които даваш за работата — схеми, тестови данни. Преди първата задача влизат в комита, от който тръгва сесията (новите, променените и ignored — в началната снимка, със списък за одобрение), а следваща сесия, чието начало ги няма, ги получава комитнати върху него. SHA-256 сумите им се записват. Тайни и файлове извън проекта никога не са вход.","vcs.inputsReadOnly":"Само за четене, докато задачите работят","vcs.inputsReadOnlyWhy":"След всеки рунд стъпки променен, изтрит или добавен входен файл се връща и чатът научава. Задача, която завърши с файл, който не е могъл да се върне, се проваля.","vcs.inputsRecorded":"{n} входен(и) файл(а), записани със сумите си в началото на сесията ({commit}).","vcs.inputsCarried":"{n} входен(и) файл(а): началото ({onto}) ги нямаше, затова са комитнати върху него като {branch}.","vcs.artifacts":"Artifacts","vcs.artifactsField":"Доказателства, които работата пише, по един шаблон на ред (спрямо хранилището)","vcs.artifactsWhy":"Отчети, ZIP архиви, резултати от тестове. Никога не се комитват — стоят извън git чрез .git/info/exclude на това хранилище, .gitignore не се пипа — и се копират към записа на всеки опит със сумите си, когато задачата приключи.","vcs.snapshotInput":"вход","vcs.snapshotKind.tracked":"променен","vcs.snapshotKind.untracked":"нов","vcs.snapshotKind.ignored":"ignored, посочен от scope","vcs.snapshotInclude":"Включи в началната снимка","vcs.snapshotLeaveOut":"Остави извън изпълнението","vcs.snapshotBlocked":"не може нито да се вземе, нито да се остави извън","vcs.snapshotTake":"Направи началната снимка","vcs.snapshotCancelWhy":"За да откажеш пускането, не я прави: нищо в хранилището не се променя, а пускане на сесията се отказва, докато не я направиш.","vcs.snapshotTaken":"Готово: {commit} на {branch}. Сесията тръгва от него.","vcs.startedSnapshot":"Тръгна от снимка на некомитнатите ти промени: {branch} ({commit}), направена на {from} — {n} файл(а) вътре, {out} извън.","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.browse":"Избери папка…","mirror.browsing":"изберете папката в отворилия се прозорец","mirror.browseCancelled":"не е избрана папка","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.stepByStep":"\n\nПускането, което се повтаря, вървеше самостоятелно, а тази машина вече не го позволява: {reason}\nЗатова това тръгва стъпка по стъпка.","restart.started":"Пуснато отново: {requeued} задача(и) в опашката, {repos} хранилище(а) върнати назад.","restart.commitsHead":" тези комити излизат от линията, от която работата продължава (нищо не се трие; остават на {kept}):","restart.commitsMore":" … и още {n}","restart.laterSession":" после „{session}“ минава на нов клон; нейните {n} комита остават на {branch}:","restart.taskRedo":" ({status} — изпълнява се отново и това, което е произвела, се заменя)","runq.button":"Пусни тази задача","runq.buttonWhy":"Пуска тази чакаща задача сега: сама или заедно с чакащите след нея в сесията ѝ. Нищо, което вече е изпълнено, не се пипа.","runq.title":"Пускане на „{title}“","runq.loading":"чете се сесията…","runq.onlyThis":"Само тази задача","runq.following":"Тази и {n} чакащи след нея в „{session}“","runq.followingWhy":"Чакащите задачи след нея в същата сесия, в техния ред. Задачите преди нея и вече изпълнените след нея остават както са.","runq.willRun":"Ще се изпълнят, в този ред:","runq.untouched":"{n} по-ранни задачи от тази сесия вече са изпълнени, успешно или не; те не се пипат.","runq.laterRan":"След нея, но вече изпълнени, затова остават както са: {list}. За да се изпълнят отново — „Пусни отново оттук“.","runq.restWait":"{n} чакащи задачи след нея продължават да чакат.","runq.chainGap":"„{before}“ е преди нея в тази верига и е {status}. Тази задача е писана с допускането, че онази е минала; ако я пуснете, тръгва въпреки това.","runq.go":"Пусни, с питане преди всяка команда","runq.goWhy":"Пуска само изброените по-горе задачи, в този ред, с питане преди всяка команда.","runq.unattendedWhy":"Същото, като изпълнява всяка команда, без да спира за одобрение.","runq.sessionInactive":"Сесията ѝ е оставена настрана (неактивна); направете я активна в страницата „Сесии“, за да я пуснете.","runq.chainStops":"В тази верига задача, която не завърши готова, спира следващите.","runq.chainGapLater":"„{between}“ е между тях в тази верига и е {status}; тя не се пуска отново, а задачите след нея са писани с допускането, че е минала.","runq.unattended":"Пусни без да пита","runq.sessionRunning":"Сесията ѝ работи в момента; пуснете тази, когато приключи, или първо я спрете.","runq.started":"Пуснато: {n} задача(и).","runq.notQueued":"Тази задача вече не чака ({status}).","runq.savedOffer":"Задачата е върната в опашката. Да я пусна ли сега?","runq.ask":"Да я пусна ли сега?","runq.later":"По-късно","cfix.button":"Поправи противоречието","cfix.buttonWhy":"Задачата си противоречи, затова не е пусната. Тук се предлага най-малката промяна на обхвата, „само за четене“ или проверките, която премахва всяко противоречие, и задачата се връща в опашката. Prompt-ът не се променя.","cfix.title":"Как „{title}“ си противоречи","cfix.why":"За всяко противоречие е избрана промяната, която пипа най-малко. Променя се само договорът — какво може да променя задачата и собствените ѝ проверки — никога prompt-ът.","cfix.loading":"проверява се задачата…","cfix.none":"В момента не се открива противоречие. Задачата може да се върне в опашката или да се пусне както е.","cfix.leave":"Остави това както е","cfix.noFix":"Тук няма автоматичен изход; променете задачата","cfix.minimal":"(най-малка промяна)","cfix.addToScope":"Добави {path} към пътищата, които може да променя","cfix.notReadOnly":"Позволи ѝ да променя файлове, но само {paths}","cfix.notReadOnlyAll":"Позволи ѝ да променя файлове","cfix.dropScope":"Остави я само за четене и махни списъка с пътища, които може да променя","cfix.dropCheck":"Махни проверката „{check}“","cfix.apply":"Приложи и върни в опашката","cfix.applyQueued":"Приложи","cfix.applied":"Променено: {list}.","cfix.remaining":"Още си противоречи по {n} начин(а).","cfix.chReadOnlyOff":"вече не е само за четене","cfix.chReadOnlyOn":"вече е само за четене","cfix.chScope":"може да променя само {paths}","cfix.chScopeRemoved":"списъкът ѝ с пътища е махнат","cfix.chDropped":"проверката „{check}“ е махната","cfix.chNothing":"нищо","twin.sameTitle":"същото заглавие в още {n} сесия(и)","twin.alsoIn":"„{session}“, добавена {when}: {status}, опит {attempt}","twin.mark":"същото заглавие и другаде; тази е добавена {when}, опит {attempt}","twin.why":"Друга сесия има задача със същото заглавие: копие или друга задача със същото име. Тази е добавена {mine} и е на опит {attempt}. Проверете сесията, преди да действате по която и да е от двете.","flow.markWhy":"Състояние: {status}. Само знак, не е бутон — бутоните са под задачата.","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}","task.readOnlyReverted":"Върнато, защото задачата е само за четене ({n}): {paths}","task.inputsRestored":"Входни файлове, върнати, защото задачата ги промени ({n}): {paths}","task.artifactsKept":"Artifacts, запазени към записа на този опит, без commit ({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":"Зареждане…","runvcs.title":"Подготви контрола на версиите за това пускане","runvcs.why":"Проверява се преди да се отвори браузърът: пускането тръгва само когато всяко хранилище по-долу е готово. Всяко решение казва точно какво прави, преди да го натиснеш.","runvcs.repo":"Хранилище","runvcs.current":"Текущ клон и HEAD","runvcs.base":"Поискан базов клон и HEAD","runvcs.workBranch":"Клон, на който ще се работи","runvcs.sessions":"Сесии","runvcs.role.first":"първа","runvcs.role.shares":"тръгва от същата база","runvcs.role.inherits":"продължава предната","runvcs.role.own":"собствено начало","runvcs.patterns":"Шаблони за входни файлове","runvcs.problem":"Пречи:","runvcs.inputsCount":"Съвпаднали входни файлове: {n}.","runvcs.unrelated":"Други некомитнати файлове, които не са вход ({n}):","runvcs.review":"Прегледай входните файлове","runvcs.snapshotOnBase":"Създай начална снимка върху {branch}","runvcs.snapshotHere":"Създай начална снимка върху {current}","runvcs.useCurrent":"Използвай текущия branch вместо {branch}","runvcs.allowSnapshot":"Вземи некомитнатите промени като начална снимка","runvcs.recommended":"препоръчано","runvcs.notNow":"Не е налично:","runvcs.cancel":"Отказ","runvcs.cancelWhy":"Нищо не се променя. Пускането остава изключено, докато контролът на версиите тук не е готов.","runvcs.cancelled":"Оставено както е; пускането остава изключено, докато това хранилище не е готово.","runvcs.showAgain":"Покажи решенията отново","runvcs.choose":"Какво влиза в началната снимка ({n} файла) — избери за всеки, преди да натиснеш:","runvcs.ready":"Контролът на версиите е готов за това пускане.","sys.version":"Версия на copilot-operator","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.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":"Няма зададен модел за рецензията по подразбиране.","login.title":"Вход в Copilot","login.intro":"Ботът работи в собствен профил на Edge. Той трябва да е влязъл в Microsoft 365 Copilot, преди да тръгне пускане или да се прочетат моделите; това прави „cop login“ в терминала. Прозорецът се отваря, вие влизате в него сами (ботът никога не пише парола, а проверка за човек минавате вие) и той се затваря, щом чатът се появи.","login.account":"Акаунт (по желание)","login.accountWhy":"Празно: какъвто акаунт изберете при входа. С адрес профилът първо излиза и Microsoft се пита точно за този акаунт, защото Edge на служебна машина иначе влиза с акаунта, който Windows познава.","login.button":"Вход в Copilot","login.busy":"Чака да влезете…","login.waiting":"Отвори се прозорец на Edge. Влезте в него; страницата чака, докато се появи чатът.","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.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} провалени"}},r="cop.locale",i=(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(r);"en"===t||"bg"===t?e=t:navigator.language.toLowerCase().startsWith("bg")&&(e="bg")}catch(e){}a(e),document.documentElement.lang=e},[]),(0,n.jsx)(i.Provider,{value:{locale:s,setLocale:e=>{a(e);try{window.localStorage.setItem(r,e)}catch(e){}document.documentElement.lang=e}},children:t})}function d(){let{locale:e}=(0,o.useContext)(i);return{t:function(t){var s,n;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null!=(n=null!=(s=a[e][t])?s:a.en[t])?n:t;for(let[e,t]of Object.entries(o))r=r.split("{".concat(e,"}")).join(String(t));return r},locale:e}}function c(){let{locale:e,setLocale:t}=(0,o.useContext)(i),{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 l(){let{locale:e}=(0,o.useContext)(i);return t=>t?new Date(t).toLocaleString("bg"===e?"bg-BG":void 0,{hour12:!1}):""}}}]);
|