@wrongstack/webui 1.0.17 → 1.0.19
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/assets/{AgentRosterView-CV9MW-4M.js → AgentRosterView-D4TuVXe8.js} +1 -1
- package/dist/assets/{AnalyticsDashboard-30brLbuz.js → AnalyticsDashboard-DmQd0E0V.js} +1 -1
- package/dist/assets/{AudienceMemoryPanel-bKVydKg8.js → AudienceMemoryPanel-DHJM4rf1.js} +1 -1
- package/dist/assets/{ChangesView-Cv6svx-V.js → ChangesView-CZ-nCe26.js} +1 -1
- package/dist/assets/{ChimeraReviewsView-DLTrEJDS.js → ChimeraReviewsView-CNeRLesP.js} +1 -1
- package/dist/assets/{ChronicleDashboard-DhgWbaXj.js → ChronicleDashboard-CYELq7EO.js} +1 -1
- package/dist/assets/{CodeEditor-JlvMbECd.js → CodeEditor-CLscjkIR.js} +1 -1
- package/dist/assets/{CodeMap-4swT3FIw.js → CodeMap-CdVy9Q7V.js} +1 -1
- package/dist/assets/{CronJobsPanel-LSpFBceD.js → CronJobsPanel-TcZy_W2t.js} +1 -1
- package/dist/assets/{DeadCodeScanPanel-ZRNNV02b.js → DeadCodeScanPanel-BOD2JEyf.js} +1 -1
- package/dist/assets/{DebugDashboard-DlH0QNPX.js → DebugDashboard-DFPNPzQ_.js} +1 -1
- package/dist/assets/{DesignGalleryView-yZgVVEg9.js → DesignGalleryView-BXABwAji.js} +1 -1
- package/dist/assets/{GoalView-D1gxZre2.js → GoalView-Cepqrg9l.js} +1 -1
- package/dist/assets/KanbanView-FSePkLch.js +3 -0
- package/dist/assets/{MailboxDetailView-C4lEW3f8.js → MailboxDetailView-QyNmt1Gv.js} +1 -1
- package/dist/assets/{MemoryDrawer-arujfDSW.js → MemoryDrawer-BZsyD1dh.js} +1 -1
- package/dist/assets/{MemoryManager-BmQYIRhD.js → MemoryManager-IHmhWn4P.js} +1 -1
- package/dist/assets/{ProcessMonitor-ByW-VKsX.js → ProcessMonitor-Bz0jZvHJ.js} +1 -1
- package/dist/assets/{PromptJournalView-0cHPeYXa.js → PromptJournalView-Ct8cLcGU.js} +1 -1
- package/dist/assets/{ProviderTestView-CQlwC6HG.js → ProviderTestView-Dy3k2bVu.js} +1 -1
- package/dist/assets/{QueuePanel-DJeK7xCh.js → QueuePanel-oVkTB68Q.js} +1 -1
- package/dist/assets/{RefreshDebugView-BfOjHodq.js → RefreshDebugView-_XPrBDq3.js} +1 -1
- package/dist/assets/{RepositoryHistoryView-BYPPu5uv.js → RepositoryHistoryView-Wlnvi5r1.js} +1 -1
- package/dist/assets/RequirementIntakeView-Cj5arGFF.js +1 -0
- package/dist/assets/{SageTabs-Bt2kzPNB.js → SageTabs-qrBn3VQr.js} +2 -2
- package/dist/assets/{SddFlowGraph-CZSwcAtS.js → SddFlowGraph-DS8R2zEj.js} +1 -1
- package/dist/assets/{SddHub-Cc79Ob7A.js → SddHub-C8pHQYSM.js} +1 -1
- package/dist/assets/{SessionInspectView-BasxJ_5x.js → SessionInspectView-CuRk2DS0.js} +1 -1
- package/dist/assets/{SessionList-C9MRSj_-.js → SessionList-BgRb1Mp4.js} +1 -1
- package/dist/assets/{SessionsDashboard-BK95Zp6f.js → SessionsDashboard-CSkm28Bx.js} +1 -1
- package/dist/assets/{SetupScreen-rPKsBa9Z.js → SetupScreen-CNcJ_9O9.js} +1 -1
- package/dist/assets/{SkillDetailView-LkJyIBPb.js → SkillDetailView-Bc9owpaX.js} +1 -1
- package/dist/assets/{TechStackView-xVR5dsSn.js → TechStackView-BHiGCRBT.js} +1 -1
- package/dist/assets/{TerminalPanel-CBEZTuvV.js → TerminalPanel-7VeXK8LB.js} +1 -1
- package/dist/assets/{activity-E8vCWdG2.js → activity-1wlPY6yi.js} +1 -1
- package/dist/assets/{activity-CInOo57V.js → activity-BVbAv0x7.js} +1 -1
- package/dist/assets/{activity-e8OIpNGJ.js → activity-BmJTU8kX.js} +1 -1
- package/dist/assets/{activity-oTJsNfZu.js → activity-By_aWEsY.js} +1 -1
- package/dist/assets/{activity-DapbBEf6.js → activity-Cps_29WN.js} +1 -1
- package/dist/assets/{activity-D6XfckyA.js → activity-Du_fOnvF.js} +1 -1
- package/dist/assets/{activity-CDHIWIPJ.js → activity-p_2o4eC6.js} +1 -1
- package/dist/assets/{chat-store-BDVZSmod.js → chat-store-C-PKlsCR.js} +1 -1
- package/dist/assets/config-store-xSv1mChc.js +21 -0
- package/dist/assets/{i18n-CvJB4U4z.js → i18n--QdD6NCn.js} +1 -1
- package/dist/assets/{index-DLjaZSCH.js → index-FWwLmwjx.js} +35 -35
- package/dist/assets/{roster-ws-BRANim2Y.js → roster-ws-CxKDc-ET.js} +1 -1
- package/dist/assets/{stores-D5loyGLL.js → stores-2kakt8j9.js} +1 -1
- package/dist/components/KanbanColumnView.d.ts +13 -0
- package/dist/index.html +5 -5
- package/dist/index.js +195 -133
- package/dist/lib/kanban-cleaner.d.ts +1 -1
- package/dist/lib/ws-client-domain-methods.d.ts +1 -1
- package/dist/lib/ws-client-echo.d.ts +1 -1
- package/package.json +9 -9
- package/dist/assets/KanbanView-Bh0T3p3J.js +0 -3
- package/dist/assets/RequirementIntakeView-CEwUB7VD.js +0 -1
- package/dist/assets/config-store-mWuYCild.js +0 -22
|
@@ -3,7 +3,7 @@ var e={chat:`Session`,agents:`Agents`,history:`History`,files:`Files`,changes:`C
|
|
|
3
3
|
Double-click to rename`,unfavorite:`Unfavorite`,markFavorite:`Mark as favorite`,deleteSessionConfirmTitle:`Delete session?`,deleteSessionConfirmBody:`"{{name}}" will be removed from disk. This cannot be undone.`,deleteSessionTitle:`Delete session`,deleteKeptLastTab:`Session not deleted — at least one tab must stay open.`,closeOngoingTabTitle:`There is an ongoing operation in this session`,closeOngoingTabQuestion:`Are you sure you want to close this tab?`,closeHistoryTabTitle:`Close this tab?`,closeHistoryTabMessage:`This tab contains agent history. Are you sure you want to close it?`,closeTabAction:`Close Tab`,warnLeaderRunning:`Leader run in progress`,warnSubagentLine:`{{name}} — running{{suffix}}`,warnFinishedAgents:`{{count}} finished subagent(s) on record`,warnQueuedMessages:`{{count}} queued message(s)`,stillRunningToast:`"{{title}}" keeps running in background:
|
|
4
4
|
{{lines}}`,interruptAndClose:`Interrupt and Close`,allTabsRunning:`All 4 tab slots are full. Close a tab before opening a new session.`,rename:`Session name`,renameAction:`Rename`,resume:`Resume session`,resumeShort:`Resume`,workspaceEyebrow:`Conversation control`,workspaceTitle:`Sessions`,workspaceHint:`Search, inspect, pin and resume every project conversation.`,tabs:{history:`History`,live:`Live sessions`},filters:{all:`All`,favorites:`Pinned`,active:`Active`,completed:`Completed`,issues:`Issues`},status:{active:`Active`,completed:`Completed`,error:`Error`,timeout:`Timed out`,aborted:`Aborted`,saved:`Saved session`},sort:{label:`Sort sessions`,recent:`Recent`,tokens:`Most tokens`,activity:`Most activity`},stats:{sessions:`Sessions`,tokens:`Tokens`,tools:`Tool calls`,files:`Files changed`,errors:`Errors`},inspect:`Inspect session`},m={actions:{abort:`Abort`,newSession:`New session`,export:`Export`,compact:`Compact`,newSessionConfirm:`Are you sure?`,newSessionConfirmMessage:`A job is still in progress. Start a new session anyway?`,newSessionTitle:`Start a new session (Ctrl+N)`,exportTitle:`Export chat as markdown (Ctrl+E)`,compactTitle:`Compact the context window`,clearTitle:`Close this session and start a new one in this tab`},model:`Model`,modelTitle:`Change model (Ctrl+M)`,context:`Context`,contextTitle:`Click for a context breakdown`,sessionLabel:`Session`,stats:{messages:`Messages`,elapsed:`Elapsed`,tokens:`Tokens`,cost:`Cost`,iteration:`Iteration`,agents:`Agents`,tokensSub:`{{in}} in / {{out}} out`,iterationOf:`of {{max}}`,agentsRunning:`{{count}} running`},plan:`Plan`,planComplete:`{{pct}}% complete`,pinned:`Pinned`,quickSettings:`Quick settings`,autonomy:`Autonomy`,autonomyTitle:`Stop auto-running next steps. Toggle off to halt the agent's autonomous loop`,autonomyOptions:{off:`Off`,suggest:`Suggest`,auto:`Auto`,eternal:`Eternal`,"eternal-parallel":`Eternal Parallel`},yolo:`YOLO mode`,yoloTitle:`Bypass tool confirmation prompts`,refine:`Refine prompts`,refineTitle:`Rewrite prompts before sending`,sound:`Sound on completion`,soundTitle:`Play a soft chime when a run finishes`,sessionId:`session {{id}}`},h={status:{running:`running`,completed:`done`,failed:`failed`,timeout:`timeout`,stopped:`stopped`},leader:`leader`,providerModel:`Provider / Model`,elapsed:`Elapsed`,running:`running…`,iterations:`Iterations`,toolCalls:`Tool Calls`,cost:`Cost`,budgetExtensions:`Budget Extensions`,activity:`Activity`,contextWindow:`Context window`,tokensUsed:`{{used}} / {{max}} tokens`,toolRunning:`running…`,lastTool:`last tool`,error:`Error`,finalOutput:`Final Output`,copyOutput:`Copy output`,liveOutput:`Live Output`,waitingOutput:`Waiting for output…`,outputHint:`Output appears here as the agent streams text.`,toolLog:`Tool Log ({{count}} calls)`,fail:`fail`,moreTools:`+{{count}} more tools`,cardRunning:`running {{tool}}`,cardLastTool:`last: {{tool}}`,contextPercent:`Context {{pct}}%`,doneCount:`{{count}} done`,errCount:`{{count}} err`,statusRunning:`running`,statusDone:`done`,statusFailed:`failed`,statusTimeout:`timeout`,statusStopped:`stopped`,hittingLimitTitle:`⚡ hitting {{kind}} limit ({{used}}/{{limit}})`,budgetExt_one:`{{count}} Budget Extension`,budgetExt_other:`{{count}} Budget Extensions`,extendedTimes_one:`Agent extended its budget {{count}} time due to long-running tasks`,extendedTimes_other:`Agent extended its budget {{count}} times due to long-running tasks`,errorLabel:`Error`,failureReason:`Failure Reason`,failed:`Failed`},g={wsNotConnected:`WebSocket not connected`,noData:`No debug data received. The server may not support context debugging.`,title:`Context Breakdown`,windowUsage:`Window Usage`,contextMode:`Context Mode`,fetching:`Fetching context breakdown…`,systemPrompt:`System Prompt`,tools:`Tools`,messages:`Messages`,tokenAllocation:`Token Allocation`,systemTitle:`System: {{tokens}}`,toolsTitle:`Tools: {{tokens}}`,messagesTitle:`Messages: {{tokens}}`,system:`System`,toolBreakdown:`Tool Breakdown`,messagesSummary:`Messages ({{count}}) — {{total}} tok`,barWithTokens:`Context window: {{tokens}} / {{max}} tokens ({{pct}})`,barPct:`Context window: {{pct}}`,barClick:` — click for breakdown`},_={header:`✨ Refine Prompt`,autoSend:`auto-send in {{count}}s`,cancelTitle:`Cancel (Esc)`,editLabel:`Edit refined prompt:`,editPlaceholder:`Edit the refined prompt...`,useEdit:`Use Edit`,original:`Original`,refined:`Refined`,yourLanguage:`(your language)`,refinedTitle:`Click or press Enter to use this version`,copyToInputTitle:`Copy to input without sending`,english:`English`,englishTitle:`Press e to use English version`,hintRefined:`refined`,hintEnglish:`English`,hintOriginal:`original`,hintEdit:`edit`,hintRetry:`retry`,edit:`Edit`,useRefined:`Use Refined`,langOriginal:`Original`,langEnglish:`English`,languageTitle:`Switch default refine language — Original vs English`,yolo:`YOLO`,yoloTitle:`Bypass tool confirmation prompts`,refining:`Refining…`,sendAsIs:`Send as-is`,failedHeader:`Refinement failed`,retry:`Retry (more time)`,retryBetter:`Try again better`,retryFallback:`Retry with {{model}}`,pickModel:`Another model…`,pickModelTitle:`Retry refinement with another model`,pickModelHint:`Pick a provider/model to re-run this refinement on. Your session model stays unchanged.`,countdownHeader:`✨ Refining starts in…`,countdownYourMessage:`Your message`,countdownHint:`Refining starts in {{seconds}}s. Click "Send as-is" to skip.`,countdownStartNow:`Refine now`,countdownSendAsIs:`Send as-is`,cancelRefineSendOriginal:`Cancel & send original`},v={heading:`Specifications`,subtitle:`View and manage specification-driven development`,empty:`No specs found. Use {{command}} to create one.`,tasks:`Tasks ({{count}})`,doneCount:`{{count}} done`,runningCount:`{{count}} running`,pendingCount:`{{count}} pending`,runTitle:`Run this spec as a live multi-agent job`,run:`Run`,runAsSdd:`Run as SDD`,runAsSddTitle:`Start a multi-agent SDD parallel run (worktrees, verification, live board)`,runAsGoal:`Run as Goal`,runAsGoalTitle:`Start a phased Goal run from this spec's task columns`,list:`List`,graph:`Graph`,loadingTasks:`Loading tasks…`},y={heading:`F5 Resilience Verifier`,subtitle:`Confirms the latest active session, transcript, and UI state survive a page refresh. Open this view, then press F5 — every green row should remain green.`,recordProbe:`Record probe`,latestSession:`Latest active session`,restoredLocal:`Restored from localStorage`,sessionIdExtra:`session id: {{id}}`,noSessionYet:`no session has been started yet`,activePointer:`Active session pointer`,lastVisited:`lastVisitedAt timestamp`,never:`never`,persistedEnv:`Persisted environment`,transcriptRehydrate:`Chat transcript rehydration`,localTranscript:`Local transcript recovered`,messagesExtra:`{{count}} messages, {{queued}} queued`,noMessages:`0 messages`,noBleed:`No cross-session bleed`,bleedExtra:`bound={{bound}} vs active={{active}}`,transcriptBinds:`transcript binds to the active session`,uiWorkspace:`UI workspace`,noneValue:`(none)`,payloadSize:`localStorage payload (4 keys): {{count}} chars`,probeLog:`Probe log`,noProbes:`No probes yet — press the "Record probe" button at the top, or press F5 in this view, to record a rehydration check.`,simulatedF5:`simulated F5: re-running persist rehydrate`},b={status:{pending:`Pending`,in_progress:`In Progress`,review:`Review`,failed:`Failed`,completed:`Done`,queued:`Queued`,blocked:`Blocked`,cancelled:`Cancelled`},newTaskTitle:`New task`,newTaskPlaceholder:`Task title…`,addTask:`Add task`,empty:`No phases yet — start a Goal run to populate the board.`,summary:`{{phases}} phases · {{tasks}} tasks`,phases:`Phases`,statusTab:`Status`,dropHere:`Drop tasks here`,emptySpec:`No tasks in this spec yet.`,depGraphHeading:`Dependency Graph`,worktreePrefix:`worktree: {{branch}}`},x={trendUp:`Increasing`,trendDown:`Decreasing`,trendStable:`Stable`,heading:`Debug Dashboard`,subtitle:`Real-time monitoring for WrongStack WebUI`,refreshLabel:`Refresh:`,lastUpdated:`Last updated: {{time}}`,fetchFailed:`Failed to fetch metrics`,fileWatcher:`File Watcher`,watcherStatus:`Watcher Status`,running:`Running`,stopped:`Stopped`,activeProjects:`Active Projects`,projectsWatched:`Projects being watched`,fileChanges:`File Changes`,totalDetected:`Total detected`,filesProcessed:`Files Processed`,afterHash:`After hash filter`,broadcastsSent:`Broadcasts Sent`,toClients:`To WebUI clients`,debounceResets:`Debounce Resets`,rapidWrites:`Rapid successive writes`,avgDebounce:`Avg Debounce Delay`,actualDelay:`Actual delay applied`,totalDelay:`Total Delay`,sumDelays:`Sum of all delays`,browserPerf:`Browser Performance`,heapUsed:`Heap Used`,jsHeap:`JavaScript heap`,heapTotal:`Heap Total`,totalHeap:`Total heap size`,pageUptime:`Page Uptime`,sinceLoad:`Since page load`,rawData:`Raw Data`},S={allowlistTitle:`Model allowlist`,modelCount_one:`{{count}} model`,modelCount_other:`{{count}} models`,using:`Using`,noModelPicked:`(no model picked)`,clearAllowlist:`Clear allowlist`,clearAllowlistAria:`Clear saved allowlist for {{provider}}`,refresh:`Refresh from server`,refreshAria:`Refresh model list for {{provider}}`,probing:`Probing…`,searchPlaceholder:`Search models…`,use:`Use`,useModelAria:`Use model {{model}} for {{provider}}`},C={expandChip:`Expand {{label}}`,collapseChip:`Collapse {{label}}`,ahead:`{{count}} ahead`,behind:`{{count}} behind`,linesAdded:`{{count}} lines added`,linesDeleted:`{{count}} lines deleted`,untrackedFiles:`{{count}} untracked files`,customizeTitle:`Customize dock chips`,dockChips:`Dock chips`,noActiveGoal:`No active goal`,noActiveGoalDetail:`Start a goal from chat or the goal command.`,closeWorkspaceInspector:`Close workspace inspector`,goal:`Goal`,goalState:`Goal State`,goalStateDetail:`Active objective and progress`,fleet:`Fleet`,fleetDetail:`Live agent roster and activity`,work:`Work`,workDetail:`Todos, tasks, and plan`,worktrees:`Worktrees`,worktreesDetail:`Parallel branches and lanes`,collab:`Collab`,collabDetail:`Session participants and controls`,inspector:`Workspace inspector`,inspectorNamed:`{{name}} workspace inspector`,workspace:`Workspace`,workspaceDetails:`Workspace details`},w={leaderBadge:`LEADER`,iters:`Iters`,tools:`Tools`,activityBins:`Activity (12 bins)`,streamingOutput:`Streaming output`,recentTools:`Recent tools`,finalOutput:`Final output`,heading:`Agents Monitor`,prevAgent:`Previous agent`,nextAgent:`Next agent`,closeAria:`Close agents monitor`,hintPage:`←→ page`,hintNavigate:`↑↓ navigate list`,hintEsc:`Esc close`},T={resize:`Resize terminals`,labelSingular:`Terminal`,labelPlural:`Terminals`,projectShell:`Project shell`,maxTerminals:`Maximum {{count}} terminals`,newTerminal:`New terminal`,restart:`Restart active terminal`,closeAll:`Close all terminals`,closeDock:"Close terminal dock (Ctrl+`)",closeTab:`Close {{name}}`,processExited:`[process exited with code {{code}}]`},E={liveStream:`Live stream`,events_one:`{{count}} event`,events_other:`{{count}} events`,interruptTitle:`Cooperatively stop this agent at its next step (not a process kill)`,interrupt:`⏸ Interrupt`,interrupting:`…`,loading:`Loading session…`,done:`✓✓ done`,read:`✓ read`,delivered:`⏳ delivered`,agent:`Agent`,you:`You`,working:`{{name}} · working`,claude:`Claude`,priority:`Priority`,placeholder:`{{label}} → this session…`,send:`Send`,sendHint:`⌘/Ctrl+Enter to send · seen on the agent's next iteration`,msgType:{steerLabel:`🔄 Steer`,steerHint:`Adjust behavior mid-task`,askLabel:`❓ Ask`,askHint:`Question — expects a reply`,assignLabel:`📋 Assign`,assignHint:`A task to act on`,noteLabel:`💬 Note`,noteHint:`FYI, non-urgent`},sentRunning:`Delivered — the running agent sees it on its next step`,sentIdle:`Delivered — target is idle; appears in its mailbox, read when it next runs`,sentFailed:`Failed: {{error}}`,interruptReason:`Operator requested stop from Fleet HQ`,interruptSent:`Interrupt sent — agent stops at its next step (not a kill)`,interruptFailed:`Interrupt failed: {{error}}`},D={empty:`No side effects recorded yet.`,emptyHint:`Bash commands, package installs, and network requests will appear here.`,heading:`Side Effects`,exportTitle:`Export filtered side effects as CSV`,all:`All`,colTime:`Time`,colTool:`Tool`,colRisk:`Risk`,colDetail:`Detail`,colOutcome:`Outcome`},O={elapsedHm:`{{h}}h {{m}}m ago`,elapsedMs:`{{m}}m {{s}}s ago`,elapsedS:`{{s}}s ago`,heading:`Fleet Monitor`,clientsHeading:`Connected Clients`,terminal:`Terminal`,webui:`Web UI`,repl:`REPL`,totalConnected:`total connected`,mailQueue:`Mail Queue`,total:`Total`,open:`Open`,unread:`Unread`,agents:`Agents`,messagesSub:`messages`,uncompletedSub:`uncompleted`,waitingSub:`waiting`,ofTotal:`of {{count}} total`,agentRoster:`Agent Roster`,liveMailActivity:`Live Mail Activity`,noActivity:`No recent activity`,mailboxAgents:`Mailbox Agents`,noMailboxAgents:`No agents registered`,moreCount:`+{{count}} more`,agentFallback:`agent`,fleetAgents:`Fleet Agents`,noFleetAgents:`No fleet agents running`,iter:`iter`,mailType:{sent:`Sent`,delivered:`Delivered`,read:`Read`,completed:`Completed`}},k={status:{pending:`pending`,queued:`queued`,in_progress:`running`,blocked:`blocked`,review:`review`,failed:`failed`,completed:`done`,cancelled:`cancelled`},activityHeading:`Activity`,feedEmpty:`Nothing yet — events appear here as agents pick up and finish tasks.`,destroyTitle:`Destroy SDD project?`,destroyDesc:`This wipes the run and its work. It cannot be undone (the optional commit revert is history-preserving).`,stopRun:`Stop the run`,stopRunAgents_one:`Stop the run ({{count}} agent working)`,stopRunAgents_other:`Stop the run ({{count}} agents working)`,removeWorktreesAll:`Remove all git worktrees + wstack/ap/* branches — including un-merged work`,removeWorktreesCount_one:`Remove {{count}} git worktree + wstack/ap/* branches — including un-merged work`,removeWorktreesCount_other:`Remove {{count}} git worktrees + wstack/ap/* branches — including un-merged work`,deleteArtifacts:`Delete all SDD artifacts (specs, task graph, board, session)`,revertMerged_one:`Also revert {{count}} merged commit`,revertMerged_other:`Also revert {{count}} merged commits`,revertHint:`Adds revert commits (history preserved). Refused if the working tree is dirty.`,baseBranchFallback:`the base branch`,noteLeaveMerged:`Merged commits will be left on the base branch. Tick the box above to undo them too.`,noteAbandon:`Make sure you really want to abandon this run.`,destroying:`Destroying…`,destroyAll:`Destroy everything`,kanbanBacklog:`Backlog`,kanbanReady:`Ready`,kanbanRunning:`Running`,kanbanReview:`Review`,kanbanFailed:`Failed`,kanbanDone:`Done`,kanbanEmpty:`empty`},A={collapseToLines:`Collapse to first {{count}} lines`,showAllLines:`Show all {{total}} lines ({{more}} more)`,exitCode:`exit code:`,jsonLines:`JSON · {{count}} lines`,collapse:`collapse`,expand:`expand`},j={injectedHeading:`SAGE Memory Injected`,memoriesLabel_one:`{{count}} memory`,memoriesLabel_other:`{{count}} memories`},M={heading:`Design Studio — Gallery`,kitsCount:`{{count}} kits`,searchPlaceholder:`Search kits…`,stackTitle:`Stack for Use + Materialize`,wrote:`Wrote {{path}}`,materializeFailed:`Materialize failed: {{error}}`,verifyError:`Verify: {{error}}`,verifyOffPalette:`Verify: {{pct}}% on-palette — {{count}} off-palette in {{files}} file(s)`,verifyClean:`Verify: clean ✓ ({{files}} file(s) on-palette)`,writing:`Writing theme file…`,scanning:`Scanning UI files…`,active:`Active`,reapply:`Reapply`,use:`Use`,materializeTitle:`Write tokens to a {{stack}} theme file`,materialize:`Materialize`,verifyTitle:`Scan UI files for off-palette colors`,verify:`Verify`,colors:`Colors`},N={summary_one:`{{count}} phase · {{pct}}% complete`,summary_other:`{{count}} phases · {{pct}}% complete`,switchBoard:`Switch board`,boardsCount_one:`{{count}} board…`,boardsCount_other:`{{count}} boards…`,toggleAutonomousTitle:`Toggle autonomous mode`,autonomous:`Autonomous`,manual:`Manual`,resumeTitle:`Resume the run`,pauseTitle:`Pause the run`,resume:`Resume`,pause:`Pause`,stopTitle:`Stop the run — aborts in-flight agents immediately`,stop:`Stop`,newTitle:`Clear this board and start a new Goal run`,newLabel:`New`,revertConfirm:`Revert run's commits?`,revertTitle:`Undo this run — git-revert the commits it landed and remove its worktrees`,revert:`Revert`,goal:`Goal`,planning:`Planning phases…`,planningBody:`Your goal was received. WrongStack is breaking it into phases and tasks — the board appears here the moment the plan is ready.`,startHeading:`Start a Phase Plan`,startBody:`Describe what you want to build. WrongStack will plan phases and tasks, then execute them — watch and steer the run on the board.`,startPlaceholder:`e.g. Build a REST API for user management with Express and SQLite...`,isolateLabel:`Isolate each phase in its own git worktree`,startButton:`Start Goal`,ctrlHint:`Ctrl+Enter to start`,isolateOn:`phases run in isolated worktrees, squash-merged back`,isolateOff:`phases run directly on the current branch`,lanes:`Lanes`,graph:`Graph`,planningAck:`🚀 **Goal** — got it. Planning phases for your goal now…`,assess:{analyzing:`Analyzing goal scope…`,realistic:`✓ Scope looks realistic`,durationConcern:`⚠ Duration concern`,durationClaimed:`Claimed duration: {{duration}}`,recommendation:`Recommended: {{duration}}`,concerns:`Concerns`,analysisFailed:`Could not analyze goal scope`,override:`Start anyway`,overrideTitle:`Clear the assessment warning and enable the start button`,disableTitle:`This goal has an unrealistic duration assessment — use "Start anyway" to override`},multiBoardLabel:`Split into multiple kanban boards`,verifyTasksLabel:`Require verification for each task`,chimeraReviewLabel:`Enable chimera auto-review`},P={noObservers:`No live observers`,observerTitle:`Join as a read-only observer (Phase 1)`,observerRole:`observer`,annotatorTitle:`Join as an annotator — leave inline notes on tool calls (Phase 2)`,annotatorRole:`annotator`,controllerTitle:`Join as a controller — can pause the agent loop (Phase 3)`,controllerRole:`controller`,errorPrefix:`Collab: {{error}}`,dismiss:`dismiss`,observers_one:`{{count}} observer`,observers_other:`{{count}} observers`,annotationsTitle:`{{count}} open annotation(s) — annotators reviewing this session`,notes_one:`{{count}} note`,notes_other:`{{count}} notes`,pausedTitle:`Agent loop is paused — a controller is reviewing`,paused:`paused`,joinedTitle:`Joined {{time}}`,grantTitle:`Grant control — promote this participant to controller`,injectTitle:`Inject a synthetic result for an in-flight tool call`,inject:`Inject`,resumeTitle:`Resume the agent loop`,resume:`Resume`,pauseTitle:`Pause the agent before the next tool call`,pauseAgent:`Pause agent`,leaveTitle:`Leave the observer session`,leave:`Leave`,injectToolResult:`Inject tool result`,close:`close`,targetTool:`Target tool_use id`,targetPlaceholder:`pick an in-flight call or type a tool_use id`,toolFallback:`tool`,noPendingTools:`No in-flight tool calls — type a tool_use id to pre-queue, or pause the agent first.`,resultContent:`Result content`,resultPlaceholder:`Synthetic tool result fed to the agent in place of running the tool`,markError:`mark as error`,reasonPlaceholder:`reason (audit log)`,queueInjection:`Queue injection`,controllerInjection:`controller injection`},F={modePrefix:`mode:`,activeTitle:`Active mode`,heading:`Mode`,defaultName:`Default`,defaultDesc:`Standard agent behaviour`},I={clickTitle:`Click for per-turn cost breakdown`,heading:`Cost breakdown`,noPricing:`No pricing for the current model — cost figures are zero.`,noTurns:`No completed turns yet. Run a prompt to see per-turn cost here.`,topExpensive_one:`Top {{count}} expensive turn`,topExpensive_other:`Top {{count}} expensive turns`},L={runDefault:`Run default`,useRunDefault:`Use run default`,filterPlaceholder:`Filter models…`,loading:`Loading models…`,noMatch:`No match`},R={heading:`Switch model`,filterPlaceholder:`Filter providers and models…`,providerFilter:`Provider`,providerFilterAll:`All providers`,favoritesOnly:`Favorites only`,favoriteModel:`Favorite model`,noFavoritesConfigured:`No favorite models configured (add in Settings → Fallbacks).`,noFavoritesMatch:`No favorite models match the filter.`,noSavedProviders:`No saved providers — register a key in Settings first.`,noMatch:`No matching models`,active:`active`,laneSearchPlaceholder:`Search provider or model…`,laneFavoritesToggle:`Favorites`,laneKeyboardHint:`↑↓ · Enter · Esc`,laneInheritRow:`Inherit — routing / session`,laneInheritHint:`leave the lane empty; routing decides`,laneNoProviders:`No providers connected yet.`,laneLoadingModels:`Loading models…`,laneOnThisLane:`on this lane`,laneSessionModel:`session model`,laneBannerPrefix:`Lane #{{index}} is currently pinned to`,laneBannerSuffix:`. Picking a model replaces this pin.`,laneBannerTier:`tier:`,laneBannerProfile:`profile:`,lanePickerTitle:`Pick a model for subagent lane {{index}}`,lanePickerDescription:`Search across every provider/model you've connected, then pick one to pin to this lane.`},z={todos:`Todos`,tasks:`Tasks`,plan:`Plan`},B={toggleAria:`Toggle: {{content}}`,removeTitle:`Remove todo`,removeAria:`Remove "{{content}}"`,completedCount_one:`{{count}} completed`,completedCount_other:`{{count}} completed`,blockedBy:`Waiting on: {{work}}`},V={start:`Start`,complete:`Complete`,retry:`Retry`,assign:`Assign`,assignTitle:`Assign agent`,unassigned:`Unassigned`,statusPending:`Pending`,statusInProgress:`In Progress`,statusBlocked:`Blocked`,statusFailed:`Failed`,statusReview:`Review`,statusDone:`Done`,startTitle:`Start`,completeTitle:`Complete`,fail:`Fail`,failTitle:`Mark failed`,boardCount:`{{total}} tasks · {{done}} completed`},H={toolCalls_one:`{{count}} tool call`,toolCalls_other:`{{count}} tool calls`,succeeded_one:`{{count}} succeeded`,succeeded_other:`{{count}} succeeded`,failed_one:`{{count}} failed`,failed_other:`{{count}} failed`,running_one:`{{count}} running`,running_other:`{{count}} running`,filterLabel:`Filter tool calls`,filterAll:`All ({{count}})`,filterFailed:`Failed ({{count}})`,filterRunning:`Running ({{count}})`,noMatchingCalls:`No matching tool calls`},U={label:`{{tool}} overview`,titles:{file:`File operation`,filesystem:`File discovery`,command:`Command run`,vcs:`Version control`,verify:`Verification`,web:`Web activity`,workflow:`Work tracking`,clarify:`Decision request`,structured:`Structured data`,codebase:`Codebase analysis`,browser:`Browser activity`,e2e:`E2E plan`,language:`Language tooling`,packages:`Dependency operation`,observability:`Runtime logs`,security:`Security scan`,design:`Design system`,catalog:`Tool catalog`,generic:`Tool activity`},fields:{target:`Target`,change:`Change`,query:`Query`,scope:`Scope`,command:`Command`,directory:`Directory`,operation:`Operation`,filter:`Filter`,address:`Address`,mode:`Mode`,action:`Action`,item:`Item`,question:`Question`,choices:`Choices`,document:`Document`,subject:`Subject`,workspace:`Workspace`,packages:`Packages`,source:`Source`,rules:`Rules`,kit:`Kit`,request:`Request`,invocation:`Invocation`,input:`Input`},signals:{result:`Result`,analysis:`Analysis`,errors:`Errors`,warnings:`Warnings`,output:`Output`,findings:`Findings`,advisories:`Advisories`,http:`HTTP`,events:`Events`}},W={removeTitle:`Remove reference`,linesCount_one:`{{count}} line`,linesCount_other:`{{count}} lines`},G={statusOpen:`Open`,statusInProgress:`In Progress`,statusDone:`Done`,startTitle:`Start`,doneTitle:`Mark done`,reopenTitle:`Reopen`,reopen:`Reopen`},K={heading:`@ Files`,noMatch:`No files match "{{query}}"`,searching:`Searching project…`,selectInsertEscDismiss:`↑/↓ select · ↵ insert · Esc dismiss`},q={dismiss:`Dismiss`},J={placeholder:`Search in chat…`,prevHit:`Previous hit`,nextHit:`Next hit`,close:`Close (Esc)`},Y={statusPending:`Pending`,statusReady:`Ready`,statusRunning:`Running`,statusPaused:`Paused`,statusCompleted:`Completed`,statusFailed:`Failed`,statusSkipped:`Skipped`,heading:`Phases`,autonomousOn:`● Autonomous`,autonomousOff:`○ Manual`,autonomousOnTitle:`Autonomous mode active — click to pause`,autonomousOffTitle:`Manual mode — click to enable autonomous`,overallProgress:`Overall Progress`,tasksSuffix:`{{done}}/{{total}} tasks`,agentsSuffix_one:`{{count}} agent`,agentsSuffix_other:`{{count}} agents`},X={triggerTitle:`Context-window mode`,ctxPrefix:`ctx:`,opsHeading:`Context Operations`,compactNow:`Compact Now`,compactNowDesc:`Elide old tool output`,compactAggressive:`Compact Aggressive`,compactAggressiveDesc:`Maximum elision now`,repairContext:`Repair Context`,repairDesc:`Fix orphan tool-use blocks`,debugContext:`Debug Context`,debugDesc:`Size breakdown per section`,windowHeading:`Context Window`,keepElide:`keep {{k}} recent · elide {{t}}+ tokens`,fallbackName:`Balanced`,fallbackDesc:`Default rolling compaction`},Z={kindAssistant:`Assistant`,kindThinking:`Thinking`,kindToolCall:`Tool call`,kindToolResult:`Tool result`,kindError:`Error`,kindStatus:`Status`,kindSystem:`System`,title:`Chat history`,copyTitle:`Copy agent chat history`,empty:`No chat history for this agent yet.`,taskLabel:`Task`,taskChars:`{{count}} chars`,taskExpand:`Show`,taskExpandTitle:`Show full task brief`,taskModalTitle:`Task brief`,taskModalDescription:`The complete task this agent was spawned to run.`,readOnly:`Read-only`,returnToLeader:`Return to chat`},Q={heading:`Autonomy Mode`,titlePrefix:`Autonomy: {{label}}`,descOff:`Full manual control — agent waits for your input.`,descSuggest:`Agent suggests next steps but waits for approval.`,descAuto:`Agent auto-proceeds after brief confirmation delay.`,descEternal:`Agent runs autonomously until goal is complete.`,descEternalParallel:`Multi-agent autonomous execution — fleet mode.`,labelOff:`Off`,labelSuggest:`Suggest`,labelAuto:`Auto`,labelEternal:`Eternal`,labelEternalParallel:`Eternal Parallel`},$={heading:`Message Queue`,subtitle:`{{count}} queued · messages sent before the agent finishes`,btwTitle:`By-the-way — sent as follow-up without interrupting the running agent`,steerTitle:`Steer — interrupts the running agent and redirects it with this message`,queueTitle:`Queued — held until the current agent run completes, then sent in order`,sortNewestTitle:`Sorted newest first — click to sort oldest first`,sortOldestTitle:`Sorted oldest first — click to sort newest first`,newest:`Newest`,oldest:`Oldest`,clear:`Clear`,clearTitle:`Clear all queued messages`,closeTitle:`Close`,emptyTitle:`Queue is empty`,emptyBody:`Use the btw / steer / add queue buttons beside the input to add messages. Queued items are sent in order when the current agent run completes.`,removeTitle:`Remove from queue`,clearDispatchedTitle:`Clear queued messages — already-sent notes cannot be retracted`,dispatchedTitle:`Already sent to the agent`,dispatchedLabel:`Sent`,footer:`Messages are sent in arrival order when the current agent run completes. Use the sort toggle to view newest-first.`},ee={heading:`Session Checkpoints`,countSuffix_one:`{{count}} checkpoint`,countSuffix_other:`{{count}} checkpoints`,description:`Rewind the session to any checkpoint. Messages and file changes revert to that point — the LLM continues from there as if nothing happened after.`,emptyTitle:`No checkpoints yet`,emptyBody:`Checkpoints are automatically created each time you send a message. Send a few messages and come back.`,latest:`latest`,msgSuffix_one:`{{count}} msg`,msgSuffix_other:`{{count}} msgs`,footerPre:`Click any checkpoint to rewind`,footerPost:`to close`},te={statusActive:`Active`,statusPaused:`Paused`,statusDone:`Done`,statusFailed:`Failed`,statusAbandoned:`Abandoned`,heading:`Goal`,refined:`Refined`,progress:`Progress`,iterations:`iterations`,deliverables:`Deliverables`,recentActivity:`Recent Activity`},ne={cleanTitle_one:`Clean {{count}} orphaned worktree?`,cleanTitle_other:`Clean {{count}} orphaned worktrees?`,cleanMessage:`Force-removes every leftover git worktree + wstack/ap branch from previous runs. Un-merged work in them is discarded.`,cleanConfirm:`Clean orphans`,orphanCount_one:`{{count}} orphaned worktree from previous runs`,orphanCount_other:`{{count}} orphaned worktrees from previous runs`,andMore:`…and {{count}} more`,cleanButtonTitle:`Force-remove all orphaned worktrees + branches`,removed_one:`✓ Removed {{count}} orphaned worktree.`,removed_other:`✓ Removed {{count}} orphaned worktrees.`,cleanupFailed:`cleanup failed`,lanesHeading:`Worktrees`,base:`base`,isolatedCount_one:`{{count}} isolated`,isolatedCount_other:`{{count}} isolated`,statusAllocating:`allocating`,statusActive:`active`,statusCommitting:`committing`,statusMerging:`merging`,statusMerged:`merged`,statusConflict:`conflict`,statusFailed:`failed`,conflictBadge:`CONFLICT`,graphAria:`Worktree branch graph off {{base}}`,mergedLabel:`✓ merged → {{base}}`},re={heading:`Running Processes`,subtitle:`{{active}} active · {{total}} total`,killAll:`Kill All`,emptyTitle:`No processes tracked`,emptyBody:`Processes appear here when the agent runs bash or exec tools. Active processes show a pulsing LED.`,pidLabel:`PID {{pid}}`,protected:`protected`,protectedTitle:`Protected — survives kill/killAll`,background:`background`,backgroundTitle:`Detached job — survives CLI/WebUI shutdown`,confirmKillBackground:`Terminate detached background process {{pid}}?`,confirmKillAll:`Terminate all {{count}} running processes?`,killAllTitle:`Terminate All Processes`,killTitle:`Kill PID {{pid}}`},ie={tooLarge:`Diff omitted (file too large to render inline).`},ae={placeholder:`Add a fallback model…`,emptyHint:`Tried in order when the primary model rate-limits or stalls.`,moveUp:`Move up`,moveDown:`Move down`},oe={loading:`Loading sessions...`,apiUnavailable:`Session API unavailable:`,empty:`No live sessions. Open another wstack instance to see it here.`,heading:`Live Sessions ({{count}})`,autoRefresh:`auto-refresh every 5s`,pidLabel:`PID {{pid}}`,agentMeta:`{{iter}} iter · {{tools}} tools · {{ago}}`,andMore:`... and {{count}} more`,noAgents:`No agents`},se={applyTitle:`Write the edited version back to disk`,applying:`Applying…`,applied:`Applied`,apply:`Apply`},ce={showStack_one:`Show stack trace ({{count}} frame)`,showStack_other:`Show stack trace ({{count}} frames)`,hideStack_one:`Hide stack trace ({{count}} frame)`,hideStack_other:`Hide stack trace ({{count}} frames)`},le={liveHeading:`Live`,clients:`Clients`,agents:`Agents`,model:`Model`,mode:`Mode`,toolCalls:`Tool calls`,displayHeading:`Display`,statsHud:`Stats HUD`,legends:`Legends`,minimap:`Minimap`,zoomControls:`Zoom controls`,animateWires:`Animate wires`,backgroundHeading:`Background`,waitThresholdHeading:`Waiting threshold`,waitThresholdHint:`Flag a live desk as waiting after this much silence`,bgDots:`Dots`,bgLines:`Lines`,bgCross:`Cross`,bgNone:`None`},ue={noParams:`(no params)`,itemCount_one:`{{count}} item`,itemCount_other:`{{count}} items`,keyCount_one:`{{count}} key`,keyCount_other:`{{count}} keys`},de={roleYou:`You`,roleTool:`Tool`,roleThinking:`Thinking`,roleAssistant:`Assistant`,inputLabel:`Input`,downloadTitle:`Download as file`,empty:`(empty)`,hideDetails:`Hide details`,showDetails:`Show details`,showDetailsLines_one:`Show details ({{count}} line)`,showDetailsLines_other:`Show details ({{count}} lines)`,editHint:`⌘/Ctrl+Enter to save · Esc to cancel`,saveResend:`Save & resend`,thinkingProcess:`Model Reasoning`,thinkingMeta:`iter {{iter}} · {{dur}} · {{lines}}`,replay:`replay`,linesSuffix_one:`{{count}} line`,linesSuffix_other:`{{count}} lines`,copyLog:`Copy log`,showFullLog:`Show full log`,typing:`Typing…`,noContent:`No content`,imageNotRetained:`Image preview not kept after refresh`,failedToSend:`⚠ Failed to send`,autoPaused:`⚠️ _Auto-proceed paused — maximum consecutive automatic turns reached. Type anything to continue (autonomy stays on)._`,autoLoopHalted:`⚠️ _Auto-submit halted because the same prompt repeated. Autonomy remains on; enter a new prompt to reset the loop guard._`,rsIterations:`Iterations: {{n}}`,rsTools:`Tool calls: {{n}}`,rsElapsed:`Elapsed: {{s}}`,rsCost:`Cost: {{c}}`,useInput:`Input: {{n}}`,useOutput:`Output: {{n}}`,useCacheRead:`Cache read: {{n}}`,useCost:`Cost: {{c}}`,renderedLabel:`Rendered`,rawLabel:`Raw`,showRenderedTitle:`Show rendered markdown`,showRawTitle:`Show raw markdown source`,editTitle:`Edit & resend this prompt`,editLabel:`Edit`,unpinTitle:`Unpin`,pinTitle:`Pin this answer`,pinnedLabel:`Pinned`,pinLabel:`Pin`,regenerateTitle:`Regenerate this response`,retryLabel:`Retry`,toolRunning:`Running`,toolFailed:`Failed`,toolSucceeded:`Succeeded`,details:`Details`},fe={toolFallback:`tool`,toolFailed:`Tool failed`},pe={heading:`Keyboard shortcuts`,footerPre:`Press`,footerPost:`any time to reopen this list.`,sectionGlobal:`Global`,sectionTuiParity:`TUI Panel Parity`,sectionFleet:`Fleet & Agents`,sectionChatInput:`Chat input`,sectionChat:`Chat`,sectionChatNav:`Chat navigation (when not typing)`,dCommandPalette:`Open command palette`,dShowOverlay:`Show this shortcuts overlay`,dToggleSidebar:`Toggle sidebar`,dOpenPanel:`Open side panel (Session, Agents, History, Files, Changes, Mailbox, Skills)`,dDesignStudio:`Open Design Studio side panel`,dWorktrees:`Open Worktrees tab in Changes panel`,dSettings:`Open Settings`,dMemory:`Open Memory`,dFocusInput:`Focus the message input`,dSessionPanel:`Session panel`,dFleetOverlay:`Fleet monitor overlay`,dAgentsOverlay:`Agents monitor overlay`,dWorktreeMonitor:`Worktree monitor`,dPlanPanel:`Plan panel`,dTodosPanel:`Todos panel`,dQueuePanel:`Queue panel`,dProcessMonitor:`Process monitor`,dGoalPanel:`Goal panel`,dSessionsDashboard:`Sessions dashboard`,dOfficeMap:`Office map (Agent Roster tab)`,dDockPicker:`Dock chip picker`,dOpenFleet:`Open Fleet Monitor overlay`,dOpenAgents:`Open Agents Monitor overlay`,dNavigateAgents:`Navigate agents in monitor`,dSelectAgent:`Select focused agent`,dCloseOverlay:`Close active overlay`,dSendMessage:`Send message`,dNewline:`Insert a newline`,dRecallPrev:`Recall previous prompt (in empty input)`,dRecallNext:`Recall next prompt`,dSlashPopup:`Open slash command popup`,dAutocomplete:`Autocomplete highlighted command`,dDismissPopup:`Dismiss popup / clear input`,dSearchChat:`Search within current chat`,dClearContext:`Clear context (same as /clear)`,dNewSession:`Start a new session (same as /new)`,dExportMarkdown:`Export chat as markdown`,dModelSwitcher:`Quick model switcher overlay`,dCompactDensity:`Toggle compact UI density`,dAbortRun:`Abort the current run (when running)`,dFocusNext:`Focus next message (alias: ↓)`,dFocusPrev:`Focus previous message (alias: ↑)`,dJumpFirst:`Jump to first message`,dJumpLast:`Jump to last message`,dCopyFocused:`Copy focused message text`,dClearFocused:`Clear focused message`},me={titleFallback:`Live SDD Board`,defaultModelTitle:`Run-level default worker model (per-task overrides take precedence)`,graphLabel:`Graph`,kanbanLabel:`Kanban`,retryAllTitle:`Requeue every failed task to pending`,retryFailed:`Retry failed ({{count}})`,resume:`Resume`,pause:`Pause`,stop:`Stop`,cleanTitle:`Remove the run's git worktrees + wstack/ap branches`,cleanWorktrees:`Clean worktrees`,rollbackTitle:`Revert {{count}} merged commit(s) on {{base}}`,rollback:`Rollback ({{count}})`,stopping:`Stopping…`,destroying:`Destroying…`,destroyTitle:`Stop, remove all worktrees, optionally revert merged commits, and delete the SDD project`,destroy:`Destroy`,statDone:`done`,statRunning:`running`,statFailed:`failed`,statWave:`wave`,statElapsed:`elapsed`,noActiveWorkers:`no active workers`,deadlock:`Deadlock — tasks blocked by failed work:`,noRunTitle:`No active SDD run.`,noRunBody:`Start one from the New SDD Project wizard, or via /sdd execute in the CLI — agents appear here live, each working an isolated worktree.`,clickTaskHint:`click a task for details`,lcClean:`Clean`,lcRollback:`Rollback`,lcDestroy:`Destroy`,lcFailed:`{{op}} failed: {{reason}}`,lcUnknownError:`unknown error`,lcWorktrees_one:`{{count}} worktree removed`,lcWorktrees_other:`{{count}} worktrees removed`,lcCommits_one:`{{count}} commit reverted`,lcCommits_other:`{{count}} commits reverted`,lcDeleted:`deleted {{items}}`,lcNothing:`nothing to do`,lcNote:`{{op}}: {{body}} — note: {{reason}}`,lcOk:`{{op}}: {{body}}`},he={backTitle:`Back to activity`,expandTitle:`Expand task details`,collapseTitle:`Collapse task details`,eventLog:`Task event log`,newestFirst:`newest first`,noEvents:`No task activity has been recorded yet.`,workingOn:`working on this task`,assigned:`assigned`,metaPriority:`Priority`,metaType:`Type`,metaDuration:`Duration`,metaElapsed:`Elapsed`,metaRetries:`Retries`,metaWorktree:`Worktree`,workerModel:`Worker model`,runDefault:`run default: {{model}}`,runDefaultPlaceholder:`Run default`,runDefaultPlaceholderModel:`Run default ({{model}})`,verificationCmd:`Verification command`,gatesCompletion:`gates completion (exit 0)`,verifyPlaceholder:`e.g. pnpm vitest run path/to/file`,addVerify:`+ Add verification command`,description:`Description`,timeline:`Timeline`,dependsOn:`Depends on`,blocks:`Blocks`,newWorkerPlaceholder:`New worker name…`,confirmStop:`Stop this running task?`,confirmDelete:`Delete this task from the run?`,retryTitle:`Requeue this task to pending`,reassign:`Reassign`,stopTitle:`Abort the worker on this task`,splitTitle:`Split this task into sub-tasks delegated to separate workers`,split:`Split`,splitHint:`One sub-task per line — Title :: description (description optional)`,splitPlaceholder:`Write the data layer :: add the repository
|
|
5
5
|
Wire the UI`,splitInto:`Split into sub-tasks`,deleteTitle:`Remove this not-started task from the run`},ge={phaseStart:`Start`,phaseInterview:`Interview`,phaseSpecReview:`Spec Review`,phasePlanning:`Planning`,phaseTaskReview:`Task Review`,phaseRunning:`Running`,phaseDone:`Done`,titleFallback:`New SDD Project`,questionsSuffix:`{{cur}}/{{max}} questions`,tasksSuffix:`{{count}} tasks`,runCfgTitle:`Run config — default model + fallback chain`,modelsLabel:`Models`,startRun:`Start Run`,defaultWorkerModel:`Default worker model`,leaderDefaultPlaceholder:`Leader / session default`,useSessionDefault:`Use session default`,fallbackChain:`Fallback chain`,appliesToAll:`Applies to every task. Override per-task from the live board after the run starts.`,parallelAgents:`Parallel agents`,isolateWorktrees:`Isolate in git worktrees`,worktreeOn:`Each task runs in its own worktree, squash-merged back on completion.`,worktreeOff:`Tasks run directly on the current branch (no isolation).`,planDecompose:`Auto-split large tasks`,planDecomposeOn:`Before dispatch, split tasks the atomicity engine flags as too large.`,planDecomposeOff:`Keep the approved task graph as-is (still split at runtime if a task fails).`,goalPrompt:`What do you want to build?`,goalPlaceholder:`e.g. Add OAuth login (Google + GitHub) with session management`,startingInterview:`Starting interview…`,startInterview:`Start Interview`,introBody:`An isolated agent interviews you to build a spec, decomposes it into a dependency-ordered task graph, then a real multi-agent fleet executes it — watch live on the board. If you refresh or restart, the interview resumes automatically.`,taskGraphSummary:`Task graph · {{count}} tasks, dependency-ordered`,dragToExplore:`drag to explore`,show:`show`,goalLabel:`Goal`,implementationPlan:`Implementation plan`,approveSpec:`Approve spec → plan implementation`,approveTasks:`Approve tasks`,approvePlan:`Approve plan`,backToQuestions:`Back to Questions`,backToQuestionsTitle:`Reject spec and return to questioning`,backToSpec:`Back to Spec`,backToSpecTitle:`Reject plan and return to spec review`,rewindToPhaseTitle:`Return to this phase to revise`,quickBestPractice:`Use Best Practice`,quickBestPracticeDirective:`Use standard industry best practices for this.`,generateSpecNow:`Generate Spec Now`,generateSpecNowTitle:`Generate the specification now with gathered requirements`,interviewProgress:`Interview Progress`,questionOf:`Question {{current}} of {{max}}`,minRequiredMet:`Minimum questions met ✓`,minRequiredRemaining:`{{count}} more required`,answerPlaceholder:`Answer the question…`,changePlaceholder:`Request a change…`,resumeBanner:`Resumed interview from a previous session — continue where you left off.`,openLiveBoard:`Open live board`,discardInterview:`Discard & start over`,discardTitle:`Abandon this interview and clear the saved session`},_e={emptyDir:`empty`,loadFailed:`Failed to load files: {{error}}`,expandAllTitle:`Expand all directories`,expandAll:`Expand all`,collapseAllTitle:`Collapse all directories`,collapse:`Collapse`,folders_one:`{{count}} folder`,folders_other:`{{count}} folders`,currentDirTitle:`Current directory: {{path}}`,navigateToTitle:`Navigate to {{path}}`,filesSuffix_one:`{{count}} file`,filesSuffix_other:`{{count}} files`,goToDir:`go to dir`,navigateParentTitle:`Navigate to parent directory of {{path}}`,parentDirectory:`parent directory`,noFiles:`No files found`,copyAbsPath:`Copy absolute path`,copyRelPath:`Copy relative path`,openInTerminal:`Open in terminal`,openInFileManager:`Open in file manager`,mentionInChat:`Mention in chat`,copyPath:`Copy path`,newFile:`New File`,newFolder:`New Folder`,newFileTitle:`Create new file`,newFolderTitle:`Create new folder`,newFileNamePlaceholder:`file.ts`,newFolderNamePlaceholder:`folder`,delete:`Delete`,confirmDeleteDir:`Delete "{{name}}" and all its contents?`,confirmDeleteFile:`Delete file "{{name}}"? This cannot be undone.`,rename:`Rename`,renameTitle:`Enter new name`,sortByName:`Name`,sortByNameTitle:`Sort by name (default)`,sortBySize:`Size`,sortBySizeTitle:`Sort by file size (largest first)`,search:`Search files`,searchPlaceholder:`Filter…`},ve={sendSelectionAction:`Send selection to chat`,noFilesOpen:`No files open`,selectToEdit:`Select a file from the explorer to start editing`,sendSelectedTitle:`Send selected lines to chat`,mentionFileTitle:`Mention this file in chat`,sendToChat:`Send to chat`,mentionFile:`Mention file`,loadingEditor:`Loading editor…`,selectTab:`Select a tab to view its content`},ye={title:`File activity`,overview:`Overview`,changes:`Changes`,context:`Context`,logs:`Logs`,memory:`Memory`,lines:`lines`,resizeHint:`Drag to resize · double-click to reset`,refresh:`Refresh file evidence`,evidenceCount_one:`{{count}} event`,evidenceCount_other:`{{count}} events`,mutations30m:`Edits · 30m`,sessions:`Sessions`,actors:`Actors`,linkedWork:`Work links`,lifetimeTitle:`All history`,lifetimeChanges:`changes`,lifetimeSessions:`sessions`,lifetimeTasks:`tasks`,lifetimeBoards:`boards`,lifetimeSince:`since {{date}}`,lifetimeTools:`via {{tools}}`,workLinks:`Kanban / todo`,recentActivity:`Recent file activity`,events:`events`,noEvidence:`No activity has been attributed to this file yet.`,noSessions:`No session attribution yet.`,noActors:`No actor attribution yet.`,noWorkLinks:`No Kanban, SDD or todo link recorded.`,taskOrTodo:`Task / todo`,loadingEvidence:`Loading file evidence…`,gitToBuffer:`Git HEAD → current Monaco buffer`,savedToBuffer:`Last saved version → current Monaco buffer`,unsaved:`unsaved buffer`,level:{quiet:`quiet`,active:`active`,churn:`high churn`},analysisTitle:{quiet:`No recent edit churn`,active:`This file is being changed`,churn:`Repeated edits detected`},analysisBody:{quiet:`No attributed mutations were recorded in the last 30 minutes.`,active:`{{mutations}} mutations across {{actors}} actors and {{sessions}} sessions in the last 30 minutes.`,churn:`High churn: {{mutations}} mutations across {{actors}} actors and {{sessions}} sessions. Check overlapping work before the next edit.`}},be={loading:`Loading analytics…`,heading:`Analytics Dashboard`,autoRefresh:`auto-refresh every 10s`,liveSessions:`Live Sessions`,agents:`Agents`,agentsActive:`{{count}} active`,totalEvents:`Total Events`,categoriesSub:`{{count}} categories`,toolCalls:`Tool Calls`,iterationsSub:`{{count}} iterations`,sessionCost:`Session Cost`,tokensSub:`{{input}} in / {{output}} out`,sessionDuration:`Session Duration`,messagesSub:`{{count}} messages`,eventsByCategory:`Events by Category`,noEvents:`No events recorded yet.`,topEvents:`Top Events`,activeSessionUsage:`Active Session Usage`,provider:`Provider`,model:`Model`,inputTokens:`Input Tokens`,outputTokens:`Output Tokens`,cacheRatio:`Cache Ratio`,filesRead:`Files Read`,noSession:`No active session or waiting for data…`,healthErrors:`Health & Errors`,errorEvents:`Error events`,warningEvents:`Warning events`,cacheHitRate:`Cache hit rate`,totalCategories:`Total categories`,waitingData:`Waiting for data…`,recentEvents:`Recent Events`,noRecentEvents:`No recent events. Interact with the UI to generate events.`},xe={heading:`Prompt library`,searchPlaceholder:`Search prompts…`,newPrompt:`+ New prompt`,all:`All`,recent:`🕘 Recent`,favorites:`★ Favorites`,noMatch:`No prompts match.`,newPromptHeading:`New prompt`,titlePlaceholder:`Title *`,descPlaceholder:`One-line description`,categoryPlaceholder:`Category`,tagsPlaceholder:`tags, comma, separated`,contentPlaceholder:`Prompt content * — use {{name}} for variables`,variables:`Variables`,addVar:`+ var`,varNamePlaceholder:`name`,varDescPlaceholder:`description`,removeVarTitle:`Remove variable`,required:`required`,multiline:`multiline`,enumPlaceholder:`enum: a, b, c`,savePrompt:`Save prompt`,saveFailed:`Could not save the prompt.`,titleContentRequired:`Title and content are required.`,toggleFavoriteTitle:`Toggle favorite`,selectOption:`— select —`,fillMissing:`Fill: {{missing}}`,insertIntoChat:`Insert into chat`,selectPromptHint:`Select a prompt to preview and insert.`},Se={scopeProject:`Project`,scopeGlobal:`Global`,scopeBundled:`Bundled`,timeoutError:`Request timed out. Please try again.`,updateFailed:`Update failed`,saveFailed:`Save failed`,uninstallFailed:`Uninstall failed`,noSkillSelected:`No skill selected`,selectSkillHint:`Select a skill from the sidebar to view its documentation`,goToChat:`Go to chat`,openSourceRepo:`Open source repo`,copySourceUrl:`Copy source URL`,updatedLabel:`↑ Updated: {{list}}`,upToDateLabel:`— Up to date: {{list}}`,errorsLabel:`✗ {{list}}`,checkUpdatesTitle:`Check for updates`,exportTitle:`Export skill as .md`,editTitle:`Edit skill`,uninstallTitle:`Uninstall skill`,closeTitle:`Close and go to chat`,backTitle:`Go back`,forwardTitle:`Go forward`,relatedFiles:`Related Files`,references:`References`,goToSkillTitle:`Go to {{name}}`,loadingContent:`Loading skill content…`,editingLabel:`Editing {{name}}`,editStats:`{{lines}} lines · {{words}} words · {{chars}} chars`,charsWarningFmt:`⚠ {{used}} MB / {{limit}} MB`,draftSaved:`Draft saved`,draftRestored:`Draft restored`,discardDraft:`Discard draft`,splitViewTitle:`Split view`,hidePreviewTitle:`Hide preview`,contentPlaceholder:`Skill content (markdown)...`,loadFailed:`Failed to load skill content`,noContent:`No skill content available`,uninstallSkillHeading:`Uninstall Skill`,uninstallConfirm:`Uninstall {{name}}?`,uninstallRemovePath:`This will remove the skill from {{path}} and cannot be undone.`,uninstallAction:`Uninstall`},Ce={sessionStats:`Session Stats`,clients:`Clients`,input:`Input`,output:`Output`,cost:`Cost`,agentsSuffix:`agents`,upPrefix:`up {{time}}`,webuiClient:`WebUI Client`,disconnected:`Disconnected`,connected:`Connected`,tuiClient:`TUI Client`,terminal:`Terminal`,repl:`REPL`,coordinator:`COORDINATOR`,fleetSummary:`Fleet summary`,toolCallsLabel:`Tool calls`,tokensLabel:`Tokens`,coordinatingFleet:`Coordinating fleet`,donePrefix:`✓ done ·`,failedPrefix:`✕ failed ·`,seenPrefix:`seen {{time}}`,availableDesk:`Available desk`,mailboxHub:`Mailbox Hub`,unreadSuffix_one:`{{count}} unread`,unreadSuffix_other:`{{count}} unread`,allClear:`All clear`,total:`Total`,unreadLabel:`Unread`,liveActivity:`Live activity`,waitingActivity:`Waiting for activity…`,now:`now`,fleetHq:`WrongStack Fleet HQ`,live:`LIVE`,legendStatus:`Status`,legendActive:`Active`,legendIdle:`Idle`,legendError:`Error`,legendConnections:`Connections`,legendMail:`Mail`,legendTask:`Task`,legendStatusConn:`Status`,arrange:`Arrange`,arrangeTitle:`Arrange nodes to fit the available canvas`,feed:`Feed`,feedTitle:`Toggle the live activity feed`,broadcast:`Broadcast`,broadcastTitle:`Broadcast a message to every live session in this project`,broadcastToAll:`Broadcast to all sessions`,broadcastPlaceholder:`Message every live agent in this project…`,broadcastSendHint:`⌘/Ctrl+Enter to send`,openFullView:`Open full operation view`,rowStatus:`Status`,rowModel:`Model`,rowTool:`Tool`,rowIterations:`Iterations`,rowToolCalls:`Tool calls`,rowTokensIn:`Tokens in`,rowTokensOut:`Tokens out`,rowTokensTotal:`Tokens total`,rowContext:`Context`,rowCost:`Cost`,rowLastSeen:`Last seen`,rowSurface:`Surface`,rowBranch:`Branch`,rowPid:`PID`,rowDir:`Dir`,rowAgents:`Agents`,rowUptime:`Uptime`,rowConnections:`Connections`,rowTotalMessages:`Total messages`,rowUnread:`Unread`,recent:`Recent`,noSubject:`(no subject)`,fullOperationStream:`Full operation stream`,closeEsc:`Close (Esc)`,idleDesk:`Idle desk`,fleetHqLabel:`Fleet HQ`,clientsSuffix_one:`{{count}} client`,clientsSuffix_other:`{{count}} clients`,taskFallback:`task`,controlLabel:`control`},we={installTitle:`Install skill`,createTitle:`Create skill`,exportTitle:`Export all skills as .zip`,checkUpdatesTitle:`Check for updates (all skills)`,searchPlaceholder:`Search skills…`,loading:`Loading…`,noSkills:`No skills installed`,noMatch:`No skills match filter`,noDescription:`No description`,scopeForeign:`Foreign`,installHeading:`Install Skill`,installHint:`Enter a GitHub repository reference (owner/repo) or full URL.`,installPlaceholder:`e.g. wrongstack/skill-name or https://github.com/owner/repo`,installScope:`Install scope:`,installBtn:`Install`,installedMsg:`Installed: {{names}}`,installFailed:`Installation failed`,createHeading:`Create Skill`,createHint:`Scaffold a new skill. The first line is the trigger; additional lines form the description.`,nameLabel:`Name`,namePlaceholder:`e.g. my-new-skill`,descLabel:`Description / Trigger`,descPlaceholder:`Use this skill when <trigger situation>.
|
|
6
|
-
Triggers: user says "keyword", "another".`,saveIn:`Save in:`,createBtn:`Create Skill`,createdMsg:`Created: {{name}}`,createFailed:`Creation failed`},Te={noEvents:`No events yet.`},Ee={pickHint:`Pick a kit — the agent will adhere to it.`,gallery:`Gallery`,galleryTitle:`Open live preview gallery`,stackTitle:`Target stack`,loading:`Loading kits…`,notFound:`No design kits found.`,bestFor:`Best for:`,light:`Light`,dark:`Dark`,tune:`Tune`,font:`Font`,set:`Set`,spaceGrotesk:`Space Grotesk…`,aaHeading:`Aa Heading`,theQuickBrownFoxJumpsOver:`The quick brown fox jumps over the lazy dog.`,primary:`Primary`,ghost:`Ghost`,badge:`Badge`,inputField:`Input field…`,radius:`Radius`,density:`Density`,motion:`Motion`},De={detached:`(detached)`,count_one:`{{count}} worktree`,count_other:`{{count}} worktrees`,baseSuffix:` · base {{base}}`,baseLabel:`base`,cleanOrphans:`Clean orphans`,cleanOrphansTitle:`Remove all orphaned worktrees`,liveBusyTitle:`A run is live — stop it first`,rescanTitle:`Rescan`,removed_one:`Removed {{count}} worktree.`,removed_other:`Removed {{count}} worktrees.`,failed:`Failed`,mergedIntoBase:`Merged {{branch}} into base.`,conflictMerge:`Conflict merging {{branch}}: {{files}}`,seeGit:`see git`,mergeFailed:`Merge failed: {{reason}}`,unknownReason:`unknown`,mergeConfirmTitle:`Merge {{branch}} into {{base}}?`,mergeConfirmMsg:`Squash-merges this branch onto the base branch. Aborts cleanly if it conflicts.`,mergeAction:`Merge`,removeConfirmTitle:`Remove {{branch}}?`,removeConfirmMsg:`Force-removes the worktree checkout and deletes its branch. Un-merged work is discarded.`,empty:`No worktrees.`,emptyHint:`SDD / Goal runs create isolated worktrees here. Orphans from crashed runs show up too.`,actOpenTerm:`Open in terminal`,actOpenFolder:`Open folder`,actViewChanges:`View changes`,actMerge:`Merge to base`,actRemove:`Remove / discard`,live:`live`,noUncommitted:`No uncommitted changes`,commitsAhead_one:`{{count}} commit ahead`,commitsAhead_other:`{{count}} commits ahead`,more:`…{{count}} more`},Oe={heading:`Office Map`,headingHint:`Visualize your fleet as an office floor plan with live agent status.`,statAgents:`Agents`,statMail:`Mail`,unreadSuffix:` unread`,sectionView:`View`,sectionDisplay:`Display`,sectionBackground:`Background`,sectionRecent:`Recent Activity`,eventsTrackedSuffix:` events tracked`,recentHint:`Mail sends, agent spawns, and status changes appear here.`,sectionShortcuts:`Shortcuts`,sectionLegend:`Legend`,hudLabel:`HUD`,hudDesc:`Show real-time session stats overlay`,hudToggle:`Toggle HUD`,minimapLabel:`Minimap`,minimapDesc:`Show the overview minimap`,minimapToggle:`Toggle minimap`,controlsLabel:`Controls`,controlsDesc:`Show zoom and fit controls`,controlsToggle:`Toggle controls`,animateLabel:`Animate edges`,animateDesc:`Animate flow on active connections`,animateToggle:`Toggle edge animation`,legendLabel:`Show legend`,legendDesc:`Display status and connection legend`,legendToggle:`Toggle legend`,feedLabel:`Live feed`,feedDesc:`Bottom strip of recent cross-process activity`,feedToggle:`Toggle live feed`,fitView:`Fit view`,zoomIn:`Zoom in`,zoomOut:`Zoom out`,resetZoom:`Reset zoom`,legendActive:`Active (running)`,legendIdle:`Idle`,legendError:`Error`,legendOffline:`Offline`,bg:{dots:`Dots`,lines:`Lines`,cross:`Cross`,none:`None`}},ke={liveProjectOffice:`Live project office`,agents:`agents`,working:`working`,toolCalls:`tool calls`,office:`Office`,topology:`Topology`,officeDescription:`Live agent desks and work`,topologyDescription:`Clients, agents and connections`,team:`Team`,liveDesk:`Live desk & incoming work`,lastActions:`Recent work`,leadAgent:`Lead agent`,agent:`Agent`,callsCount:`{{count}} calls`,recent:`Recent`,noCalls:`No completed calls yet`,telemetryReconnect:`Reconnect this terminal to start tool history`,thinking:`Thinking`,waiting:`Waiting for work`,preparing:`Preparing the next action…`,deskReady:`Desk is ready`,toolCall:`Tool call`,execution:`Execution`,started:`Started`,duration:`Duration`,session:`Session`,target:`Target`,resultSize:`Result size`,lines:`lines`,bytes:`bytes`,tokens:`tokens`,input:`Input`,outputPreview:`Output preview`,readyTitle:`The office is ready`,readyBody:`Agents will take a desk as soon as they join this project.`,liveEvent:`live event stream`,connectedSessions_one:`{{count}} connected session`,connectedSessions_other:`{{count}} connected sessions`,detailHint:`click any action for exact input and result details`,officeBriefing:`Office briefing`,leaderPrompt:`Leader's latest prompt`,activeInstruction:`Active instruction`,telemetryWaiting:`Reconnect this terminal to receive live instructions`,syncWaiting:`waiting for sync`,todoTelemetryWaiting:`Reconnect this terminal to receive the live todo list`,taskNotReported:`Working, but no task description was reported`,waitingForReply:`Waiting for a reply to "{{subject}}" — sent {{duration}} ago`,waitingMailFallback:`a recent message`,waitingTelemetry:`Waiting — no telemetry from this terminal yet`,waitingNoWork:`Waiting for work — no activity for {{duration}} (last: {{last}})`,waitingNothingYet:`nothing yet`,contextUsed:`Context window used`,cost:`cost`,noPrompt:`No prompt received in this session yet`,activeTodos:`Active todos`,todoProgress:`{{done}}/{{total}} done`,allTodosDone:`All todos completed`,noActiveTodos:`No active todos yet`,moreTodos:`+{{count}} more`,currentTask:`Current task`,task:`Task`,promptReceived:`Received`,todos:`Todos`,todoStatus:{pending:`Pending`,in_progress:`In progress`,completed:`Completed`},breakRoom:`Break room`,onBreak:`{{count}} on break`,desksEmpty:`Everyone is on break — the desks are ready for the next task`,files:`FILES`,read:`READ`,write:`WRITE`,edit:`EDIT`,term:`TERM`,live:`LIVE`,uniqueFilesTouched:`Unique files touched`,fileReads:`File reads`,filesWritten:`Files written`,filesEdited:`Files edited`,linesAddedAndRemoved:`Lines added and removed`,terminalCommands:`Terminal commands`,incomingAndOutgoingMail:`Incoming and outgoing mail`,sessionActivityTotals:`Session activity totals`,closeToolDetails:`Close tool details`,closeDetails:`Close details`,closeMailDetails:`Close mail details`,closeTaskDetails:`Close task details`,closeOfficeBriefing:`Close office briefing`,priority:`Priority`,route:`Route`},Ae={tabRequirements:`Requirements`,tabProject:`SDD Project`,tabBoard:`Live SDD Board`,tabSpecs:`Specifications`},je={label:`Side panel`},Me={discardTitle:`Discard Unsaved Changes?`,discardConfirm:`Discard the unsaved memory changes? This cannot be undone.`,deleteTitle:`Delete this memory?`,backToList:`Back to memory list`,copyId:`Copy memory ID`,deletedMemory:`Deleted memory`,anchorCursorHint:`Cursor line range matches this memory's anchor`,statusDeleted:`deleted`,statusSuperseded:`superseded`,restoreTitle:`Restore this memory to active status`,supersededJumpTitle:`This version is superseded — jump to the active version`,acceptSuggestionTitle:`Accept hygiene's deletion suggestion — memory will be forgotten`,rejectSuggestionTitle:`Reject the suggestion — memory stays as-is and may be re-suggested later`,updateTitle:`Update the memory's content — versioning creates a new active record`,promoteTitle:"Promote to `permanent` — hygiene will never surface this again",openRecordTitle:`Open the full record in MemoryManager`,fileDrawerAria:`File memory drawer`,requeryTitle:`Re-query for this file`,closeDrawerAria:`Close drawer`,closeDrawerTitle:`Close memory drawer`,showRecoverable:`Show recoverable (deleted)`,cursorBoostTitle:`Cursor boost`,fileScopedTitle:`File-scoped`,mentionedInTitle:`Mentioned in`,editorKnowledge:`Knowledge`,editorContentPlaceholder:`Example: WebUI state is owned by Zustand stores; server messages update those stores through singleton WebSocket handlers.`,editorImportance:`Importance`,editorConfidence:`Confidence`,editorFreshness:`Freshness`,editorAnchors:`Anchors`,editorSymbolPlaceholder:`Symbol name`,editorRelationships:`Relationships`,searchAria:`Search memories`,searchPlaceholder:`Search content, IDs, tags, anchors…`,clearSearchAria:`Clear search`,audienceFilterAria:`Filter audience-scoped only`,audienceFilterTitle:`Show only audience-scoped memories`,clearFiltersAria:`Clear all filters`,clearFiltersTitle:`Clear all filters`,allStatuses:`All statuses`,allKinds:`All kinds`,tagsLabel:`Tags`,popularTags:`Popular tags`,graphAria:`Memory relationship graph`,graphFullscreenAria:`Open full screen graph`,clearTracesTitle:`Clear all traces`,closePanelTitle:`Close panel`,traceMatched:`matched`,traceInjected:`injected`,traceFiltered:`filtered`,traceActive:`active`,traceExited:`exited`,traceScore:`score`,traceError:`error`,lifecycleAria:`Memory lifecycle live ledger`,listAria:`Memories`,emptyTitle:`Your project's long-term context`,emptyVerifiedAnchors:`Verified anchors`,emptyTypedRelations:`Typed relations`,emptyAgentRecall:`Agent recall`,lensesAria:`SAGE memory lenses`,loadingSage:`Loading SAGE`,loadingAudience:`Loading audience memories`,loadingVectorMemory:`Loading vector memory`,storeUnavailable:`Memory store unavailable`,backToChat:`Back to chat`,sageHeading:`SAGE`,refreshAria:`Refresh memories`,tabMemories:`Memories`,tabActive:`Active`,tabReview:`Review`,tabNeedsReview:`Needs review`,tabGraphEdges:`Graph edges`,reviewLoading:`Loading review queue…`,reviewLoadTimeout:`Review queue did not respond in time.`,reviewEmptyTitle:`No pending reviews`,reviewEmptyHint:`Hygiene and triage proposals show up here for accept/reject.`,reviewPendingCount_one:`{{count}} pending review`,reviewPendingCount_other:`{{count}} pending reviews`,reviewSelectAll:`Select all`,reviewClearSelection:`Clear selection`,reviewSelectOne:`Select review item`,reviewBulkAccept:`Accept selected`,reviewBulkKeep:`Keep selected`,libraryAria:`Memory library`,viewAria:`Memory view`,detailAria:`Memory detail`,fileForDrawerAria:`File for memory drawer`,cursorLabel:`cursor`,reviewLabel:`review`,hygieneReviewTitle:`Hygiene review: {{reason}} ({{days}}d old)`,updatedSuffix:`updated {{date}}`,actionRecover:`Recover`,actionGoToActive:`Go to active`,actionAcceptDeletion:`Accept Deletion`,actionKeep:`Keep`,actionUpdate:`Update`,actionMarkPermanent:`Mark as Permanent`,actionShowFull:`Show full`,itemLabel:`memories`,noFile:`(no file)`,memoriesCount_one:`{{count}} memory`,memoriesCount_other:`{{count}} memories`,pendingReviewCount_one:`{{count}} pending review`,pendingReviewCount_other:`{{count}} pending reviews`,supersededCount:`{{count}} superseded`,linesRange:`lines {{start}}–{{end}}`,emptyOpenFile:`Open a file to see its memories.`,loadingMemories:`Loading memories…`,errorPrefix:`Error: {{message}}`,emptyNoMemories:`No memories attached to {{file}} yet.`,pendingAccepting:`accepting…`,pendingKeeping:`keeping…`,pendingUpdating:`updating…`,pendingMarking:`marking…`,pendingRecovering:`recovering…`,deletedNeverPolicy:`This record is audit-only and carries an absolute ban: it can never enter LLM context.`,deletedEligiblePolicy:`The record is inactive and cannot be edited, but remains eligible as historical evidence when retrieval finds it relevant.`,deletingLabel:`Deleting…`,actionDeleteMemory:`Delete memory`,copiedNotice:`Memory ID copied.`,revisionSuffix:`revision {{n}}`,memoryRelationships:`Memory relationships`,captureMemory:`Capture a memory`,editMemory:`Edit memory`,editorCreateHint:`Add durable knowledge with retrieval metadata.`,editorEditHint:`Update content without losing provenance.`,createMemory:`Create memory`,saveChanges:`Save changes`,addAnchor:`Add anchor`,noAnchors:`No anchors yet — add one to improve retrieval precision`,loadingGraph:`loading real graph…`,graphStats:`{{nodes}} nodes · {{edges}} edges`,lifecycleHeading:`Memory lifecycle`,statusWaiting:`waiting`,statusLive:`live · {{count}}/100`,noMatching:`No matching memories`,buildGraph:`Build your memory graph`,clearFilters:`Clear filters`,createFirst:`Create first memory`,captureButton:`Capture memory`,memoryCaptured:`Memory captured.`,memoryUpdated:`Memory updated.`,liveStore:`live store`,reconnecting:`reconnecting`,newMemory:`New memory`,hideFileDrawer:`Hide file memory drawer`,showFileDrawer:`Show file memory drawer`,hideDrawer:`Hide drawer`,showDrawer:`Show drawer`,editorCharCount:`{{count}} chars`,editorContentLabel:`Memory content`,editorKind:`Kind`,editorScope:`Scope`,editorLifecycleStatus:`Lifecycle status`,editorSupersedes:`Supersedes`,editorContradicts:`Contradicts`,filterByStatus:`Filter by status`,filterByKind:`Filter by kind`,graphHeading:`Relationship map`,graphHeadingFull:`Relationship map — {{id}}`,graphOpenFullscreen:`Open full screen`,projectKnowledge:`project knowledge`,sageSubtitle:`Inspect, connect, curate, and retire durable context used across agent sessions.`,emptyBody:`Select a memory to inspect its metadata and relationship graph, or capture knowledge that future agents should retrieve automatically.`,tabDeleted:`Deleted`,fileDrawerLabel:`File drawer`,selectFilePlaceholder:`— select a file —`,memoryCountSummary:`{{shown}} of {{total}} memories`,updatedSortLabel:`updated ↓`,searchBreakdownAria:`Search breakdown`,searchBreakdownTitle:`Search: {{query}}`,searchBreakdownDual:`dual-channel`,searchBreakdownLexicalOnly:`lexical only`,searchBreakdownLoading:`Running dual-channel search…`,searchBreakdownEmpty:`No matches in either channel.`,searchBreakdownSourceLabel:`Source: {{source}}`,tabAllMemories:`All memories`,tabAllMemoriesHint:`Inspect, curate, retire`,tabAudience:`Audience-scoped`,tabAudienceHint:`Guidance routed to agents`,tabVectorMemory:`Vector memory`,tabVectorMemoryHint:`Semantic embedding store`,editorRelationshipsHint:`Reference exact memory IDs. Relationships are validated and graph edges are rebuilt by SAGE.`,editorTaskTypes:`Task types`,createAction:`Create`,mutationTimeout:`{{verb}} timed out. Your draft is still here.`,loadingSageContent:`Loading SAGE content`,injectorActiveInContext:`Active in context`,injectorInjectionHistory:`Injection history`,injectorContextTransitions:`Context transitions`,metaCreated:`Created`,metaUpdated:`Updated`,metaLastAccessed:`Last accessed`,metaLastVerified:`Last verified`,referencedUnavailable:`Referenced memory is unavailable`,emptyFiltered:`Change the filters or clear the search query.`,emptyCapture:`Capture durable facts, decisions, conventions, and file-bound notes for every agent.`,memoryUnavailable:`Memory is unavailable or has been removed.`,staleConflicts:`stale + conflicts`},Ne={enableLayer:`Enable this boundary layer`,outsideScope:`Outside scope`,askPermission:`Ask permission`,alwaysBlock:`Always block`,allow:`Allow`,allowSelectors:`Allow selectors`,denySelectors:`Deny selectors`,crossPathSelectors:`Shell “Allow” is opaque and can cross path selectors.`,removeLayer:`Remove layer`,taskInspector:`Task inspector`,task:`Task`,dispatched:`Dispatched`,collapseDetails:`Collapse task details`,taskBoundary:`Task boundary`,title:`Title`,managedStage:`Managed stage`,status:`Status`,priority:`Priority`,type:`Type`,labelsCommaSeparated:`Labels (comma separated)`,dueDatePlaceholder:`Due date (ISO or YYYY-MM-DD)`,estimatedHours:`Estimated hours`,actualHours:`Actual hours`,selectBlockingTasks:`Select blocking tasks…`,selectSequentialChain:`Add tasks to a sequential chain…`,enforceChainOrder:`Enforce chain order as dependencies`,assignmentReason:`Change / assignment reason (persisted to activity)`,managedLifecycle:`Managed lifecycle transition`,kanbanAgentTransition:`Kanban Agent transition`,completedAction:`Completed action / reviewer action`,progressComment:`Truthful progress comment (required)`,evidenceUrl:`Evidence attachment URL`,source:`Source`,taskId:`Task ID`,run:`Run`,column:`Column`,primaryModelSource:`Primary model source`,selectProviderModel:`Select exact provider / model…`,fallbackProfile:`Fallback profile (first model is primary)`,selectProfile:`Select configured profile…`,fallbackModels:`Fallback models`,addFallbackModel:`Add fallback model…`,role:`Role`,selectRole:`Select a role…`,assignSkills:`Assign required skills…`,restrictTools:`Restrict to specific tools…`,agentNameOptional:`Agent name (optional)`,retryPolicy:`Retry policy`,maxAttempts:`Max attempts`,costCeilingUsd:`Cost ceiling USD`,grantCapability:`Grant a capability…`,targetBoard:`Target board`,boardPresence:`Board presence`,liveBoardUsers:`Live board users`,kanbanAgent:`Kanban Agent`,watchThisBoard:`Watch this board`,supervisorEngine:`Supervisor engine`,kanbanAgentModelSource:`Kanban Agent model source`,supervisorSkills:`Supervisor skills`,forceLoadSkills:`Force-load agentic skills…`,extraFallbackModels:`Extra fallback models`,optionalFallbacks:`Optional ordered fallbacks…`,queueHealth:`Queue health`,claimableTasks:`Claimable tasks`,runningAssignments:`Running assignments`,inReview:`In review`,manuallyBlocked:`Manually blocked`,failedTasks:`Failed tasks`,blockedByDeps:`Ready/pending tasks blocked by dependencies`,expiredLeases:`Expired lease assignments`,healthy:`healthy`,costCeilingSum:`Sum of costCeilingUsd for running/queued tasks`,liveRunSteer:`Live run — steer it from here`,openLiveRun:`Open the live run view (SDD Hub)`,runAsLiveJob:`Run this board as a live agent job:`,startAsGoal:`Start as Goal`,startAsSdd:`Start as SDD`,runControls:`Run controls`,workerModel:`Worker model`,setModelForTask:`Set model for this task…`,newWorkerName:`New worker name`,duration:`Duration`,liveRun:`Live run`,lastResult:`Last result`,definitionOfDone:`Definition of Done`,failingChecks:`Failing checks`,evidenceMissing:`Evidence missing (agent/council checks without backing refs)`,needsDecomposition:`Needs decomposition`,decompositionPending:`Decomposition proposals awaiting approval`,noOutstanding:`No outstanding verification or decomposition issues on this board.`,kanban:`Kanban`,newBoard:`New board`,createBoard:`Create board`,deleteTask:`Delete task`,runFailed:`run failed`,splitPendingApproval:`split pending approval`,newTask:`New task`,addTask:`Add task`,duplicateBoard:`Duplicate board`,boardHistory:`Board history`,noHistory:`No history yet`,confirmDelete:`Confirm?`,confirmDeleteBoard:`Click again to confirm board deletion`,deleteBoard:`Delete board`,boardBoundary:`Board boundary`,noBoardSelected:`No kanban board selected.`,expandDetails:`Expand task details`,elapsed:`Elapsed`,assigned:`Assigned`,configuredAgentRoute:`the configured agent route`,subagent:`Subagent`,checkedAgo:`checked {{ago}} ago`,notChecked:`not checked`,auditInterval:`Audit interval (seconds)`,statusReady:`ready`,statusRunning:`running`,statusReview:`review`,statusBlocked:`blocked`,statusFailed:`failed`,statusBlockedByDeps:`blocked by deps`,statusStale:`stale`,runningCost:"~${{cost}} running cost",actionPause:`Pause`,actionResume:`Resume`,actionRetryFailed:`Retry failed`,actionStop:`Stop`,actionReassign:`Reassign`,actionRunNow:`Run now`,deleteTaskAria:`Delete task: {{title}}`,confirmDeleteTask:`Click again to confirm task deletion`,confirmDeleteTaskAria:`Confirm delete: {{title}}`,moveTaskToColumn:`Move {{title}} to column`,activityNoteTemplate:`{{action}} from WebUI to {{target}}.`},Pe={heading:`Cron Jobs`,subtitle:`Scheduled recurring tasks managed by the cron plugin.`,statusDisabled:`Disabled`,statusOverdue:`Overdue`,statusActive:`Active`,jobCount_one:`{{count}} job`,jobCount_other:`{{count}} jobs`,enabledCount:`{{count}} enabled`,overdueCount:`{{count}} overdue`,totalRuns:`{{count}} total runs`,maxConcurrent:`max {{count}} concurrent`,emptyTitle:`No cron jobs scheduled.`,emptyUse:`Use`,emptyToAdd:`to add one.`,thStatus:`Status`,thName:`Name`,thInterval:`Interval`,thRuns:`Runs`,thNextRun:`Next Run`,thLastRun:`Last Run`,thAction:`Action`,lastFiredAtTitle:`Last fired at {{time}}`,footerUse:`Use`,footerToAdd:`to add,`,footerToRemove:`to remove.`},Fe={refreshRosterData:`Refresh roster data`,liveEmpty:`Agents appear here when subagents spawn`,fleetInspector:`Fleet Inspector`,openAgentsPanel:`Open Agents panel`,toolCalls:`Tool Calls`,running:`Running`,projectAgents:`Project Agents`,createOrCloneTitle:`Create or Clone Project Agent`,createOrCloneHint:`Inherit any roster agent as a template, then develop an independent identity, runtime policy and learned history.`,cloneFromRole:`Clone from roster role`,cloneHint:`Prompt, tools, skills and defaults are inherited. Learning and later edits remain isolated to the new agent.`,displayName:`Display name`,descriptionPlaceholder:`Own X, Y and Z workflows for this project and verify their results.`,creating:`Creating…`,noCustomizations:`No customizations yet`,selectAgentEmpty:`Select an agent to edit customizations`,saving:`Saving…`,saveFailed:`Save failed`,failed:`Failed`,learningResumed:`Automatic learning resumed`,optimizationEmptyToast:`Optimization produced an empty result. Try again.`,noActiveModelToast:`No active model on server. Optimization sent to the chat agent.`,learningsEmpty:`Learning entries appear when agents capture output`,allRosterAgents:`All Roster Agents`,optimizing:`Optimizing…`,paused:`paused`,selectLearningAgent:`Select an agent to view learning details`,learningOn:`Learning on`,lastCapture:`Last Capture`,lifetimeCaptures:`Lifetime Captures`,hitRate:`Hit Rate`,neverUsed:`Never Used`,learningsLimitExceeded:`Learned data exceeds soft limit ({{bytes}}B / 8,192B). Optimize to synthesize raw entries into a consolidated document and reduce context volume.`,newPending:`new pending`,viewAction:`View`,applying:`Applying…`,searchPlaceholder:`Search agents by name, role, or description…`,maxIterations:`Max Iterations`,maxToolCalls:`Max Tool Calls`,projectCustomizations:`Project Customizations`,learnedEntries:`learned entries`,teachFailed:`Teach failed`,selectRoleEmpty:`Select a role to inspect or edit`,captureLearned:`Capture learned`,teachThisAgent:`Teach this agent`,teachPlaceholder:`Describe what you want this agent to do better… e.g. 'This agent should always verify versions from npm before recommending'`,heading:`Agent Roster`,headerSummary:`{{customized}} customized · {{entries}} learned entries`,tabLive:`Live Fleet`,tabOfficeMap:`Office Map`,tabCatalog:`Roster Catalog`,tabLearning:`Self-Learning`,tabMemory:`Audience Memory`,tabCustomize:`Customization`,learning:`learning`,learningPaused:`Learning paused`,autoLearningPaused:`Automatic learning paused`,toolsCount_one:`{{count}} tool`,toolsCount_other:`{{count}} tools`,maxItShort:`{{value}} max it`,customizedBadge:`Customized`,needsSummary:`⚠ Needs summary`,timeout:`Timeout`,learnedEntriesCount_one:`{{count}} learned entry`,learnedEntriesCount_other:`{{count}} learned entries`,sessionCapturesCount_one:`{{count}} session capture`,sessionCapturesCount_other:`{{count}} session captures`,noAgentsMatch:`No agents match "{{query}}"`,footerRosterRoles_one:`roster role`,footerRosterRoles_other:`roster roles`,footerCustomized:`customized`,footerTotalLearned_one:`total learned entry`,footerTotalLearned_other:`total learned entries`,clone:`+ Clone`,abc:`ABC`,abcGeneratedFromName:`abc (generated from name)`,roleIdOptional:`Role id (optional)`,purpose:`Purpose`,taskTypesCommaOrOnePer:`Task types (comma or one per line)`,cancel:`Cancel`,selectAnAgentToEditCustomizations:`Select an agent to edit customizations`,llmImprove:`LLM Improve`,reset:`Reset`,editIdentityMd:`Edit identity.md`,editLearnedMd:`Edit learned.md`,editConfigJson:`Edit config.json`,runtimePolicy:`Runtime policy`,retry:`Retry`,noSelfLearningDataYet:`No self-learning data yet`,review:`review →`,selectAnAgentToViewLearning:`Select an agent to view learning details`,entries:`Entries`,size:`Size`,optimizeLearnings:`Optimize Learnings`,keep:`Keep`,drop:`Drop`,describeACommandPatternOrBehavior:`Describe a command, pattern, or behavior you want this agent to remember.`,eGAlwaysUsePnpmForThisProject:`e.g. Always use pnpm for this project`,teach:`Teach`,noActiveFleetAgents:`No active fleet agents`,clear:`Clear`,agentsTotal:`agents total`,leader:`Leader`,iterations:`Iterations`,cost:`Cost`,context:`Context`,contextWindow:`Context Window`,error:`Error`,filterAll:`All ({{count}})`,filterRunning:`Running ({{count}})`,filterDone:`Done ({{count}})`,filterFailed:`Failed ({{count}})`,optimizeAll:`Optimize All ({{count}})`,policyUpdateFailed:`Policy update failed`,noRawEntries:`No raw entries to optimize yet.`,optimizedOk:`Optimized. Consolidated knowledge updated.`,emptySynthesis:`The model returned an empty result. Nothing was changed — try again.`,consolidatedWithModel:`Learnings consolidated with {{model}}.`,consolidatedPlain:`Learnings consolidated.`,resetConfirm:`Reset all project-specific data for agent "{{role}}"?`,resetTitle:`Reset Agent Role`,loadCustomizationFailed:`Failed to load customization`,loadRuntimePolicyFailed:`Failed to load runtime policy`,runtimePolicySaveFailed:`Runtime policy save failed`,llmImprovementFailed:`LLM improvement failed`,agentCreationFailed:`Agent creation failed`,noActiveModelMsg:`No active model on server — optimization sent to chat agent instead.`,optimizationFailed:`Optimization failed`,bulkOptimizationFailed:`Bulk optimization failed`,taskTypesPlaceholder:`X workflow
|
|
6
|
+
Triggers: user says "keyword", "another".`,saveIn:`Save in:`,createBtn:`Create Skill`,createdMsg:`Created: {{name}}`,createFailed:`Creation failed`},Te={noEvents:`No events yet.`},Ee={pickHint:`Pick a kit — the agent will adhere to it.`,gallery:`Gallery`,galleryTitle:`Open live preview gallery`,stackTitle:`Target stack`,loading:`Loading kits…`,notFound:`No design kits found.`,bestFor:`Best for:`,light:`Light`,dark:`Dark`,tune:`Tune`,font:`Font`,set:`Set`,spaceGrotesk:`Space Grotesk…`,aaHeading:`Aa Heading`,theQuickBrownFoxJumpsOver:`The quick brown fox jumps over the lazy dog.`,primary:`Primary`,ghost:`Ghost`,badge:`Badge`,inputField:`Input field…`,radius:`Radius`,density:`Density`,motion:`Motion`},De={detached:`(detached)`,count_one:`{{count}} worktree`,count_other:`{{count}} worktrees`,baseSuffix:` · base {{base}}`,baseLabel:`base`,cleanOrphans:`Clean orphans`,cleanOrphansTitle:`Remove all orphaned worktrees`,liveBusyTitle:`A run is live — stop it first`,rescanTitle:`Rescan`,removed_one:`Removed {{count}} worktree.`,removed_other:`Removed {{count}} worktrees.`,failed:`Failed`,mergedIntoBase:`Merged {{branch}} into base.`,conflictMerge:`Conflict merging {{branch}}: {{files}}`,seeGit:`see git`,mergeFailed:`Merge failed: {{reason}}`,unknownReason:`unknown`,mergeConfirmTitle:`Merge {{branch}} into {{base}}?`,mergeConfirmMsg:`Squash-merges this branch onto the base branch. Aborts cleanly if it conflicts.`,mergeAction:`Merge`,removeConfirmTitle:`Remove {{branch}}?`,removeConfirmMsg:`Force-removes the worktree checkout and deletes its branch. Un-merged work is discarded.`,empty:`No worktrees.`,emptyHint:`SDD / Goal runs create isolated worktrees here. Orphans from crashed runs show up too.`,actOpenTerm:`Open in terminal`,actOpenFolder:`Open folder`,actViewChanges:`View changes`,actMerge:`Merge to base`,actRemove:`Remove / discard`,live:`live`,noUncommitted:`No uncommitted changes`,commitsAhead_one:`{{count}} commit ahead`,commitsAhead_other:`{{count}} commits ahead`,more:`…{{count}} more`},Oe={heading:`Office Map`,headingHint:`Visualize your fleet as an office floor plan with live agent status.`,statAgents:`Agents`,statMail:`Mail`,unreadSuffix:` unread`,sectionView:`View`,sectionDisplay:`Display`,sectionBackground:`Background`,sectionRecent:`Recent Activity`,eventsTrackedSuffix:` events tracked`,recentHint:`Mail sends, agent spawns, and status changes appear here.`,sectionShortcuts:`Shortcuts`,sectionLegend:`Legend`,hudLabel:`HUD`,hudDesc:`Show real-time session stats overlay`,hudToggle:`Toggle HUD`,minimapLabel:`Minimap`,minimapDesc:`Show the overview minimap`,minimapToggle:`Toggle minimap`,controlsLabel:`Controls`,controlsDesc:`Show zoom and fit controls`,controlsToggle:`Toggle controls`,animateLabel:`Animate edges`,animateDesc:`Animate flow on active connections`,animateToggle:`Toggle edge animation`,legendLabel:`Show legend`,legendDesc:`Display status and connection legend`,legendToggle:`Toggle legend`,feedLabel:`Live feed`,feedDesc:`Bottom strip of recent cross-process activity`,feedToggle:`Toggle live feed`,fitView:`Fit view`,zoomIn:`Zoom in`,zoomOut:`Zoom out`,resetZoom:`Reset zoom`,legendActive:`Active (running)`,legendIdle:`Idle`,legendError:`Error`,legendOffline:`Offline`,bg:{dots:`Dots`,lines:`Lines`,cross:`Cross`,none:`None`}},ke={liveProjectOffice:`Live project office`,agents:`agents`,working:`working`,toolCalls:`tool calls`,office:`Office`,topology:`Topology`,officeDescription:`Live agent desks and work`,topologyDescription:`Clients, agents and connections`,team:`Team`,liveDesk:`Live desk & incoming work`,lastActions:`Recent work`,leadAgent:`Lead agent`,agent:`Agent`,callsCount:`{{count}} calls`,recent:`Recent`,noCalls:`No completed calls yet`,telemetryReconnect:`Reconnect this terminal to start tool history`,thinking:`Thinking`,waiting:`Waiting for work`,preparing:`Preparing the next action…`,deskReady:`Desk is ready`,toolCall:`Tool call`,execution:`Execution`,started:`Started`,duration:`Duration`,session:`Session`,target:`Target`,resultSize:`Result size`,lines:`lines`,bytes:`bytes`,tokens:`tokens`,input:`Input`,outputPreview:`Output preview`,readyTitle:`The office is ready`,readyBody:`Agents will take a desk as soon as they join this project.`,liveEvent:`live event stream`,connectedSessions_one:`{{count}} connected session`,connectedSessions_other:`{{count}} connected sessions`,detailHint:`click any action for exact input and result details`,officeBriefing:`Office briefing`,leaderPrompt:`Leader's latest prompt`,activeInstruction:`Active instruction`,telemetryWaiting:`Reconnect this terminal to receive live instructions`,syncWaiting:`waiting for sync`,todoTelemetryWaiting:`Reconnect this terminal to receive the live todo list`,taskNotReported:`Working, but no task description was reported`,waitingForReply:`Waiting for a reply to "{{subject}}" — sent {{duration}} ago`,waitingMailFallback:`a recent message`,waitingTelemetry:`Waiting — no telemetry from this terminal yet`,waitingNoWork:`Waiting for work — no activity for {{duration}} (last: {{last}})`,waitingNothingYet:`nothing yet`,contextUsed:`Context window used`,cost:`cost`,noPrompt:`No prompt received in this session yet`,activeTodos:`Active todos`,todoProgress:`{{done}}/{{total}} done`,allTodosDone:`All todos completed`,noActiveTodos:`No active todos yet`,moreTodos:`+{{count}} more`,currentTask:`Current task`,task:`Task`,promptReceived:`Received`,todos:`Todos`,todoStatus:{pending:`Pending`,in_progress:`In progress`,completed:`Completed`},breakRoom:`Break room`,onBreak:`{{count}} on break`,desksEmpty:`Everyone is on break — the desks are ready for the next task`,files:`FILES`,read:`READ`,write:`WRITE`,edit:`EDIT`,term:`TERM`,live:`LIVE`,uniqueFilesTouched:`Unique files touched`,fileReads:`File reads`,filesWritten:`Files written`,filesEdited:`Files edited`,linesAddedAndRemoved:`Lines added and removed`,terminalCommands:`Terminal commands`,incomingAndOutgoingMail:`Incoming and outgoing mail`,sessionActivityTotals:`Session activity totals`,closeToolDetails:`Close tool details`,closeDetails:`Close details`,closeMailDetails:`Close mail details`,closeTaskDetails:`Close task details`,closeOfficeBriefing:`Close office briefing`,priority:`Priority`,route:`Route`},Ae={tabRequirements:`Requirements`,tabProject:`SDD Project`,tabBoard:`Live SDD Board`,tabSpecs:`Specifications`},je={label:`Side panel`},Me={discardTitle:`Discard Unsaved Changes?`,discardConfirm:`Discard the unsaved memory changes? This cannot be undone.`,deleteTitle:`Delete this memory?`,backToList:`Back to memory list`,copyId:`Copy memory ID`,deletedMemory:`Deleted memory`,anchorCursorHint:`Cursor line range matches this memory's anchor`,statusDeleted:`deleted`,statusSuperseded:`superseded`,restoreTitle:`Restore this memory to active status`,supersededJumpTitle:`This version is superseded — jump to the active version`,acceptSuggestionTitle:`Accept hygiene's deletion suggestion — memory will be forgotten`,rejectSuggestionTitle:`Reject the suggestion — memory stays as-is and may be re-suggested later`,updateTitle:`Update the memory's content — versioning creates a new active record`,promoteTitle:"Promote to `permanent` — hygiene will never surface this again",openRecordTitle:`Open the full record in MemoryManager`,fileDrawerAria:`File memory drawer`,requeryTitle:`Re-query for this file`,closeDrawerAria:`Close drawer`,closeDrawerTitle:`Close memory drawer`,showRecoverable:`Show recoverable (deleted)`,cursorBoostTitle:`Cursor boost`,fileScopedTitle:`File-scoped`,mentionedInTitle:`Mentioned in`,editorKnowledge:`Knowledge`,editorContentPlaceholder:`Example: WebUI state is owned by Zustand stores; server messages update those stores through singleton WebSocket handlers.`,editorImportance:`Importance`,editorConfidence:`Confidence`,editorFreshness:`Freshness`,editorAnchors:`Anchors`,editorSymbolPlaceholder:`Symbol name`,editorRelationships:`Relationships`,searchAria:`Search memories`,searchPlaceholder:`Search content, IDs, tags, anchors…`,clearSearchAria:`Clear search`,audienceFilterAria:`Filter audience-scoped only`,audienceFilterTitle:`Show only audience-scoped memories`,clearFiltersAria:`Clear all filters`,clearFiltersTitle:`Clear all filters`,allStatuses:`All statuses`,allKinds:`All kinds`,tagsLabel:`Tags`,popularTags:`Popular tags`,graphAria:`Memory relationship graph`,graphFullscreenAria:`Open full screen graph`,clearTracesTitle:`Clear all traces`,closePanelTitle:`Close panel`,traceMatched:`matched`,traceInjected:`injected`,traceFiltered:`filtered`,traceActive:`active`,traceExited:`exited`,traceScore:`score`,traceError:`error`,lifecycleAria:`Memory lifecycle live ledger`,listAria:`Memories`,emptyTitle:`Your project's long-term context`,emptyVerifiedAnchors:`Verified anchors`,emptyTypedRelations:`Typed relations`,emptyAgentRecall:`Agent recall`,lensesAria:`SAGE memory lenses`,loadingSage:`Loading SAGE`,loadingAudience:`Loading audience memories`,loadingVectorMemory:`Loading vector memory`,storeUnavailable:`Memory store unavailable`,backToChat:`Back to chat`,sageHeading:`SAGE`,refreshAria:`Refresh memories`,tabMemories:`Memories`,tabActive:`Active`,tabReview:`Review`,tabNeedsReview:`Needs review`,tabGraphEdges:`Graph edges`,reviewLoading:`Loading review queue…`,reviewLoadTimeout:`Review queue did not respond in time.`,reviewEmptyTitle:`No pending reviews`,reviewEmptyHint:`Hygiene and triage proposals show up here for accept/reject.`,reviewPendingCount_one:`{{count}} pending review`,reviewPendingCount_other:`{{count}} pending reviews`,reviewSelectAll:`Select all`,reviewClearSelection:`Clear selection`,reviewSelectOne:`Select review item`,reviewBulkAccept:`Accept selected`,reviewBulkKeep:`Keep selected`,libraryAria:`Memory library`,viewAria:`Memory view`,detailAria:`Memory detail`,fileForDrawerAria:`File for memory drawer`,cursorLabel:`cursor`,reviewLabel:`review`,hygieneReviewTitle:`Hygiene review: {{reason}} ({{days}}d old)`,updatedSuffix:`updated {{date}}`,actionRecover:`Recover`,actionGoToActive:`Go to active`,actionAcceptDeletion:`Accept Deletion`,actionKeep:`Keep`,actionUpdate:`Update`,actionMarkPermanent:`Mark as Permanent`,actionShowFull:`Show full`,itemLabel:`memories`,noFile:`(no file)`,memoriesCount_one:`{{count}} memory`,memoriesCount_other:`{{count}} memories`,pendingReviewCount_one:`{{count}} pending review`,pendingReviewCount_other:`{{count}} pending reviews`,supersededCount:`{{count}} superseded`,linesRange:`lines {{start}}–{{end}}`,emptyOpenFile:`Open a file to see its memories.`,loadingMemories:`Loading memories…`,errorPrefix:`Error: {{message}}`,emptyNoMemories:`No memories attached to {{file}} yet.`,pendingAccepting:`accepting…`,pendingKeeping:`keeping…`,pendingUpdating:`updating…`,pendingMarking:`marking…`,pendingRecovering:`recovering…`,deletedNeverPolicy:`This record is audit-only and carries an absolute ban: it can never enter LLM context.`,deletedEligiblePolicy:`The record is inactive and cannot be edited, but remains eligible as historical evidence when retrieval finds it relevant.`,deletingLabel:`Deleting…`,actionDeleteMemory:`Delete memory`,copiedNotice:`Memory ID copied.`,revisionSuffix:`revision {{n}}`,memoryRelationships:`Memory relationships`,captureMemory:`Capture a memory`,editMemory:`Edit memory`,editorCreateHint:`Add durable knowledge with retrieval metadata.`,editorEditHint:`Update content without losing provenance.`,createMemory:`Create memory`,saveChanges:`Save changes`,addAnchor:`Add anchor`,noAnchors:`No anchors yet — add one to improve retrieval precision`,loadingGraph:`loading real graph…`,graphStats:`{{nodes}} nodes · {{edges}} edges`,lifecycleHeading:`Memory lifecycle`,statusWaiting:`waiting`,statusLive:`live · {{count}}/100`,noMatching:`No matching memories`,buildGraph:`Build your memory graph`,clearFilters:`Clear filters`,createFirst:`Create first memory`,captureButton:`Capture memory`,memoryCaptured:`Memory captured.`,memoryUpdated:`Memory updated.`,liveStore:`live store`,reconnecting:`reconnecting`,newMemory:`New memory`,hideFileDrawer:`Hide file memory drawer`,showFileDrawer:`Show file memory drawer`,hideDrawer:`Hide drawer`,showDrawer:`Show drawer`,editorCharCount:`{{count}} chars`,editorContentLabel:`Memory content`,editorKind:`Kind`,editorScope:`Scope`,editorLifecycleStatus:`Lifecycle status`,editorSupersedes:`Supersedes`,editorContradicts:`Contradicts`,filterByStatus:`Filter by status`,filterByKind:`Filter by kind`,graphHeading:`Relationship map`,graphHeadingFull:`Relationship map — {{id}}`,graphOpenFullscreen:`Open full screen`,projectKnowledge:`project knowledge`,sageSubtitle:`Inspect, connect, curate, and retire durable context used across agent sessions.`,emptyBody:`Select a memory to inspect its metadata and relationship graph, or capture knowledge that future agents should retrieve automatically.`,tabDeleted:`Deleted`,fileDrawerLabel:`File drawer`,selectFilePlaceholder:`— select a file —`,memoryCountSummary:`{{shown}} of {{total}} memories`,updatedSortLabel:`updated ↓`,searchBreakdownAria:`Search breakdown`,searchBreakdownTitle:`Search: {{query}}`,searchBreakdownDual:`dual-channel`,searchBreakdownLexicalOnly:`lexical only`,searchBreakdownLoading:`Running dual-channel search…`,searchBreakdownEmpty:`No matches in either channel.`,searchBreakdownSourceLabel:`Source: {{source}}`,tabAllMemories:`All memories`,tabAllMemoriesHint:`Inspect, curate, retire`,tabAudience:`Audience-scoped`,tabAudienceHint:`Guidance routed to agents`,tabVectorMemory:`Vector memory`,tabVectorMemoryHint:`Semantic embedding store`,editorRelationshipsHint:`Reference exact memory IDs. Relationships are validated and graph edges are rebuilt by SAGE.`,editorTaskTypes:`Task types`,createAction:`Create`,mutationTimeout:`{{verb}} timed out. Your draft is still here.`,loadingSageContent:`Loading SAGE content`,injectorActiveInContext:`Active in context`,injectorInjectionHistory:`Injection history`,injectorContextTransitions:`Context transitions`,metaCreated:`Created`,metaUpdated:`Updated`,metaLastAccessed:`Last accessed`,metaLastVerified:`Last verified`,referencedUnavailable:`Referenced memory is unavailable`,emptyFiltered:`Change the filters or clear the search query.`,emptyCapture:`Capture durable facts, decisions, conventions, and file-bound notes for every agent.`,memoryUnavailable:`Memory is unavailable or has been removed.`,staleConflicts:`stale + conflicts`},Ne={enableLayer:`Enable this boundary layer`,outsideScope:`Outside scope`,askPermission:`Ask permission`,alwaysBlock:`Always block`,allow:`Allow`,allowSelectors:`Allow selectors`,denySelectors:`Deny selectors`,crossPathSelectors:`Shell “Allow” is opaque and can cross path selectors.`,removeLayer:`Remove layer`,taskInspector:`Task inspector`,task:`Task`,dispatched:`Dispatched`,collapseDetails:`Collapse task details`,taskBoundary:`Task boundary`,title:`Title`,managedStage:`Managed stage`,status:`Status`,priority:`Priority`,type:`Type`,labelsCommaSeparated:`Labels (comma separated)`,dueDatePlaceholder:`Due date (ISO or YYYY-MM-DD)`,estimatedHours:`Estimated hours`,actualHours:`Actual hours`,selectBlockingTasks:`Select blocking tasks…`,selectSequentialChain:`Add tasks to a sequential chain…`,enforceChainOrder:`Enforce chain order as dependencies`,assignmentReason:`Change / assignment reason (persisted to activity)`,managedLifecycle:`Managed lifecycle transition`,kanbanAgentTransition:`Kanban Agent transition`,completedAction:`Completed action / reviewer action`,progressComment:`Truthful progress comment (required)`,evidenceUrl:`Evidence attachment URL`,source:`Source`,taskId:`Task ID`,run:`Run`,column:`Column`,primaryModelSource:`Primary model source`,selectProviderModel:`Select exact provider / model…`,fallbackProfile:`Fallback profile (first model is primary)`,selectProfile:`Select configured profile…`,fallbackModels:`Fallback models`,addFallbackModel:`Add fallback model…`,role:`Role`,selectRole:`Select a role…`,assignSkills:`Assign required skills…`,restrictTools:`Restrict to specific tools…`,agentNameOptional:`Agent name (optional)`,retryPolicy:`Retry policy`,maxAttempts:`Max attempts`,costCeilingUsd:`Cost ceiling USD`,grantCapability:`Grant a capability…`,targetBoard:`Target board`,boardPresence:`Board presence`,liveBoardUsers:`Live board users`,kanbanAgent:`Kanban Agent`,watchThisBoard:`Watch this board`,supervisorEngine:`Supervisor engine`,kanbanAgentModelSource:`Kanban Agent model source`,supervisorSkills:`Supervisor skills`,forceLoadSkills:`Force-load agentic skills…`,extraFallbackModels:`Extra fallback models`,optionalFallbacks:`Optional ordered fallbacks…`,queueHealth:`Queue health`,claimableTasks:`Claimable tasks`,runningAssignments:`Running assignments`,inReview:`In review`,manuallyBlocked:`Manually blocked`,failedTasks:`Failed tasks`,blockedByDeps:`Ready/pending tasks blocked by dependencies`,expiredLeases:`Expired lease assignments`,healthy:`healthy`,costCeilingSum:`Sum of costCeilingUsd for running/queued tasks`,liveRunSteer:`Live run — steer it from here`,openLiveRun:`Open the live run view (SDD Hub)`,runAsLiveJob:`Run this board as a live agent job:`,startAsGoal:`Start as Goal`,startAsSdd:`Start as SDD`,runControls:`Run controls`,workerModel:`Worker model`,setModelForTask:`Set model for this task…`,newWorkerName:`New worker name`,duration:`Duration`,liveRun:`Live run`,lastResult:`Last result`,definitionOfDone:`Definition of Done`,failingChecks:`Failing checks`,evidenceMissing:`Evidence missing (agent/council checks without backing refs)`,needsDecomposition:`Needs decomposition`,decompositionPending:`Decomposition proposals awaiting approval`,noOutstanding:`No outstanding verification or decomposition issues on this board.`,kanban:`Kanban`,newBoard:`New board`,createBoard:`Create board`,deleteTask:`Delete task`,runFailed:`run failed`,parked:`parked`,parkedTasks:`Verification spent its refusal budget on these — they will not clear on their own`,parkedReason:`Parked after {{attempts}} refused completion(s): {{reason}} Retrying it unchanged will refuse again.`,splitPendingApproval:`split pending approval`,newTask:`New task`,addTask:`Add task`,duplicateBoard:`Duplicate board`,boardHistory:`Board history`,noHistory:`No history yet`,confirmDelete:`Confirm?`,confirmDeleteBoard:`Click again to confirm board deletion`,deleteBoard:`Delete board`,boardBoundary:`Board boundary`,noBoardSelected:`No kanban board selected.`,expandDetails:`Expand task details`,elapsed:`Elapsed`,assigned:`Assigned`,configuredAgentRoute:`the configured agent route`,subagent:`Subagent`,checkedAgo:`checked {{ago}} ago`,notChecked:`not checked`,auditInterval:`Audit interval (seconds)`,statusReady:`ready`,statusRunning:`running`,statusReview:`review`,statusBlocked:`blocked`,statusFailed:`failed`,statusBlockedByDeps:`blocked by deps`,statusStale:`stale`,runningCost:"~${{cost}} running cost",actionPause:`Pause`,actionResume:`Resume`,actionRetryFailed:`Retry failed`,actionStop:`Stop`,actionReassign:`Reassign`,actionRunNow:`Run now`,deleteTaskAria:`Delete task: {{title}}`,confirmDeleteTask:`Click again to confirm task deletion`,confirmDeleteTaskAria:`Confirm delete: {{title}}`,moveTaskToColumn:`Move {{title}} to column`,activityNoteTemplate:`{{action}} from WebUI to {{target}}.`},Pe={heading:`Cron Jobs`,subtitle:`Scheduled recurring tasks managed by the cron plugin.`,statusDisabled:`Disabled`,statusOverdue:`Overdue`,statusActive:`Active`,jobCount_one:`{{count}} job`,jobCount_other:`{{count}} jobs`,enabledCount:`{{count}} enabled`,overdueCount:`{{count}} overdue`,totalRuns:`{{count}} total runs`,maxConcurrent:`max {{count}} concurrent`,emptyTitle:`No cron jobs scheduled.`,emptyUse:`Use`,emptyToAdd:`to add one.`,thStatus:`Status`,thName:`Name`,thInterval:`Interval`,thRuns:`Runs`,thNextRun:`Next Run`,thLastRun:`Last Run`,thAction:`Action`,lastFiredAtTitle:`Last fired at {{time}}`,footerUse:`Use`,footerToAdd:`to add,`,footerToRemove:`to remove.`},Fe={refreshRosterData:`Refresh roster data`,liveEmpty:`Agents appear here when subagents spawn`,fleetInspector:`Fleet Inspector`,openAgentsPanel:`Open Agents panel`,toolCalls:`Tool Calls`,running:`Running`,projectAgents:`Project Agents`,createOrCloneTitle:`Create or Clone Project Agent`,createOrCloneHint:`Inherit any roster agent as a template, then develop an independent identity, runtime policy and learned history.`,cloneFromRole:`Clone from roster role`,cloneHint:`Prompt, tools, skills and defaults are inherited. Learning and later edits remain isolated to the new agent.`,displayName:`Display name`,descriptionPlaceholder:`Own X, Y and Z workflows for this project and verify their results.`,creating:`Creating…`,noCustomizations:`No customizations yet`,selectAgentEmpty:`Select an agent to edit customizations`,saving:`Saving…`,saveFailed:`Save failed`,failed:`Failed`,learningResumed:`Automatic learning resumed`,optimizationEmptyToast:`Optimization produced an empty result. Try again.`,noActiveModelToast:`No active model on server. Optimization sent to the chat agent.`,learningsEmpty:`Learning entries appear when agents capture output`,allRosterAgents:`All Roster Agents`,optimizing:`Optimizing…`,paused:`paused`,selectLearningAgent:`Select an agent to view learning details`,learningOn:`Learning on`,lastCapture:`Last Capture`,lifetimeCaptures:`Lifetime Captures`,hitRate:`Hit Rate`,neverUsed:`Never Used`,learningsLimitExceeded:`Learned data exceeds soft limit ({{bytes}}B / 8,192B). Optimize to synthesize raw entries into a consolidated document and reduce context volume.`,newPending:`new pending`,viewAction:`View`,applying:`Applying…`,searchPlaceholder:`Search agents by name, role, or description…`,maxIterations:`Max Iterations`,maxToolCalls:`Max Tool Calls`,projectCustomizations:`Project Customizations`,learnedEntries:`learned entries`,teachFailed:`Teach failed`,selectRoleEmpty:`Select a role to inspect or edit`,captureLearned:`Capture learned`,teachThisAgent:`Teach this agent`,teachPlaceholder:`Describe what you want this agent to do better… e.g. 'This agent should always verify versions from npm before recommending'`,heading:`Agent Roster`,headerSummary:`{{customized}} customized · {{entries}} learned entries`,tabLive:`Live Fleet`,tabOfficeMap:`Office Map`,tabCatalog:`Roster Catalog`,tabLearning:`Self-Learning`,tabMemory:`Audience Memory`,tabCustomize:`Customization`,learning:`learning`,learningPaused:`Learning paused`,autoLearningPaused:`Automatic learning paused`,toolsCount_one:`{{count}} tool`,toolsCount_other:`{{count}} tools`,maxItShort:`{{value}} max it`,customizedBadge:`Customized`,needsSummary:`⚠ Needs summary`,timeout:`Timeout`,learnedEntriesCount_one:`{{count}} learned entry`,learnedEntriesCount_other:`{{count}} learned entries`,sessionCapturesCount_one:`{{count}} session capture`,sessionCapturesCount_other:`{{count}} session captures`,noAgentsMatch:`No agents match "{{query}}"`,footerRosterRoles_one:`roster role`,footerRosterRoles_other:`roster roles`,footerCustomized:`customized`,footerTotalLearned_one:`total learned entry`,footerTotalLearned_other:`total learned entries`,clone:`+ Clone`,abc:`ABC`,abcGeneratedFromName:`abc (generated from name)`,roleIdOptional:`Role id (optional)`,purpose:`Purpose`,taskTypesCommaOrOnePer:`Task types (comma or one per line)`,cancel:`Cancel`,selectAnAgentToEditCustomizations:`Select an agent to edit customizations`,llmImprove:`LLM Improve`,reset:`Reset`,editIdentityMd:`Edit identity.md`,editLearnedMd:`Edit learned.md`,editConfigJson:`Edit config.json`,runtimePolicy:`Runtime policy`,retry:`Retry`,noSelfLearningDataYet:`No self-learning data yet`,review:`review →`,selectAnAgentToViewLearning:`Select an agent to view learning details`,entries:`Entries`,size:`Size`,optimizeLearnings:`Optimize Learnings`,keep:`Keep`,drop:`Drop`,describeACommandPatternOrBehavior:`Describe a command, pattern, or behavior you want this agent to remember.`,eGAlwaysUsePnpmForThisProject:`e.g. Always use pnpm for this project`,teach:`Teach`,noActiveFleetAgents:`No active fleet agents`,clear:`Clear`,agentsTotal:`agents total`,leader:`Leader`,iterations:`Iterations`,cost:`Cost`,context:`Context`,contextWindow:`Context Window`,error:`Error`,filterAll:`All ({{count}})`,filterRunning:`Running ({{count}})`,filterDone:`Done ({{count}})`,filterFailed:`Failed ({{count}})`,optimizeAll:`Optimize All ({{count}})`,policyUpdateFailed:`Policy update failed`,noRawEntries:`No raw entries to optimize yet.`,optimizedOk:`Optimized. Consolidated knowledge updated.`,emptySynthesis:`The model returned an empty result. Nothing was changed — try again.`,consolidatedWithModel:`Learnings consolidated with {{model}}.`,consolidatedPlain:`Learnings consolidated.`,resetConfirm:`Reset all project-specific data for agent "{{role}}"?`,resetTitle:`Reset Agent Role`,loadCustomizationFailed:`Failed to load customization`,loadRuntimePolicyFailed:`Failed to load runtime policy`,runtimePolicySaveFailed:`Runtime policy save failed`,llmImprovementFailed:`LLM improvement failed`,agentCreationFailed:`Agent creation failed`,noActiveModelMsg:`No active model on server — optimization sent to chat agent instead.`,optimizationFailed:`Optimization failed`,bulkOptimizationFailed:`Bulk optimization failed`,taskTypesPlaceholder:`X workflow
|
|
7
7
|
Y analysis
|
|
8
8
|
Z verification`},Ie={generic:{name:`Generic Project Agent`,summary:`Flexible template that can be cloned into independently learning project roles.`},"audit-log":{name:`Audit Log`,summary:`Analyzes session logs, event streams, and system traces.`},"bug-hunter":{name:`Bug Hunter`,summary:`Scans code for bugs, code smells, and anti-patterns.`},"refactor-planner":{name:`Refactor Planner`,summary:`Analyzes code structure and produces phased refactoring plans.`},"security-scanner":{name:`Security Scanner`,summary:`Scans code, configs, and dependencies for security issues.`},critic:{name:`Critic`,summary:`Evaluates decisions, plans, and implementations.`},"shadow-agent":{name:`Shadow Agent`,summary:`Background monitoring agent that watches fleet health.`},executor:{name:`Executor`,summary:`General-purpose task executor for delegated work.`},chimera:{name:`Chimera`,summary:`Post-session code quality review of changed files.`},researcher:{name:`Researcher`,summary:`Web research and data gathering specialist.`},"tech-stack":{name:`Tech Stack Validator`,summary:`Validates package/library/framework choices.`},orchestrator:{name:`Orchestrator`,summary:`Coordinates multi-agent task execution.`},supervisor:{name:`Supervisor`,summary:`Oversees subagent execution and handles escalations.`},"quality-gate":{name:`Quality Gate`,summary:`Enforces quality gates on implementations.`},architect:{name:`Architect`,summary:`Makes design and architecture decisions.`},"prompt-engineer":{name:`Prompt Engineer`,summary:`Designs and optimizes system prompts.`},mnemosyne:{name:`Mnemosyne`,summary:`Memory curator — reviews and maintains SAGE integrity.`},autophase:{name:`AutoPhase`,summary:`Manages multi-phase autonomous task execution.`}},Le={heading:`Custom Roster`,loading:`Loading custom roster…`,loadFailed:`Failed to load roster`,invalidJson:`Invalid JSON`,noImprovement:`No improvement suggestion generated.`,improveFailed:`LLM improve failed`,behaviorSaved:`Behavior saved to learned.md`,saveFailedServer:`Save failed — see server logs`,emptyTitle:`No Custom Roster Agents`,emptyBody:`Project-custom agents appear here when you create or edit files under`,createExecutorIdentity:`+ Create executor identity`,entries:`Entries`,size:`Size`,sessionCaptures:`Session Captures`,editIdentity:`Edit identity.md`,editLearned:`Edit learned.md`,editConfig:`Edit config.json`,reviewEntries:`Review entries ({{count}})`,reviewLearnedEntries:`Review learned entries ({{kept}}/{{total}} kept)`,applySelection:`Apply selection`,keep:`✓ Keep`,drop:`✗ Drop`,identityPlaceholder:`# Project identity for {{role}}
|
|
9
9
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Dt as e,Et as t,Pt as n,Rt as r,Tt as i,kt as a,zt as o}from"./config-store-
|
|
1
|
+
import{Dt as e,Et as t,Pt as n,Rt as r,Tt as i,kt as a,zt as o}from"./config-store-xSv1mChc.js";import{yo as s}from"./vendor-V3ydTHqN.js";var c=new WeakMap;function l(e){let t=c.get(e);if(t)return t;let n=e.activeSessionId,r=e.lanes[n]??i,o=a(n),s={messages:r.messages,currentAssistantMessageId:r.currentAssistantMessageId,currentToolId:r.currentToolId,isLoading:r.isLoading,abortController:r.abortController,executions:r.executions,toolMessageIdsByUseId:r.toolMessageIdsByUseId,queue:r.queue,runStart:r.runStart,refining:r.refining,pendingRefinement:r.pendingRefinement,thinkingBuffer:r.thinkingBuffer,thinkingStartedAt:r.thinkingStartedAt,thinkingLogBuffer:r.thinkingLogBuffer,thinkingLogStartedAt:r.thinkingLogStartedAt,boundSessionId:n===`__unbound__`?null:n,addMessage:o.addMessage,setMessages:o.setMessages,updateMessage:o.updateMessage,appendToMessage:o.appendToMessage,finalizeMessage:o.finalizeMessage,setToolResult:o.setToolResult,appendToolProgress:o.appendToolProgress,appendToolProgressLines:o.appendToolProgressLines,getToolMessageId:o.getToolMessageId,setToolResultByUseId:o.setToolResultByUseId,appendToolProgressLinesByUseId:o.appendToolProgressLinesByUseId,setLoading:o.setLoading,setAbortController:o.setAbortController,clearMessages:o.clearMessages,setBoundSessionId:u,setCurrentAssistantMessage:o.setCurrentAssistantMessage,setCurrentToolId:o.setCurrentToolId,truncateAfter:o.truncateAfter,addExecution:o.addExecution,updateExecution:o.updateExecution,enqueue:o.enqueue,dequeue:o.dequeue,dequeueDrainable:o.dequeueDrainable,removeQueued:o.removeQueued,clearQueue:o.clearQueue,setRefining:o.setRefining,setPendingRefinement:o.setPendingRefinement,removeMessage:o.removeMessage,updateLastUserMessage:o.updateLastUserMessage,setRunStart:o.setRunStart,appendThinking:o.appendThinking,clearThinking:o.clearThinking,flushThinkingLog:o.flushThinkingLog,clearThinkingLog:o.clearThinkingLog,switchSession:u};return c.set(e,s),s}function u(e){r(e)}function d(){return l(o.getState())}function f(r){let i=typeof r==`function`?r(d()):r;if(!i)return;let{boundSessionId:a,...o}=i;a!==void 0&&u(a);let s={},c={};for(let[e,t]of Object.entries(o))typeof t==`function`?c[e]=t:s[e]=t;Object.keys(s).length>0&&t().patch(s),Object.keys(c).length>0&&n(e(),c)}function p(e){return o.subscribe((t,n)=>e(l(t),l(n)))}var m=Object.assign(function(e){return s(o,t=>e(l(t)))},{getState:d,getInitialState:d,setState:f,subscribe:p,persist:o.persist});export{m as t};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import{n as e,r as t}from"./rolldown-runtime-hePW80VL.js";import{i as n,t as r}from"./react-core-wiHys0m2.js";import{Jr as i,Mt as a,Ta as o,Yt as s,_o as c,ga as l,vo as u,wo as d,xo as f,yo as p}from"./vendor-V3ydTHqN.js";import{i as m,n as h}from"./i18n--QdD6NCn.js";import{n as g,t as ee}from"./utils-CKsqCaP8.js";import{n as _}from"./ui-store-DC3mkswy.js";import{r as te,y as ne}from"./fonts-DRGbd-AM.js";function re(e,t){if(e==null){let e=Error(t?`Expected ${t} to be defined`:`Expected value to be defined`);throw e.name=`ExpectDefinedError`,e}return e}function ie(e){if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e.steps;if(!Array.isArray(t))return[];let n=[];for(let e of t){if(!e||typeof e!=`object`||Array.isArray(e))continue;let t=e.text;if(typeof t!=`string`||!t.trim())continue;let r=n.length===0&&e.auto===!0;if(n.push(r?{index:n.length+1,text:t,auto:!0}:{index:n.length+1,text:t}),n.length>=4)break}return n}function ae(e){return e!==`tool_use`&&e!==`tool_call`}function oe(e){let t=[],n=e.split(`
|
|
2
|
+
`),r=0,i=null;for(let e of n){let n=r;r+=e.length+1;let a=e.trim(),o=/^(`{3,}|~{3,})/.exec(a)?.[1];if(o!==void 0){if(i===null){i={markerChar:o[0],markerLength:o.length,start:n};continue}o[0]===i.markerChar&&o.length>=i.markerLength&&a===o&&(t.push([i.start,r]),i=null)}}return i!==null&&t.push([i.start,e.length]),{spans:t,open:i}}function se(e){return oe(e).spans}function ce(e,t,n,r){let i=n;for(;;){let n=e.indexOf(t,i);if(n===-1)return-1;if(!r.some(([e,t])=>n>=e&&n<t))return n;i=n+1}}var le=/^(?:(\d+)[.)]\s*|[-*•]\s*)(.+?)(\s+auto="true")?$/,ue=6;function de(e){if(!e.startsWith(`<!--ws:nextstep-json-->`))return e;try{let t=JSON.parse(e.slice(23));return typeof t==`string`&&t.trim()?t:void 0}catch{return}}function fe(e,t=!0){return t?ge(e):he(e)}function pe(e,t,n,r){e.push(r?{index:t,text:n,auto:!0}:{index:t,text:n})}function me(e,t){let n=se(e),r=[],i=new Set,a=0;for(let o of e.split(`
|
|
3
|
+
`)){let e=a;if(a+=o.length+1,n.some(([t,n])=>e>=t&&e<n)){if(t)break;continue}let s=o.trim();if(!s)continue;let c=le.exec(s);if(!c){if(t)break;continue}let l=de(c[2].trim());if(l===void 0)continue;let u=c[1]===void 0?r.length+1:Number.parseInt(c[1],10);if(!i.has(u)&&(i.add(u),pe(r,u,l,!!c[3]&&r.length===0&&u===1),r.length>=ue))break}return r}function he(e){let t=me(e,!1);return{steps:t,texts:t.map(e=>e.text),stripped:e,autoTexts:t.filter(e=>e.auto).map(e=>e.text)}}function ge(e){let t={steps:[],texts:[],stripped:e,autoTexts:[]},n=se(e),r=[...e.matchAll(/<nextsteps\b[^<>]*>\s*\n+/gi)].filter(e=>!e[0].trimEnd().endsWith(`/>`)&&!n.some(([t,n])=>e.index>=t&&e.index<n));for(let[t,i]of r.entries()){let a=i.index+i[0].length,o=ce(e,`</nextsteps>`,a,n);if(o===-1||o>=(r[t+1]?.index??1/0))continue;let s=me(e.slice(a,o),!0);if(s.length===0)continue;let c=o+12;e[c]===`
|
|
4
|
+
`&&c++;let l=(e.slice(0,i.index)+e.slice(c)).replace(/\n{3,}/g,`
|
|
5
|
+
|
|
6
|
+
`).trim();return{steps:s,texts:s.map(e=>e.text),stripped:l,autoTexts:s.filter(e=>e.auto).map(e=>e.text)}}return t}function _e(e){let t=se(e),n=e=>!t.some(([t,n])=>e>=t&&e<n),r=``,i=0,a=/<next_?steps\b[^>]*>/gi;for(let t=a.exec(e);t!==null;t=a.exec(e)){if(!n(t.index))continue;let o;if(t[0].endsWith(`/>`))o=t[0].length;else{let r=/<\/next_?steps\s*>/gi;r.lastIndex=t.index+t[0].length,o=-1;for(let i=r.exec(e);i!==null;i=r.exec(e))if(n(i.index)){o=i.index+i[0].length-t.index;break}o===-1&&(o=t[0].length)}r+=e.slice(i,t.index),i=t.index+o,a.lastIndex=i}return r+=e.slice(i),r.replace(/\n{3,}/g,`
|
|
7
|
+
|
|
8
|
+
`).trim()}var ve=new Map;function v(e){let t=ve.get(e);t!==void 0&&(clearTimeout(t),ve.delete(e))}var ye=0;function be(e){ye=e}function xe(){return ye+=1,ye}function Se(e){if(typeof e!=`object`||!e)return null;let t=e;if(typeof t.text!=`string`||t.mode!==`btw`&&t.mode!==`steer`&&t.mode!==`queue`||typeof t.addedAt!=`number`||!Number.isFinite(t.addedAt))return null;let n=typeof t.itemId==`number`&&Number.isSafeInteger(t.itemId)&&t.itemId>0?t.itemId:xe();return ye=Math.max(ye,n),{text:t.text,mode:t.mode,addedAt:t.addedAt,itemId:n,...t.images?{images:t.images}:{}}}var Ce=1800;function we(e){if(!e)return e;let t=e.split(/\n{2,}/),n=[];for(let e of t)n.length>0&&n[n.length-1]?.trim()===e.trim()||n.push(e);return n.map(e=>{let t=e.split(`
|
|
9
|
+
`),n=[];for(let e of t)n.length>0&&e.trim().length>0&&n[n.length-1]?.trim()===e.trim()||n.push(e);return n.join(`
|
|
10
|
+
`)}).join(`
|
|
11
|
+
|
|
12
|
+
`)}var Te=2097152;function y(e,t=Te){if(e.length<=t)return e;if(t<=55){let n=Math.ceil(t/2);return e.slice(0,n)+e.slice(e.length-(t-n))}let n=t-55,r=Math.ceil(n/2);return e.slice(0,r)+`
|
|
13
|
+
|
|
14
|
+
… [older streamed text omitted to protect memory] …
|
|
15
|
+
|
|
16
|
+
`+e.slice(e.length-(n-r))}var Ee=new WeakMap;function De(e){if(e===void 0)return 0;let t=typeof e==`object`&&!!e;if(t){let t=Ee.get(e);if(t!==void 0)return t}let n;try{n=JSON.stringify(e).length*2}catch{n=Te*2}return t&&Ee.set(e,n),n}function Oe(e,t){let n=y(e.content,t),r=e.toolResult===void 0?void 0:y(e.toolResult,t),i=e.thinkingLog?{...e.thinkingLog,text:y(e.thinkingLog.text,t)}:void 0,a=De(e.toolInput)>t*2?`[tool input omitted from live transcript to protect memory]`:e.toolInput;return n===e.content&&r===e.toolResult&&i?.text===e.thinkingLog?.text&&a===e.toolInput?e:{...e,content:n,...r===void 0?{}:{toolResult:r},...i?{thinkingLog:i}:{},...a===void 0?{}:{toolInput:a}}}function ke(e){let t=384+e.content.length*2+(e.toolResult?.length??0)*2+(e.thinkingLog?.text.length??0)*2+De(e.toolInput);for(let n of e.attachments??[])t+=(n.dataUrl?.length??0)*2+192;for(let n of e.sageLines??[])t+=n.length*2;for(let n of e.progressLines??[])t+=n.length*2;return t}function Ae(e,t={}){let n=Math.max(1,Math.floor(t.maxMessages??1e3)),r=Math.max(1,Math.floor(t.maxBytes??50331648)),i=Math.max(1,Math.floor(t.maxFieldChars??2097152)),a=[],o=0;for(let t=e.length-1;t>=0&&a.length<n;--t){let n=Oe(e[t],i),s=ke(n);if(s>r&&n.attachments?.some(e=>e.dataUrl)&&(n={...n,attachments:n.attachments.map(e=>({...e,dataUrl:void 0}))},s=ke(n)),a.length>0&&o+s>r)break;a.push(n),o+=s}return a.reverse(),a}function je(e){let t=new Map;for(let n of e)n.role===`tool`&&n.toolUseId&&t.set(n.toolUseId,n.id);return t}function Me(e){let t=new Map;for(let n of e)n.role===`tool`&&n.toolUseId&&t.set(n.toolUseId,{id:n.toolUseId,name:n.toolName??`tool`,input:n.toolInput,output:n.toolResult,durationMs:n.toolDurationMs,ok:n.isError!==!0,startedAt:n.timestamp,...n.toolResult===void 0?{}:{completedAt:n.timestamp}});return t}var Ne=`[AUTO-WAKE]`;function Pe(e){return e.trimStart().startsWith(Ne)}function Fe(e,t){let n=e.length,r=n>0?` (${e.join(`, `)})`:``,i=typeof t==`number`&&t>0?` \u2014 woken turn ${t} without your input`:``;return`Auto-wake: ${n===1?`a background delegation result`:`background delegation results`} arrived${r}; the leader started a new turn${i}.`}function Ie(e,t){let n=e.length>0?` (${e.join(`, `)})`:``;return t===1?`Background delegation result ready${n}.`:`${t} background delegation results ready${n}.`}function Le(e){return`Auto-wake paused: ${e} background result${e===1?``:`s`} held after too many consecutive woken turns \u2014 send a message to continue.`}function Re(e){if(!Pe(e))return;let t=/arrived:\s*([^\n]*?)\.\s*Review and continue/i.exec(e);return Fe(t?.[1]?t[1].split(`,`).map(e=>e.trim()).filter(e=>e.length>0):[])}var ze={maxReconnectAttempts:10,initialBackoffMs:1e3,maxBackoffMs:3e4,backoffMultiplier:2,jitterRatio:0,queueLimit:1e3,heartbeatIntervalMs:0,heartbeatTimeoutMs:0};function Be(){return{phase:`idle`,reconnectAttempt:0,lastActivityAt:null,stopped:!1}}function Ve(e){return e.stopped?e:{...e,phase:`connecting`}}function He(e,t=Date.now()){return{...e,phase:`open`,reconnectAttempt:0,lastActivityAt:t,stopped:!1}}function Ue(e,t=Date.now()){return{...e,lastActivityAt:t}}function We(e){return{...e,phase:`closed`,stopped:!0}}function Ge(e){return{...e,phase:`idle`,reconnectAttempt:0,stopped:!1}}function Ke(e,t,n=Date.now(),r=Math.random){if(e.stopped||e.reconnectAttempt>=t.maxReconnectAttempts)return{state:{...e,phase:`closed`},plan:null};let i=e.reconnectAttempt+1,a=Math.min(t.initialBackoffMs*t.backoffMultiplier**(i-1),t.maxBackoffMs),o=(r()*2-1)*t.jitterRatio,s=Math.max(0,Math.round(a*(1+o)));return{state:{...e,phase:`reconnecting`,reconnectAttempt:i},plan:{attempt:i,delayMs:s,retryAt:n+s}}}var qe=`abort,ping,user_message,tool.confirm_result,user.input_submit,topic.advice,completion.request,model.switch,model.refine,model.fallback_choice,autonomy.switch,context.clear,context.compact,context.debug,context.editor.open,context.editor.validate,context.editor.apply,context.mode.create,context.mode.delete,context.mode.switch,context.mode.update,context.modes.list,context.repair,mode.switch,modes.list,session.checkpoints,session.delete,session.focus,session.inspect,session.new,session.rename,session.resume,session.rewind,session.save,session.subscribe,sessions.list,side_effects.list,stats.get,todo.update,todos.clear,todos.get,todos.remove`.split(`,`),Je=[`collab.join`,`collab.leave`,`collab.annotate`,`collab.resolve`,`collab.request_pause`,`collab.resume`,`collab.grant_control`,`collab.inject_tool`,`mailbox.action`,`mailbox.agents`,`mailbox.clear`,`mailbox.compact`,`mailbox.messages`,`mailbox.purge`,`mailbox.send`],Ye=`brain.ask,brain.config.get,brain.config.set,brain.risk,brain.status,chronicle.facet,chronicle.facets,chronicle.graph,chronicle.metrics,chronicle.query,chronicle.status,config.doctor,design.list,design.materialize,design.set,design.state,design.swap,design.tune,design.use,design.verify,memory.list,memory.sage.backfillRecoverable,memory.sage.candidateResolve,memory.sage.delete,memory.sage.forFile,memory.sage.get,memory.sage.graph,memory.sage.list,memory.sage.listCandidates,memory.sage.listPage,memory.sage.recover,memory.sage.remember,memory.sage.searchBreakdown,memory.sage.update`.split(`,`),Xe=`auth.oauth.cancel,auth.oauth.code,auth.oauth.list,auth.oauth.start,chimera.finding.transition,chimera.report.add_note,chimera.report.get,chimera.report.transition,chimera.reports.list,chimera.reports.query,mcp.add,mcp.disable,mcp.discover,mcp.enable,mcp.list,mcp.prompt.get,mcp.prompts,mcp.remove,mcp.resource.read,mcp.resources,mcp.restart,mcp.sleep,mcp.update,mcp.wake,provider.audit.get,prompts.content,prompts.create,prompts.favorite,prompts.journal,prompts.list,prompts.recent,prompts.search,prompts.used,skills.content,skills.create,skills.edit,skills.export,skills.install,skills.list,skills.uninstall,skills.update`.split(`,`),Ze=`goal-state.get,goal.addTask,goal.assess,goal.assignTask,goal.clear,goal.get,goal.list,goal.load,goal.moveTask,goal.pause,goal.resume,goal.retryTask,goal.revert,goal.runTask,goal.save,goal.selectPhase,goal.start,goal.state,goal.status,goal.stop,goal.taskStatus,goal.toggleAutonomous,plan.get,plan.item.update,plan.template_use,task.update,tasks.get`.split(`,`),Qe=`sdd.board.cancel_task,sdd.board.cleanup_worktrees,sdd.board.delete_task,sdd.board.destroy,sdd.board.get,sdd.board.list,sdd.board.pause,sdd.board.reassign,sdd.board.resume,sdd.board.retry,sdd.board.retry_all_failed,sdd.board.rollback,sdd.board.set_task_fallbacks,sdd.board.set_task_model,sdd.board.set_task_verification,sdd.board.split_task,sdd.board.stop,sdd.run.from_graph,sdd.run.from_spec,sdd.run.start,sdd.spec.approve,sdd.spec.discard,sdd.spec.get,sdd.spec.message,sdd.spec.rewind,sdd.spec.start,specs.get,specs.list,specs.taskStatus`.split(`,`),$e=`files.create,files.delete,files.list,files.move,files.read,files.rename,files.skeleton,files.tree,files.write,git.changes,git.commit,git.diff,git.discard,git.info,git.history,git.commit_detail,git.commit_file_diff,git.stage,git.unstage,projects.add,projects.list,projects.select,working_dir.set,worktree.cleanup,worktree.diff,worktree.merge,worktree.remove,worktree.scan,shell.open,process.kill,process.killAll,process.list,terminal.close,terminal.create,terminal.input,terminal.resize`.split(`,`),et=`codebase.index.server.shutdown,connections.health,connections.service_action,diag.get,key.add,key.delete,key.set_active,key.update,prefs.get,prefs.update,provider.add,provider.clear_models,provider.custom_models.remove,provider.custom_models.set,provider.models,provider.models.search,provider.probe,provider.quota.get,provider.remove,provider.status.clear,provider.status.get,provider.status.retry,provider.test.cancel,provider.test.run,provider.undo_clear,provider.update,providers.list,providers.saved,system_prompt.get,tool.disable,tool.enable,tools.list,webui.shutdown`.split(`,`),tt=`error,log,pong,side_effects,agent.status_changed,agent.timeline.message,client.status_update,chimera.report_available,compaction.failed,completion.result,context.compacted,context.debug,context.editor.snapshot,context.editor.validation,context.editor.applied,context.mode.changed,context.modes.list,context.repaired,ctx.max_context,ctx.pct,delegate.completed,delegate.started,delegation.auto_wake_started,delegation.auto_wake_suppressed,delegation.delivery_pending,iteration.completed,iteration.limit_reached,iteration.started,model.refine_result,modes.list,provider.active_blocked,provider.error,provider.fallback,provider.fallback_pending,provider.model_switched,provider.response,provider.retry,provider.status_changed,provider.stream_error,provider.text_delta,provider.thinking_delta,run.result,session.checkpoints,session.damaged,session.end,session.inspect,session.rewound,session.resume_progress,session.run_state,session.start,session.stats,sessions.list,sessions.status_update,stats.get,token.cost_estimate_unavailable,token.threshold,tool.confirm_needed,tool.confirm_resolved,tool.disabled,tool.enabled,tool.executed,tool.loop_detected,tool.progress,tool.started,user.input_requested,user.input_resolved,topic.advice_result,tools.list,trust.persisted`.split(`,`),nt=[`collab.annotation.added`,`collab.annotation.resolved`,`collab.event`,`collab.injection.granted`,`collab.participant.joined`,`collab.participant.left`,`collab.pause.granted`,`collab.pause.released`,`collab.state`,`mailbox.action_result`,`mailbox.agent_registered`,`mailbox.agent_deregistered`,`mailbox.agents`,`mailbox.cleared`,`mailbox.compacted`,`mailbox.event`,`mailbox.messages`,`mailbox.sent`,`mailbox.purged`,`mailbox.received`,`subagent.budget_extended`,`subagent.event`],rt=`brain.answer,brain.config,brain.event,brain.status,chronicle.error,chronicle.facet_result,chronicle.facets_result,chronicle.graph_result,chronicle.metrics_result,chronicle.query_result,chronicle.status_result,config.doctor.result,design.list,design.materialize,design.set,design.state,design.swap,design.tune,design.use,design.verify,memory.event,memory.list,memory.sage.backfillRecoverable,memory.sage.candidateResolve,memory.sage.delete,memory.sage.forFile,memory.sage.get,memory.sage.graph,memory.sage.list,memory.sage.listCandidates,memory.sage.listPage,memory.sage.recover,memory.sage.remember,memory.sage.searchBreakdown,memory.sage.update`.split(`,`),it=`chimera.finding.updated,chimera.report.detail,chimera.report.note_added,chimera.report.updated,chimera.reports,mcp.content.error,mcp.content.selected,mcp.list,mcp.operation_result,mcp.prompts,mcp.resources,mcp.server.added,mcp.server.connected,mcp.server.disconnected,mcp.server.discovered,mcp.server.error,mcp.server.reconnected,mcp.server.removed,mcp.server.sleeping,mcp.server.updated,mcp.server.waking,provider.audit.history,prompts.content,prompts.created,prompts.favorite,prompts.journal,prompts.list,prompts.recent,prompts.search,prompts.used,skills.content,skills.created,skills.edited,skills.exported,skills.installed,skills.list,skills.uninstalled,skills.updated`.split(`,`),at=`budget.decision,budget.threshold_reached,coordinator.stats,coordinator.status,eternal.iteration,fleet.concurrency_update,goal-state.updated,goal.assess.result,goal.list,goal.paused,goal.resumed,goal.saved,goal.error,goal.stopped,goal.failed,goal.completed,goal.cleared,goal.reverted,goal.progress,goal.state,in_flight.ended,in_flight.started,plan.updated,task.completed,task.failed,task.pending,task.started,tasks.updated,todos.cleared,todos.updated`.split(`,`),ot=[`kanban.task.activity`,`sdd.board.lifecycle_result`,`sdd.board.list`,`sdd.board.snapshot`,`sdd.run.started`,`sdd.spec.agent_text`,`sdd.spec.error`,`sdd.spec.snapshot`,`specs.detail`,`specs.list`],st=[`consensus.vote_cast`,`consensus.vote_initiated`,`consensus.vote_resolved`,`cron.job_fired`,`cron.snapshot`,`techstack.job.cancelled`,`techstack.job.failed`,`techstack.job.progress`,`techstack.job.started`,`techstack.report.delivered`,`techstack.report.ready`,`techstack.snapshot.updated`,`techstack.workspace.completed`],ct=`checkpoint.written,codemap.file_event,codemap.index_updated,codemap.tool_executed,codemap.tool_started,file.saved,files.created,files.deleted,files.list,files.moved,files.read,files.renamed,files.skeleton_result,files.tree,files.tree.changed,files.written,git.action_result,git.changes,git.diff,git.info,git.history,git.commit_detail,git.commit_file_diff,process.list,projects.added,projects.list,projects.selected,terminal.exit,terminal.output,working_dir.changed,worktree.cleanup_result,worktree.diff_result,worktree.event,worktree.merge_result,worktree.orphans,worktree.state`.split(`,`),lt=[`auth.oauth.status`,`auth.oauth.providers`,`codebase.index.server.shutdown_result`,`connections.auto_heal_status`,`connections.health_error`,`connections.health_result`,`connections.service_action_result`,`diag.get`,`key.operation_result`,`model.switch_result`,`prefs.updated`,`provider.catalog`,`provider.models`,`provider.models.search_result`,`provider.probe`,`provider.quota`,`provider.status.snapshot`,`provider.test.complete`,`provider.test.result`,`provider.test.started`,`providers.saved`,`system_prompt.info`],ut=[...qe,...Je,...$e,...et,...Ze,...Qe,...Ye,...Xe],dt=[...tt,...nt,...ct,...lt,...at,...ot,...st,...rt,...it],ft=new Set(ut),pt=new Set(dt);function mt(e,t){return(t===`client`?ft:pt).has(e)||e.startsWith(`kanban.`)&&e.length>7||e.startsWith(`agent-roster.`)&&e.length>13}var ht=new Set([`__proto__`,`constructor`,`prototype`]),gt=32;function _t(e,t,n){if(n>gt)return{code:`too_deep`,message:`Protocol payload exceeds the nesting limit`,path:t};if(typeof e!=`object`||!e)return null;for(let r of Object.keys(e)){let i=`${t}.${r}`;if(ht.has(r))return{code:`unsafe_key`,message:`Unsafe protocol key: ${r}`,path:i};let a=_t(e[r],i,n+1);if(a)return a}return null}function vt(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return{ok:!1,issue:{code:`invalid_envelope`,message:`Protocol message must be an object`}};let n=e;if(typeof n.type!=`string`||n.type.length===0)return{ok:!1,issue:{code:`invalid_type`,message:`Protocol message type must be a non-empty string`}};if(!mt(n.type,t))return{ok:!1,issue:{code:`unknown_type`,message:`Unknown ${t} message: ${n.type}`}};if(t===`server`&&!Object.hasOwn(n,`payload`))return{ok:!1,issue:{code:`invalid_envelope`,message:`Server protocol messages require a payload`}};let r=_t(n,`$`,0);return r?{ok:!1,issue:r}:{ok:!0,message:e}}function yt(e,t){try{return vt(JSON.parse(e),t)}catch{return{ok:!1,issue:{code:`invalid_envelope`,message:`Protocol frame is not valid JSON`}}}}function bt(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function b(e,t=``){return typeof e==`string`?e:t}function xt(e,t=0){return typeof e==`number`&&Number.isFinite(e)?e:t}function St(e){let t=bt(e.payload);if(!t)return null;switch(e.type){case`provider.thinking_delta`:{let e=b(t.text);return e?{kind:`thinking-delta`,text:e}:null}case`provider.text_delta`:{let e=b(t.text);return e?{kind:`text-delta`,text:e,messageId:b(t.messageId)}:null}case`provider.response`:return{kind:`response`,content:t.content,stopReason:b(t.stopReason)};case`run.result`:return{kind:`run-result`,status:b(t.status),iterations:xt(t.iterations,1),...typeof t.finalText==`string`?{finalText:t.finalText}:{}};case`error`:return{kind:`error`,message:b(t.message,`Run failed`)};default:return null}}function Ct(e){let t=bt(e.payload);if(!t)return null;if(e.type===`tool.started`){let e=b(t.name,`tool`);return{kind:`started`,id:b(t.id,e),name:e,input:t.input,messageId:b(t.messageId)}}if(e.type===`tool.progress`){let e=bt(t.event);return{kind:`progress`,id:b(t.id),name:b(t.name,`tool`),eventType:b(e?.type),text:b(e?.text).trim()}}return e.type===`tool.executed`?{kind:`executed`,id:b(t.id),name:b(t.name),ok:t.ok!==!1,durationMs:xt(t.durationMs),...typeof t.output==`string`?{output:t.output}:{},...x(t.outputBytes)===void 0?{}:{outputBytes:x(t.outputBytes)},...x(t.outputTokens)===void 0?{}:{outputTokens:x(t.outputTokens)},...x(t.outputLines)===void 0?{}:{outputLines:x(t.outputLines)},...Array.isArray(t.sage)?{sage:t.sage.filter(e=>typeof e==`string`)}:{}}:null}function x(e){if(typeof e==`number`&&Number.isFinite(e))return e}function wt(e){return typeof e==`string`&&e.length>0?e:void 0}function Tt(e){let t=bt(e.payload);if(!t)return null;switch(e.type){case`fleet.concurrency_update`:return{kind:`concurrency`,active:xt(t.fleetConcurrency),maximum:xt(t.fleetConcurrencyMax),maxSpawns:x(t.maxSpawns),usedSpawns:x(t.usedSpawns),remainingSpawns:x(t.remainingSpawns),maxSpawnsSource:wt(t.maxSpawnsSource),maxConcurrentSource:wt(t.maxConcurrentSource),effectiveSource:wt(t.effectiveSource),checkpointMaxSpawns:x(t.checkpointMaxSpawns),ceilingMismatch:t.ceilingMismatch===!0||void 0};case`client.status_update`:return{kind:`client-status`,status:t};case`sessions.status_update`:return{kind:`sessions`,sessions:Array.isArray(t.sessions)?t.sessions:[]};case`coordinator.stats`:return{kind:`coordinator`,agents:Array.isArray(t.subagentStatuses)?t.subagentStatuses.filter(e=>bt(e)!==null):[]};default:return null}}var Et=[`protocol.directional-decoder`,`protocol.recursive-key-safety`,`chronicle.query`,`chronicle.facet`,`chronicle.facets`,`chronicle.graph`,`chronicle.metrics`,`chronicle.status`,`connections.health`,`context.topic-boundary`,`sdd.interview.continuity`,`sdd.run.from_graph`];function Dt(e){let t=e.protocolVersion,n=t===void 0,r=n?1:Math.min(t,1),i=n||Number.isInteger(t)&&t>=1,a=new Set(e.protocolCapabilities??[]);return{compatible:i,legacyPeer:n,version:r,capabilities:Et.filter(e=>a.has(e))}}var S=4,C=`__unbound__`;function Ot(){return{messages:[],currentAssistantMessageId:null,currentToolId:null,isLoading:!1,abortController:null,executions:new Map,toolMessageIdsByUseId:new Map,queue:[],runStart:null,refining:!1,pendingRefinement:null,thinkingBuffer:``,thinkingStartedAt:null,thinkingLogBuffer:``,thinkingLogStartedAt:null,pendingConfirm:null,pendingFallback:null}}var kt=Ot(),w=u()(c(()=>({lanes:{},activeSessionId:C}),{name:`wrongstack-chat-lanes`,version:2,partialize:e=>({lanes:Object.fromEntries(Object.entries(e.lanes).slice(0,S).map(([e,t])=>[e,{messages:t.messages.slice(-200).map(e=>e.attachments?.some(e=>e.dataUrl)?{...e,attachments:e.attachments.map(e=>({...e,dataUrl:void 0}))}:e),queue:t.queue.filter(e=>e.alreadyDispatched!==!0).map(e=>e.images?{...e,images:void 0}:e),thinkingLogBuffer:t.thinkingLogBuffer}]))}),merge:(e,t)=>{let n=e??{},r={};for(let[e,t]of Object.entries(n.lanes??{}).slice(0,S)){let n=Ot();n.messages=Ae(Array.isArray(t.messages)?t.messages:[]),n.executions=Me(n.messages),n.toolMessageIdsByUseId=je(n.messages),n.queue=(Array.isArray(t.queue)?t.queue:[]).flatMap(e=>{let t=Se(e);return t?(be(Math.max(t.itemId,0)),[t]):[]}),n.thinkingLogBuffer=typeof t.thinkingLogBuffer==`string`?t.thinkingLogBuffer:``,r[e]=n}return{...t,lanes:r,activeSessionId:C}},onRehydrateStorage:()=>(e,t)=>{t||typeof window<`u`&&(window.__wrongstackChatRehydrated=!0)}}));function T(e){return e?w.getState().lanes[e]??kt:kt}function At(e){return e?e in w.getState().lanes:!1}function jt(){return Object.keys(w.getState().lanes)}function Mt(e){return e?(w.getState().lanes[e]||w.setState(t=>({lanes:{...t.lanes,[e]:Ot()}})),e):C}var Nt=new Set;function Pt(e){return Nt.add(e),()=>{Nt.delete(e)}}function Ft(e){let t=w.getState().lanes[e];if(t){for(let e of t.queue)e.itemId!==void 0&&v(e.itemId);w.setState(t=>{let n={...t.lanes};return delete n[e],{lanes:n}})}zt.delete(e);for(let t of Nt)try{t(e)}catch{}}function It(e){if(!e||e===`__unbound__`)return;let t=w.getState(),n=t.lanes[C];if(!n)return;let r=t.lanes[e],i=!r||r.messages.length===0&&r.queue.length===0,a=n.messages.length===0&&n.queue.length===0;zt.delete(C),w.setState(t=>{let r={...t.lanes};return delete r[C],i&&!a?r[e]=n:r[e]||(r[e]=Ot()),{lanes:r}})}function Lt(e){let t=e||`__unbound__`,n=w.getState();n.activeSessionId===t&&n.lanes[t]||(Mt(t),w.setState({activeSessionId:t}))}function Rt(){return w.getState().activeSessionId}function E(e,t){w.setState(n=>{let r=n.lanes[e]??Ot(),i=t(r);return i?{lanes:{...n.lanes,[e]:{...r,...i}}}:n.lanes[e]?{}:{lanes:{...n.lanes,[e]:r}}})}var zt=new Map;function Bt(e){let{lanes:t}=w.getState();for(let[n,r]of Object.entries(t))r.pendingConfirm?.id===e&&E(n,()=>({pendingConfirm:null}))}function Vt(e){let{lanes:t}=w.getState();for(let[n,r]of Object.entries(t))r.pendingFallback?.requestId===e&&E(n,()=>({pendingFallback:null}))}function D(e){let t=e||`__unbound__`,n=zt.get(t);if(n)return n;let r=()=>w.getState().lanes[t]??kt,i={sessionId:t,get messages(){return r().messages},get currentAssistantMessageId(){return r().currentAssistantMessageId},get currentToolId(){return r().currentToolId},get isLoading(){return r().isLoading},get abortController(){return r().abortController},get executions(){return r().executions},get toolMessageIdsByUseId(){return r().toolMessageIdsByUseId},get queue(){return r().queue},get runStart(){return r().runStart},get refining(){return r().refining},get pendingRefinement(){return r().pendingRefinement},get thinkingBuffer(){return r().thinkingBuffer},get thinkingStartedAt(){return r().thinkingStartedAt},get thinkingLogBuffer(){return r().thinkingLogBuffer},get thinkingLogStartedAt(){return r().thinkingLogStartedAt},get pendingConfirm(){return r().pendingConfirm},patch:e=>E(t,()=>e),addMessage:e=>{let n=e.id??`msg_${Date.now()}_${g().slice(0,8)}`,r={...e,id:n,timestamp:e.timestamp??Date.now()};return E(t,t=>{let i=Ae([...t.messages,r]),a=je(i),o=t.executions;if(o.size>0){let e=new Map,t=!1;for(let[n,r]of o)a.has(n)?e.set(n,r):t=!0;t&&(o=e)}if(r.role===`tool`&&r.toolUseId){let e=new Map(a);e.set(r.toolUseId,n),a=e}return{messages:i,toolMessageIdsByUseId:a,...o===t.executions?{}:{executions:o},currentAssistantMessageId:e.role===`assistant`?n:t.currentAssistantMessageId}}),n},setMessages:e=>{let n=Ae(e);E(t,()=>({messages:n,currentAssistantMessageId:null,currentToolId:null,executions:Me(n),toolMessageIdsByUseId:je(n),thinkingBuffer:``,thinkingStartedAt:null,thinkingLogBuffer:``,thinkingLogStartedAt:null}))},updateMessage:(e,n)=>E(t,t=>({messages:t.messages.map(t=>t.id===e?{...t,...n}:t)})),appendToMessage:(e,n)=>E(t,t=>({messages:t.messages.map(t=>t.id===e?{...t,content:y(t.content+n)}:t)})),finalizeMessage:(e,n)=>{let r=n?.final!==!1;E(t,t=>({messages:t.messages.map(t=>{if(t.id!==e)return t;if(t.role!==`assistant`)return{...t,content:we(t.content),streaming:!1};let n=fe(t.content),i=r&&n.steps.length>0?{steps:n.steps}:void 0;return{...t,content:we(n.stripped),streaming:!1,...i?{nextSteps:i}:{}}})}))},setToolResult:(e,n,r)=>E(t,t=>({messages:t.messages.map(t=>t.id===e?{...t,toolResult:y(n),isError:!r,progressLines:void 0}:t)})),appendToolProgress:(e,t)=>{i.appendToolProgressLines(e,[t])},appendToolProgressLines:(e,n)=>{n.length!==0&&E(t,t=>({messages:t.messages.map(t=>{if(t.id!==e)return t;let r=t.progressLines??[];return r.push(...n),r.length>30&&r.splice(0,r.length-30),{...t,progressLines:r}})}))},getToolMessageId:e=>r().toolMessageIdsByUseId.get(e),setToolResultByUseId:(e,t,n)=>{let a=r().toolMessageIdsByUseId.get(e);a&&i.setToolResult(a,t,n)},appendToolProgressLinesByUseId:(e,t)=>{let n=r().toolMessageIdsByUseId.get(e);n&&i.appendToolProgressLines(n,t)},setLoading:e=>E(t,()=>({isLoading:e})),setAbortController:e=>E(t,()=>({abortController:e})),clearMessages:()=>E(t,()=>({messages:[],currentAssistantMessageId:null,currentToolId:null,executions:new Map,toolMessageIdsByUseId:new Map,thinkingBuffer:``,thinkingStartedAt:null,thinkingLogBuffer:``,thinkingLogStartedAt:null,pendingConfirm:null})),setCurrentAssistantMessage:e=>E(t,()=>({currentAssistantMessageId:e})),setCurrentToolId:e=>E(t,()=>({currentToolId:e})),truncateAfter:e=>E(t,t=>{let n=t.messages.findIndex(t=>t.id===e);if(n===-1)return;let r=t.messages.slice(0,n+1),i=new Set(r.map(e=>e.id)),a=new Map([...t.executions].filter(([,e])=>i.has(e.id)));return{messages:r,currentAssistantMessageId:null,currentToolId:null,toolMessageIdsByUseId:je(r),executions:a}}),addExecution:e=>E(t,t=>{let n=new Map(t.executions);return n.set(e.id,e),{executions:n}}),updateExecution:(e,n)=>E(t,t=>{let r=new Map(t.executions),i=r.get(e);if(i)return r.set(e,{...i,...n}),{executions:r}}),setRefining:e=>E(t,()=>({refining:e})),setPendingConfirm:e=>E(t,()=>({pendingConfirm:e})),setPendingFallback:e=>E(t,()=>({pendingFallback:e})),setPendingRefinement:(e,n,r=`queue`)=>E(t,()=>({pendingRefinement:e===null?null:{text:e,images:n??[],mode:r}})),enqueue:(e,n=`queue`,r,a)=>{let o=Date.now(),s=xe();if(E(t,t=>({queue:[...t.queue,{text:e,mode:n,addedAt:o,itemId:s,...r?.length?{images:r}:{},...a?{alreadyDispatched:!0}:{}}]})),!a)return;let c=setTimeout(()=>{ve.delete(s);let e=null;E(t,t=>{let n=t.queue.find(e=>e.itemId===s&&e.alreadyDispatched===!0);if(n&&n.bubbleAdded!==!0){let t=n.images??[];e={role:`user`,content:n.text,...t.length>0?{attachments:t.map(e=>({id:e.id,kind:`image`,dataUrl:e.dataUrl,mediaType:e.mediaType,bytes:e.bytes,name:e.name}))}:{}}}return{queue:t.queue.filter(e=>e.itemId!==s||e.alreadyDispatched!==!0)}}),e&&i.addMessage(e)},Ce);ve.set(s,c)},dequeue:()=>{let e=r().queue;if(e.length===0)return null;let[n,...i]=e;return n?.itemId!==void 0&&v(n.itemId),E(t,()=>({queue:i})),re(n)},dequeueDrainable:()=>{let e=[],n={popped:null},r=t=>{let n=t.images??[];e.push({role:`user`,content:t.text,...n.length>0?{attachments:n.map(e=>({id:e.id,kind:`image`,dataUrl:e.dataUrl,mediaType:e.mediaType,bytes:e.bytes,name:e.name}))}:{}})};E(t,t=>{let i=t.queue.findIndex(e=>e.alreadyDispatched!==!0);if(i===-1){for(let e of t.queue)e.alreadyDispatched===!0&&e.bubbleAdded!==!0&&r(e);return e.length===0?void 0:{queue:t.queue.filter(e=>e.alreadyDispatched!==!0||e.bubbleAdded===!0)}}for(let e=0;e<i;e+=1){let n=t.queue[e];n.bubbleAdded!==!0&&r(n)}n.popped=t.queue[i];let a=t.queue.map((e,t)=>t<i&&e.bubbleAdded!==!0&&e.alreadyDispatched===!0?{...e,bubbleAdded:!0}:e);return{queue:[...a.slice(0,i),...a.slice(i+1)]}});for(let t of e)i.addMessage(t);let a=n.popped;return a?.itemId!==void 0&&v(a.itemId),a},removeQueued:e=>E(t,t=>{let n=t.queue[e];return n?.itemId!==void 0&&v(n.itemId),{queue:t.queue.filter((t,n)=>n!==e)}}),clearQueue:()=>E(t,e=>{for(let t of e.queue)t.itemId!==void 0&&v(t.itemId);return{queue:[]}}),removeMessage:e=>E(t,t=>{let n=t.messages.filter(t=>t.id!==e);return{messages:n,toolMessageIdsByUseId:je(n)}}),updateLastUserMessage:e=>E(t,t=>{for(let n=t.messages.length-1;n>=0;n--)if(t.messages[n].role===`user`){let r=[...t.messages];return r[n]={...r[n],content:e},{messages:r}}}),setRunStart:e=>E(t,()=>({runStart:e})),appendThinking:e=>E(t,t=>({thinkingBuffer:y(t.thinkingBuffer+e),thinkingStartedAt:t.thinkingStartedAt??Date.now(),thinkingLogBuffer:y(t.thinkingLogBuffer+e),thinkingLogStartedAt:t.thinkingLogStartedAt??Date.now()})),clearThinking:()=>E(t,()=>({thinkingBuffer:``,thinkingStartedAt:null})),flushThinkingLog:e=>{let t=r(),n=t.thinkingLogBuffer.trim();if(!n)return;let a=t.thinkingLogStartedAt??Date.now();i.addMessage({role:`system`,content:``,thinkingLog:{iteration:e,text:n,startedAt:a,durationMs:Math.max(0,Date.now()-a)}}),i.clearThinkingLog()},clearThinkingLog:()=>E(t,()=>({thinkingLogBuffer:``,thinkingLogStartedAt:null}))};return zt.set(t,i),i}function Ht(e,t){let n=D(e);for(let[e,r]of Object.entries(t))typeof r==`function`&&(n[e]=r)}function Ut(){return D(w.getState().activeSessionId)}var Wt=u()((e,t)=>({bySession:{},recordReport:n=>!n.reportId||t().bySession[n.sessionId]?.some(e=>e.reportId===n.reportId)?!1:(e(e=>({bySession:{...e.bySession,[n.sessionId]:[...e.bySession[n.sessionId]??[],n]}})),!0),markActioned:(t,n,r)=>{e(e=>{let i=e.bySession[t];return i?.some(e=>e.reportId===n)?{bySession:{...e.bySession,[t]:i.map(e=>e.reportId===n?{...e,actionedAt:e.actionedAt??r}:e)}}:e})},hydrateReports:(t,n)=>{n.length!==0&&e(e=>{let r=new Set((e.bySession[t]??[]).map(e=>e.reportId)),i=n.filter(e=>e.reportId&&!r.has(e.reportId));return i.length===0?e:{bySession:{...e.bySession,[t]:[...e.bySession[t]??[],...i]}}})},forgetSession:t=>{e(e=>{if(!(t in e.bySession))return e;let n={...e.bySession};return delete n[t],{bySession:n}})}})),Gt=`signal`,Kt=`wrongstack-palette`,qt=[{id:`signal`,labelKey:`settings:general.paletteSignal`,swatch:`hsl(345.9 99% 58.8%)`,swatchSecondary:`hsl(37.5 98.4% 50%)`},{id:`emerald-gold`,labelKey:`settings:general.paletteEmeraldGold`,swatch:`hsl(152 66% 48%)`,swatchSecondary:`hsl(42 96% 54%)`},{id:`blue-navy`,labelKey:`settings:general.paletteBlueNavy`,swatch:`hsl(213 90% 60%)`,swatchSecondary:`hsl(36 96% 54%)`},{id:`purple-pink`,labelKey:`settings:general.palettePurplePink`,swatch:`hsl(263 82% 66%)`,swatchSecondary:`hsl(332 94% 62%)`},{id:`cyan-teal`,labelKey:`settings:general.paletteCyanTeal`,swatch:`hsl(180 76% 46%)`,swatchSecondary:`hsl(36 96% 54%)`},{id:`rose-copper`,labelKey:`settings:general.paletteRoseCopper`,swatch:`hsl(14 82% 56%)`,swatchSecondary:`hsl(34 96% 54%)`},{id:`indigo-amber`,labelKey:`settings:general.paletteIndigoAmber`,swatch:`hsl(233 74% 58%)`,swatchSecondary:`hsl(38 96% 54%)`},{id:`sage-sand`,labelKey:`settings:general.paletteSageSand`,swatch:`hsl(130 28% 55%)`,swatchSecondary:`hsl(36 55% 72%)`},{id:`slate-violet`,labelKey:`settings:general.paletteSlateViolet`,swatch:`hsl(248 50% 55%)`,swatchSecondary:`hsl(285 52% 62%)`},{id:`coral-mint`,labelKey:`settings:general.paletteCoralMint`,swatch:`hsl(12 85% 62%)`,swatchSecondary:`hsl(162 55% 55%)`},{id:`arctic-ember`,labelKey:`settings:general.paletteArcticEmber`,swatch:`hsl(195 85% 58%)`,swatchSecondary:`hsl(14 85% 55%)`},{id:`moss-rust`,labelKey:`settings:general.paletteMossRust`,swatch:`hsl(100 45% 38%)`,swatchSecondary:`hsl(18 70% 48%)`}];function Jt(e){return typeof e==`string`&&qt.some(t=>t.id===e)}function Yt(e){return qt.find(t=>t.id===e)??qt[0]}function Xt(e,t){if(typeof window>`u`)return t;try{let n=window.localStorage.getItem(e);return Jt(n)?n:t}catch{return t}}function Zt(e,t){t===`signal`?e.removeAttribute(`data-palette`):e.setAttribute(`data-palette`,t)}function Qt(){return{session:null,totalTokens:{input:0,output:0,cacheRead:0,cacheWrite:0},lastInputTokens:0,cost:0,startTime:null,maxContext:0,contextLimitWarning:null,cacheStats:null,inputCost:0,outputCost:0,cacheReadCost:0,reasoningEffortLevels:void 0,effortSupported:void 0,projectReasoningEffort:void 0,mode:`default`,contextMode:`balanced`,iteration:null,todos:[],droppedTools:0,lastVisitedAt:0}}var $t=Qt(),O=`__unbound__`,k=u()(c(()=>({lanes:{},activeSessionId:O,projectName:``,projectRoot:``,cwd:``,modes:[],contextModes:[],appVersion:``,latestVersion:``,updateAvailable:!1}),{name:`wrongstack-session-lanes`,version:2,partialize:e=>({projectName:e.projectName,projectRoot:e.projectRoot,cwd:e.cwd,lanes:Object.fromEntries(Object.entries(e.lanes).slice(0,S).map(([e,t])=>[e,{session:t.session,mode:t.mode,contextMode:t.contextMode,lastInputTokens:t.lastInputTokens,lastVisitedAt:t.lastVisitedAt}]))}),merge:(e,t)=>{let n=e??{},r={};for(let[e,t]of Object.entries(n.lanes??{}).slice(0,S)){let n=Qt(),i=t;i.session&&typeof i.session==`object`&&(n.session=i.session),typeof i.mode==`string`&&(n.mode=i.mode),typeof i.contextMode==`string`&&(n.contextMode=i.contextMode),typeof i.lastInputTokens==`number`&&(n.lastInputTokens=i.lastInputTokens),typeof i.lastVisitedAt==`number`&&(n.lastVisitedAt=i.lastVisitedAt),r[e]=n}return{...t,lanes:r,activeSessionId:O,projectName:typeof n.projectName==`string`?n.projectName:``,projectRoot:typeof n.projectRoot==`string`?n.projectRoot:``,cwd:typeof n.cwd==`string`?n.cwd:``}},onRehydrateStorage:()=>(e,t)=>{t||typeof window<`u`&&(window.__wrongstackSessionRehydrated=!0)}}));function A(e){return e?k.getState().lanes[e]??$t:$t}function en(e){return e?e in k.getState().lanes:!1}function tn(){return Object.keys(k.getState().lanes)}function j(e){return e?(k.getState().lanes[e]||k.setState(t=>({lanes:{...t.lanes,[e]:Qt()}})),e):O}function nn(e){k.getState().lanes[e]&&(on.delete(e),k.setState(t=>{let n={...t.lanes};return delete n[e],{lanes:n}}))}function rn(e){e&&e!==`__unbound__`&&k.getState().lanes.__unbound__&&(on.delete(O),k.setState(t=>{let n={...t.lanes};return delete n[O],n[e]||(n[e]=Qt()),{lanes:n}}))}function M(e){let t=e||`__unbound__`;Lt(t);let n=k.getState();n.activeSessionId===t&&n.lanes[t]||(j(t),k.setState({activeSessionId:t}),F(t).touch())}function N(){return k.getState().activeSessionId}function an(){let e=k(e=>e.activeSessionId);return e&&e!==`__unbound__`?e:null}function P(e,t){k.setState(n=>{let r=n.lanes[e]??Qt(),i=t(r);return i?{lanes:{...n.lanes,[e]:{...r,...i}}}:n.lanes[e]?{}:{lanes:{...n.lanes,[e]:r}}})}var on=new Map;function F(e){let t=e||`__unbound__`,n=on.get(t);if(n)return n;let r=()=>k.getState().lanes[t]??$t,i={sessionId:t,get data(){return r()},patch:e=>P(t,()=>e),touch:()=>P(t,()=>({lastVisitedAt:Date.now()})),setSession:e=>P(t,t=>{let n=t.session?.id!==e?.id||t.session?.provider!==e?.provider||t.session?.model!==e?.model;return{session:e,lastVisitedAt:Date.now(),...n?{contextLimitWarning:null,cacheStats:null,reasoningEffortLevels:void 0,effortSupported:void 0}:{}}}),startSession:e=>P(t,()=>({session:e,startTime:Date.now(),iteration:null,todos:[],lastInputTokens:0,totalTokens:{input:0,output:0,cacheRead:0,cacheWrite:0},cost:0,lastVisitedAt:Date.now(),droppedTools:0,contextLimitWarning:null,cacheStats:null,reasoningEffortLevels:void 0,effortSupported:void 0})),endSession:()=>P(t,()=>({session:null,startTime:null,iteration:null,droppedTools:0,contextLimitWarning:null,cacheStats:null,reasoningEffortLevels:void 0,effortSupported:void 0})),updateUsage:(e,n)=>P(t,t=>{let r=e.input+(e.cacheRead??0)+(e.cacheWrite??0),i=e.cacheRead??0,a=e.cacheWrite??0,o=t.totalTokens.input+e.input,s=(t.totalTokens.cacheRead??0)+i,c=(t.totalTokens.cacheWrite??0)+a,l=n??t.session?.provider??`unknown`,u=[...t.cacheStats?.providers??[]],d=u.findIndex(e=>e.provider===l),f=d>=0?u[d]:{provider:l,input:0,cacheRead:0,cacheWrite:0,hitRatio:0},p=f.input+e.input,m=f.cacheRead+i,h=f.cacheWrite+a,g=p+m+h,ee={provider:l,input:p,cacheRead:m,cacheWrite:h,hitRatio:g>0?Math.min(1,Math.max(0,m/g)):0};d>=0?u[d]=ee:u.push(ee),u.sort((e,t)=>t.cacheRead-e.cacheRead);let _=o+s+c;return{totalTokens:{input:o,output:t.totalTokens.output+e.output,cacheRead:s,cacheWrite:c},lastInputTokens:r||t.lastInputTokens,cacheStats:{readTokens:s,writeTokens:c,hitRatio:_>0?Math.min(1,Math.max(0,s/_)):0,coverageTokens:i,providers:u}}}),addCost:e=>P(t,t=>({cost:t.cost+e})),setEnvRates:e=>P(t,t=>({maxContext:e.maxContext??t.maxContext,mode:e.mode??t.mode,contextMode:e.contextMode??t.contextMode,inputCost:e.inputCost??t.inputCost,outputCost:e.outputCost??t.outputCost,cacheReadCost:e.cacheReadCost??t.cacheReadCost,reasoningEffortLevels:e.hasReasoningEffortKey?e.reasoningEffortLevels:t.reasoningEffortLevels,effortSupported:e.hasEffortSupportedKey?e.effortSupported:t.effortSupported,projectReasoningEffort:e.hasProjectEffortKey?e.projectReasoningEffort:t.projectReasoningEffort})),setIteration:e=>P(t,()=>({iteration:e})),setContextUsage:(e,n)=>P(t,t=>({lastInputTokens:e,maxContext:n??t.maxContext})),setContextLimitWarning:e=>P(t,()=>({contextLimitWarning:e})),setCacheStats:e=>P(t,()=>({cacheStats:e})),setTodos:e=>P(t,()=>({todos:e})),setDroppedTools:e=>P(t,()=>({droppedTools:e}))};return on.set(t,i),i}function I(){return F(k.getState().activeSessionId)}function L(e){k.setState(e)}function sn(){return{projectRoot:``,tree:[],openFiles:[],activeFilePath:null,treeLoading:!1,error:null,targetLine:null,projectIdentity:``,hydratingPaths:new Set}}function cn(e){return{projectRoot:e.projectRoot,tree:e.tree,openFiles:e.openFiles,activeFilePath:e.activeFilePath,treeLoading:e.treeLoading,error:e.error,targetLine:e.targetLine,projectIdentity:e.projectIdentity,hydratingPaths:e.hydratingPaths}}function ln(e){return{projectRoot:e.projectRoot,tree:e.tree,openFiles:e.openFiles,activeFilePath:e.activeFilePath,treeLoading:e.treeLoading,error:e.error,targetLine:e.targetLine,projectIdentity:e.projectIdentity,hydratingPaths:e.hydratingPaths}}function R(e,t,n){if(t&&e.fileSessionId!==t){let r=e.filesBySession[t]??sn();return{filesBySession:{...e.filesBySession,[t]:n(r)}}}let r=n(cn(e)),i=e.fileSessionId?{filesBySession:{...e.filesBySession,[e.fileSessionId]:r}}:{};return{...ln(r),...i}}function un(e,t){return e.fileSessionId?{filesBySession:{...e.filesBySession,[e.fileSessionId]:{...cn(e),...t}}}:{}}function dn(e,t){let n=e??{},r=Array.isArray(n.openFilePaths)?n.openFilePaths.filter(e=>typeof e==`string`&&e.length>0):[],i=r.map(e=>({path:e,content:``,dirty:!1,savedContent:``})),a=typeof n.activeFilePath==`string`&&r.includes(n.activeFilePath)?n.activeFilePath:r[0]??null;return{...t,projectIdentity:typeof n.projectIdentity==`string`?n.projectIdentity:t.projectIdentity,openFiles:i,activeFilePath:a}}var fn=u()(c((e,t)=>({projectRoot:``,tree:[],openFiles:[],activeFilePath:null,treeLoading:!1,error:null,targetLine:null,projectIdentity:``,hydratingPaths:new Set,fileSessionId:null,filesBySession:{},bindSessionFiles:t=>e(e=>{if(e.fileSessionId===t)return{};let n={...e.filesBySession};return e.fileSessionId&&(n[e.fileSessionId]=cn(e)),{fileSessionId:t,filesBySession:n,...ln((t?n[t]:void 0)??sn())}}),forgetSessionFiles:t=>e(e=>{let n={...e.filesBySession};return delete n[t],e.fileSessionId===t?{filesBySession:n,fileSessionId:null,...sn()}:{filesBySession:n}}),jumpToLine:(t,n,r)=>e(e=>{let i={line:t,col:n};return R(e,r,e=>({...e,targetLine:i}))}),clearTargetLine:()=>e(e=>({targetLine:null,...un(e,{targetLine:null})})),setTree:(t,n,r)=>e(e=>R(e,r,e=>({...e,projectRoot:t,tree:n,treeLoading:!1,error:null}))),openFile:(t,n,r)=>e(e=>R(e,r,e=>{if(e.openFiles.find(e=>e.path===t)){let r=e.openFiles.map(e=>e.path===t?{...e,content:n,dirty:!1,savedContent:n}:e);return{...e,openFiles:r,activeFilePath:t}}let r=[...e.openFiles,{path:t,content:n,dirty:!1,savedContent:n}];return{...e,openFiles:r,activeFilePath:t}})),closeFile:(t,n)=>e(e=>R(e,n,e=>{let n=e.openFiles.findIndex(e=>e.path===t);if(n===-1)return e;let r=[...e.openFiles];r.splice(n,1);let i=e.activeFilePath;return e.activeFilePath===t&&(i=r.length===0?null:n<r.length?r[n].path:r[r.length-1].path),{...e,openFiles:r,activeFilePath:i}})),setActiveFile:(t,n)=>e(e=>R(e,n,e=>({...e,activeFilePath:t}))),updateContent:(t,n)=>{e(e=>{let r=e.openFiles.map(e=>e.path===t?{...e,content:n,dirty:n!==e.savedContent}:e);return{openFiles:r,...un(e,{openFiles:r})}})},markSaved:(t,n)=>e(e=>R(e,n,e=>({...e,openFiles:e.openFiles.map(e=>e.path===t?{...e,dirty:!1,savedContent:e.content}:e)}))),setTreeLoading:(t,n)=>e(e=>R(e,n,e=>({...e,treeLoading:t}))),setError:(t,n)=>e(e=>R(e,n,e=>({...e,error:t}))),clearOpenTabs:t=>e(e=>R(e,t,e=>({...e,openFiles:[],activeFilePath:null}))),setProjectIdentity:(t,n)=>e(e=>R(e,n,e=>({...e,projectIdentity:t}))),setHydratingPaths:(t,n)=>e(e=>R(e,n,e=>({...e,hydratingPaths:new Set(t)}))),hydrateFileContent:(n,r,i)=>{let a=t(),o=!1;return e(R(a,i,e=>{if(!e.hydratingPaths.has(n))return e;let t=new Set(e.hydratingPaths);t.delete(n);let i=e.openFiles.find(e=>e.path===n);if(!i||i.dirty||i.content!==``||i.savedContent!==``)return{...e,hydratingPaths:t};o=!0;let a=e.openFiles.map(e=>e.path===n?{...e,content:r,savedContent:r,dirty:!1}:e);return{...e,hydratingPaths:t,openFiles:a}})),o},hydrateFileFailed:(t,n)=>e(e=>R(e,n,e=>{if(!e.hydratingPaths.has(t))return e;let n=new Set(e.hydratingPaths);n.delete(t);let r=e.openFiles.find(e=>e.path===t),i=(!r||r.content===``&&!r.dirty&&r.savedContent===``)&&r?e.openFiles.filter(e=>e.path!==t):e.openFiles,a=e.activeFilePath===t?i[0]?.path??null:e.activeFilePath;return{...e,hydratingPaths:n,openFiles:i,activeFilePath:a}}))}),{name:`wrongstack-file-store`,version:2,partialize:e=>({openFilePaths:e.openFiles.map(e=>e.path),activeFilePath:e.activeFilePath,projectIdentity:e.projectIdentity}),migrate:()=>({openFilePaths:[],activeFilePath:null,projectIdentity:``}),merge:(e,t)=>dn(e,t)}));function pn(){return{selectedPath:null,diff:null,loadingDiff:!1}}function mn(e){return{selectedPath:e.selectedPath,diff:e.diff,loadingDiff:e.loadingDiff}}function hn(e,t){return e.gitChangesSessionId?{gitChangesBySession:{...e.gitChangesBySession,[e.gitChangesSessionId]:{...mn(e),...t}}}:{}}var gn=u()(e=>({files:[],error:null,repoPrefix:``,dirs:{},loadingList:!1,selectedPath:null,diff:null,loadingDiff:!1,gitChangesSessionId:null,gitChangesBySession:{},setFiles:(t,n,r=``,i={})=>e({files:t,error:n,repoPrefix:r,dirs:i,loadingList:!1}),setListLoading:t=>e({loadingList:t}),select:t=>e(e=>({selectedPath:t,diff:null,loadingDiff:!!t,...hn(e,{selectedPath:t,diff:null,loadingDiff:!!t})})),setDiff:t=>e(e=>({diff:t,loadingDiff:!1,...hn(e,{diff:t,loadingDiff:!1})})),setDiffLoading:t=>e(e=>({loadingDiff:t,...hn(e,{loadingDiff:t})})),bindSessionGitChanges:t=>e(e=>{if(e.gitChangesSessionId===t)return{};let n={...e.gitChangesBySession};e.gitChangesSessionId&&(n[e.gitChangesSessionId]=mn(e));let r=(t?n[t]:void 0)??pn();return{gitChangesSessionId:t,gitChangesBySession:n,selectedPath:r.selectedPath,diff:r.diff,loadingDiff:r.loadingDiff}}),forgetSessionGitChanges:t=>e(e=>{let n={...e.gitChangesBySession};return delete n[t],e.gitChangesSessionId===t?{gitChangesBySession:n,gitChangesSessionId:null,...pn()}:{gitChangesBySession:n}}),clear:()=>e(e=>({files:[],error:null,repoPrefix:``,dirs:{},selectedPath:null,diff:null,loadingDiff:!1,...hn(e,{selectedPath:null,diff:null,loadingDiff:!1})}))})),_n=new WeakMap,vn=new Set([`projectName`,`projectRoot`,`cwd`,`modes`,`contextModes`,`appVersion`,`latestVersion`,`updateAvailable`]);function yn(e){let t=_n.get(e);if(t)return t;let n=e.activeSessionId,r=e.lanes[n]??$t,i=F(n),a={session:r.session,totalTokens:r.totalTokens,lastInputTokens:r.lastInputTokens,cost:r.cost,startTime:r.startTime,maxContext:r.maxContext,contextLimitWarning:r.contextLimitWarning,cacheStats:r.cacheStats,inputCost:r.inputCost,outputCost:r.outputCost,cacheReadCost:r.cacheReadCost,reasoningEffortLevels:r.reasoningEffortLevels,effortSupported:r.effortSupported,projectReasoningEffort:r.projectReasoningEffort,mode:r.mode,contextMode:r.contextMode,iteration:r.iteration,todos:r.todos,droppedTools:r.droppedTools,lastVisitedAt:r.lastVisitedAt,projectName:e.projectName,projectRoot:e.projectRoot,cwd:e.cwd,modes:e.modes,contextModes:e.contextModes,appVersion:e.appVersion,latestVersion:e.latestVersion,updateAvailable:e.updateAvailable,setSession:Sn,updateUsage:i.updateUsage,addCost:i.addCost,startSession:Cn,endSession:i.endSession,setEnv:wn,setIteration:i.setIteration,setContextUsage:i.setContextUsage,setContextLimitWarning:i.setContextLimitWarning,setCacheStats:i.setCacheStats,setModes:Tn,setContextModes:En,setTodos:i.setTodos,setUpdateInfo:Dn,setDroppedTools:i.setDroppedTools,switchSession:On};return _n.set(e,a),a}function bn(e){fn.getState().bindSessionFiles(e),gn.getState().bindSessionGitChanges(e)}function xn(e){h.getState().bindSession(e??null),_.getState().bindSessionChrome(e??null),bn(e??null);let t=e||`__unbound__`;N()!==t&&(N()===`__unbound__`&&t!==`__unbound__`&&It(t),M(t),Lt(t))}function Sn(e){xn(e?.id??null),I().setSession(e)}function Cn(e){xn(e.id),I().startSession(e)}function wn(e){let t={};e.projectRoot!==void 0&&(t.projectRoot=e.projectRoot),e.projectName!==void 0&&(t.projectName=e.projectName),e.cwd!==void 0&&(t.cwd=e.cwd),Object.keys(t).length>0&&L(t),I().setEnvRates({maxContext:e.maxContext,mode:e.mode,contextMode:e.contextMode,inputCost:e.inputCost,outputCost:e.outputCost,cacheReadCost:e.cacheReadCost,reasoningEffortLevels:e.reasoningEffortLevels,hasReasoningEffortKey:`reasoningEffortLevels`in e,effortSupported:e.effortSupported,hasEffortSupportedKey:`effortSupported`in e,projectReasoningEffort:e.projectReasoningEffort,hasProjectEffortKey:`projectReasoningEffort`in e})}function Tn(e){L({modes:e})}function En(e){L({contextModes:e})}function Dn(e){L(e)}function On(e){h.getState().bindSession(e),bn(e),M(e);let t=k.getState().lanes[e],n=t?.session?.provider,r=t?.session?.model;n&&r?ja.getState().setConfig({provider:n,model:r}):n&&ja.getState().setConfig({provider:n})}function kn(){return yn(k.getState())}function An(e){let t=typeof e==`function`?e(kn()):e;if(!t)return;if(`session`in t){let e=t.session;xn(e?.id??null)}let n={},r={};for(let[e,i]of Object.entries(t))typeof i!=`function`&&(vn.has(e)?n[e]=i:r[e]=i);Object.keys(n).length>0&&L(n),Object.keys(r).length>0&&I().patch(r)}function jn(e){return k.subscribe((t,n)=>e(yn(t),yn(n)))}var Mn=Object.assign(function(e){return p(k,t=>e(yn(t)))},{getState:kn,getInitialState:kn,setState:An,subscribe:jn,persist:k.persist}),Nn={has(e){return e in k.getState().lanes},get(e){let t=k.getState().lanes[e];if(t)return{session:t.session,provider:t.session?.provider,model:t.session?.model,mode:t.mode,contextMode:t.contextMode,totalTokens:t.totalTokens,lastInputTokens:t.lastInputTokens,cost:t.cost,startTime:t.startTime,maxContext:t.maxContext,reasoningEffortLevels:t.reasoningEffortLevels,cacheStats:t.cacheStats,iteration:t.iteration,todos:t.todos}},set(e,t){let n={};t.session!==void 0&&(n.session=t.session),t.mode!==void 0&&(n.mode=t.mode),t.contextMode!==void 0&&(n.contextMode=t.contextMode),t.totalTokens!==void 0&&(n.totalTokens=t.totalTokens),t.lastInputTokens!==void 0&&(n.lastInputTokens=t.lastInputTokens),t.cost!==void 0&&(n.cost=t.cost),t.startTime!==void 0&&(n.startTime=t.startTime),t.maxContext!==void 0&&(n.maxContext=t.maxContext),t.reasoningEffortLevels!==void 0&&(n.reasoningEffortLevels=t.reasoningEffortLevels),t.cacheStats!==void 0&&(n.cacheStats=t.cacheStats),t.iteration!==void 0&&(n.iteration=t.iteration),t.todos!==void 0&&(n.todos=t.todos),F(e).patch(n)},delete(e){k.setState(t=>{let n={...t.lanes};return delete n[e],{lanes:n}})},clear(){k.setState({lanes:{},activeSessionId:O})}},Pn=8e3;function Fn(){return`toast_${g()}`}var z=u()(c(e=>({notifications:[],toasts:[],push:t=>{let n=Fn(),r=t.ttl??3500,i=Date.now(),a={id:n,message:t.message,variant:t.variant,timestamp:i,read:!1,ttl:r,action:t.action},o={id:n,message:t.message,variant:t.variant,ttl:r,action:t.action};return e(e=>({toasts:[...e.toasts,o],notifications:[a,...e.notifications].slice(0,100)})),n},dismissToast:t=>e(e=>({toasts:e.toasts.filter(e=>e.id!==t)})),markAsRead:t=>e(e=>({notifications:e.notifications.map(e=>e.id===t?{...e,read:!0}:e)})),markAllAsRead:()=>e(e=>({notifications:e.notifications.map(e=>e.read?e:{...e,read:!0})})),removeNotification:t=>e(e=>({notifications:e.notifications.filter(e=>e.id!==t),toasts:e.toasts.filter(e=>e.id!==t)})),clearAll:()=>e(()=>({notifications:[]}))}),{name:`wrongstack-notifications-history`,partialize:e=>({notifications:e.notifications.map(({action:e,...t})=>({...t,...e?{action:{label:e.label,onClick:()=>{}}}:{}}))})})),In={success:(e,t=3500)=>z.getState().push({message:e,variant:`success`,ttl:t}),error:(e,t=6e3)=>z.getState().push({message:e,variant:`error`,ttl:t}),warn:(e,t=4500)=>z.getState().push({message:e,variant:`warn`,ttl:t}),info:(e,t=3500)=>z.getState().push({message:e,variant:`info`,ttl:t}),undoable:(e,t,n=d.t(`common:action.undo`),r=Pn)=>z.getState().push({message:e,variant:`info`,ttl:r,action:{label:n,onClick:t}}),dismiss:e=>z.getState().dismissToast(e)},B=t(n(),1),V=r();function Ln({variant:e}){return e===`success`?(0,V.jsx)(o,{className:`h-4 w-4 text-success`}):e===`error`?(0,V.jsx)(l,{className:`h-4 w-4 text-destructive`}):e===`warn`?(0,V.jsx)(s,{className:`h-4 w-4 text-warning`}):(0,V.jsx)(i,{className:`h-4 w-4 text-info`})}function Rn({entry:e}){let{t}=f(),n=z(e=>e.dismissToast);return(0,B.useEffect)(()=>{let t=setTimeout(()=>n(e.id),e.ttl);return()=>clearTimeout(t)},[e.id,e.ttl,n]),(0,V.jsxs)(`div`,{className:ee(`flex items-start gap-2 rounded-lg border bg-popover shadow-lg px-3 py-2 text-sm max-w-sm`,`animate-message`,e.variant===`error`&&`border-destructive/40`,e.variant===`warn`&&`border-warning/40`,e.variant===`success`&&`border-success/40`),children:[(0,V.jsx)(Ln,{variant:e.variant}),(0,V.jsx)(`div`,{className:`flex-1 min-w-0 whitespace-pre-wrap break-words leading-snug`,children:e.message}),e.action&&(0,V.jsx)(`button`,{type:`button`,onClick:()=>{e.action?.onClick(),n(e.id)},className:`shrink-0 font-medium text-primary hover:underline`,children:e.action.label}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>n(e.id),className:`text-muted-foreground hover:text-foreground`,title:t(`activity:toast.dismiss`),"aria-label":t(`activity:toast.dismiss`),children:(0,V.jsx)(a,{className:`h-3.5 w-3.5`})})]})}function zn(){let{t:e}=f(),t=z(e=>e.toasts);return t.length===0?null:(0,V.jsx)(`section`,{className:`fixed bottom-4 right-4 z-[60] flex flex-col gap-2 pointer-events-auto`,"aria-label":e(`activity:toaster.notifications`),"aria-live":`polite`,children:t.map(e=>(0,V.jsx)(Rn,{entry:e},e.id))})}function Bn(e,t=140){let n=e.replace(/\s+/g,` `).trim();return n.length<=t?n:`${n.slice(0,t).trimEnd()}…`}function Vn(e){typeof requestAnimationFrame==`function`?requestAnimationFrame(e):queueMicrotask(e)}var Hn=new class{pending=new Map;scheduled=!1;push(e,t,n){if(!t)return;let r=this.pending.get(e);r?(r.buffer+=t,r.flush=n):this.pending.set(e,{buffer:t,flush:n}),this.schedule()}schedule(){this.scheduled||(this.scheduled=!0,Vn(()=>{this.scheduled=!1,this.drain()}))}drain(){if(this.pending.size===0)return;let e=Array.from(this.pending.entries());this.pending.clear();for(let[t,n]of e)n.buffer&&n.flush(t,n.buffer)}drop(e){this.pending.delete(e)}dropAll(){this.pending.clear()}flush(e){let t=this.pending.get(e);t&&(this.pending.delete(e),t.buffer&&t.flush(e,t.buffer))}flushAll(){this.drain()}},Un={listTools(e){this.send({type:`tools.list`},e)},listMemory(e){this.send({type:`memory.list`},e)},listSageMemories(e){this.send({type:`memory.sage.list`},e)},listSageMemoriesPage(e,t){this.send({type:`memory.sage.listPage`,payload:{...e}},t)},listMemoryCandidates(e,t){this.send({type:`memory.sage.listCandidates`,payload:{...e}},t)},searchSageBreakdown(e,t){this.send({type:`memory.sage.searchBreakdown`,payload:{query:e.query,...e.limit===void 0?{}:{limit:e.limit},...e.includeStale===void 0?{}:{includeStale:e.includeStale}}},t)},getSage(e,t){this.send({type:`memory.sage.get`,payload:{id:e}},t)},getSageGraph(e,t,n){this.send({type:`memory.sage.graph`,payload:{query:e,...t}},n)},updateSage(e,t,n){this.send({type:`memory.sage.update`,payload:{id:e,...t}},n)},deleteSage(e,t){this.send({type:`memory.sage.delete`,payload:{id:e,force:!0,...t===void 0?{}:{reason:t}}})},rememberSage(e,t){this.send({type:`memory.sage.remember`,payload:e},t)},findMemoriesForFile(e,t){this.send({type:`memory.sage.forFile`,payload:e},t)},recoverSage(e,t){this.send({type:`memory.sage.recover`,payload:e},t)},resolveMemoryCandidate(e,t){this.send({type:`memory.sage.candidateResolve`,payload:e},t)},backfillRecoverable(e,t){this.send({type:`memory.sage.backfillRecoverable`,payload:e},t)},listMcpServers(){this.send({type:`mcp.list`})},addMcpServer(e){this.send({type:`mcp.add`,payload:e})},removeMcpServer(e){this.send({type:`mcp.remove`,payload:{name:e}})},updateMcpServer(e){this.send({type:`mcp.update`,payload:e})},wakeMcpServer(e){this.send({type:`mcp.wake`,payload:{name:e}})},sleepMcpServer(e){this.send({type:`mcp.sleep`,payload:{name:e}})},discoverMcpServer(e){this.send({type:`mcp.discover`,payload:{name:e}})},listMcpResources(e,t=!1){this.send({type:`mcp.resources`,payload:{name:e,refresh:t}})},listMcpPrompts(e,t=!1){this.send({type:`mcp.prompts`,payload:{name:e,refresh:t}})},readMcpResource(e,t){this.send({type:`mcp.resource.read`,payload:{name:e,uri:t}})},getMcpPrompt(e,t,n){this.send({type:`mcp.prompt.get`,payload:{name:e,prompt:t,...n===void 0?{}:{arguments:n}}})},enableMcpServer(e){this.send({type:`mcp.enable`,payload:{name:e}})},disableMcpServer(e){this.send({type:`mcp.disable`,payload:{name:e}})},restartMcpServer(e){this.send({type:`mcp.restart`,payload:{name:e}})},listSkills(e){this.send({type:`skills.list`},e)},getSkillContent(e,t){this.send({type:`skills.content`,payload:{name:e,source:t}})},installSkill(e,t){this.send({type:`skills.install`,payload:{ref:e,global:t}})},uninstallSkill(e,t){this.send({type:`skills.uninstall`,payload:{name:e,global:t}})},checkForUpdates(e,t){this.send({type:`skills.update`,payload:{name:e,global:t}})},createSkill(e,t,n){this.send({type:`skills.create`,payload:{name:e,description:t,scope:n}})},editSkill(e,t){this.send({type:`skills.edit`,payload:{name:e,body:t}})},exportAllSkills(){this.send({type:`skills.export`})},getDiag(e){this.send({type:`diag.get`,payload:this.withSession({})},e)},getStats(e){this.send({type:`stats.get`,payload:this.withSession({})},e)},saveSession(){this.send({type:`session.save`,payload:this.withSession({})})},resumeSessionById(e){this.send({type:`session.resume`,payload:this.withSession({id:e})})},focusSessionById(e){this.send({type:`session.focus`,payload:this.withSession({id:e})})},listModes(){this.send({type:`modes.list`})},switchMode(e){this.send({type:`mode.switch`,payload:this.withSession({id:e})})},listFiles(e,t,n){this.send({type:`files.list`,payload:{query:e,limit:t,path:n}})},requestCompletion(e){this.send({type:`completion.request`,payload:e})},getTodos(){this.send({type:`todos.get`,payload:this.withSession({})})},clearTodos(){this.send({type:`todos.clear`,payload:this.withSession({})})},removeTodo(e){let t=typeof e==`number`?{index:e}:{id:e};this.send({type:`todos.remove`,payload:this.withSession(t)})},updateTodoStatus(e,t){this.send({type:`todo.update`,payload:this.withSession({id:e,status:t})})},getTasks(){this.send({type:`tasks.get`,payload:this.withSession({})})},updateTaskStatus(e,t){this.send({type:`task.update`,payload:this.withSession({id:e,status:t})})},getPlan(){this.send({type:`plan.get`,payload:this.withSession({})})},updatePlanItem(e,t){this.send({type:`plan.item.update`,payload:this.withSession({target:e,status:t})})},listSessions(e=50){this.send({type:`sessions.list`,payload:this.withSession({limit:e})})},deleteSession(e){this.send({type:`session.delete`,payload:this.withSession({id:e})})},renameSession(e,t){this.send({type:`session.rename`,payload:{id:e,name:t}})},inspectSession(e){this.send({type:`session.inspect`,payload:{id:e}})},setWorkingDir(e){this.send({type:`working_dir.set`,payload:{path:e}})},resumeSession(e){this.send({type:`session.resume`,payload:this.withSession({id:e})})},ping(){this.send({type:`ping`})},refineModel(e,t){this.send({type:`model.refine`,payload:this.withSession({text:e,...t?.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs},...t?.provider===void 0?{}:{provider:t.provider},...t?.model===void 0?{}:{model:t.model},...t?.previousRefined===void 0?{}:{previousRefined:t.previousRefined},...t?.previousEnglish===void 0?{}:{previousEnglish:t.previousEnglish},...t?.retryFeedback===void 0?{}:{retryFeedback:t.retryFeedback}})})}};function Wn(e){Object.assign(e.prototype,Un)}function Gn(e){try{let t=new URL(e),n=new URL(Aa());return t.hostname===n.hostname}catch{return!0}}async function Kn(e){if(typeof window>`u`)return e;if(document.cookie.split(`;`).some(e=>e.trim().startsWith(`ws_token=`))){let t=e;return Gn(e)&&(t=Ea(e)),Da(),t}let t=wa(e)??Ta();if(!t)return e;let n=Aa()+`/ws-auth?token=${encodeURIComponent(t)}`;try{let t=await fetch(n,{method:`GET`,credentials:`same-origin`,cache:`no-store`});if(!t.ok)console.warn(JSON.stringify({level:`warn`,event:`ws_client.ws_auth_failed`,status:t.status,timestamp:new Date().toISOString()}));else{let t=e;return Gn(e)&&(t=Ea(e)),Da(),t}}catch(e){console.warn(JSON.stringify({level:`warn`,event:`ws_client.ws_auth_error`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))}return e}function qn(e,t,n=3e4){let r=!1,i=setTimeout(()=>{try{e.close()}catch{}t.onTimeout()},n);return e.onopen=()=>{t.isCurrentGeneration()&&(clearTimeout(i),r=!0,t.onOpen())},e.onmessage=e=>{if(!t.isCurrentGeneration())return;let n=yt(String(e.data),`server`);n.ok?t.onMessage(n.message):console.error(JSON.stringify({level:`error`,event:`ws_client.message_rejected`,code:n.issue.code,message:n.issue.message,timestamp:new Date().toISOString()}))},e.onerror=e=>{t.isCurrentGeneration()&&(console.error(JSON.stringify({level:`error`,event:`ws_client.error`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()})),r||(clearTimeout(i),t.onError(`Connection error (see browser devtools)`)))},e.onclose=e=>{if(!t.isCurrentGeneration())return;if(!r){clearTimeout(i);let n=e.reason||`Closed with code ${e.code}`;t.onClose(n,!0);return}let n;e.reason?n=`${e.reason} (code ${e.code})`:e.code!==1e3&&(n=`Closed with code ${e.code}`),t.onClose(n,!1)},{cancelTimeout:()=>clearTimeout(i)}}function Jn(e,t,n){let r=Ke(e,{...ze,maxReconnectAttempts:t,queueLimit:n});return{state:r.state,plan:r.plan}}function Yn(e,t,n,r){if(e===`open`)return{reconnectTimer:t,connectionState:n};t&&clearTimeout(t);let i=Ge(n);return r().catch(e=>console.warn(JSON.stringify({level:`warn`,event:`ws_client.reconnect_failed`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))),{reconnectTimer:null,connectionState:i}}function Xn(e){return{type:`provider.clear_models`,payload:{providerId:e}}}function Zn(e,t){return{type:`provider.undo_clear`,payload:{providerId:e,previousModels:[...t]}}}function Qn(e){return{type:`provider.update`,payload:e}}var $n={getGitInfo(){this.send({type:`git.info`})},getGitChanges(){this.send({type:`git.changes`})},getGitHistory(e){this.send({type:`git.history`,payload:e})},getGitCommitDetail(e){this.send({type:`git.commit_detail`,payload:{hash:e}})},getGitCommitFileDiff(e,t,n){this.send({type:`git.commit_file_diff`,payload:{hash:e,path:t,...n?{previousPath:n}:{}}})},getGitDiff(e){this.send({type:`git.diff`,payload:{path:e}})},stageGit(e){let t=Array.isArray(e)?e:[e];this.send({type:`git.stage`,payload:{paths:t}})},unstageGit(e){let t=Array.isArray(e)?e:[e];this.send({type:`git.unstage`,payload:{paths:t}})},discardGit(e){let t=Array.isArray(e)?e:[e];this.send({type:`git.discard`,payload:{paths:t}})},commitGit(e){this.send({type:`git.commit`,payload:{message:e}})},getProviderQuota(){this.send({type:`provider.quota.get`})},getProviderStatus(){this.send({type:`provider.status.get`})},getProviderAuditHistory(e){this.send({type:`provider.audit.get`,payload:{count:e}})},retryProviderModel(e,t){this.send({type:`provider.status.retry`,payload:{providerId:e,model:t}})},clearProviderStatus(e,t){this.send({type:`provider.status.clear`,payload:{providerId:e,model:t}})},newSession(e){this.send({type:`session.new`,payload:{...e??{}}})},getSystemPrompt(){this.send({type:`system_prompt.get`,payload:this.withSession({})})},setSystemPromptVariant(e){this.send({type:`prefs.update`,payload:this.withSession({systemPromptVariant:e})})},listProviders(){this.send({type:`providers.list`})},listProviderModels(e){this.send({type:`provider.models`,payload:{providerId:e}})},listSavedProviders(){this.send({type:`providers.saved`})},searchProviderModels(e,t){this.send({type:`provider.models.search`,payload:{query:e,...t===void 0?{}:{limit:t}}})},addKey(e,t,n){this.send({type:`key.add`,payload:{providerId:e,label:t,apiKey:n}})},updateKey(e,t,n){this.send({type:`key.update`,payload:{providerId:e,label:t,apiKey:n}})},deleteKey(e,t){this.send({type:`key.delete`,payload:{providerId:e,label:t}})},setActiveKey(e,t){this.send({type:`key.set_active`,payload:{providerId:e,label:t}})},addProvider(e,t,n,r,i,a){this.send({type:`provider.add`,payload:{id:e,family:t,baseUrl:n,apiKey:r,...i?{models:i}:{},...a?{customModels:a}:{}}})},removeProvider(e){this.send({type:`provider.remove`,payload:{providerId:e}})},listOAuthProviders(){this.send({type:`auth.oauth.list`})},startOAuth(e,t){this.send({type:`auth.oauth.start`,payload:t?{kind:e,providerId:t}:{kind:e}})},submitOAuthCode(e,t){this.send({type:`auth.oauth.code`,payload:{kind:e,input:t}})},cancelOAuth(e){this.send({type:`auth.oauth.cancel`,payload:{kind:e}})},probeProvider(e,t){this.send({type:`provider.probe`,payload:t===void 0?{providerId:e}:{providerId:e,timeoutMs:t}})},clearProviderModels(e){this.send(Xn(e))},undoProviderClear(e,t){this.send(Zn(e,t))},setCustomModel(e,t,n){this.send({type:`provider.custom_models.set`,payload:{providerId:e,modelId:t,customModel:n}})},removeCustomModel(e,t){this.send({type:`provider.custom_models.remove`,payload:{providerId:e,modelId:t}})},updateProvider(e){this.send(Qn(e))},clearContext(){this.send({type:`context.clear`,payload:this.withSession({})})},compactContext(e=!1){this.send({type:`context.compact`,payload:this.withSession({aggressive:e})})},repairContext(){this.send({type:`context.repair`,payload:this.withSession({})})},openContextEditor(){this.send({type:`context.editor.open`,payload:this.withSession({})})},validateContextEditor(e,t,n,r){this.send({type:`context.editor.validate`,payload:this.withSession({baseRevision:e,messages:t,removals:n,allowRepair:r})})},applyContextEditor(e,t,n,r){this.send({type:`context.editor.apply`,payload:this.withSession({baseRevision:e,messages:t,removals:n,allowRepair:r})})},debugContext(e){this.send({type:`context.debug`,payload:this.withSession({})},e)},listContextModes(){this.send({type:`context.modes.list`,payload:this.withSession({})})},switchContextMode(e){this.send({type:`context.mode.switch`,payload:this.withSession({id:e})})},createContextMode(e){this.send({type:`context.mode.create`,payload:this.withSession(e)})},updateContextMode(e,t){this.send({type:`context.mode.update`,payload:this.withSession({id:e,...t})})},deleteContextMode(e){this.send({type:`context.mode.delete`,payload:this.withSession({id:e})})},switchAutonomy(e){this.send({type:`autonomy.switch`,payload:this.withSession({mode:e})})},updatePrefs(e){this.send({type:`prefs.update`,payload:this.withSession(e)})},getPrefs(e){this.send({type:`prefs.get`,payload:this.withSession({},e)})}};function er(e){Object.assign(e.prototype,$n)}var tr={"context.debug":`context.debug`,"diag.get":`diag.get`,"memory.list":`memory.list`,"memory.sage.get":`memory.sage.get`,"memory.sage.graph":`memory.sage.graph`,"memory.sage.list":`memory.sage.list`,"memory.sage.listCandidates":`memory.sage.listCandidates`,"memory.sage.listPage":`memory.sage.listPage`,"memory.sage.remember":`memory.sage.remember`,"memory.sage.update":`memory.sage.update`,"skills.list":`skills.list`,"stats.get":`stats.get`,"tools.list":`tools.list`},nr=3e4,rr=15e3,ir=class{suppressedChatEchoes=new Map;echoSweepTimer=null;registerSuppression(e,t){if(t.echoToChat!==!1||!tr[e.type])return;let n=t.requestId??`suppress_${Date.now()}_${g().slice(0,8)}`;this.suppressedChatEchoes.set(n,Date.now()+nr),this.ensureEchoSweep();let r=e.payload??{};r.requestId=n,e.payload=r}consumeSuppressedChatEcho(e,t){if(!t)return!1;let n=t.payload?.requestId;if(typeof n!=`string`||n.length===0)return!1;let r=this.suppressedChatEchoes.get(n);return r!==void 0&&(this.suppressedChatEchoes.delete(n),r>Date.now())}ensureEchoSweep(){this.echoSweepTimer||=setInterval(()=>{this.sweepSuppressedChatEchoes(Date.now())},rr)}sweepSuppressedChatEchoes(e){for(let[t,n]of this.suppressedChatEchoes)n<=e&&this.suppressedChatEchoes.delete(t);this.suppressedChatEchoes.size===0&&this.echoSweepTimer&&(clearInterval(this.echoSweepTimer),this.echoSweepTimer=null)}clear(){this.echoSweepTimer&&=(clearInterval(this.echoSweepTimer),null),this.suppressedChatEchoes.clear()}};function ar(e,t,n,r,i){let a;for(;e.messageQueue.length>0&&(e.messageQueue.length>=r||e.messageQueueChars+n.length>i);){let t=e.messageQueue.shift();if(!t)break;a??=t;let n=e.messageQueueWeights.get(t)??JSON.stringify(t).length;e.messageQueueChars=Math.max(0,e.messageQueueChars-n),e.messageQueueWeights.delete(t)}return a&&console.warn(JSON.stringify({level:`warn`,event:`ws_client.message_queue_full`,cap:r,charCap:i,droppedType:a.type,timestamp:new Date().toISOString()})),e.messageQueue.push(t),e.messageQueueWeights.set(t,n.length),e.messageQueueChars+=n.length,!0}function or(e,t){let n=e.messageQueue.splice(0);e.messageQueueChars=0;for(let e of n)try{t(e)}catch(e){console.warn(JSON.stringify({level:`warn`,event:`ws.flush_failed`,message:e instanceof Error?e.message:String(e)}))}}var sr={sendMessage(e,t,n=!1,r){let i=`msg_${Date.now()}_${g().slice(0,8)}`,a=this.withSession({id:i,content:e,timestamp:Date.now(),...n?{freshContext:!0}:{},...t&&t.length>0?{images:t}:{}},r);return a.sessionId&&this.armedResends.delete(a.sessionId),this.send({type:`user_message`,payload:a}),i},getChimeraReports(e){this.send({type:`chimera.reports.list`,payload:this.withSession({sessionId:e??``},e)})},adviseTopic(e,t=1e4){let n=g();return new Promise(r=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(s),o(),r(e))},o=this.on(`topic.advice_result`,e=>{e.payload.requestId===n&&a(e.payload)}),s=setTimeout(()=>{a({requestId:n,suggestNewContext:!1,confidence:0,reason:`Topic check timed out; continuing in the current context.`,source:`local`})},t);this.send({type:`topic.advice`,payload:this.withSession({requestId:n,prompt:e})})})},sendMailboxMessage(e,t){let n=`mbox_${Date.now()}_${g().slice(0,8)}`;return this.send({type:`mailbox.send`,payload:this.withSession({requestId:n,to:e.to,type:e.type,audience:e.audience??`all`,subject:e.subject,body:e.body,priority:e.priority??`normal`},t)}),n},sendAbort(e){this.send({type:`abort`,payload:this.withSession({},e)})},subscribeSessions(e){let t=Array.from(new Set(e.filter(e=>typeof e==`string`&&e)));if(t.length===0||t.length===this.subscribedSessionIds.length&&t.every((e,t)=>e===this.subscribedSessionIds[t]))return;this.subscribedSessionIds=t;let n=this.replayOnNextSubscribe?t:[];this.replayOnNextSubscribe=!1,this.send({type:`session.subscribe`,payload:this.withSession({sessionIds:t,...n.length>0?{replayFor:n}:{}})})},clearSessionSubscription(){this.subscribedSessionIds=[],this.replayOnNextSubscribe=!0},sendConfirm(e,t){this.pendingConfirms.has(e)&&this.pendingConfirms.delete(e),this.send({type:`tool.confirm_result`,payload:this.withSession({id:e,decision:t})})},switchModel(e,t,n=8e3){let r=g();return new Promise(i=>{let a=!1,o=e=>{a||(a=!0,clearTimeout(c),s(),i(e))},s=this.on(`model.switch_result`,e=>{let t=e.payload;t.requestId===r&&o(t)}),c=setTimeout(()=>{o({requestId:r,success:!1,message:`Model switch timed out. Please try again.`,provider:e,model:t,runActive:!1})},n);this.send({type:`model.switch`,payload:this.withSession({provider:e,model:t,requestId:r})})})},shutdownCodebaseIndexServer(e=8e3){let t=g();return new Promise(n=>{let r=!1,i=e=>{r||(r=!0,clearTimeout(o),a(),n(e))},a=this.on(`codebase.index.server.shutdown_result`,e=>{e.payload.requestId&&e.payload.requestId!==t||i(e.payload)}),o=setTimeout(()=>{i({requestId:t,stopped:!1,reason:`Codebase index server shutdown timed out.`})},e);this.send({type:`codebase.index.server.shutdown`,payload:{requestId:t}},{queueIfDisconnected:!1})||i({requestId:t,stopped:!1,reason:`WebSocket is not connected.`})})}};function cr(e){Object.assign(e.prototype,sr)}var lr=`#pending-new-session`;function ur(e){if(e.type===`session.new`)return lr;if(e.type!==`session.resume`)return null;let t=e.payload?.id;return typeof t==`string`&&t.length>0?t:lr}function dr(e,t,n){return!e||!n.sessionId?!1:e===`#pending-new-session`?n.reset===!0&&!t.has(n.sessionId):e===n.sessionId}function fr(e,t){if(t){if(e.size>=64){let t=e.values().next();t.done||e.delete(t.value)}e.add(t)}}function pr(e,t,n){if(!t)return!1;let r=Date.now(),i=e.get(t);if(i&&r-i.armedAt<15e3)return!1;if(e.size>=8){let t=e.keys().next();t.done||e.delete(t.value)}return e.set(t,{...n,armedAt:r}),!0}function mr(e,t,n){let r=e.get(t);r&&(e.delete(t),At(t)&&n(r.content,r.images,r.freshContext===!0,t))}function hr(e,t){for(let[n,r]of e)r.expiresAtMs<=t&&e.delete(n)}var gr=e({WrongStackWebSocketClient:()=>vr,getWSClient:()=>br}),_r=class e{ws=null;url;handlers=new Map;maxReconnectAttempts=10;shouldReconnect=!0;reconnectTimer=null;connectPromise=null;socketGeneration=0;messageQueue=[];messageQueueChars=0;messageQueueWeights=new WeakMap;connectionState=Be();static MAX_QUEUED_MESSAGES=1e3;static MAX_QUEUED_CHARS=16777216;pendingConfirms=new Map;static PENDING_CONFIRM_TTL_MS=18e4;sessionId=null;pendingSwapTarget=null;requestedSwitchSessionId=null;seenSessionIds=new Set;replayOnNextSubscribe=!0;subscribedSessionIds=[];armedResends=new Map;lastErrorText;statusListeners=new Set;currentStatus={state:`connecting`};echoSuppression=new ir;get suppressedChatEchoes(){return this.echoSuppression.suppressedChatEchoes}get echoSweepTimer(){return this.echoSuppression.echoSweepTimer}set echoSweepTimer(e){this.echoSuppression.echoSweepTimer=e}protocolCapabilities=new Set;protocolVersion=null;supportsCapability(e){return this.protocolCapabilities.has(e)}get negotiatedProtocolVersion(){return this.protocolVersion}onStatus(e){return this.statusListeners.add(e),e(this.currentStatus),()=>this.statusListeners.delete(e)}get status(){return this.currentStatus}setStatus(e){this.currentStatus=e;for(let t of this.statusListeners)try{t(e)}catch{}}constructor(e){this.url=e??ka()}withSession(e,t){let n=t||sa();return n?{...e,sessionId:n}:e}async ensureAuthCookie(){this.url=await Kn(this.url)}connect(){return this.ws?.readyState===WebSocket.OPEN?Promise.resolve():(this.connectPromise||=this.openSocket().finally(()=>{this.connectPromise=null}),this.connectPromise)}async openSocket(){return await this.ensureAuthCookie(),this.connectionState=Ve(this.connectionState),new Promise((e,t)=>{if(this.ws?.readyState===WebSocket.OPEN){e();return}this.setStatus({state:`connecting`});let n=++this.socketGeneration;try{let r=new WebSocket(this.url);this.ws=r,r.binaryType=`arraybuffer`;let i=!1,a=()=>{i||(i=!0,this.attemptReconnect())};qn(r,{isCurrentGeneration:()=>this.socketGeneration===n,onOpen:()=>{this.connectionState=He(this.connectionState),this.lastErrorText=void 0,this.setStatus({state:`open`}),this.flushMessageQueue(),this.send({type:`provider.quota.get`}),e()},onMessage:e=>{this.connectionState=Ue(this.connectionState),this.handleMessage(e)},onError:e=>{this.lastErrorText=e,t(Error(e)),a()},onClose:(e,n)=>{if(this.pendingSwapTarget=null,this.requestedSwitchSessionId=null,n){this.lastErrorText=e,t(Error(e)),a();return}e&&!this.lastErrorText&&(this.lastErrorText=e),this.attemptReconnect()},onTimeout:()=>{this.ws===r&&(this.ws=null),this.lastErrorText=`Connection timeout`,t(Error(`Connection timeout`)),a()}})}catch(e){if(this.socketGeneration!==n)return;this.lastErrorText=m(e),this.setStatus({state:`closed`,error:this.lastErrorText}),t(e)}})}attemptReconnect(){if(!this.shouldReconnect){this.connectionState=We(this.connectionState),this.reconnectTimer=null,this.setStatus({state:`closed`,error:this.lastErrorText??`Disconnected`});return}let t=Jn(this.connectionState,this.maxReconnectAttempts,e.MAX_QUEUED_MESSAGES);if(this.connectionState=t.state,!t.plan){this.reconnectTimer=null,this.setStatus({state:`closed`,error:this.lastErrorText??`Disconnected`});return}this.setStatus({state:`reconnecting`,attempt:t.plan.attempt,nextRetryAt:t.plan.retryAt,lastError:this.lastErrorText}),this.reconnectTimer=setTimeout(async()=>{if(this.reconnectTimer=null,this.shouldReconnect)try{await this.connect()}catch(e){console.error(JSON.stringify({level:`error`,event:`ws_client.reconnect_failed`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))}},t.plan.delayMs)}retryNow(){let e=Yn(this.currentStatus.state,this.reconnectTimer,this.connectionState,()=>this.connect());this.reconnectTimer=e.reconnectTimer,this.connectionState=e.connectionState}flushMessageQueue(){let e={messageQueue:this.messageQueue,messageQueueChars:this.messageQueueChars,messageQueueWeights:this.messageQueueWeights};or(e,e=>this.send(e)),this.messageQueueChars=e.messageQueueChars}handleMessage(t){if(t.type===`tool.confirm_needed`){let n=t.payload;this.sweepExpiredPendingConfirms(Date.now()),this.pendingConfirms.set(n.id,{expiresAtMs:Date.now()+e.PENDING_CONFIRM_TTL_MS}),this.emit(t);return}if(t.type===`tool.confirm_resolved`){let e=t.payload;typeof e.id==`string`&&this.pendingConfirms.delete(e.id),this.emit(t);return}if(t.type===`session.start`){let e=t.payload,n=Dt(e);this.sessionId=e.sessionId,this.protocolVersion=n.version,this.protocolCapabilities=new Set(n.capabilities),this.requestedSwitchSessionId=this.matchesPendingSwap(e)?e.sessionId:null,this.requestedSwitchSessionId&&(this.pendingSwapTarget=null),this.rememberSeenSession(e.sessionId),this.emit(t),this.consumeArmedResend(e.sessionId);return}t.type===`error`&&(t.payload.phase===`session.new`||t.payload.phase===`session.resume`)&&(this.pendingSwapTarget=null),this.emit(t)}matchesPendingSwap(e){return dr(this.pendingSwapTarget,this.seenSessionIds,e)}rememberSeenSession(e){fr(this.seenSessionIds,e)}consumeRequestedSwitch(e){return!e||this.requestedSwitchSessionId!==e?!1:(this.requestedSwitchSessionId=null,!0)}armNotReadyResend(e,t){return pr(this.armedResends,e,t)}consumeArmedResend(e){mr(this.armedResends,e,(e,t,n,r)=>{this.sendMessage(e,t,n,r)})}sweepExpiredPendingConfirms(e){hr(this.pendingConfirms,e)}emit(e){let t=this.handlers.get(e.type);if(t)for(let n of t)try{n(e)}catch(t){console.error(JSON.stringify({level:`error`,event:`ws_client.handler_error`,messageType:e.type,message:t instanceof Error?t.message:String(t),timestamp:new Date().toISOString()}))}}send(e,t={}){let n=this.constructor,r=n.MAX_QUEUED_MESSAGES,i=n.MAX_QUEUED_CHARS,a=vt(e,`client`);if(!a.ok)return console.error(JSON.stringify({level:`error`,event:`ws_client.outbound_message_rejected`,code:a.issue.code,message:a.issue.message,timestamp:new Date().toISOString()})),!1;this.echoSuppression.registerSuppression(e,t);let o=JSON.stringify(a.message),s=this.ws?.readyState===WebSocket.OPEN;if(!s&&o.length>i)return console.warn(JSON.stringify({level:`warn`,event:`ws_client.message_queue_full`,cap:r,charCap:i,droppedType:e.type,reason:`message_too_large`,timestamp:new Date().toISOString()})),!1;let c=ur(e);if(c){if(this.pendingSwapTarget===c)return!1;this.pendingSwapTarget=c}if(e.type===`context.clear`?Hn.dropAll():(e.type===`session.new`||e.type===`session.resume`)&&Hn.flushAll(),s)return this.ws?.send(o),!0;{if(t.queueIfDisconnected===!1)return!1;let n={messageQueue:this.messageQueue,messageQueueChars:this.messageQueueChars,messageQueueWeights:this.messageQueueWeights},a=ar(n,e,o,r,i);return this.messageQueueChars=n.messageQueueChars,a}}consumeSuppressedChatEcho(e,t){return this.echoSuppression.consumeSuppressedChatEcho(e,t)}on(e,t){let n=this.handlers.get(e);return n||(n=new Set,this.handlers.set(e,n)),n.add(t),()=>n?.delete(t)}off(e,t){this.handlers.get(e)?.delete(t)}disconnect(){this.shouldReconnect=!1,this.connectionState=We(this.connectionState),this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.messageQueue.length=0,this.messageQueueChars=0,this.pendingSwapTarget=null,this.requestedSwitchSessionId=null,this.pendingConfirms.clear(),this.echoSuppression.clear(),this.ws?.close(),this.ws=null}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}get currentSessionId(){return this.sessionId}};Wn(_r),er(_r),cr(_r);var vr=_r,yr=null;function br(e){return yr||=new vr(e),yr}function xr(e){return e.replace(/\s+/g,` `).trim().toLowerCase()}[`NOTE: The todo board has not changed since the previous automatic continuation — this exact instruction is being repeated.`,`Before anything else, bring the board up to date so the loop stays grounded:`,`- mark work that is actually finished as completed,`,`- split the current item into smaller concrete sub-items if it needs more than one turn,`,`- remove or reword items that no longer apply.`,`Then continue the work. If you are blocked, state exactly what is blocking you instead of repeating the same turn.`].join(`
|
|
17
|
+
`);function Sr(){let e=new Map,t=new Set;return{recordAttempt(t){let n=(e.get(t)??0)+1;return e.set(t,n),n},getAttempts(t){return e.get(t)??0},markSkipped(e){t.add(e)},isSkipped(e){return t.has(e)},reset(){e.clear(),t.clear()},snapshot(){let n={},r=new Set([...e.keys(),...t]);for(let i of r)n[i]={attempts:e.get(i)??0,skipped:t.has(i)};return n}}}var Cr=[`Pivoting to the next open item — previous todo still pending after {attempts} attempt(s).`,`Shifting focus to a different task while the previous item ({label}) remains open after {attempts} attempt(s).`,`No board progress on the current item after {attempts} attempt(s). Continuing with the next todo.`,`The previous item is still unresolved after {attempts} try(ies). Moving on down the list.`,`Advancing to the next piece of work after {attempts} unproductive attempt(s) on the prior one.`,`Taking a different angle — the stalled item ({label}) stays open after {attempts} attempt(s). Pressing ahead.`,`The todo board shows no movement on the current task after {attempts} attempt(s). Switching gears.`,`No change on the board from the last {attempts} continuation(s). Proceeding to the next open item.`];function wr(e,t,n,r){let i=Cr[Math.max(0,Math.min(n-1,Cr.length-1))].replace(/\{attempts\}/g,()=>String(n)).replace(/\{label\}/g,()=>e.content.slice(0,72));if(!t)return[i,``,`No more open items remain on the todo list. What has been accomplished and what should I do next?`].join(`
|
|
18
|
+
`);let a=t.status===`in_progress`&&t.activeForm?t.activeForm:t.content,o=r.filter(e=>e.status===`completed`).length,s=r.length,c=[i,``,`Proceed with: ${a}`];return s>0&&(c.push(``,`Todo board (${o}/${s} done):`),c.push(...r.slice(0,20).map(e=>` ${e.status===`completed`?`[x]`:e.status===`in_progress`?`[~]`:`[ ]`} ${e.content.replace(/\n|\r/g,` `)}`))),c.push(``,`If this item is already done, mark it complete and move to the next open todo. Keep the board honest as you work.`),c.join(`
|
|
19
|
+
`)}function Tr(e,t){if(e.length===0||!t)return null;let n=t.toLowerCase(),r=e.find(e=>e.status===`in_progress`);if(r){let e=(r.activeForm??r.content).toLowerCase();if(e.length>5&&n.includes(e))return{id:r.id,content:r.activeForm??r.content}}for(let t of e){if(t.status===`completed`||r&&t.id===r.id)continue;let e=(t.activeForm??t.content).toLowerCase();if(e.length>5&&n.includes(e))return{id:t.id,content:t.activeForm??t.content}}let i=e.find(e=>e.status!==`completed`);return i?{id:i.id,content:i.activeForm??i.content}:null}function Er(e={}){let t=(e,t)=>e===void 0||!Number.isFinite(e)?t:Math.floor(e),n=Math.max(2,t(e.repeatThreshold,2)),r=Math.max(n,t(e.windowSize,3)),i=[],a=null;function o(e){let t=xr(e);i.push(t),i.length>r&&(i=i.slice(i.length-r));let a=0;for(let e=i.length-1;e>=0&&i[e]===t;e--)a++;return{normalized:t,runLength:a,shouldHalt:a>=n}}function s(e){let t=o(e);return t.shouldHalt?a===t.normalized?{...t,action:`halt`}:(a=t.normalized,{...t,shouldHalt:!1,action:`steer`}):(a=null,{...t,shouldHalt:!1,action:`feed`})}function c(){i=[],a=null}function l(){return i.slice()}function u(){return i.length}return{record:o,recordGrounded:s,reset:c,history:l,size:u}}var Dr=`__unbound__`,Or=8,H=new Map;function kr(){return{streak:0,capWarned:!1,loopHalted:!1,loopGuard:Er(),continuationTracker:Sr()}}function Ar(e){let t=e??Dr,n=H.get(t);if(n)return n;if(H.size>=Or){let e=H.keys().next().value;e!==void 0&&H.delete(e)}let r=kr();return H.set(t,r),r}function jr(e){H.delete(e)}function Mr(){let e=h(e=>e.autoProceedMaxIterations),t=h(e=>e.autonomy),n=an(),r=Mn(e=>e.session?.id??null),i=n??r,a=Ar(i),o=(0,B.useRef)(a.streak),s=(0,B.useRef)(a.capWarned),c=(0,B.useRef)(t),l=(0,B.useRef)(i);(0,B.useEffect)(()=>{o.current=a.streak,s.current=a.capWarned}),(0,B.useEffect)(()=>{if(l.current===i)return;if(l.current===null&&i){let e=H.get(Dr);e&&!H.has(i)&&(H.set(i,e),H.delete(Dr))}let e=Ar(i);o.current=e.streak,s.current=e.capWarned,l.current=i},[i]),(0,B.useEffect)(()=>{let e=c.current===`auto`,n=t===`auto`;!e&&n&&(a.capWarned=!1,s.current=!1),e&&!n&&(a.streak=0,o.current=0,a.loopHalted=!1,a.loopGuard.reset(),a.continuationTracker.reset()),c.current=t},[t,a]);let u=(0,B.useCallback)(()=>a.loopHalted?!1:e<=0||a.streak<e,[e,a]),d=(0,B.useCallback)(()=>{let t=e;return t>0&&a.streak>=t?!1:(a.streak+=1,o.current=a.streak,t>0&&a.streak>=t&&(a.capWarned=!0,s.current=!0),!0)},[e,a]),f=(0,B.useCallback)(e=>{if(a.loopHalted)return!1;let t=a.loopGuard.record(e);return t.shouldHalt&&(a.loopHalted=!0),!t.shouldHalt},[a]),p=(0,B.useCallback)((e,t)=>{if(a.loopHalted)return{canFeed:!1,halted:!0};if(!a.loopGuard.recordGrounded(e).shouldHalt)return{canFeed:!0};let n=Tr(t,e);if(n){let e=a.continuationTracker.recordAttempt(n.id);if(a.continuationTracker.markSkipped(n.id),Object.values(a.continuationTracker.snapshot()).reduce((e,t)=>e+t.attempts,0)<=9){let r=t.filter(e=>e.status!==`completed`).find(e=>e.id!==n.id&&!a.continuationTracker.isSkipped(e.id));if(r){let i=t.find(e=>e.id===n.id);i&&(i.status=`pending`);let o=wr({id:n.id,content:n.content},r,e,t);return a.loopGuard.reset(),{canFeed:!1,advancement:o}}}}return a.loopHalted=!0,{canFeed:!1,halted:!0}},[a]),m=(0,B.useCallback)(()=>{a.streak=0,o.current=0,a.capWarned=!1,s.current=!1,a.loopHalted=!1,a.loopGuard.reset(),a.continuationTracker.reset()},[a]),g=(0,B.useCallback)(()=>{a.capWarned=!1,s.current=!1},[a]);return{streak:o.current,capWarned:s.current,canAutoSubmit:u,recordAutoSubmit:d,recordPrompt:f,recordGroundedPrompt:p,reset:m,resetCapWarned:g}}var Nr=u(e=>({pending:null,selected:0,setPending:t=>e({pending:t,selected:0}),clear:()=>e({pending:null,selected:0}),move:t=>e(e=>{if(!e.pending||e.pending.candidates.length===0)return e;let n=e.pending.candidates.length;return{selected:(e.selected+t+n)%n}}),setSelected:t=>e({selected:Math.max(0,t)})}));function Pr(e,t){return t?e===t:!e}function Fr(e){return e===`running`}function Ir(e,t){let n=+!Fr(e.status),r=+!Fr(t.status);return n===r?e.startedAt-t.startedAt:n-r}function Lr(e){let t=0,n=0,r=0;for(let i of e)i.status===`running`?t++:i.status===`completed`?n++:(i.status===`failed`||i.status===`timeout`)&&r++;return{running:t,completed:n,failed:r,total:e.length}}var Rr=85,zr=70;function Br(e){let t=Number.isFinite(e)?Math.max(0,Math.min(100,Math.round(e))):0;return{clamped:t,severity:t>=Rr?`high`:t>=zr?`medium`:`low`}}function Vr(e){return e==null||!Number.isFinite(e)||e<0?`0`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}function Hr(e){if(e==null||!Number.isFinite(e)||e<=0)return`$0`;if(e<.01){let t=e.toFixed(5);return t===`0.00000`?`$0`:`$`+t.replace(/(\d)0+$/,`$1`).replace(/\.$/,``)}return`$`+e.toFixed(3)}function Ur(e){if(e==null||!Number.isFinite(e)||e<0)return`—`;let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m ${t%60}s`;let r=Math.floor(n/60);return r<24?`${r}h ${n%60}m`:`${Math.floor(r/24)}d`}function Wr(e,t=Date.now()){let{clamped:n,severity:r}=Br(e.ctxPct);return{ctxClamped:n,ctxSeverity:r,elapsed:!Number.isFinite(e.startedAt)||e.startedAt<=0?`—`:Ur(e.status===`running`?t-e.startedAt:(e.completedAt??t)-e.startedAt),cost:Hr(e.costUsd),iterationCount:e.iteration,toolCount:e.toolCalls,tokensIn:Vr(e.tokensIn),tokensOut:Vr(e.tokensOut)}}var Gr=12,Kr=20,qr=500,Jr=200,Yr=[];function Xr(e,t,n){return{id:e,name:t?.trim()||e,sessionId:n,status:`running`,iteration:0,toolCalls:0,costUsd:0,ctxPct:0,ctxTokens:0,maxContext:0,extensions:0,startedAt:Date.now(),toolLog:[],sparklineBins:Array(Gr).fill(0)}}var Zr=0;function U(){return`tl_${Date.now()}_${++Zr}`}function W(e,t){return[t,...e].slice(0,Kr)}function Qr(e){switch(e){case`text`:case`thinking`:case`tool_use`:case`tool_result`:case`error`:case`status`:case`system`:return e;default:return`status`}}function $r(e,t){return e.subagentId!==t.subagentId||e.kind!==t.kind||e.iteration!==t.iteration||e.toolName!==t.toolName||e.toolOk!==t.toolOk?!1:e.kind===`text`||e.kind===`thinking`}function G(e,t){let n=e[e.length-1];return n&&$r(n,t)?[...e.slice(0,-1),{...n,content:`${n.content}${t.content}`,ts:t.ts}].slice(-1e3):[...e,t].slice(-1e3)}function ei(e){return[e[0]+1,...e.slice(0,11)]}function ti(e){return Number.isFinite(e)?Math.max(0,Math.min(100,e)):0}var K=u()((e,t)=>({agents:new Map,leaderId:void 0,fleetTokensIn:0,fleetTokensOut:0,fleetConcurrency:0,fleetConcurrencyMax:4,fleetMaxSpawns:void 0,fleetUsedSpawns:void 0,fleetRemainingSpawns:void 0,fleetBudgetSource:void 0,fleetCheckpointMaxSpawns:void 0,fleetCeilingMismatch:!1,eventTimeline:[],agentTimeline:[],agentTranscripts:new Map,pushAgentTimelineEntry:t=>e(e=>{let n={id:`agent_tl_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,...t,kind:Qr(t.kind)},r=new Map(e.agents);n.subagentId&&n.subagentId!==`leader`&&!r.has(n.subagentId)&&r.set(n.subagentId,Xr(n.subagentId,n.agentName,n.sessionId));let i=new Map(e.agentTranscripts);return i.set(n.subagentId,G(i.get(n.subagentId)??[],n)),{agents:r,agentTimeline:[n,...e.agentTimeline].slice(0,qr),agentTranscripts:i}}),hydrateAgentSessions:(t,n)=>e(e=>{if(!Array.isArray(t)||t.length===0)return e;let r=new Map(e.agents),i=new Map(e.agentTranscripts);for(let e of t){if(!e?.subagentId||e.subagentId===`leader`)continue;let t=e.subagentId,a=e.agentName?.trim()||t,o=r.get(t);if(o)e.task&&!o.description&&(o.description=e.task,r.set(t,o));else{let i=Xr(t,a,n);e.status&&(i.status=e.status),e.task&&(i.description=e.task),r.set(t,i)}if(Array.isArray(e.transcript)&&e.transcript.length>0){let n=i.get(t)??[];if(n.length===0)i.set(t,e.transcript.slice(-1e3));else{let r=[...n];for(let t of e.transcript)r.some(e=>e.id===t.id||e.ts===t.ts&&e.content===t.content&&e.kind===t.kind)||(r=G(r,t));i.set(t,r.slice(-1e3))}}}return{agents:r,agentTranscripts:i}}),clear:()=>e({agents:new Map,leaderId:void 0,fleetTokensIn:0,fleetTokensOut:0,fleetConcurrency:0,fleetConcurrencyMax:4,fleetMaxSpawns:void 0,fleetUsedSpawns:void 0,fleetRemainingSpawns:void 0,fleetBudgetSource:void 0,fleetCheckpointMaxSpawns:void 0,fleetCeilingMismatch:!1,eventTimeline:[],agentTimeline:[],agentTranscripts:new Map}),getAgentsBySession:e=>{let n=[];for(let r of t().agents.values())r.sessionId===e&&n.push(r);return n},getAgentTranscript:e=>t().agentTranscripts.get(e)??Yr,clearFinishedAgents:t=>e(e=>{let n=new Map(e.agents),r=new Set,i=0,a=0;for(let[e,o]of n)o.status!==`running`&&Pr(o.sessionId,t)&&(n.delete(e),r.add(e),i+=o.tokensIn??0,a+=o.tokensOut??0);let o=new Map(e.agentTranscripts);for(let e of r)o.delete(e);return{agents:n,agentTranscripts:o,agentTimeline:e.agentTimeline.filter(e=>!r.has(e.subagentId)),eventTimeline:e.eventTimeline.filter(e=>!r.has(e.agentId)),leaderId:e.leaderId&&r.has(e.leaderId)?void 0:e.leaderId,fleetTokensIn:Math.max(0,e.fleetTokensIn-i),fleetTokensOut:Math.max(0,e.fleetTokensOut-a)}}),removeAgent:t=>e(e=>{let n=e.agents.get(t);if(!n)return e;let r=new Map(e.agents);r.delete(t);let i=new Map(e.agentTranscripts);return i.delete(t),{agents:r,agentTranscripts:i,agentTimeline:e.agentTimeline.filter(e=>e.subagentId!==t),eventTimeline:e.eventTimeline.filter(e=>e.agentId!==t),leaderId:e.leaderId===t?void 0:e.leaderId,fleetTokensIn:Math.max(0,e.fleetTokensIn-(n.tokensIn??0)),fleetTokensOut:Math.max(0,e.fleetTokensOut-(n.tokensOut??0))}}),applyEvent:t=>e(e=>{let n=new Map(e.agents),r=new Map(e.agentTranscripts),i=e.eventTimeline,a=e.leaderId,o=e.fleetTokensIn,s=e.fleetTokensOut;if(t.kind===`session_stopped`&&t.sessionId){let i=new Set,a=0,o=0;for(let[e,s]of n)s.sessionId===t.sessionId&&(n.delete(e),r.delete(e),i.add(e),a+=s.tokensIn??0,o+=s.tokensOut??0);return{agents:n,agentTranscripts:r,agentTimeline:e.agentTimeline.filter(e=>!i.has(e.subagentId)),eventTimeline:e.eventTimeline.filter(e=>!i.has(e.agentId)),leaderId:e.leaderId&&i.has(e.leaderId)?void 0:e.leaderId,fleetTokensIn:Math.max(0,e.fleetTokensIn-a),fleetTokensOut:Math.max(0,e.fleetTokensOut-o)}}if(t.kind===`removed`&&t.subagentId){let i=n.get(t.subagentId);return n.delete(t.subagentId),r.delete(t.subagentId),{agents:n,agentTranscripts:r,agentTimeline:e.agentTimeline.filter(e=>e.subagentId!==t.subagentId),eventTimeline:e.eventTimeline.filter(e=>e.agentId!==t.subagentId),leaderId:e.leaderId===t.subagentId?void 0:e.leaderId,fleetTokensIn:Math.max(0,e.fleetTokensIn-(i?.tokensIn??0)),fleetTokensOut:Math.max(0,e.fleetTokensOut-(i?.tokensOut??0))}}if(t.kind===`leader_updated`&&t.subagentId){let e=n.get(t.subagentId)??Xr(t.subagentId,t.name,t.sessionId),r=t.sessionId||e.sessionId;for(let[e,i]of n)e!==t.subagentId&&i.isLeader&&(r&&i.sessionId&&i.sessionId!==r||n.set(e,{...i,isLeader:!1}));let o=t.name?.trim()||e.name;return a=t.subagentId,n.set(t.subagentId,{...e,isLeader:!0,name:o}),(!e.isLeader||o!==e.name)&&(i=W(i,{id:U(),kind:`leader_updated`,agentId:t.subagentId,agentName:o,timestamp:Date.now(),message:`${o} became leader`})),{agents:n,leaderId:a,eventTimeline:i}}if(!t.subagentId)return e;let c=n.get(t.subagentId)??Xr(t.subagentId,t.name,t.sessionId),l={...c},u=Date.now(),d=t.subagentId===`leader`||c.isLeader,f=!1;switch(t.kind){case`spawned`:if(l.name=t.name?.trim()||l.name,l.provider=t.provider??l.provider,l.model=t.model??l.model,l.description=t.description??l.description,l.taskId=t.taskId??l.taskId,l.sessionId=t.sessionId??l.sessionId,l.status=`running`,l.sparklineBins=Array(Gr).fill(0),i=W(i,{id:U(),kind:`spawned`,agentId:t.subagentId,agentName:l.name,timestamp:u,message:`${l.name} spawned`}),!d&&t.description){let e=r.get(t.subagentId)??[];e.length===0&&(r.set(t.subagentId,G(e,{id:`agent_tl_${u}_spawn`,subagentId:t.subagentId,sessionId:t.sessionId,agentName:l.name,content:`🎯 Spawned: ${t.description}`,kind:`system`,iteration:0,ts:new Date(u).toISOString()})),f=!0)}break;case`task_started`:if(l.description=t.description??l.description,l.taskId=t.taskId??l.taskId,l.status=`running`,i=W(i,{id:U(),kind:`task_started`,agentId:t.subagentId,agentName:l.name,timestamp:u,message:`${l.name} started: ${t.description??`new task`}`}),!d&&(t.description||t.taskId)){let e=t.description||t.taskId,n=r.get(t.subagentId)??[];n[n.length-1]?.content.includes(e)||(r.set(t.subagentId,G(n,{id:`agent_tl_${u}_task`,subagentId:t.subagentId,sessionId:t.sessionId,agentName:l.name,content:`🎯 Task: ${e}`,kind:`status`,iteration:0,ts:new Date(u).toISOString()})),f=!0)}break;case`tool_executed`:{let e=typeof t.ok!=`boolean`||t.ok,n=typeof t.durationMs==`number`?t.durationMs:0;if(l.lastTool=t.toolName??l.lastTool,l.toolCalls+=1,l.toolLog=[{name:t.toolName??`unknown`,ok:e,durationMs:n,at:u},...l.toolLog].slice(0,50),l.sparklineBins=ei(l.sparklineBins),i=W(i,{id:U(),kind:`tool_executed`,agentId:t.subagentId,agentName:l.name,timestamp:u,message:`${l.name} ${e?`✓`:`✗`} ${t.toolName??`tool`}`,value:n}),!d){let i=n>0?`Completed in ${n}ms`:e?`Success`:`Failed`,a=r.get(t.subagentId)??[];r.set(t.subagentId,G(a,{id:`agent_tl_${u}_tool_${Math.random().toString(36).slice(2,6)}`,subagentId:t.subagentId,sessionId:t.sessionId,agentName:l.name,content:i,kind:`tool_result`,toolName:t.toolName,toolOk:e,iteration:l.iteration,ts:new Date(u).toISOString()})),f=!0}break}case`iteration_summary`:if(l.iteration=t.iteration??l.iteration,typeof t.toolCalls==`number`&&(l.toolCalls=t.toolCalls),typeof t.costUsd==`number`&&(l.costUsd=t.costUsd),l.currentTool=t.currentTool??l.currentTool,typeof t.partialText==`string`&&t.partialText&&(l.partialText=t.partialText),l.sparklineBins=ei(l.sparklineBins),i=W(i,{id:U(),kind:`iteration_summary`,agentId:t.subagentId,agentName:l.name,timestamp:u,message:`${l.name} iter ${t.iteration??l.iteration} · ${t.currentTool?`${t.currentTool}`:``}`,value:t.costUsd}),!d&&typeof t.partialText==`string`&&t.partialText){let e=r.get(t.subagentId)??[];r.set(t.subagentId,G(e,{id:`agent_tl_${u}_iter_${t.iteration??0}`,subagentId:t.subagentId,sessionId:t.sessionId,agentName:l.name,content:t.partialText,kind:`text`,iteration:t.iteration??l.iteration,costUsd:t.costUsd,ts:new Date(u).toISOString()})),f=!0}break;case`budget_warning`:{let e=t.budgetKind??`budget`,n=typeof t.used==`number`?t.used:0,r=typeof t.limit==`number`?t.limit:0;l.budgetWarning={kind:e,used:n,limit:r},i=W(i,{id:U(),kind:`budget_warning`,agentId:t.subagentId,agentName:l.name,timestamp:u,message:`${l.name} hit ${e} budget ${n}/${r}`,value:n});break}case`budget_extended`:l.extensions=t.totalExtensions??l.extensions+1,l.budgetWarning=void 0,i=W(i,{id:U(),kind:`budget_extended`,agentId:t.subagentId,agentName:l.name,timestamp:u,message:`${l.name} extended budget ⚡×${l.extensions}`});break;case`ctx_pct`:l.ctxPct=ti(Math.round(Math.max(0,t.load??0)*100)),l.ctxTokens=t.tokens??l.ctxTokens,l.maxContext=t.maxContext??l.maxContext,l.ctxPct>=80&&!l.budgetWarning&&(l.budgetWarning=l.ctxPct>=100?{kind:`hard`,used:l.ctxPct,limit:100}:{kind:`soft`,used:l.ctxPct,limit:100}),typeof t.costUsd==`number`&&(l.costUsd=t.costUsd),typeof t.tokensIn==`number`&&(l.tokensIn=t.tokensIn,o=o-(c.tokensIn??0)+t.tokensIn),typeof t.tokensOut==`number`&&(l.tokensOut=t.tokensOut,s=s-(c.tokensOut??0)+t.tokensOut),i=W(i,{id:U(),kind:`ctx_pct`,agentId:t.subagentId,agentName:l.name,timestamp:u,message:`${l.name} ctx ${l.ctxPct}%`,value:l.ctxPct});break;case`task_completed`:{l.status=t.status===`success`?`completed`:t.status??`completed`,typeof t.iterations==`number`&&(l.iteration=t.iterations),typeof t.toolCalls==`number`&&(l.toolCalls=t.toolCalls),l.error=t.error,l.currentTool=void 0,l.completedAt=u,l.failureReason=t.failureReason??l.failureReason,typeof t.finalText==`string`&&t.finalText&&(l.finalText=_e(t.finalText));let e=t.status===`success`?`✓ completed`:t.status===`failed`?`✗ failed${t.failureReason?` (${t.failureReason})`:``}`:t.status===`timeout`?`⏱ timeout${t.failureReason?` (${t.failureReason})`:``}`:`stopped`;if(i=W(i,{id:U(),kind:`task_completed`,agentId:t.subagentId,agentName:l.name,timestamp:u,message:`${l.name} ${e}`,value:l.costUsd}),!d){let e=r.get(t.subagentId)??[];if(typeof t.finalText==`string`&&t.finalText){let n=_e(t.finalText);e.some(e=>e.kind===`text`&&e.content.includes(n))||(r.set(t.subagentId,G(e,{id:`agent_tl_${u}_done_text`,subagentId:t.subagentId,sessionId:t.sessionId,agentName:l.name,content:n,kind:`text`,iteration:t.iterations??l.iteration,ts:new Date(u).toISOString()})),f=!0)}if(t.status===`failed`||t.status===`timeout`){let e=t.error?.message??(t.failureReason?`Failed: ${t.failureReason}`:`Agent ${t.status}`);r.set(t.subagentId,G(r.get(t.subagentId)??[],{id:`agent_tl_${u}_err`,subagentId:t.subagentId,sessionId:t.sessionId,agentName:l.name,content:e,kind:`error`,iteration:t.iterations??l.iteration,ts:new Date(u).toISOString()})),f=!0}else t.finalText||(r.set(t.subagentId,G(r.get(t.subagentId)??[],{id:`agent_tl_${u}_done_status`,subagentId:t.subagentId,sessionId:t.sessionId,agentName:l.name,content:`Task completed successfully`,kind:`status`,iteration:t.iterations??l.iteration,ts:new Date(u).toISOString()})),f=!0)}break}}n.set(t.subagentId,l);let p=!1;if(n.size>Jr)for(let[e,i]of n){if(n.size<=Jr)break;i.status!==`running`&&e!==t.subagentId&&(n.delete(e),r.delete(e),p=!0,o=Math.max(0,o-(i.tokensIn??0)),s=Math.max(0,s-(i.tokensOut??0)),a===e&&(a=void 0))}return{agents:n,agentTranscripts:f||p?r:e.agentTranscripts,leaderId:a,fleetTokensIn:o,fleetTokensOut:s,eventTimeline:i}})})),ni=e=>{let t=Array.from(e.agents.values());return t.sort((e,t)=>e===t||e.id===t.id?0:e.isLeader===t.isLeader?Ir(e,t):e.isLeader?-1:1),t},ri=Object.freeze({leaderId:void 0,tokensIn:0,tokensOut:0,totalCost:0,running:0,completed:0,failed:0,total:0}),ii=`\0unattributed`,ai=new WeakMap;function oi(e){let t=ai.get(e);if(t)return t;let n=new Map;for(let t of e.values()){let e=t.sessionId||ii,r=n.get(e);r||(r={...ri},n.set(e,r)),r.total++,t.status===`running`?r.running++:t.status===`completed`?r.completed++:(t.status===`failed`||t.status===`timeout`)&&r.failed++,Number.isFinite(t.costUsd)&&t.costUsd>0&&(r.totalCost+=t.costUsd),r.tokensIn+=t.tokensIn??0,r.tokensOut+=t.tokensOut??0,t.isLeader&&(r.leaderId=t.id)}return ai.set(e,n),n}var si=(e,t)=>t?oi(e.agents).get(t)??ri:ri,ci=(e,t)=>{if(!t){if(!e.leaderId)return;let t=e.agents.get(e.leaderId);return t&&!t.sessionId?e.leaderId:void 0}let n=oi(e.agents).get(t)?.leaderId;if(n)return n;let r=e.leaderId;if(!r)return;let i=e.agents.get(r);return i&&i.sessionId===t?r:void 0};function li(e){let t=an(),n=e??(t||void 0);return K(e=>ci(e,n))}function ui(e){let t=an(),n=e??(t||void 0);return K(e=>si(e,n))}var di=u()(e=>({entries:[],loading:!1,error:null,setEntries:(t,n=null)=>e({entries:t,error:n,loading:!1}),setLoading:t=>e({loading:t}),removeEntry:t=>e(e=>({entries:e.entries.filter(e=>e.id!==t)})),updateEntryName:(t,n)=>e(e=>({entries:e.entries.map(e=>{if(e.id!==t)return e;let r=n.trim();if(!r){let{name:t,...n}=e;return n}return{...e,name:r}})})),rebindCurrent:t=>e(e=>e.entries.every(e=>e.isCurrent===(e.id===t))?{}:{entries:e.entries.map(e=>({...e,isCurrent:e.id===t}))}),clearHistory:()=>e({entries:[]})})),fi=u()(e=>({candidates:[],offer:t=>{e({candidates:[...new Set(t.filter(e=>typeof e==`string`&&e.length>0))]})},dismiss:()=>e({candidates:[]})})),pi=3e5,mi=new Map;function hi(e){let t=mi.get(e);t!==void 0&&(clearTimeout(t),mi.delete(e))}var gi=u()(e=>({startedAt:{},progress:{},begin:t=>{t&&(hi(t),mi.set(t,setTimeout(()=>{mi.delete(t),gi.getState().end(t)},pi)),e(e=>({startedAt:{...e.startedAt,[t]:Date.now()}})))},update:(t,n)=>{t&&e(e=>({progress:{...e.progress,[t]:{...n,loadedBytes:Math.max(0,n.loadedBytes),totalBytes:Math.max(0,n.totalBytes),updatedAt:Date.now()}}}))},end:t=>{t&&(hi(t),e(e=>{if(!(t in e.startedAt)&&!(t in e.progress))return e;let{[t]:n,...r}=e.startedAt,{[t]:i,...a}=e.progress;return{startedAt:r,progress:a}}))},clear:()=>{for(let e of[...mi.keys()])hi(e);e({startedAt:{},progress:{}})}})),_i={start:`Starting`,resolve_id:`Resolving session id`,reserve_ownership:`Reserving ownership`,open_journal:`Reading journal`,activate_ownership:`Taking ownership`,replay_history:`Rebuilding timeline`,read_sidecars:`Reading todos and sidecars`,swap_writer:`Attaching session`,flush_journal:`Flushing journal`,repoint_sidecars:`Repointing sidecars`,restore_model:`Restoring provider and model`,finalize_previous_session:`Closing previous session`,token_accounting:`Restoring token accounting`,complete:`Finalizing`};function vi(e){return e?_i[e]??e.replaceAll(`_`,` `):`Reading journal`}function yi(e){if(!e||e.totalBytes<=0)return null;let t=Math.round(e.loadedBytes/e.totalBytes*100);return Math.max(0,Math.min(100,t))}function bi(e){return e>=1048576?`${(e/1048576).toFixed(1)} MB`:e>=1024?`${Math.round(e/1024)} KB`:`${e} B`}var xi=u()(e=>({info:null,currentBySession:{},pickerOpen:!1,pickerStartsSession:!1,promptedThisSession:!1,setInfo:(t,n)=>e(e=>({info:t,currentBySession:n?{...e.currentBySession,[n]:t.current}:e.currentBySession})),dropSession:t=>e(e=>{if(!(t in e.currentBySession))return e;let n={...e.currentBySession};return delete n[t],{currentBySession:n}}),openPicker:t=>e({pickerOpen:!0,pickerStartsSession:t?.startsSession===!0,promptedThisSession:!0}),closePicker:()=>e({pickerOpen:!1,pickerStartsSession:!1}),markPrompted:()=>e({promptedThisSession:!0})}));function Si(e,t){return(t?e.currentBySession[t]:void 0)??e.info?.current??`default`}var Ci=`leader`;function wi(){return{started:0,ok:0,failed:0,totalMs:0}}function Ti(){return{started:0,ok:0,failed:0,totalMs:0,toolCalls:0}}function Ei(e){return{sessionId:e,firstActivityAt:Date.now(),lastActivityAt:Date.now(),perTool:{},perAgent:{},delegations:Ti()}}function Di(e,t){let n=e[t];if(n)return{record:e,bucket:n};let r=wi();return{record:{...e,[t]:r},bucket:r}}function Oi(e,t){let n=e[t];if(n)return{sessions:e,session:n};let r=Ei(t);return{sessions:{...e,[t]:r},session:r}}var ki=u(e=>({sessions:{},recordToolStarted:(t,n)=>e(e=>{let r=n.agentName||`leader`,{sessions:i,session:a}=Oi(e.sessions,t),o=Di(a.perTool,n.name),s=Di(a.perAgent,r),c={...a,lastActivityAt:Date.now(),perTool:{...o.record,[n.name]:{...o.bucket,started:o.bucket.started+1}},perAgent:{...s.record,[r]:{...s.bucket,started:s.bucket.started+1}}};return{sessions:{...i,[t]:c}}}),recordToolExecuted:(t,n)=>e(e=>{let r=n.agentName||`leader`,{sessions:i,session:a}=Oi(e.sessions,t),o=Di(a.perTool,n.name),s=Di(a.perAgent,r),c=Math.max(0,n.durationMs??0),l={...a,lastActivityAt:Date.now(),perTool:{...o.record,[n.name]:{...o.bucket,ok:o.bucket.ok+ +!!n.ok,failed:o.bucket.failed+ +!n.ok,totalMs:o.bucket.totalMs+c}},perAgent:{...s.record,[r]:{...s.bucket,ok:s.bucket.ok+ +!!n.ok,failed:s.bucket.failed+ +!n.ok,totalMs:s.bucket.totalMs+c}}};return{sessions:{...i,[t]:l}}}),recordDelegateStarted:(t,n)=>e(e=>{let{sessions:n,session:r}=Oi(e.sessions,t),i={...r,lastActivityAt:Date.now(),delegations:{...r.delegations,started:r.delegations.started+1}};return{sessions:{...n,[t]:i}}}),recordDelegateCompleted:(t,n)=>e(e=>{let{sessions:r,session:i}=Oi(e.sessions,t),a={...i,lastActivityAt:Date.now(),delegations:{...i.delegations,ok:i.delegations.ok+ +!!n.ok,failed:i.delegations.failed+ +!n.ok,toolCalls:i.delegations.toolCalls+Math.max(0,n.toolCalls??0)}};return{sessions:{...r,[t]:a}}}),resetSession:t=>e(e=>{if(!(t in e.sessions))return e;let n={...e.sessions};return delete n[t],{sessions:n}}),clearAll:()=>e({sessions:{}})}));function Ai(e){let t=Object.values(e.perAgent).reduce((e,t)=>e+t.started,0),n=Object.values(e.perAgent).reduce((e,t)=>e+t.ok+t.failed,0);return Math.max(0,t-n)}var ji=u(e=>({queues:{},enqueue:t=>e(e=>{let n=(e.queues[t.sessionId]??[]).filter(e=>e.request.id!==t.request.id);return{queues:{...e.queues,[t.sessionId]:[...n,t].slice(-8)}}}),resolve:t=>e(e=>{let n={};for(let[r,i]of Object.entries(e.queues)){let e=i.filter(e=>e.request.id!==t);e.length>0&&(n[r]=e)}return{queues:n}}),forgetSession:t=>e(e=>{let{[t]:n,...r}=e.queues;return{queues:r}}),reset:()=>e({queues:{}})}));function Mi(e,t){return t?e[t]?.[0]??null:Object.values(e).flat()[0]??null}var q=S,Ni=`wrongstack.open_session_tabs`;function Pi(){if(typeof window>`u`)return[];try{let e=localStorage.getItem(Ni);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`&&e.length>0).slice(0,q):[]}catch{return[]}}function Fi(e){if(!(typeof window>`u`))try{localStorage.setItem(Ni,JSON.stringify(e.slice(0,q)))}catch{}}function Ii(e){if(!(typeof window>`u`))try{let t=new URL(window.location.href);if(t.searchParams.get(`session`)===e)return;t.searchParams.set(`session`,e),window.history.replaceState({},``,t.toString())}catch{}}function J(){let e=N();return e&&e!==`__unbound__`?e:null}function Li(e){j(e),Lt(e),M(e),Mn.getState().switchSession(e);let t=_.getState();t.bindSessionChrome(e),t.setSubagentChatFocus(null,e);let n=T(e),r=n.pendingConfirm;r?t.showConfirm(r):t.hideConfirm();let i=n.pendingFallback;i?Nr.getState().setPending(i):Nr.getState().clear(),di.getState().rebindCurrent(e),t.setQueuePanelOpen(!1),t.setProcessMonitorOpen(!1),t.setCronJobsOpen(!1),Ii(e)}function Ri(e){if(T(e).isLoading)return!0;for(let t of K.getState().agents.values())if(t.sessionId===e&&t.status===`running`)return!0;return!1}function zi(e){let t=T(e),n=t.isLoading,r=[],i=0;for(let t of K.getState().agents.values())t.sessionId===e&&(t.status===`running`?r.push({id:t.id,name:t.name??t.id,brief:t.description?Bn(t.description,120):``}):i+=1);let a=t.queue.length,o=[];n&&o.push(d.t(`activity:sessions.warnLeaderRunning`,{defaultValue:`Leader run in progress`}));for(let e of r)o.push(d.t(`activity:sessions.warnSubagentLine`,{defaultValue:`{{name}} — running{{suffix}}`,name:e.name,suffix:e.brief?`: ${e.brief}`:``}));i>0&&o.push(d.t(`activity:sessions.warnFinishedAgents`,{defaultValue:`{{count}} finished subagent(s) on record`,count:i})),a>0&&o.push(d.t(`activity:sessions.warnQueuedMessages`,{defaultValue:`{{count}} queued message(s)`,count:a}));let s=!n&&r.length===0&&i===0&&a===0&&t.messages.length===0;return{sessionId:e,isBusy:n||r.length>0,isEmpty:s,leaderRunning:n,runningAgents:r,finishedAgents:i,queuedMessages:a,lines:o}}function Bi(e){if(!Ri(e))return;let t=zi(e);if(t.lines.length===0)return;let n=A(e).session?.title??e.slice(0,8);In.warn(d.t(`activity:sessions.stillRunningToast`,{defaultValue:`"{{title}}" keeps running in background:
|
|
20
|
+
{{lines}}`,title:n,lines:t.lines.join(`
|
|
21
|
+
`)}),7e3)}function Vi(e){Ft(e),nn(e),h.getState().forgetSession(e),xi.getState().dropSession(e),_.getState().forgetSession(e),ji.getState().forgetSession(e),fn.getState().forgetSessionFiles(e),gn.getState().forgetSessionGitChanges(e),K.getState().applyEvent({kind:`session_stopped`,sessionId:e}),Wt.getState().forgetSession(e),ki.getState().resetSession(e),jr(e)}function Hi(e){let t=N();if(t!==`__unbound__`&&e.includes(t))return;let n=e[e.length-1];if(n!==void 0){Li(n),Y.getState().markSeen(n);return}Lt(null),M(O),_.getState().hideConfirm(),Nr.getState().clear()}function Ui(e){try{br().focusSessionById(e)}catch{}}function Wi(e){let t=J(),n=t&&!e.includes(t)?[...e,t]:e;if(n.length!==0)try{br().subscribeSessions(n)}catch{}}var Gi=(e,t)=>{if(e.length===0)return null;let n=e[0],r=A(n).lastVisitedAt||0;for(let t=1;t<e.length;t+=1){let i=e[t],a=A(i).lastVisitedAt||0;a>r&&(n=i,r=a)}return n};function Ki(e){let t=new Set(e.filter(e=>typeof e==`string`&&e.length>0)),n=Y.getState().openTabIds,r=n.filter(e=>t.has(e));if(r.length===n.length)return r;for(let e of n)t.has(e)||Vi(e);return Fi(r),Y.setState({openTabIds:r}),r}var qi=!1;function Ji(e,t={}){if(qi)return[];if(qi=!0,e===void 0)return Yi(t);let n=new Set(e.filter(e=>typeof e==`string`&&e.length>0)),r=Y.getState().openTabIds.filter(e=>!n.has(e));Ki(e);let i=Yi(t);return r.length>0&&fi.getState().offer(r),i}function Yi(e={}){if(J())return[];let t=e.now??Date.now(),n=e.pickForeground??Gi,r=Y.getState().openTabIds.slice(0,q);if(r.length===0)return[];for(let e of r)Mt(e),j(e),h.getState().bindSession(e),_.getState().bindSessionChrome(e),di.getState().rebindCurrent(e);let i=n(r,t)??r[0];return i&&(Li(i),Y.getState().markSeen(i),Ui(i)),Wi(r),r}var Y=u((e,t)=>({openTabIds:Pi(),lastSeenCounts:{},attention:{},setOpenTabIds:n=>{let r=new Set,i=[];for(let e of n)if(e&&!r.has(e)&&(r.add(e),i.push(e),i.length===q))break;let a=t().openTabIds.filter(e=>!r.has(e));for(let e of a)Vi(e);let o=e=>Object.fromEntries(Object.entries(e).filter(([e])=>r.has(e)));e({openTabIds:i,lastSeenCounts:o(t().lastSeenCounts),attention:o(t().attention)}),Fi(i),a.length>0&&Hi(i)},openTab:(n,r)=>{if(!n)return{success:!1,reason:`tabs_full`};let i=r?.recycleReentry===!0,a=J(),o=[...t().openTabIds];if(a&&!o.includes(a)&&o.length<q&&o.push(a),n===a){if(!t().openTabIds.includes(n)){let e=[...o.slice(0,q-1),n];t().setOpenTabIds(e)}return t().markSeen(n),{success:!0,reason:`already_active`}}if(o.includes(n))return a&&!i&&Bi(a),Li(n),t().markSeen(n),T(n).messages.length===0&&gi.getState().begin(n),Ui(n),{success:!0,reason:`switched`};if(o.length<q){a&&!i&&Bi(a);let s=[...o,n];return e({openTabIds:s}),Fi(s),Li(n),t().markSeen(n),r?.resumeSession&&(gi.getState().begin(n),r.resumeSession(n)),{success:!0,reason:i?`replaced_empty_tab`:`opened_new_tab`}}let s=o.find(e=>{if(e===a||Ri(e))return!1;let t=di.getState().entries.find(t=>t.id===e);if(t&&(t.tokenTotal>0||(t.messageCount??0)>0))return!1;let n=T(e);return zi(e).isEmpty&&n.pendingConfirm===null&&n.pendingFallback===null&&n.pendingRefinement===null});return s?(a&&!i&&Bi(a),t().closeTab(s),t().openTab(n,{...r,recycleReentry:!0})):(In.error(d.t(`activity:sessions.allTabsRunning`,{defaultValue:`Maksimum 4 aktif sekme dolu. Başka bir oturum açmak için önce bir sekmeyi kapatın.`})),{success:!1,reason:`tabs_full`})},closeTab:n=>{let r=t().openTabIds.filter(e=>e!==n);Vi(n);let{[n]:i,...a}=t().lastSeenCounts,{[n]:o,...s}=t().attention;e({openTabIds:r,lastSeenCounts:a,attention:s}),Fi(r),Hi(r),Wi(r)},closeTabsForSessions:e=>{let n=new Set(e.filter(e=>!Ri(e))),r=[...t().openTabIds];if(n.size===0)return[];if(r.length===0)return[...n];let i=r.filter(e=>!n.has(e));if(i.length===0){let e=J(),t=e&&n.has(e)?e:r[r.length-1];i=[t],n.delete(t)}return t().setOpenTabIds(i),Wi(i),[...n]},swapTabSession:(n,r)=>{if(!n||!r||n===r)return;let i=t().openTabIds,a=i.indexOf(n);if(a===-1)return;let o=J()===n;Vi(n);let s=i.map((e,t)=>t===a?r:e),{[n]:c,...l}=t().lastSeenCounts,{[n]:u,...d}=t().attention;e({openTabIds:s,lastSeenCounts:l,attention:d}),Fi(s),o&&(Li(r),t().markSeen(r)),Wi(s)},markSeen:t=>e(e=>({lastSeenCounts:{...e.lastSeenCounts,[t]:T(t).messages.length},attention:{...e.attention,[t]:!1}})),setAttention:(t,n)=>e(e=>({attention:{...e.attention,[t]:n}}))}));function Xi(e,t){let n=T(e),r=A(e),i=Y.getState(),a=k.getState().activeSessionId,o=0,s=0;for(let t of K.getState().agents.values())t.sessionId===e&&(s+=1,t.status===`running`&&(o+=1));let c=i.lastSeenCounts[e]??n.messages.length,l=e===a,u=r.totalTokens.input+r.totalTokens.output;return{slot:t,sessionId:e,isActive:l,title:_.getState().sessionNicknames[e]||r.session?.title||e.slice(0,8),provider:r.session?.provider??``,model:r.session?.model??``,mode:r.mode,isRunning:n.isLoading,messageCount:n.messages.length,unread:l?0:Math.max(0,n.messages.length-c),queued:n.queue.length,agentsRunning:o,agentsTotal:s,tokens:u,cost:r.cost,contextPct:r.maxContext>0&&r.lastInputTokens>0?Math.min(100,Math.round(r.lastInputTokens/r.maxContext*100)):0,needsAttention:!l&&i.attention[e]===!0}}var X={provider:`hsl(var(--info))`,agent:`hsl(var(--primary))`,tool:`hsl(var(--warning))`,mailbox:`hsl(var(--success))`,session:`hsl(var(--primary))`,system:`hsl(var(--muted-foreground))`,success:`hsl(var(--success))`,error:`hsl(var(--destructive))`},Zi={"provider:call":`hsl(var(--info))`,"provider:delta":`hsl(var(--primary))`,"agent:tool":`hsl(var(--warning))`,"mailbox:send":`hsl(var(--success))`,default:`hsl(var(--muted-foreground))`},Qi=1200,$i=0;function Z(){return`viz_${Date.now()}_${++$i}`}function ea(e){return Math.max(0,Math.min(100,Math.round((typeof e==`number`&&Number.isFinite(e)?e:0)*100)))}function Q(e,t=!1){if(t&&e.target){if(e.kind===`agent:tool`||e.kind===`tool:executed`||e.kind===`tool:started`)return`tool`;if(e.source===`leader`||e.source===`coordinator`)return`coordinator`;if(e.kind.startsWith(`provider:`))return`provider`;if(e.kind.startsWith(`mailbox:`))return`mailbox`}switch(e.kind){case`provider:call`:case`provider:delta`:case`provider:response`:return`provider`;case`agent:spawned`:case`agent:tool`:case`agent:status`:case`agent:text`:case`agent:ctx`:case`budget:warning`:case`budget:extended`:return`agent`;case`tool:started`:case`tool:executed`:case`tool:progress`:return`tool`;case`mailbox:send`:case`mailbox:deliver`:return`mailbox`;case`collab:event`:return`system`;case`session:start`:case`session:end`:case`iteration:start`:case`iteration:end`:case`eternal:iteration`:case`fleet:snapshot`:return`session`;case`context:compacted`:case`context:repaired`:case`cost:update`:return`system`;case`error`:return`error`;default:return`system`}}function ta(e){switch(e){case`provider:call`:case`provider:delta`:case`agent:tool`:case`tool:started`:case`tool:progress`:case`iteration:start`:case`agent:text`:return`streaming`;case`agent:status`:case`iteration:end`:return`completed`;case`error`:return`error`;case`tool:executed`:return`completed`;case`session:end`:return`idle`;default:return`active`}}function na(e,t){return t-e<250}function ra(e,t,n){if(e.size<=t)return e;let r=[...e.entries()].sort((e,t)=>n(e[1])-n(t[1]));for(let[n]of r.slice(0,e.size-t))e.delete(n);return e}function $(e,t){if(e===t)return!0;if(!e||!t)return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r of n){let n=e[r],i=t[r];if(n!==i){if(n==null||i==null||typeof n!=typeof i)return!1;if(typeof n==`object`){if(Array.isArray(n)||Array.isArray(i)||!$(n,i))return!1;continue}return!1}}return!0}function ia(e,t,n){let r=t.source,i={id:r,kind:Q(t),label:t.label,status:ta(t.kind),activity:1,color:t.color??X[Q(t)],lastSeenAt:n},a=e.nodes.get(r),o=a?{...a,...i}:i,s=!$(a,o);a&&s&&na(a.lastSeenAt,n)&&$({...a,activity:o.activity,lastSeenAt:o.lastSeenAt},o)&&(o=a,s=!1);let c,l=!1,u;if(t.target){u=t.target;let r={id:u,kind:Q(t,!0),label:u,status:ta(t.kind),activity:.8,color:t.color??X[Q(t,!0)],lastSeenAt:n},i=e.nodes.get(u);c=i?{...i,...r}:r,l=!$(i,c),i&&l&&na(i.lastSeenAt,n)&&$({...i,activity:c.activity,lastSeenAt:c.lastSeenAt},c)&&(c=i,l=!1)}let d,f=!1,p;if(t.target&&r){p=`${r}->${t.target}`;let i=e.edges.get(p),a={id:p,source:r,target:t.target,kind:t.kind,label:t.label,intensity:i?Math.min(1,i.intensity+.3):.7,color:t.color??X[Q(t)]??X.agent,lastActiveAt:n,totalMagnitude:(i?.totalMagnitude??0)+(t.magnitude??0)};d=i?{...i,...a}:a,f=!$(i,d),i&&f&&na(i.lastActiveAt,n)&&$({...i,lastActiveAt:d.lastActiveAt},d)&&(d=i,f=!1)}let m=e.nodes,h=e.edges;return(s||l)&&(m=new Map(e.nodes),s&&m.set(r,o),l&&c&&u&&m.set(u,c)),f&&d&&p&&(h=new Map(e.edges),h.set(p,d)),m!==e.nodes&&(m=ra(m,400,e=>e.lastSeenAt)),h!==e.edges&&(h=ra(h,Qi,e=>e.lastActiveAt)),{nodes:m,edges:h}}function aa(e,t){switch(e){case`provider.text_delta`:{let e=t.text??``;return{id:Z(),kind:`provider:delta`,timestamp:Date.now(),source:`provider`,target:`leader`,label:e.slice(0,60),magnitude:e.length,data:{text:e},color:X.provider,flowGroup:`provider`}}case`provider.response`:{let e=t.usage,n=(e?.input??0)+(e?.output??0);return{id:Z(),kind:`provider:response`,timestamp:Date.now(),source:`provider`,target:`leader`,label:`${(e?.input??0).toLocaleString(`en-US`)} in / ${(e?.output??0).toLocaleString(`en-US`)} out`,magnitude:n,data:t,color:X.provider,flowGroup:`provider`}}case`provider.stream_error`:{let e=t.message??`Provider stream error`;return{id:Z(),kind:`error`,timestamp:Date.now(),source:`provider`,target:`leader`,label:e.slice(0,80),magnitude:1,data:t,color:X.error,flowGroup:`provider`}}case`tool.started`:{let e=t.name??`tool`;return{id:Z(),kind:`tool:started`,timestamp:Date.now(),source:e,target:`filesystem`,label:e,magnitude:1,data:t,color:X.tool,flowGroup:`tool:${e}`}}case`tool.executed`:{let e=t.name??`tool`,n=t.ok??!0;return{id:Z(),kind:`tool:executed`,timestamp:Date.now(),source:e,target:`leader`,label:`${e} ${n?`✓`:`✗`} (${t.durationMs??0}ms)`,magnitude:t.durationMs??0,data:t,color:n?X.tool:X.error,flowGroup:`tool:${e}`}}case`tool.progress`:{let e=t.name??`tool`,n=t.event?.text??``;return{id:Z(),kind:`tool:progress`,timestamp:Date.now(),source:e,target:`leader`,label:n.slice(0,60)||e,magnitude:n.length,data:t,color:X.tool,flowGroup:`tool:${e}`}}case`codemap.tool_started`:{let e=t.name??`tool`,n=t.agentId??`subagent`;return{id:Z(),kind:`tool:started`,timestamp:Date.now(),source:n,target:e,label:e,magnitude:1,data:t,color:X.tool,flowGroup:`agent:${n}`}}case`codemap.tool_executed`:{let e=t.name??`tool`,n=t.agentId??`subagent`,r=t.ok??!0;return{id:Z(),kind:`tool:executed`,timestamp:Date.now(),source:n,target:e,label:`${e} ${r?`✓`:`✗`} (${t.durationMs??0}ms)`,magnitude:t.durationMs??0,data:t,color:r?X.tool:X.error,flowGroup:`agent:${n}`}}case`tool.loop_detected`:{let e=t.tools??``,n=t.kind??`loop`,r=t.action===`steer`;return{id:Z(),kind:r?`agent:status`:`error`,timestamp:Date.now(),source:e||n,target:`leader`,label:`${n} loop x${t.repeatCount??0}`,magnitude:t.repeatCount??1,data:t,color:r?X.agent:X.error,flowGroup:`tool`}}case`delegate.started`:{let e=t.target??`delegate`,n=t.task??``;return{id:Z(),kind:`agent:status`,timestamp:Date.now(),source:`leader`,target:e,label:n.slice(0,80)||`Delegating to ${e}`,magnitude:1,data:t,color:X.agent,flowGroup:`delegate:${e}`}}case`delegate.completed`:{let e=t.subagentId??t.target??`delegate`,n=t.ok??!1;return{id:Z(),kind:n?`agent:status`:`error`,timestamp:Date.now(),source:e,target:`leader`,label:(t.summary??t.status??`delegate completed`).slice(0,80),magnitude:t.durationMs??1,data:t,color:n?X.agent:X.error,flowGroup:`delegate:${e}`}}case`subagent.event`:{let e=t.kind,n=t.subagentId??`unknown`,r=t.name??n;switch(e){case`spawned`:return{id:Z(),kind:`agent:spawned`,timestamp:Date.now(),source:n,target:`session`,label:`${r} spawned`,magnitude:1,data:t,color:X.agent,flowGroup:`agent:${n}`};case`tool_executed`:{let e=t.toolName??`tool`,r=t.ok??!0;return{id:Z(),kind:`agent:tool`,timestamp:Date.now(),source:n,target:e,label:e,magnitude:t.durationMs??0,data:t,color:r?X.tool:X.error,flowGroup:`agent:${n}`}}case`task_completed`:{let e=t.status??`completed`;return{id:Z(),kind:`agent:status`,timestamp:Date.now(),source:n,target:`session`,label:`${r} ${e}`,magnitude:1,data:t,color:e===`success`?X.success:X.error,flowGroup:`agent:${n}`}}case`ctx_pct`:return{id:Z(),kind:`agent:ctx`,timestamp:Date.now(),source:n,target:`session`,label:`ctx ${ea(t.load)}%`,magnitude:t.tokens??0,data:t,color:X.agent,flowGroup:`agent:${n}`};case`iteration_summary`:return{id:Z(),kind:`agent:text`,timestamp:Date.now(),source:n,target:`session`,label:(t.partialText??``).slice(0,80)||`iter ${t.iteration??0}`,magnitude:t.costUsd??0,data:t,color:X.agent,flowGroup:`agent:${n}`};case`budget_extended`:return{id:Z(),kind:`budget:extended`,timestamp:Date.now(),source:n,target:`session`,label:`${r} extended budget`,magnitude:t.totalExtensions??1,data:t,color:X.tool,flowGroup:`agent:${n}`};case`budget_warning`:return{id:Z(),kind:`budget:warning`,timestamp:Date.now(),source:n,target:`session`,label:`${r} hit ${t.budgetKind??`budget`} ${t.used??0}/${t.limit??0}`,magnitude:t.used??1,data:t,color:X.error,flowGroup:`agent:${n}`}}return null}case`mailbox.event`:{let e=t.event,n=t.from??`?`,r=t.to??`?`,i=t.subject??``,a=e===`mailbox.sent`;return{id:Z(),kind:a?`mailbox:send`:`mailbox:deliver`,timestamp:Date.now(),source:n,target:r,label:i||(a?`→ ${r}`:`← ${n}`),magnitude:1,data:t,color:X.mailbox,flowGroup:`mailbox`}}case`iteration.started`:{let e=t.index??0;return{id:Z(),kind:`iteration:start`,timestamp:Date.now(),source:`leader`,target:`session`,label:`Iteration ${e}`,magnitude:e,data:t,color:X.agent,flowGroup:`iteration`}}case`iteration.completed`:{let e=t.index??0;return{id:Z(),kind:`iteration:end`,timestamp:Date.now(),source:`leader`,target:`session`,label:`Iteration ${e} done`,magnitude:e,data:t,color:X.session,flowGroup:`iteration`}}case`ctx.pct`:{let e=t.tokens??0;return{id:Z(),kind:`agent:ctx`,timestamp:Date.now(),source:`leader`,target:`session`,label:`ctx ${ea(t.load)}%`,magnitude:e,data:t,color:X.agent,flowGroup:`leader`}}case`error`:{let e=t.message??`Error`;return{id:Z(),kind:`error`,timestamp:Date.now(),source:t.phase??`system`,target:`session`,label:e,magnitude:1,data:t,color:X.error,flowGroup:`error`}}case`context.compacted`:return{id:Z(),kind:`context:compacted`,timestamp:Date.now(),source:`system`,target:`session`,label:`Compacted: ${(t.saved??0).toLocaleString(`en-US`)} tokens`,magnitude:t.saved??0,data:t,color:`hsl(var(--info))`,flowGroup:`context`};case`compaction.failed`:{let e=t.message??`Compaction failed`;return{id:Z(),kind:`error`,timestamp:Date.now(),source:`compactor`,target:`session`,label:e.slice(0,80),magnitude:t.tokens??1,data:t,color:X.error,flowGroup:`context`}}case`context.repaired`:return{id:Z(),kind:`context:repaired`,timestamp:Date.now(),source:`system`,target:`session`,label:`Repaired: ${t.removedMessages??0} msgs`,magnitude:t.removedMessages??0,data:t,color:`hsl(var(--info))`,flowGroup:`context`};case`session.start`:{let e=t.sessionId??`?`,n=t.projectName??``;return{id:Z(),kind:`session:start`,timestamp:Date.now(),source:`session`,target:`leader`,label:n||e.slice(0,12),magnitude:1,data:t,color:X.session,flowGroup:`session`}}case`sessions.status_update`:{let e=t.sessions??[];return{id:Z(),kind:`fleet:snapshot`,timestamp:Date.now(),source:`system`,target:`session`,label:`${e.length} session(s)`,magnitude:e.length,data:t,color:X.system,flowGroup:`fleet`}}default:return null}}var oa=u()((e,t)=>({events:[],toolEvents:[],nodes:new Map,edges:new Map,isActive:!1,maxEvents:2e3,counters:{totalTokens:0,totalCost:0,totalToolCalls:0,activeAgents:0,completedTasks:0,errors:0,mailboxMessages:0},pushEvent:t=>e(e=>{let n={...t,id:t.id??Z(),timestamp:t.timestamp||Date.now()},r=[n,...e.events];r.length>e.maxEvents&&(r.length=e.maxEvents);let i=t.kind===`agent:tool`||t.kind===`tool:started`||t.kind===`tool:progress`||t.kind===`tool:executed`?[n,...e.toolEvents].slice(0,600):e.toolEvents,{nodes:a,edges:o}=ia(e,t,Date.now());return{events:r,toolEvents:i,nodes:a,edges:o}}),upsertNode:t=>e(e=>{let n=new Map(e.nodes),r=n.get(t.id);return n.set(t.id,{...r,...t,lastSeenAt:t.lastSeenAt===void 0?Date.now():t.lastSeenAt}),{nodes:n}}),removeNode:t=>e(e=>{let n=new Map(e.nodes);n.delete(t);let r=new Map(e.edges);for(let[e,n]of r)(n.source===t||n.target===t)&&r.delete(e);return{nodes:n,edges:r}}),upsertEdge:t=>e(e=>{let n=new Map(e.edges),r=n.get(t.id);return n.set(t.id,{...r,...t,lastActiveAt:t.lastActiveAt===void 0?Date.now():t.lastActiveAt,intensity:t.intensity??r?.intensity??.5,color:t.color??Zi[t.kind]??Zi.default,totalMagnitude:(r?.totalMagnitude??0)+(t.totalMagnitude??0)}),{edges:n}}),removeEdge:t=>e(e=>{let n=new Map(e.edges);return n.delete(t),{edges:n}}),clear:()=>e({events:[],toolEvents:[],nodes:new Map,edges:new Map,counters:{totalTokens:0,totalCost:0,totalToolCalls:0,activeAgents:0,completedTasks:0,errors:0,mailboxMessages:0}}),setActive:t=>e({isActive:t}),decayActivity:()=>e(e=>{let t=new Map(e.nodes);for(let[e,n]of t)if(n.activity>=.01){let r=n.activity*.92;t.set(e,{...n,activity:r<.01?0:r})}let n=new Map(e.edges);for(let[e,t]of n)if(t.intensity>=.01){let r=t.intensity*.9;n.set(e,{...t,intensity:r<.01?0:r})}return{nodes:t,edges:n}}),prunesStale:t=>e(e=>{let n=Date.now()-t,r=new Map(e.nodes);for(let[e,t]of r)t.lastSeenAt<n&&r.delete(e);let i=new Map(e.edges);for(let[e,t]of i)t.lastActiveAt<n&&i.delete(e);return{nodes:r,edges:i,events:e.events.filter(e=>e.timestamp>n)}})}));function sa(){let e=N();return e&&e!==`__unbound__`?e:Mn.getState().session?.id??null}function ca(e){let t=e.payload?.sessionId,n=sa();return t!==``&&(!t&&n&&ba(e.type),!t||!n||t===n)}function la(e){let t=e.payload?.sessionId;return typeof t==`string`&&t.length>0?t:null}function ua(){let e=new Set(Y.getState().openTabIds),t=Rt();for(let n of jt())if(!(n===`__unbound__`||n===t||e.has(n))&&!T(n).isLoading)return Ft(n),nn(n),!0;return!1}function da(e){let t=la(e);return t?At(t)?D(t):jt().length<S||ua()?(Mt(t),D(t)):(ga(e.type,t),null):Rt()===`__unbound__`?D(C):(ma(e.type),null)}function fa(e){let t=la(e);return t?en(t)?F(t):tn().length<S||ua()?(j(t),F(t)):(va(e.type,t),null):N()===`__unbound__`?F(O):null}var pa=new Set;function ma(e){pa.has(e)||(pa.add(e),console.warn(JSON.stringify({level:`warn`,event:`ws_client.untagged_chat_event`,messageType:e,reason:`chat event carried no sessionId; dropped to protect other tabs`,timestamp:new Date().toISOString()})))}var ha=new Set;function ga(e,t){ha.has(t)||(ha.add(t),console.warn(JSON.stringify({level:`warn`,event:`ws_client.chat_lane_overflow`,messageType:e,sessionId:t,reason:`no lane for this session and all four lanes are taken; event dropped`,timestamp:new Date().toISOString()})))}var _a=new Set;function va(e,t){_a.has(t)||(_a.add(t),console.warn(JSON.stringify({level:`warn`,event:`ws_client.session_lane_overflow`,messageType:e,sessionId:t,reason:`no session lane for this session and all four lanes are taken; token/cost accounting event dropped`,timestamp:new Date().toISOString()})))}var ya=new Set;function ba(e){ya.has(e)||(ya.add(e),console.warn(JSON.stringify({level:`warn`,event:`ws_client.untagged_guard_event`,messageType:e,reason:`untagged frame passed a session guard while a session was bound; if this event is session-scoped, the server surface forgot to stamp sessionId`,timestamp:new Date().toISOString()})))}function xa(e){let t=aa(e.type,e.payload);t&&(oa.getState().pushEvent(t),oa.getState().setActive(!0))}function Sa(e,t,n){let r=e.payload??{};for(let[e,n]of Object.entries(t)){let t=r[e];if(!Ca(t,n))return null}if(n)for(let[e,t]of Object.entries(n)){let n=r[e];if(n!=null&&!Ca(n,t))return null}return r}function Ca(e,t){switch(t){case`string`:return typeof e==`string`;case`number`:return typeof e==`number`;case`boolean`:return typeof e==`boolean`;case`object`:return typeof e==`object`&&!!e&&!Array.isArray(e);case`array`:return Array.isArray(e);default:return!1}}function wa(e){try{return new URL(e).searchParams.get(`token`)}catch{return null}}function Ta(){if(typeof window>`u`||!window.location)return null;try{let e=window.location.search??``;return new URLSearchParams(e).get(`token`)}catch{return null}}function Ea(e){try{let t=new URL(e);return t.searchParams.delete(`token`),t.toString()}catch{return e}}function Da(){if(!(typeof window>`u`||!window.location||!window.history?.replaceState))try{let e=window.location.href;if(!e)return;let t=new URL(e);if(!t.searchParams.has(`token`))return;t.searchParams.delete(`token`),window.history.replaceState(window.history.state,document.title,t.toString())}catch{}}function Oa(){if(typeof document>`u`)return null;let e=document.querySelector(`meta[name="wrongstack-ws-url"]`)?.getAttribute(`content`)?.trim();if(!e)return null;try{let t=new URL(e);if(t.protocol!==`ws:`&&t.protocol!==`wss:`)return null;let n=Ta();return n&&!t.searchParams.has(`token`)&&t.searchParams.set(`token`,n),t.toString()}catch{return null}}function ka(){let e=Oa();if(e)return e;if(typeof window>`u`||!window.location?.hostname)return`ws://127.0.0.1:3456`;let t=window.location.protocol===`https:`?`wss`:`ws`,n=window.location.hostname.toLowerCase(),r=window.location.port,i=Ta(),a=i?`?token=${encodeURIComponent(i)}`:``;return`${t}://${n===`localhost`||n===`127.0.0.1`||n===`[::1]`||n===`::1`?`127.0.0.1`:n}${r?`:${r}`:``}${a}`}function Aa(){if(typeof window>`u`||!window.location?.hostname)return`http://127.0.0.1:3456`;let e=window.location.protocol===`https:`?`https`:`http`,t=window.location.hostname.toLowerCase(),n=window.location.port?`:${window.location.port}`:``;return t===`localhost`||t===`127.0.0.1`||t===`[::1]`||t===`::1`?`${e}://127.0.0.1${n}`:`${e}://${window.location.hostname}${n}`}var ja=u()(c(e=>({provider:``,model:``,wsUrl:ka(),wsConnected:!1,wsStatus:{state:`connecting`},theme:`system`,palette:`signal`,fonts:te,autoConnect:!0,soundOnComplete:!1,setProvider:t=>e({provider:t}),setModel:t=>e({model:t}),setConfig:t=>e(t),setTheme:t=>e({theme:t}),setPalette:t=>e({palette:t}),setFonts:t=>e({fonts:ne(t)}),setWsConnected:t=>e({wsConnected:t}),setWsStatus:t=>e({wsStatus:t,wsConnected:t.state===`open`}),setSoundOnComplete:t=>e({soundOnComplete:t})}),{name:`wrongstack-config`,partialize:e=>({provider:e.provider,model:e.model,baseUrl:e.baseUrl,theme:e.theme,palette:e.palette,fonts:e.fonts,autoConnect:e.autoConnect,soundOnComplete:e.soundOnComplete}),merge:(e,t)=>{let{apiKey:n,...r}=e??{};return{...t,...r,wsUrl:ka(),wsConnected:!1,wsStatus:{state:`connecting`},palette:Jt(r.palette)?r.palette:Xt(Kt,t.palette),fonts:r.fonts===void 0?t.fonts:ne(r.fonts)}}}));export{bn as $,di as A,Mt as At,Ur as B,Re as Bt,Si as C,Wt as Ct,vi as D,Rt as Dt,yi as E,Ut as Et,ui as F,T as Ft,Mr as G,Tt as Gt,Lr as H,Le as Ht,li as I,Bt as It,Hn as J,fe as Jt,br as K,Ct as Kt,Ir as L,Vt as Lt,ci as M,jt as Mt,ni as N,Pt as Nt,gi as O,It as Ot,K as P,Ht as Pt,z as Q,Wr as R,Lt as Rt,ki as S,Xt as St,bi as T,kt as Tt,Pr as U,Ie as Ut,Vr as V,Fe as Vt,Nr as W,St as Wt,zn as X,re as Xt,Bn as Y,ie as Yt,In as Z,Y as _,qt as _t,la as a,I as at,Ci as b,Yt as bt,fa as c,j as ct,q as d,tn as dt,Nn as et,zi as f,M as ft,Xi as g,Gt as gt,Ji as h,k as ht,ca as i,O as it,Yr as j,At as jt,fi as k,D as kt,oa as l,A as lt,Vi as m,an as mt,da as n,gn as nt,xa as o,N as ot,Ri as p,L as pt,gr as q,ae as qt,sa as r,fn as rt,Sa as s,rn as st,ja as t,Mn as tt,aa as u,F as ut,Mi as v,Kt as vt,xi as w,C as wt,Ai as x,Jt as xt,ji as y,Zt as yt,Hr as z,w as zt};
|