@zerwiz/sessrumnir 0.1.16 → 0.1.18

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/out/main/index.js CHANGED
@@ -214,7 +214,7 @@ function buildNpmPrefixCommand(isWindows) {
214
214
  }
215
215
  const activity = { "completed": "Finished in the background", "completedInAnotherWorkspace": "Finished in the background in another workspace", "failed": "Stopped with an error", "failedInAnotherWorkspace": "Stopped with an error in another workspace", "working": "Brokk is working", "workingInAnotherWorkspace": "Brokk is working in another workspace" };
216
216
  const app = { "dropFolder": { "description": "Opens that folder as a workspace (creates one if needed)", "title": "Drop folder to open as project" }, "errorBoundary": { "fallback": "Failed to render content" }, "quit": "Quit Sessrúmnir", "resizeHandle": { "title": "Drag to resize" }, "updateBanner": { "available": "Sessrúmnir <strong>v{{latestVersion}}</strong> is available — you're on v{{currentVersion}}.", "dismissAriaLabel": "Dismiss update notification", "downloadButton": "Download" } };
217
- const chat = { "attach": { "allFilesFilter": "All Files", "attachFailed": "Could not attach file", "imagesFilter": "Images", "onlyImagesPasted": "Only images can be pasted into the composer", "pasteFailed": "Could not paste image", "readImageFailed": "Could not read image data", "unknownMimeType": "unknown", "unsupportedImageType": "Unsupported image type ({{mimeType}}). Use PNG, JPEG, GIF, or WebP." }, "closeFileTree": "Close file tree", "commandPopup": { "selectHint": "↑↓ navigate · Enter/Tab select · Esc close" }, "composer": { "placeholderIdle": "Ask {{agent}} anything — / for commands", "placeholderNotRunning": "{{agent}} agent is not running...", "placeholderSteering": "Type to steer the agent...", "shiftEnterNewline": "Shift+Enter newline", "streaming": "Streaming…" }, "council": { "planWithCouncil": "Plan with Council", "startEngineFirst": "Start the agent runtime before planning with Council" }, "emptyState": { "chooseProject": "Choose a project — {{agent}} starts when you send.", "pickProject": "Pick a project and describe what you want done.", "startFailed": "Failed to start {{agent}}. Check settings.", "starting": "Starting {{agent}} agent…", "title": "What should {{agent}} work on?", "waitingOnEngine": "{{agent}} is up — waiting for the engine to finish loading. Local models can take a while…" }, "extensionUi": { "editFallbackTitle": "Edit", "hideForNowWithShortcut": "Hide for now ({{shortcut}})", "inputFallbackTitle": "Input", "notificationFallback": "Notification", "selectFallbackTitle": "Select", "showWithShortcut": "Show ({{shortcut}})", "waitingForAnswer": "Brokk is waiting for an answer" }, "insertNote": { "ariaLabel": "Insert note", "titleWithShortcut": "Insert note (Ctrl+Shift+P)" }, "loadingSession": "Loading session…", "mentionPopup": { "insertHint": "↑↓ navigate · Enter/Tab insert path · Esc close" }, "message": { "branchedFrom": 'Branched from: "{{excerpt}}"', "branchFromHere": "Branch from here", "editAndResend": "Edit & resend" }, "projectPicker": { "noProject": "No project", "noProjectHomeDirectory": "No project — home directory", "openFolder": "Open folder…", "yourHomeDirectory": "Your home directory" }, "reattached": { "responseWillAppear": "The response appears here the moment it finishes.", "stillWorking": "{{agent}} is still working in this session." }, "scrollToBottom": "Scroll to bottom", "search": { "closeWithShortcut": "Close (Esc)", "nextMatch": "Next match (Enter)", "placeholder": "Find in page", "previousMatch": "Previous match (Shift+Enter)" }, "searchWorkspace": { "ariaLabel": "Search workspace", "titleWithShortcut": "Search workspace (Ctrl+Shift+F)" }, "sendButton": { "ariaLabel": "Send message", "titleWithShortcut": "Send (Enter)" }, "startingAgent": "Starting agent…", "stopButton": { "ariaLabel": "Stop generating", "titleWithShortcut": "Stop (Esc)" }, "subagentProgress": { "done_one": "{{count}} subagent done", "done_other": "{{count}} subagents done", "running_one": "{{count}} subagent running", "running_other": "{{count}} subagents running" }, "svgBlock": { "renderedSvgAlt": "Rendered SVG", "renderSvg": "Render SVG", "viewSource": "View source" }, "toolbar": { "diffViewer": "Diff viewer", "fileTree": "File tree", "reviewPanel": "Review panel", "terminal": "Terminal" }, "toolCall": { "status": { "done": "done", "error": "error", "running": "running" } }, "waitingForResponse": "Waiting for response..." };
217
+ const chat = { "attach": { "allFilesFilter": "All Files", "attachFailed": "Could not attach file", "imagesFilter": "Images", "onlyImagesPasted": "Only images can be pasted into the composer", "pasteFailed": "Could not paste image", "readImageFailed": "Could not read image data", "unknownMimeType": "unknown", "unsupportedImageType": "Unsupported image type ({{mimeType}}). Use PNG, JPEG, GIF, or WebP." }, "closeFileTree": "Close file tree", "commandPopup": { "selectHint": "↑↓ navigate · Enter/Tab select · Esc close" }, "composer": { "placeholderIdle": "Ask {{agent}} anything — / / for commands", "placeholderNotRunning": "{{agent}} agent is not running...", "placeholderSteering": "Type to steer the agent...", "shiftEnterNewline": "Shift+Enter newline", "streaming": "Streaming…" }, "council": { "planWithCouncil": "Plan with Council", "startEngineFirst": "Start the agent runtime before planning with Council" }, "emptyState": { "chooseProject": "Choose a project — {{agent}} starts when you send.", "pickProject": "Choose the errand and speak it, Allfather.", "startFailed": "Failed to start {{agent}}. Check settings.", "starting": "Starting {{agent}} agent…", "title": "What shall {{agent}} forge?", "waitingOnEngine": "{{agent}} is up — waiting for the engine to finish loading. Local models can take a while…" }, "extensionUi": { "editFallbackTitle": "Edit", "hideForNowWithShortcut": "Hide for now ({{shortcut}})", "inputFallbackTitle": "Input", "notificationFallback": "Notification", "selectFallbackTitle": "Select", "showWithShortcut": "Show ({{shortcut}})", "waitingForAnswer": "Brokk is waiting for an answer" }, "insertNote": { "ariaLabel": "Insert note", "titleWithShortcut": "Insert note (Ctrl+Shift+P)" }, "loadingSession": "Loading session…", "mentionPopup": { "insertHint": "↑↓ navigate · Enter/Tab insert path · Esc close" }, "message": { "branchedFrom": 'Branched from: "{{excerpt}}"', "branchFromHere": "Branch from here", "editAndResend": "Edit & resend" }, "projectPicker": { "noProject": "No project", "noProjectHomeDirectory": "No project — home directory", "openFolder": "Open folder…", "yourHomeDirectory": "Your home directory" }, "reattached": { "responseWillAppear": "The response appears here the moment it finishes.", "stillWorking": "{{agent}} is still working in this session." }, "scrollToBottom": "Scroll to bottom", "search": { "closeWithShortcut": "Close (Esc)", "nextMatch": "Next match (Enter)", "placeholder": "Find in page", "previousMatch": "Previous match (Shift+Enter)" }, "searchWorkspace": { "ariaLabel": "Search workspace", "titleWithShortcut": "Search workspace (Ctrl+Shift+F)" }, "sendButton": { "ariaLabel": "Send message", "titleWithShortcut": "Send (Enter)" }, "startingAgent": "Starting agent…", "stopButton": { "ariaLabel": "Stop generating", "titleWithShortcut": "Stop (Esc)" }, "subagentProgress": { "done_one": "{{count}} subagent done", "done_other": "{{count}} subagents done", "running_one": "{{count}} subagent running", "running_other": "{{count}} subagents running" }, "svgBlock": { "renderedSvgAlt": "Rendered SVG", "renderSvg": "Render SVG", "viewSource": "View source" }, "toolbar": { "diffViewer": "Diff viewer", "fileTree": "File tree", "reviewPanel": "Review panel", "terminal": "Terminal" }, "toolCall": { "status": { "done": "done", "error": "error", "running": "running" } }, "waitingForResponse": "Waiting for response..." };
218
218
  const commandGroups = { "commands": "Commands", "extensions": "Extensions", "other": "Other", "prompts": "Prompts" };
219
219
  const commands = { "clone": { "description": "Clone the current branch into a new session" }, "compact": { "description": "Compact the conversation to free up context" }, "fork": { "description": "Open Branches to fork from a message" }, "new": { "description": "Start a new session" }, "resume": { "description": "Open the Sessions list" }, "settings": { "description": "Open Settings" }, "task": { "description": "Launch a task in a new Brokk session" } };
220
220
  const commandSources = { "builtin": "builtin", "extension": "extension", "prompt": "prompt", "skill": "skill" };
@@ -236,7 +236,7 @@ const home = { "actions": { "newSession": { "inWorkspace": "In {{project}}", "pi
236
236
  const imageViewer = { "closeTitle": "Close image", "readFailed": "Failed to read image", "unsupportedFile": "Not a supported image file" };
237
237
  const language = { "nativeName": "English" };
238
238
  const menu = { "actualSize": "Actual Size", "close": "Close Window", "edit": "Edit", "file": "File", "forceReload": "Force Reload", "minimize": "Minimize", "newWorkspace": "New Workspace...", "openProject": "Open Project...", "redo": "Redo", "reload": "Reload", "toggleDevTools": "Toggle Developer Tools", "toggleFullScreen": "Toggle Full Screen", "undo": "Undo", "view": "View", "window": "Window", "zoom": "Zoom", "zoomIn": "Zoom In", "zoomOut": "Zoom Out" };
239
- const missionControl = { "controlUnavailable": "control unavailable", "idle": "{{agent}} is idle", "liveSessions": "Live sessions", "needsAttention_one": "{{count}} needs attention", "needsAttention_other": "{{count}} needs attention", "newTask": "New task", "noLiveRuntimes": "No live session runtimes yet. Start a task to put Brokk to work in the background.", "noWorkflowRuns": "No workflow runs yet.", "open": "Open", "openAllWorkflows": "Open all workflows", "proceed": "Proceed", "proceedWithWorkflow": "Proceed with this workflow", "refreshWorkflowRuns": "Refresh workflow runs", "resumeFailed": "Could not proceed with {{workflow}}: {{reason}}", "resumeFailedGeneric": "Could not proceed with {{workflow}}. Open the run for details.", "retryWithWorkflow": "Retry this workflow", "review": "Review", "runtimeState": { "completed": "completed", "failed": "failed", "idle": "idle", "needsApproval": "needs approval", "stopped": "stopped", "working": "working" }, "startingSession": "Starting session", "subtitle": "Background sessions and workflow runs, from every project.", "title": "Mission Control", "unknownProject": "Unknown project", "workflowActivity": "Workflow activity", "workflowStatus": { "aborted": "aborted", "completed": "completed", "failed": "failed", "paused": "paused", "pending": "pending", "running": "running", "unknown": "unknown" } };
239
+ const missionControl = { "controlUnavailable": "control unavailable", "idle": "{{agent}} is idle", "liveSessions": "Live sessions", "needsAttention_one": "{{count}} needs attention", "needsAttention_other": "{{count}} needs attention", "newTask": "New task", "noLiveRuntimes": "No live session runtimes yet. Start a task to put Brokk to work in the background.", "noWorkflowRuns": "No workflow runs yet.", "open": "Open", "openAllWorkflows": "Open all workflows", "proceed": "Proceed", "proceedWithWorkflow": "Proceed with this workflow", "refreshWorkflowRuns": "Refresh workflow runs", "resumeFailed": "Could not proceed with {{workflow}}: {{reason}}", "resumeFailedGeneric": "Could not proceed with {{workflow}}. Open the run for details.", "retryWithWorkflow": "Retry this workflow", "review": "Review", "runtimeState": { "completed": "completed", "failed": "failed", "idle": "idle", "needsApproval": "needs approval", "stopped": "stopped", "working": "working" }, "startingSession": "Starting session", "subtitle": "Background sessions and workflow runs, from every project.", "title": "The Hall", "unknownProject": "Unknown project", "workflowActivity": "Workflow activity", "workflowStatus": { "aborted": "aborted", "completed": "completed", "failed": "failed", "paused": "paused", "pending": "pending", "running": "running", "unknown": "unknown" } };
240
240
  const models = { "readFailure": { "invalidJson": "{{file}} is not valid JSON: {{detail}}", "invalidJsonNoDetail": "{{file}} is not valid JSON", "invalidYaml": "{{file}} is not valid YAML: {{detail}}", "invalidYamlNoDetail": "{{file}} is not valid YAML", "missingProviders": '{{file}} is not a valid models config (missing "providers")', "unreadable": "Could not read {{file}}: {{detail}}" }, "selector": { "current": "Current", "loadFailed": "Could not load models", "noModelsMatch": "No models match", "searchPlaceholder": "Search models…", "selectModel": "Select model", "selectModelWithShortcut": "Select model (Ctrl+P to cycle when {{agent}} is running)", "startToListModels": "Start Brokk to list and change models." } };
241
241
  const notes = { "backButton": "Back", "backTitle": "Back to notes", "deleteNoteTitle": "Delete note", "editNoteTitle": "Edit note", "empty": { "noMatch": "No notes match your search.", "noneYet": "No notes yet. Create one to reuse prompts." }, "form": { "bodyLabel": "Prompt / Command", "bodyPlaceholder": "The reusable prompt or command text...", "editHeading": "Edit Note", "saveFailed": "Failed to save note", "saving": "Saving...", "scopeLabel": "Scope", "tagsLabel": "Tags", "tagsPlaceholder": "space or comma separated", "thisWorkspaceFallback": "This workspace", "titleLabel": "Title", "titlePlaceholder": "e.g. Refactor with tests" }, "insertButton": "Insert", "insertIntoChatTitle": "Insert into chat input", "newNoteButton": "New Note", "picker": { "createNote": "Create a note", "navigationHint": "↑↓ navigate · Enter insert · Esc close", "noMatchingNotes": "No matching notes", "noSavedNotes": "No saved notes yet.", "notComposeBox": "This picker inserts notes you've saved — it's not a compose box.", "searchPlaceholder": "Search saved notes to insert..." }, "scope": { "other": "Other workspace", "workspaceFallback": "Workspace" }, "searchPlaceholder": "Search title, body, or tag...", "title": "Notes", "viewNoteTitle": "View note" };
242
242
  const notifications = { "completed": "Brokk finished working.", "failed": "Brokk stopped with an error.", "needs-approval": "Brokk is waiting for your approval.", "withSession": "{{body}} Click to open the finished session." };
@@ -248,7 +248,7 @@ const permissions = { "prompt": { "body": "{{agent}} wants to run the {{tool}} t
248
248
  const review = { "gitStatusUnavailable": "Git status unavailable", "heading": "Review", "openDiffButton": "Open diff review", "openDiffHint": "Inspect working tree changes.", "pendingApprovals": { "none": "No approval requests waiting.", "queued_one": "{{count}} queued item waiting for the active session.", "queued_other": "{{count}} queued items waiting for the active session." }, "pendingApprovalsHeading": "Pending Approvals", "permissionsHeading": "Permissions", "sessionStatus": { "idle": "{{agent}} is idle in the active session.", "working": "{{agent}} is working in the active session." }, "sessionStatusHeading": "Session Status", "subtitle": "Control what {{agent}} can do before changes move forward." };
249
249
  const sessions = { "activeBadge": "active", "archivedBadge": "archived", "archivedToggle": { "hideTitle": "Hide archived sessions", "hidingNone": "Hiding none", "showTitle": "Show archived sessions" }, "currentProjectBadge": "current", "currentWorkspaceLabel": "Current workspace:", "deleteConfirm": { "message": "Delete this session? Will use <code>trash</code> if available, otherwise permanent." }, "deleteEllipsis": "Delete...", "empty": { "createFirst": "Create your first session", "noMatch": "No sessions match your search", "noneInProject": "No sessions in this project yet", "noneYet": "No sessions yet", "openProjectToSee": "Open a project to see its sessions" }, "engineSession": "{{engine}} session", "header": { "projectCount_one": "{{count}} project", "projectCount_other": "{{count}} projects", "sessionCount_one": "{{count}} session", "sessionCount_other": "{{count}} sessions" }, "runtime": { "completed": "{{agent}} finished", "failed": "{{agent}} stopped with an error", "needsApproval": "{{agent}} is waiting for approval", "working": "{{agent}} is working" }, "scopeToggle": { "allSessions": "All Sessions", "currentOnly": "Current Only", "showCurrentProjectOnly": "Only show sessions from the current project", "showEveryProject": "Show sessions from every project" }, "searchPlaceholder": "Search sessions or projects...", "sessionActions": { "ariaLabel": "Session actions", "title": "Session actions (or right-click the row)" }, "tags": { "add": "Add", "addPlaceholder": "Add tag...", "addTag": "Add tag", "autoTagHint": "Auto-tagged from chat context — add your own tag to replace it", "removeAutoTag": "Remove auto-tag {{tag}}", "removeTag": "Remove tag {{tag}}" }, "time": { "days_one": "{{count}}d ago", "days_other": "{{count}}d ago", "hours_one": "{{count}}h ago", "hours_other": "{{count}}h ago", "minutes_one": "{{count}}m ago", "minutes_other": "{{count}}m ago" }, "title": "Sessions", "unknownProject": "Unknown" };
250
250
  const settings = { "actions": { "reset": "Reset to Defaults", "save": "Save Settings", "saved": "Saved!" }, "agentInstallation": { "autoDetectOption": "Auto-detect (pi first, then OMP)", "chooseExecutableTitle": "Choose executable or install directory", "customPathOption": "Custom path…", "description": "Auto-detect pi and OMP, choose an installed engine, or use a custom executable/path.", "detectedCount_one": "{{count}} installed engine detected", "detectedCount_other": "{{count}} installed engines detected", "engineAriaLabel": "Agent engine", "engineAutoOption": "Auto", "installedOption": "{{engine}} — {{path}}", "label": "Agent Installation", "noneDetected": "No pi or OMP installation detected yet", "ompNotFoundOption": "OMP (not found)", "pathPlaceholder": "Path to executable, cli.js, or install directory", "rescanTitle": "Rescan installed agents", "scanningStatus": "Scanning common install locations and PATH…", "selectDialogTitle": "Select Agent Executable or Directory" }, "autoScroll": { "description": "Automatically scroll to new messages", "label": "Auto Scroll" }, "codeEditorFontSize": { "description": "Font size for the code editor / file viewer", "label": "Code Editor Font Size" }, "consensusMode": { "arbiterOption": "Arbiter merge (fast)", "debateOption": "One debate round (slower, ~2x cost)", "description": "How council members reach agreement", "label": "Consensus mode" }, "councilEnabled": { "confirmButton": "Enable", "confirmMessage": "Each run spawns Claude and Codex in addition to {{engine}}. This can significantly increase token usage and credit/API costs. Only enable this if you are comfortable with the extra spend.", "confirmTitle": "Enable council planning?", "description": "Spawns Claude/Codex alongside Brokk to plan tasks. Increases token usage and credit/API costs.", "label": "Enable council planning" }, "councilMembers": { "description": "Which agents participate in council planning", "label": "Members", "notDetected": "(not detected)" }, "councilTimeout": { "description": "How long to wait for each agent ({{min}}-{{max}})", "label": "Per-member timeout (seconds)" }, "customTheme": { "createButton": "Create theme", "description": "Fork the current theme or edit one you created", "editButton": "Edit theme", "label": "Custom Theme" }, "darkTheme": { "description": "Used when the system is in dark mode", "label": "Dark Theme" }, "desktopNotifications": { "description": "Notify when Brokk finishes, fails, or waits for approval in a workspace you are not looking at", "label": "Desktop Notifications" }, "language": { "description": "Language of menus, buttons, and messages", "label": "Language", "labelWithEnglish": "{{label}} ({{english}})", "system": "System default ({{language}})" }, "lightTheme": { "description": "Used when the system is in light mode", "label": "Light Theme" }, "minimizeToTrayOnClose": { "description": "Keep Sessrúmnir running in the system tray when you close the window instead of quitting (Windows and Linux)", "label": "Minimize to Tray on Close" }, "openToHomeOnLaunch": { "description": "On: full Home launcher (stats, recents, open folder). Off: open Chat with the empty-session center prompt and project picker.", "label": "Open to Home Screen on Launch" }, "permissionMode": { "description": "Default safety mode for Brokk actions", "label": "Permission Mode" }, "permissionRules": { "description": "Fine-grained per-tool overrides for the mode above", "exportFailed": "Export failed", "importFailed": "Import failed", "label": "Permission Rules", "removeWorkspaceConfirmMessage": "Delete this workspace's .pi-desktop/permission-rules.json? Global permission rules will apply again.", "removeWorkspaceConfirmTitle": "Remove workspace rules", "saveError_global": "Settings saved, but global permission rules were not saved: {{error}}", "saveError_workspace": "Settings saved, but workspace permission rules were not saved: {{error}}", "scopeTabListAriaLabel": "Permission rules scope", "workspaceScopeTab": "This workspace" }, "resumeLastSession": { "description": "When opening a workspace, continue its most recent session instead of starting a new one", "label": "Resume Last Session" }, "runOnStartup": { "description": "Automatically start Sessrúmnir when you log in to your computer (takes effect in installed builds)", "label": "Run on Startup" }, "sections": { "agentConfiguration": "Agent Configuration", "appearance": "Appearance", "behavior": "Behavior", "customModels": "Custom Models", "multiAgentCouncilPlanning": "Multi-Agent Council Planning" }, "showThinking": { "description": "Display model thinking blocks in responses", "label": "Show Thinking" }, "terminalFontSize": { "description": "Font size for the terminal panel", "label": "Terminal Font Size" }, "theme": { "deleteConfirmMessage": 'Delete theme "{{themeName}}"? This cannot be undone.', "deleteConfirmTitle": "Delete theme", "description": "Application color scheme", "editNotFoundError": "Could not find the current theme to edit", "exportNotFoundError": "Could not find the current theme to export", "label": "Theme", "systemOption": "System" }, "themeActions": { "browseGalleryButton": "Browse gallery", "description": "Import, export, or install a theme from a URL", "label": "Theme Actions" }, "uiFontSize": { "description": "Chat, panels, and sidebar — not the terminal or code editor", "label": "UI Font Size" } };
251
- const sidebar = { "archived": { "collapseTitle": "Collapse archived sessions", "expandTitle": "Expand archived sessions", "heading_one": "Archived ({{count}})", "heading_other": "Archived ({{count}})" }, "currentSession": { "heading": "Current Session", "messageCount_one": "{{count}} messages", "messageCount_other": "{{count}} messages", "openTitle": "Open current session in chat · double-click to rename" }, "header": { "closeSidebar": "Close sidebar", "homeAriaLabel": "Home", "homeTitle": "Home (Esc to launcher)" }, "nav": { "activitySection": "Activity", "chat": "Chat", "missionControl": "Mission Control", "missionControlTitle": "All background sessions and workflows", "newTaskTitle": "Start a task in a new Brokk session", "sessions": "Sessions", "sessionsTitle": "Sessions in this project", "timeline": "Timeline", "timelineTitleWithProject": "Timeline for {{project}}", "workflows": "Workflows", "workflowsTitleNoProject": "All workflow runs (no project open)", "workflowsTitleWithProject": "Workflow runs in {{project}}", "workspaceSection": "Workspace" }, "newSessionButton": { "label": "New session", "openProjectToBegin": "Open a project to begin", "shortcutKbd": "Ctrl N", "startsIn": "Starts in {{project}}", "titleNoProject": "Open a project first", "titleWithShortcut": "Start a new session in this project (Ctrl/Cmd+N)" }, "openProjectFolder": { "ariaLabel": "Open project folder", "titleWithShortcut": "Open project folder (Ctrl/Cmd+O)" }, "promptsWaitingInOtherWorkspaces_one": "{{count}} Brokk prompt waiting in other workspaces", "promptsWaitingInOtherWorkspaces_other": "{{count}} Brokk prompts waiting in other workspaces", "recentSessions": { "emptyInProject": "No sessions in this project yet.", "emptyNoProject": "Open a project to see its sessions.", "headingNoProject": "Recent sessions", "headingWithProject": "Recent in {{project}}", "startOneNow": "Start one now", "viewAll": "View all" }, "sessionNamePlaceholder": "Session name", "sessionRow": { "tooltipActive": "{{title}}\n\nClick to open · double-click to rename · right-click for actions", "tooltipInactive": "{{title}}\n\nClick to open · right-click for actions" }, "tools": { "allWorkflows": "All Workflows", "allWorkflowsTitle": "Workflow runs from every project", "diagnostics": "Diagnostics", "notes": "Notes", "packages": "Packages", "sectionLabel": "Tools" }, "workflowRunsForSession": "Workflow runs for this session", "workspaceMenu": { "changeFolder": "Change folder…", "rename": "Rename" }, "workspaceSwitcher": { "namePlaceholder": "Workspace name", "noWorkspace": "No workspace", "openProjectEllipsis": "Open project…", "triggerTitle": "Click to switch · double-click to rename · right-click for options" } };
251
+ const sidebar = { "archived": { "collapseTitle": "Collapse archived sessions", "expandTitle": "Expand archived sessions", "heading_one": "Archived ({{count}})", "heading_other": "Archived ({{count}})" }, "currentSession": { "heading": "Current Session", "messageCount_one": "{{count}} messages", "messageCount_other": "{{count}} messages", "openTitle": "Open current session in chat · double-click to rename" }, "header": { "closeSidebar": "Close sidebar", "homeAriaLabel": "Home", "homeTitle": "Home (Esc to launcher)" }, "nav": { "activitySection": "Activity", "chat": "Chat", "missionControl": "The Hall", "missionControlTitle": "All background sessions and workflows", "newTaskTitle": "Start a task in a new Brokk session", "sessions": "Sessions", "sessionsTitle": "Sessions in this project", "timeline": "Timeline", "timelineTitleWithProject": "Timeline for {{project}}", "workflows": "Workflows", "workflowsTitleNoProject": "All workflow runs (no project open)", "workflowsTitleWithProject": "Workflow runs in {{project}}", "workspaceSection": "Workspace" }, "newSessionButton": { "label": "New session", "openProjectToBegin": "Open a project to begin", "shortcutKbd": "Ctrl N", "startsIn": "Starts in {{project}}", "titleNoProject": "Open a project first", "titleWithShortcut": "Start a new session in this project (Ctrl/Cmd+N)" }, "openProjectFolder": { "ariaLabel": "Open project folder", "titleWithShortcut": "Open project folder (Ctrl/Cmd+O)" }, "promptsWaitingInOtherWorkspaces_one": "{{count}} Brokk prompt waiting in other workspaces", "promptsWaitingInOtherWorkspaces_other": "{{count}} Brokk prompts waiting in other workspaces", "recentSessions": { "emptyInProject": "No sessions in this project yet.", "emptyNoProject": "Open a project to see its sessions.", "headingNoProject": "Recent sessions", "headingWithProject": "Recent in {{project}}", "startOneNow": "Start one now", "viewAll": "View all" }, "sessionNamePlaceholder": "Session name", "sessionRow": { "tooltipActive": "{{title}}\n\nClick to open · double-click to rename · right-click for actions", "tooltipInactive": "{{title}}\n\nClick to open · right-click for actions" }, "tools": { "allWorkflows": "All Workflows", "allWorkflowsTitle": "Workflow runs from every project", "diagnostics": "Diagnostics", "notes": "Notes", "packages": "Packages", "sectionLabel": "Tools" }, "workflowRunsForSession": "Workflow runs for this session", "workspaceMenu": { "changeFolder": "Change folder…", "rename": "Rename" }, "workspaceSwitcher": { "namePlaceholder": "Workspace name", "noWorkspace": "No workspace", "openProjectEllipsis": "Open project…", "triggerTitle": "Click to switch · double-click to rename · right-click for options" } };
252
252
  const skills = { "emptyHint": "Install skill packages or create skills in .pi/skills/", "emptyOmp": "No skills found in ~/.omp/agent/skills, ~/.claude/skills, or project .omp/skills", "emptyPi": "No skills found in ~/.pi/agent/skills or project .pi/skills", "emptyTitle": "No skills found", "providedByPlugin": "Provided by an installed plugin", "refreshAriaLabel": "Refresh skills", "runButton": "Run", "selectPrompt": "Select a skill to view its SKILL.md" };
253
253
  const stats = { "heatmap": { "dayTooltip_one": "{{date}} — {{count}} messages", "dayTooltip_other": "{{date}} — {{count}} messages" }, "modelLegend": { "empty": "No model usage in this range.", "tokenBreakdown": "{{input}} in · {{output}} out" }, "overview": { "activeDaysLabel": "Active days", "currentStreakLabel": "Current streak", "favoriteModelLabel": "Favorite model", "longestStreakLabel": "Longest streak", "messagesLabel": "Messages", "peakHourLabel": "Peak hour", "sessionsLabel": "Sessions", "streakDays_one": "{{count}}d", "streakDays_other": "{{count}}d", "totalTokensLabel": "Total tokens" }, "ranges": { "oneYear": "1y", "sevenDays": "7d", "sixMonths": "6mo", "thirtyDays": "30d", "threeMonths": "3mo" }, "tabs": { "models": "models", "overview": "overview" }, "tokenChart": { "barTooltip": "{{label}} — {{tokens}} tokens", "empty": "No token usage in this range." } };
254
254
  const status = { "agentSection": { "title": "{{agent}} Agent" }, "compactButton": { "compact": "Compact context", "compacting": "Compacting…", "title": "Summarize and compact the conversation to free up context" }, "contextSection": { "title": "Context Usage" }, "errorCopied": "copied", "errorCopy": "copy", "extensionsSection": { "title": "Extensions" }, "header": { "title": "System Status" }, "mcpSection": { "title": "MCP Servers" }, "noExtensionsOrSkills": "No extensions or skills loaded", "noMcpServers": "No MCP servers configured", "pidLabel": "(PID: {{pid}})", "processStatus": { "error": "error", "running": "running", "starting": "starting", "stopped": "stopped" }, "promptTemplatesSection": { "title": "Prompt Templates" }, "row": { "cost": "Cost", "error": "Error", "messages": "Messages", "model": "Model", "name": "Name", "path": "Path", "provider": "Provider", "session": "Session", "status": "Status", "tokens": "Tokens", "usage": "Usage", "window": "Window" }, "scope": { "cli": "cli", "global": "global", "package": "package", "project": "project" }, "skillCommandsSection": { "title": "Skill Commands" }, "trigger": { "title": "System status" }, "workspaceSection": { "title": "Workspace" } };
@@ -3209,11 +3209,11 @@ const WORKSPACES_FILE = "workspaces.json";
3209
3209
  const MANAGED_WORKTREES_DIR = "worktrees";
3210
3210
  const MAX_LIVE_SESSION_RUNTIMES = 6;
3211
3211
  const WORKSPACE_COLORS = [
3212
- "#3b82f6",
3213
- "#ef4444",
3214
- "#22c55e",
3215
- "#eab308",
3216
- "#a855f7",
3212
+ "#38bdf8",
3213
+ "#f59e0b",
3214
+ "#f43f5e",
3215
+ "#8b5cf6",
3216
+ "#94a3b8",
3217
3217
  "#ec4899",
3218
3218
  "#06b6d4",
3219
3219
  "#f97316",
@@ -7302,13 +7302,6 @@ function themeIdFromName(name) {
7302
7302
  return name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
7303
7303
  }
7304
7304
  const BUILTIN_THEME_IDS = [
7305
- "dark",
7306
- "light",
7307
- "nord",
7308
- "gruvbox",
7309
- "breeze-dark",
7310
- "breeze-light",
7311
- "breeze-claudius",
7312
7305
  "sessrumnir",
7313
7306
  "fensalir"
7314
7307
  ];
@@ -15945,7 +15945,7 @@ function formatUntrustedBlock(label, content2, note) {
15945
15945
  }
15946
15946
  const activity = { "completed": "Finished in the background", "completedInAnotherWorkspace": "Finished in the background in another workspace", "failed": "Stopped with an error", "failedInAnotherWorkspace": "Stopped with an error in another workspace", "working": "Brokk is working", "workingInAnotherWorkspace": "Brokk is working in another workspace" };
15947
15947
  const app = { "dropFolder": { "description": "Opens that folder as a workspace (creates one if needed)", "title": "Drop folder to open as project" }, "errorBoundary": { "fallback": "Failed to render content" }, "quit": "Quit Sessrúmnir", "resizeHandle": { "title": "Drag to resize" }, "updateBanner": { "available": "Sessrúmnir <strong>v{{latestVersion}}</strong> is available — you're on v{{currentVersion}}.", "dismissAriaLabel": "Dismiss update notification", "downloadButton": "Download" } };
15948
- const chat = { "attach": { "allFilesFilter": "All Files", "attachFailed": "Could not attach file", "imagesFilter": "Images", "onlyImagesPasted": "Only images can be pasted into the composer", "pasteFailed": "Could not paste image", "readImageFailed": "Could not read image data", "unknownMimeType": "unknown", "unsupportedImageType": "Unsupported image type ({{mimeType}}). Use PNG, JPEG, GIF, or WebP." }, "closeFileTree": "Close file tree", "commandPopup": { "selectHint": "↑↓ navigate · Enter/Tab select · Esc close" }, "composer": { "placeholderIdle": "Ask {{agent}} anything — / for commands", "placeholderNotRunning": "{{agent}} agent is not running...", "placeholderSteering": "Type to steer the agent...", "shiftEnterNewline": "Shift+Enter newline", "streaming": "Streaming…" }, "council": { "planWithCouncil": "Plan with Council", "startEngineFirst": "Start the agent runtime before planning with Council" }, "emptyState": { "chooseProject": "Choose a project — {{agent}} starts when you send.", "pickProject": "Pick a project and describe what you want done.", "startFailed": "Failed to start {{agent}}. Check settings.", "starting": "Starting {{agent}} agent…", "title": "What should {{agent}} work on?", "waitingOnEngine": "{{agent}} is up — waiting for the engine to finish loading. Local models can take a while…" }, "extensionUi": { "editFallbackTitle": "Edit", "hideForNowWithShortcut": "Hide for now ({{shortcut}})", "inputFallbackTitle": "Input", "notificationFallback": "Notification", "selectFallbackTitle": "Select", "showWithShortcut": "Show ({{shortcut}})", "waitingForAnswer": "Brokk is waiting for an answer" }, "insertNote": { "ariaLabel": "Insert note", "titleWithShortcut": "Insert note (Ctrl+Shift+P)" }, "loadingSession": "Loading session…", "mentionPopup": { "insertHint": "↑↓ navigate · Enter/Tab insert path · Esc close" }, "message": { "branchedFrom": 'Branched from: "{{excerpt}}"', "branchFromHere": "Branch from here", "editAndResend": "Edit & resend" }, "projectPicker": { "noProject": "No project", "noProjectHomeDirectory": "No project — home directory", "openFolder": "Open folder…", "yourHomeDirectory": "Your home directory" }, "reattached": { "responseWillAppear": "The response appears here the moment it finishes.", "stillWorking": "{{agent}} is still working in this session." }, "scrollToBottom": "Scroll to bottom", "search": { "closeWithShortcut": "Close (Esc)", "nextMatch": "Next match (Enter)", "placeholder": "Find in page", "previousMatch": "Previous match (Shift+Enter)" }, "searchWorkspace": { "ariaLabel": "Search workspace", "titleWithShortcut": "Search workspace (Ctrl+Shift+F)" }, "sendButton": { "ariaLabel": "Send message", "titleWithShortcut": "Send (Enter)" }, "startingAgent": "Starting agent…", "stopButton": { "ariaLabel": "Stop generating", "titleWithShortcut": "Stop (Esc)" }, "subagentProgress": { "done_one": "{{count}} subagent done", "done_other": "{{count}} subagents done", "running_one": "{{count}} subagent running", "running_other": "{{count}} subagents running" }, "svgBlock": { "renderedSvgAlt": "Rendered SVG", "renderSvg": "Render SVG", "viewSource": "View source" }, "toolbar": { "diffViewer": "Diff viewer", "fileTree": "File tree", "reviewPanel": "Review panel", "terminal": "Terminal" }, "toolCall": { "status": { "done": "done", "error": "error", "running": "running" } }, "waitingForResponse": "Waiting for response..." };
15948
+ const chat = { "attach": { "allFilesFilter": "All Files", "attachFailed": "Could not attach file", "imagesFilter": "Images", "onlyImagesPasted": "Only images can be pasted into the composer", "pasteFailed": "Could not paste image", "readImageFailed": "Could not read image data", "unknownMimeType": "unknown", "unsupportedImageType": "Unsupported image type ({{mimeType}}). Use PNG, JPEG, GIF, or WebP." }, "closeFileTree": "Close file tree", "commandPopup": { "selectHint": "↑↓ navigate · Enter/Tab select · Esc close" }, "composer": { "placeholderIdle": "Ask {{agent}} anything — / / for commands", "placeholderNotRunning": "{{agent}} agent is not running...", "placeholderSteering": "Type to steer the agent...", "shiftEnterNewline": "Shift+Enter newline", "streaming": "Streaming…" }, "council": { "planWithCouncil": "Plan with Council", "startEngineFirst": "Start the agent runtime before planning with Council" }, "emptyState": { "chooseProject": "Choose a project — {{agent}} starts when you send.", "pickProject": "Choose the errand and speak it, Allfather.", "startFailed": "Failed to start {{agent}}. Check settings.", "starting": "Starting {{agent}} agent…", "title": "What shall {{agent}} forge?", "waitingOnEngine": "{{agent}} is up — waiting for the engine to finish loading. Local models can take a while…" }, "extensionUi": { "editFallbackTitle": "Edit", "hideForNowWithShortcut": "Hide for now ({{shortcut}})", "inputFallbackTitle": "Input", "notificationFallback": "Notification", "selectFallbackTitle": "Select", "showWithShortcut": "Show ({{shortcut}})", "waitingForAnswer": "Brokk is waiting for an answer" }, "insertNote": { "ariaLabel": "Insert note", "titleWithShortcut": "Insert note (Ctrl+Shift+P)" }, "loadingSession": "Loading session…", "mentionPopup": { "insertHint": "↑↓ navigate · Enter/Tab insert path · Esc close" }, "message": { "branchedFrom": 'Branched from: "{{excerpt}}"', "branchFromHere": "Branch from here", "editAndResend": "Edit & resend" }, "projectPicker": { "noProject": "No project", "noProjectHomeDirectory": "No project — home directory", "openFolder": "Open folder…", "yourHomeDirectory": "Your home directory" }, "reattached": { "responseWillAppear": "The response appears here the moment it finishes.", "stillWorking": "{{agent}} is still working in this session." }, "scrollToBottom": "Scroll to bottom", "search": { "closeWithShortcut": "Close (Esc)", "nextMatch": "Next match (Enter)", "placeholder": "Find in page", "previousMatch": "Previous match (Shift+Enter)" }, "searchWorkspace": { "ariaLabel": "Search workspace", "titleWithShortcut": "Search workspace (Ctrl+Shift+F)" }, "sendButton": { "ariaLabel": "Send message", "titleWithShortcut": "Send (Enter)" }, "startingAgent": "Starting agent…", "stopButton": { "ariaLabel": "Stop generating", "titleWithShortcut": "Stop (Esc)" }, "subagentProgress": { "done_one": "{{count}} subagent done", "done_other": "{{count}} subagents done", "running_one": "{{count}} subagent running", "running_other": "{{count}} subagents running" }, "svgBlock": { "renderedSvgAlt": "Rendered SVG", "renderSvg": "Render SVG", "viewSource": "View source" }, "toolbar": { "diffViewer": "Diff viewer", "fileTree": "File tree", "reviewPanel": "Review panel", "terminal": "Terminal" }, "toolCall": { "status": { "done": "done", "error": "error", "running": "running" } }, "waitingForResponse": "Waiting for response..." };
15949
15949
  const commandGroups = { "commands": "Commands", "extensions": "Extensions", "other": "Other", "prompts": "Prompts" };
15950
15950
  const commands = { "clone": { "description": "Clone the current branch into a new session" }, "compact": { "description": "Compact the conversation to free up context" }, "fork": { "description": "Open Branches to fork from a message" }, "new": { "description": "Start a new session" }, "resume": { "description": "Open the Sessions list" }, "settings": { "description": "Open Settings" }, "task": { "description": "Launch a task in a new Brokk session" } };
15951
15951
  const commandSources = { "builtin": "builtin", "extension": "extension", "prompt": "prompt", "skill": "skill" };
@@ -15967,7 +15967,7 @@ const home = { "actions": { "newSession": { "inWorkspace": "In {{project}}", "pi
15967
15967
  const imageViewer = { "closeTitle": "Close image", "readFailed": "Failed to read image", "unsupportedFile": "Not a supported image file" };
15968
15968
  const language$1 = { "nativeName": "English" };
15969
15969
  const menu = { "actualSize": "Actual Size", "close": "Close Window", "edit": "Edit", "file": "File", "forceReload": "Force Reload", "minimize": "Minimize", "newWorkspace": "New Workspace...", "openProject": "Open Project...", "redo": "Redo", "reload": "Reload", "toggleDevTools": "Toggle Developer Tools", "toggleFullScreen": "Toggle Full Screen", "undo": "Undo", "view": "View", "window": "Window", "zoom": "Zoom", "zoomIn": "Zoom In", "zoomOut": "Zoom Out" };
15970
- const missionControl = { "controlUnavailable": "control unavailable", "idle": "{{agent}} is idle", "liveSessions": "Live sessions", "needsAttention_one": "{{count}} needs attention", "needsAttention_other": "{{count}} needs attention", "newTask": "New task", "noLiveRuntimes": "No live session runtimes yet. Start a task to put Brokk to work in the background.", "noWorkflowRuns": "No workflow runs yet.", "open": "Open", "openAllWorkflows": "Open all workflows", "proceed": "Proceed", "proceedWithWorkflow": "Proceed with this workflow", "refreshWorkflowRuns": "Refresh workflow runs", "resumeFailed": "Could not proceed with {{workflow}}: {{reason}}", "resumeFailedGeneric": "Could not proceed with {{workflow}}. Open the run for details.", "retryWithWorkflow": "Retry this workflow", "review": "Review", "runtimeState": { "completed": "completed", "failed": "failed", "idle": "idle", "needsApproval": "needs approval", "stopped": "stopped", "working": "working" }, "startingSession": "Starting session", "subtitle": "Background sessions and workflow runs, from every project.", "title": "Mission Control", "unknownProject": "Unknown project", "workflowActivity": "Workflow activity", "workflowStatus": { "aborted": "aborted", "completed": "completed", "failed": "failed", "paused": "paused", "pending": "pending", "running": "running", "unknown": "unknown" } };
15970
+ const missionControl = { "controlUnavailable": "control unavailable", "idle": "{{agent}} is idle", "liveSessions": "Live sessions", "needsAttention_one": "{{count}} needs attention", "needsAttention_other": "{{count}} needs attention", "newTask": "New task", "noLiveRuntimes": "No live session runtimes yet. Start a task to put Brokk to work in the background.", "noWorkflowRuns": "No workflow runs yet.", "open": "Open", "openAllWorkflows": "Open all workflows", "proceed": "Proceed", "proceedWithWorkflow": "Proceed with this workflow", "refreshWorkflowRuns": "Refresh workflow runs", "resumeFailed": "Could not proceed with {{workflow}}: {{reason}}", "resumeFailedGeneric": "Could not proceed with {{workflow}}. Open the run for details.", "retryWithWorkflow": "Retry this workflow", "review": "Review", "runtimeState": { "completed": "completed", "failed": "failed", "idle": "idle", "needsApproval": "needs approval", "stopped": "stopped", "working": "working" }, "startingSession": "Starting session", "subtitle": "Background sessions and workflow runs, from every project.", "title": "The Hall", "unknownProject": "Unknown project", "workflowActivity": "Workflow activity", "workflowStatus": { "aborted": "aborted", "completed": "completed", "failed": "failed", "paused": "paused", "pending": "pending", "running": "running", "unknown": "unknown" } };
15971
15971
  const models = { "readFailure": { "invalidJson": "{{file}} is not valid JSON: {{detail}}", "invalidJsonNoDetail": "{{file}} is not valid JSON", "invalidYaml": "{{file}} is not valid YAML: {{detail}}", "invalidYamlNoDetail": "{{file}} is not valid YAML", "missingProviders": '{{file}} is not a valid models config (missing "providers")', "unreadable": "Could not read {{file}}: {{detail}}" }, "selector": { "current": "Current", "loadFailed": "Could not load models", "noModelsMatch": "No models match", "searchPlaceholder": "Search models…", "selectModel": "Select model", "selectModelWithShortcut": "Select model (Ctrl+P to cycle when {{agent}} is running)", "startToListModels": "Start Brokk to list and change models." } };
15972
15972
  const notes = { "backButton": "Back", "backTitle": "Back to notes", "deleteNoteTitle": "Delete note", "editNoteTitle": "Edit note", "empty": { "noMatch": "No notes match your search.", "noneYet": "No notes yet. Create one to reuse prompts." }, "form": { "bodyLabel": "Prompt / Command", "bodyPlaceholder": "The reusable prompt or command text...", "editHeading": "Edit Note", "saveFailed": "Failed to save note", "saving": "Saving...", "scopeLabel": "Scope", "tagsLabel": "Tags", "tagsPlaceholder": "space or comma separated", "thisWorkspaceFallback": "This workspace", "titleLabel": "Title", "titlePlaceholder": "e.g. Refactor with tests" }, "insertButton": "Insert", "insertIntoChatTitle": "Insert into chat input", "newNoteButton": "New Note", "picker": { "createNote": "Create a note", "navigationHint": "↑↓ navigate · Enter insert · Esc close", "noMatchingNotes": "No matching notes", "noSavedNotes": "No saved notes yet.", "notComposeBox": "This picker inserts notes you've saved — it's not a compose box.", "searchPlaceholder": "Search saved notes to insert..." }, "scope": { "other": "Other workspace", "workspaceFallback": "Workspace" }, "searchPlaceholder": "Search title, body, or tag...", "title": "Notes", "viewNoteTitle": "View note" };
15973
15973
  const notifications = { "completed": "Brokk finished working.", "failed": "Brokk stopped with an error.", "needs-approval": "Brokk is waiting for your approval.", "withSession": "{{body}} Click to open the finished session." };
@@ -15979,7 +15979,7 @@ const permissions = { "prompt": { "body": "{{agent}} wants to run the {{tool}} t
15979
15979
  const review = { "gitStatusUnavailable": "Git status unavailable", "heading": "Review", "openDiffButton": "Open diff review", "openDiffHint": "Inspect working tree changes.", "pendingApprovals": { "none": "No approval requests waiting.", "queued_one": "{{count}} queued item waiting for the active session.", "queued_other": "{{count}} queued items waiting for the active session." }, "pendingApprovalsHeading": "Pending Approvals", "permissionsHeading": "Permissions", "sessionStatus": { "idle": "{{agent}} is idle in the active session.", "working": "{{agent}} is working in the active session." }, "sessionStatusHeading": "Session Status", "subtitle": "Control what {{agent}} can do before changes move forward." };
15980
15980
  const sessions = { "activeBadge": "active", "archivedBadge": "archived", "archivedToggle": { "hideTitle": "Hide archived sessions", "hidingNone": "Hiding none", "showTitle": "Show archived sessions" }, "currentProjectBadge": "current", "currentWorkspaceLabel": "Current workspace:", "deleteConfirm": { "message": "Delete this session? Will use <code>trash</code> if available, otherwise permanent." }, "deleteEllipsis": "Delete...", "empty": { "createFirst": "Create your first session", "noMatch": "No sessions match your search", "noneInProject": "No sessions in this project yet", "noneYet": "No sessions yet", "openProjectToSee": "Open a project to see its sessions" }, "engineSession": "{{engine}} session", "header": { "projectCount_one": "{{count}} project", "projectCount_other": "{{count}} projects", "sessionCount_one": "{{count}} session", "sessionCount_other": "{{count}} sessions" }, "runtime": { "completed": "{{agent}} finished", "failed": "{{agent}} stopped with an error", "needsApproval": "{{agent}} is waiting for approval", "working": "{{agent}} is working" }, "scopeToggle": { "allSessions": "All Sessions", "currentOnly": "Current Only", "showCurrentProjectOnly": "Only show sessions from the current project", "showEveryProject": "Show sessions from every project" }, "searchPlaceholder": "Search sessions or projects...", "sessionActions": { "ariaLabel": "Session actions", "title": "Session actions (or right-click the row)" }, "tags": { "add": "Add", "addPlaceholder": "Add tag...", "addTag": "Add tag", "autoTagHint": "Auto-tagged from chat context — add your own tag to replace it", "removeAutoTag": "Remove auto-tag {{tag}}", "removeTag": "Remove tag {{tag}}" }, "time": { "days_one": "{{count}}d ago", "days_other": "{{count}}d ago", "hours_one": "{{count}}h ago", "hours_other": "{{count}}h ago", "minutes_one": "{{count}}m ago", "minutes_other": "{{count}}m ago" }, "title": "Sessions", "unknownProject": "Unknown" };
15981
15981
  const settings = { "actions": { "reset": "Reset to Defaults", "save": "Save Settings", "saved": "Saved!" }, "agentInstallation": { "autoDetectOption": "Auto-detect (pi first, then OMP)", "chooseExecutableTitle": "Choose executable or install directory", "customPathOption": "Custom path…", "description": "Auto-detect pi and OMP, choose an installed engine, or use a custom executable/path.", "detectedCount_one": "{{count}} installed engine detected", "detectedCount_other": "{{count}} installed engines detected", "engineAriaLabel": "Agent engine", "engineAutoOption": "Auto", "installedOption": "{{engine}} — {{path}}", "label": "Agent Installation", "noneDetected": "No pi or OMP installation detected yet", "ompNotFoundOption": "OMP (not found)", "pathPlaceholder": "Path to executable, cli.js, or install directory", "rescanTitle": "Rescan installed agents", "scanningStatus": "Scanning common install locations and PATH…", "selectDialogTitle": "Select Agent Executable or Directory" }, "autoScroll": { "description": "Automatically scroll to new messages", "label": "Auto Scroll" }, "codeEditorFontSize": { "description": "Font size for the code editor / file viewer", "label": "Code Editor Font Size" }, "consensusMode": { "arbiterOption": "Arbiter merge (fast)", "debateOption": "One debate round (slower, ~2x cost)", "description": "How council members reach agreement", "label": "Consensus mode" }, "councilEnabled": { "confirmButton": "Enable", "confirmMessage": "Each run spawns Claude and Codex in addition to {{engine}}. This can significantly increase token usage and credit/API costs. Only enable this if you are comfortable with the extra spend.", "confirmTitle": "Enable council planning?", "description": "Spawns Claude/Codex alongside Brokk to plan tasks. Increases token usage and credit/API costs.", "label": "Enable council planning" }, "councilMembers": { "description": "Which agents participate in council planning", "label": "Members", "notDetected": "(not detected)" }, "councilTimeout": { "description": "How long to wait for each agent ({{min}}-{{max}})", "label": "Per-member timeout (seconds)" }, "customTheme": { "createButton": "Create theme", "description": "Fork the current theme or edit one you created", "editButton": "Edit theme", "label": "Custom Theme" }, "darkTheme": { "description": "Used when the system is in dark mode", "label": "Dark Theme" }, "desktopNotifications": { "description": "Notify when Brokk finishes, fails, or waits for approval in a workspace you are not looking at", "label": "Desktop Notifications" }, "language": { "description": "Language of menus, buttons, and messages", "label": "Language", "labelWithEnglish": "{{label}} ({{english}})", "system": "System default ({{language}})" }, "lightTheme": { "description": "Used when the system is in light mode", "label": "Light Theme" }, "minimizeToTrayOnClose": { "description": "Keep Sessrúmnir running in the system tray when you close the window instead of quitting (Windows and Linux)", "label": "Minimize to Tray on Close" }, "openToHomeOnLaunch": { "description": "On: full Home launcher (stats, recents, open folder). Off: open Chat with the empty-session center prompt and project picker.", "label": "Open to Home Screen on Launch" }, "permissionMode": { "description": "Default safety mode for Brokk actions", "label": "Permission Mode" }, "permissionRules": { "description": "Fine-grained per-tool overrides for the mode above", "exportFailed": "Export failed", "importFailed": "Import failed", "label": "Permission Rules", "removeWorkspaceConfirmMessage": "Delete this workspace's .pi-desktop/permission-rules.json? Global permission rules will apply again.", "removeWorkspaceConfirmTitle": "Remove workspace rules", "saveError_global": "Settings saved, but global permission rules were not saved: {{error}}", "saveError_workspace": "Settings saved, but workspace permission rules were not saved: {{error}}", "scopeTabListAriaLabel": "Permission rules scope", "workspaceScopeTab": "This workspace" }, "resumeLastSession": { "description": "When opening a workspace, continue its most recent session instead of starting a new one", "label": "Resume Last Session" }, "runOnStartup": { "description": "Automatically start Sessrúmnir when you log in to your computer (takes effect in installed builds)", "label": "Run on Startup" }, "sections": { "agentConfiguration": "Agent Configuration", "appearance": "Appearance", "behavior": "Behavior", "customModels": "Custom Models", "multiAgentCouncilPlanning": "Multi-Agent Council Planning" }, "showThinking": { "description": "Display model thinking blocks in responses", "label": "Show Thinking" }, "terminalFontSize": { "description": "Font size for the terminal panel", "label": "Terminal Font Size" }, "theme": { "deleteConfirmMessage": 'Delete theme "{{themeName}}"? This cannot be undone.', "deleteConfirmTitle": "Delete theme", "description": "Application color scheme", "editNotFoundError": "Could not find the current theme to edit", "exportNotFoundError": "Could not find the current theme to export", "label": "Theme", "systemOption": "System" }, "themeActions": { "browseGalleryButton": "Browse gallery", "description": "Import, export, or install a theme from a URL", "label": "Theme Actions" }, "uiFontSize": { "description": "Chat, panels, and sidebar — not the terminal or code editor", "label": "UI Font Size" } };
15982
- const sidebar = { "archived": { "collapseTitle": "Collapse archived sessions", "expandTitle": "Expand archived sessions", "heading_one": "Archived ({{count}})", "heading_other": "Archived ({{count}})" }, "currentSession": { "heading": "Current Session", "messageCount_one": "{{count}} messages", "messageCount_other": "{{count}} messages", "openTitle": "Open current session in chat · double-click to rename" }, "header": { "closeSidebar": "Close sidebar", "homeAriaLabel": "Home", "homeTitle": "Home (Esc to launcher)" }, "nav": { "activitySection": "Activity", "chat": "Chat", "missionControl": "Mission Control", "missionControlTitle": "All background sessions and workflows", "newTaskTitle": "Start a task in a new Brokk session", "sessions": "Sessions", "sessionsTitle": "Sessions in this project", "timeline": "Timeline", "timelineTitleWithProject": "Timeline for {{project}}", "workflows": "Workflows", "workflowsTitleNoProject": "All workflow runs (no project open)", "workflowsTitleWithProject": "Workflow runs in {{project}}", "workspaceSection": "Workspace" }, "newSessionButton": { "label": "New session", "openProjectToBegin": "Open a project to begin", "shortcutKbd": "Ctrl N", "startsIn": "Starts in {{project}}", "titleNoProject": "Open a project first", "titleWithShortcut": "Start a new session in this project (Ctrl/Cmd+N)" }, "openProjectFolder": { "ariaLabel": "Open project folder", "titleWithShortcut": "Open project folder (Ctrl/Cmd+O)" }, "promptsWaitingInOtherWorkspaces_one": "{{count}} Brokk prompt waiting in other workspaces", "promptsWaitingInOtherWorkspaces_other": "{{count}} Brokk prompts waiting in other workspaces", "recentSessions": { "emptyInProject": "No sessions in this project yet.", "emptyNoProject": "Open a project to see its sessions.", "headingNoProject": "Recent sessions", "headingWithProject": "Recent in {{project}}", "startOneNow": "Start one now", "viewAll": "View all" }, "sessionNamePlaceholder": "Session name", "sessionRow": { "tooltipActive": "{{title}}\n\nClick to open · double-click to rename · right-click for actions", "tooltipInactive": "{{title}}\n\nClick to open · right-click for actions" }, "tools": { "allWorkflows": "All Workflows", "allWorkflowsTitle": "Workflow runs from every project", "diagnostics": "Diagnostics", "notes": "Notes", "packages": "Packages", "sectionLabel": "Tools" }, "workflowRunsForSession": "Workflow runs for this session", "workspaceMenu": { "changeFolder": "Change folder…", "rename": "Rename" }, "workspaceSwitcher": { "namePlaceholder": "Workspace name", "noWorkspace": "No workspace", "openProjectEllipsis": "Open project…", "triggerTitle": "Click to switch · double-click to rename · right-click for options" } };
15982
+ const sidebar = { "archived": { "collapseTitle": "Collapse archived sessions", "expandTitle": "Expand archived sessions", "heading_one": "Archived ({{count}})", "heading_other": "Archived ({{count}})" }, "currentSession": { "heading": "Current Session", "messageCount_one": "{{count}} messages", "messageCount_other": "{{count}} messages", "openTitle": "Open current session in chat · double-click to rename" }, "header": { "closeSidebar": "Close sidebar", "homeAriaLabel": "Home", "homeTitle": "Home (Esc to launcher)" }, "nav": { "activitySection": "Activity", "chat": "Chat", "missionControl": "The Hall", "missionControlTitle": "All background sessions and workflows", "newTaskTitle": "Start a task in a new Brokk session", "sessions": "Sessions", "sessionsTitle": "Sessions in this project", "timeline": "Timeline", "timelineTitleWithProject": "Timeline for {{project}}", "workflows": "Workflows", "workflowsTitleNoProject": "All workflow runs (no project open)", "workflowsTitleWithProject": "Workflow runs in {{project}}", "workspaceSection": "Workspace" }, "newSessionButton": { "label": "New session", "openProjectToBegin": "Open a project to begin", "shortcutKbd": "Ctrl N", "startsIn": "Starts in {{project}}", "titleNoProject": "Open a project first", "titleWithShortcut": "Start a new session in this project (Ctrl/Cmd+N)" }, "openProjectFolder": { "ariaLabel": "Open project folder", "titleWithShortcut": "Open project folder (Ctrl/Cmd+O)" }, "promptsWaitingInOtherWorkspaces_one": "{{count}} Brokk prompt waiting in other workspaces", "promptsWaitingInOtherWorkspaces_other": "{{count}} Brokk prompts waiting in other workspaces", "recentSessions": { "emptyInProject": "No sessions in this project yet.", "emptyNoProject": "Open a project to see its sessions.", "headingNoProject": "Recent sessions", "headingWithProject": "Recent in {{project}}", "startOneNow": "Start one now", "viewAll": "View all" }, "sessionNamePlaceholder": "Session name", "sessionRow": { "tooltipActive": "{{title}}\n\nClick to open · double-click to rename · right-click for actions", "tooltipInactive": "{{title}}\n\nClick to open · right-click for actions" }, "tools": { "allWorkflows": "All Workflows", "allWorkflowsTitle": "Workflow runs from every project", "diagnostics": "Diagnostics", "notes": "Notes", "packages": "Packages", "sectionLabel": "Tools" }, "workflowRunsForSession": "Workflow runs for this session", "workspaceMenu": { "changeFolder": "Change folder…", "rename": "Rename" }, "workspaceSwitcher": { "namePlaceholder": "Workspace name", "noWorkspace": "No workspace", "openProjectEllipsis": "Open project…", "triggerTitle": "Click to switch · double-click to rename · right-click for options" } };
15983
15983
  const skills = { "emptyHint": "Install skill packages or create skills in .pi/skills/", "emptyOmp": "No skills found in ~/.omp/agent/skills, ~/.claude/skills, or project .omp/skills", "emptyPi": "No skills found in ~/.pi/agent/skills or project .pi/skills", "emptyTitle": "No skills found", "providedByPlugin": "Provided by an installed plugin", "refreshAriaLabel": "Refresh skills", "runButton": "Run", "selectPrompt": "Select a skill to view its SKILL.md" };
15984
15984
  const stats = { "heatmap": { "dayTooltip_one": "{{date}} — {{count}} messages", "dayTooltip_other": "{{date}} — {{count}} messages" }, "modelLegend": { "empty": "No model usage in this range.", "tokenBreakdown": "{{input}} in · {{output}} out" }, "overview": { "activeDaysLabel": "Active days", "currentStreakLabel": "Current streak", "favoriteModelLabel": "Favorite model", "longestStreakLabel": "Longest streak", "messagesLabel": "Messages", "peakHourLabel": "Peak hour", "sessionsLabel": "Sessions", "streakDays_one": "{{count}}d", "streakDays_other": "{{count}}d", "totalTokensLabel": "Total tokens" }, "ranges": { "oneYear": "1y", "sevenDays": "7d", "sixMonths": "6mo", "thirtyDays": "30d", "threeMonths": "3mo" }, "tabs": { "models": "models", "overview": "overview" }, "tokenChart": { "barTooltip": "{{label}} — {{tokens}} tokens", "empty": "No token usage in this range." } };
15985
15985
  const status = { "agentSection": { "title": "{{agent}} Agent" }, "compactButton": { "compact": "Compact context", "compacting": "Compacting…", "title": "Summarize and compact the conversation to free up context" }, "contextSection": { "title": "Context Usage" }, "errorCopied": "copied", "errorCopy": "copy", "extensionsSection": { "title": "Extensions" }, "header": { "title": "System Status" }, "mcpSection": { "title": "MCP Servers" }, "noExtensionsOrSkills": "No extensions or skills loaded", "noMcpServers": "No MCP servers configured", "pidLabel": "(PID: {{pid}})", "processStatus": { "error": "error", "running": "running", "starting": "starting", "stopped": "stopped" }, "promptTemplatesSection": { "title": "Prompt Templates" }, "row": { "cost": "Cost", "error": "Error", "messages": "Messages", "model": "Model", "name": "Name", "path": "Path", "provider": "Provider", "session": "Session", "status": "Status", "tokens": "Tokens", "usage": "Usage", "window": "Window" }, "scope": { "cli": "cli", "global": "global", "package": "package", "project": "project" }, "skillCommandsSection": { "title": "Skill Commands" }, "trigger": { "title": "System status" }, "workspaceSection": { "title": "Workspace" } };
@@ -16426,110 +16426,9 @@ function resolveThemeVars(file) {
16426
16426
  return vars;
16427
16427
  }
16428
16428
  const BUILTIN_THEME_IDS$1 = [
16429
- "dark",
16430
- "light",
16431
- "nord",
16432
- "gruvbox",
16433
- "breeze-dark",
16434
- "breeze-light",
16435
- "breeze-claudius",
16436
16429
  "sessrumnir",
16437
16430
  "fensalir"
16438
16431
  ];
16439
- const $schema$8 = "pi-theme/v1";
16440
- const name$a = "Dark";
16441
- const kind$8 = "dark";
16442
- const seeds$8 = { "app": "#0a0a0a", "surface": "#171717", "text": "#f5f5f5", "accent": "#2563eb", "success": "#34d399", "warning": "#facc15", "error": "#f87171" };
16443
- const overrides$9 = { "surface-hover": "#262626", "card": "#262626", "elevated": "#404040", "highlight": "#171717", "highlight-strong": "#262626", "secondary": "#d4d4d4", "muted": "#a3a3a3", "dim": "#737373", "faint": "#525252", "ghost": "#404040", "inverse": "#0a0a0a", "border": "#262626", "border-strong": "#404040", "focus": "#3b82f6", "accent-hover": "#1d4ed8", "accent-fg": "#60a5fa", "accent-bg": "rgba(30, 58, 138, 0.3)", "success-bg": "rgba(6, 78, 59, 0.3)", "warning-bg": "rgba(113, 63, 18, 0.3)", "error-bg": "rgba(127, 29, 29, 0.3)", "info": "#60a5fa", "info-bg": "rgba(30, 58, 138, 0.3)", "special": "#c084fc", "special-bg": "rgba(88, 28, 135, 0.3)", "chat-column": "#0a0a0a", "chat-column-border": "#262626", "scrollbar": "#2a2a2a", "scrollbar-hover": "#3a3a3a", "md-code": "#60a5fa", "md-pre-bg": "#0d1117" };
16444
- const dark = {
16445
- $schema: $schema$8,
16446
- name: name$a,
16447
- kind: kind$8,
16448
- seeds: seeds$8,
16449
- overrides: overrides$9
16450
- };
16451
- const $schema$7 = "pi-theme/v1";
16452
- const name$9 = "Light";
16453
- const kind$7 = "light";
16454
- const seeds$7 = { "app": "#ffffff", "surface": "#f5f5f5", "text": "#171717", "accent": "#2563eb", "success": "#10b981", "warning": "#f59e0b", "error": "#ef4444" };
16455
- const overrides$8 = { "surface-hover": "#e5e5e5", "card": "#e5e5e5", "elevated": "#d4d4d4", "highlight": "#f5f5f5", "highlight-strong": "#e5e5e5", "secondary": "#404040", "muted": "#525252", "dim": "#737373", "faint": "#a3a3a3", "ghost": "#d4d4d4", "inverse": "#ffffff", "border": "#e5e5e5", "border-strong": "#d4d4d4", "focus": "#3b82f6", "accent-hover": "#1d4ed8", "accent-fg": "#3b82f6", "accent-bg": "rgba(30, 64, 175, 0.15)", "success-bg": "rgba(6, 95, 70, 0.15)", "warning-bg": "rgba(113, 63, 18, 0.15)", "error-bg": "rgba(153, 27, 27, 0.15)", "info": "#3b82f6", "info-bg": "rgba(30, 64, 175, 0.15)", "special": "#a855f7", "special-bg": "rgba(88, 28, 135, 0.15)", "chat-column": "#ffffff", "chat-column-border": "#e5e5e5", "scrollbar": "#d4d4d4", "scrollbar-hover": "#a3a3a3", "md-code": "#a855f7", "md-pre-bg": "#f8f9fa" };
16456
- const light = {
16457
- $schema: $schema$7,
16458
- name: name$9,
16459
- kind: kind$7,
16460
- seeds: seeds$7,
16461
- overrides: overrides$8
16462
- };
16463
- const $schema$6 = "pi-theme/v1";
16464
- const name$8 = "Nord";
16465
- const kind$6 = "dark";
16466
- const seeds$6 = { "app": "#2E3440", "surface": "#3B4252", "text": "#ECEFF4", "accent": "#5E81AC", "success": "#A3BE8C", "warning": "#EBCB8B", "error": "#BF616A" };
16467
- const overrides$7 = { "surface-hover": "#434C5E", "card": "#434C5E", "elevated": "#4C566A", "highlight": "#3B4252", "highlight-strong": "#434C5E", "secondary": "#D8DEE9", "muted": "#9599A3", "dim": "#616E88", "faint": "#4C566A", "ghost": "#434C5E", "inverse": "#2E3440", "border": "#434C5E", "border-strong": "#4C566A", "focus": "#88C0D0", "accent-hover": "#81A1C1", "accent-fg": "#81A1C1", "accent-bg": "rgba(46, 52, 64, 0.5)", "success-bg": "rgba(163, 190, 140, 0.15)", "warning-bg": "rgba(235, 203, 139, 0.15)", "error-bg": "rgba(191, 97, 106, 0.15)", "info": "#81A1C1", "info-bg": "rgba(46, 52, 64, 0.5)", "special": "#B48EAD", "special-bg": "rgba(180, 142, 173, 0.15)", "chat-column": "#2E3440", "chat-column-border": "#434C5E", "scrollbar": "#434C5E", "scrollbar-hover": "#4C566A", "md-code": "#B48EAD", "md-pre-bg": "#242932" };
16468
- const syntax$6 = { "keyword": "#C792EA", "string": "#C3E88D", "comment": "#7B88A1", "function": "#82AAFF", "type": "#FFCB6B", "number": "#F78C6C", "operator": "#89DDFF", "property": "#F78C6C", "tag": "#F07178", "variable": "#EEFFFF", "constant": "#F78C6C", "heading": "#C792EA", "link": "#C3E88D", "list": "#F78C6C", "quote": "#7B88A1", "meta": "#B2CCD6", "mark": "#C792EA", "invalid": "#F07178", "active-line-bg": "rgba(216, 222, 233, 0.05)", "selection-bg": "rgba(94, 129, 172, 0.40)", "selection-match-bg": "rgba(216, 222, 233, 0.08)" };
16469
- const nord = {
16470
- $schema: $schema$6,
16471
- name: name$8,
16472
- kind: kind$6,
16473
- seeds: seeds$6,
16474
- overrides: overrides$7,
16475
- syntax: syntax$6
16476
- };
16477
- const $schema$5 = "pi-theme/v1";
16478
- const name$7 = "Gruvbox";
16479
- const kind$5 = "dark";
16480
- const seeds$5 = { "app": "#282828", "surface": "#3C3836", "text": "#EBDBB2", "accent": "#458588", "success": "#B8BB26", "warning": "#FABD2F", "error": "#FB4934" };
16481
- const overrides$6 = { "surface-hover": "#504945", "card": "#504945", "elevated": "#665C54", "highlight": "#3C3836", "highlight-strong": "#504945", "secondary": "#BDAE93", "muted": "#A89984", "dim": "#928374", "faint": "#7C6F64", "ghost": "#665C54", "inverse": "#282828", "border": "#504945", "border-strong": "#665C54", "focus": "#D79921", "accent-hover": "#689D6A", "accent-fg": "#83A598", "accent-bg": "rgba(40, 40, 40, 0.5)", "success-bg": "rgba(152, 151, 26, 0.15)", "warning-bg": "rgba(215, 153, 33, 0.15)", "error-bg": "rgba(204, 36, 29, 0.15)", "info": "#83A598", "info-bg": "rgba(40, 40, 40, 0.5)", "special": "#D3869B", "special-bg": "rgba(177, 98, 134, 0.15)", "chat-column": "#282828", "chat-column-border": "#504945", "scrollbar": "#504945", "scrollbar-hover": "#665C54", "md-code": "#D3869B", "md-pre-bg": "#1D2021" };
16482
- const syntax$5 = { "keyword": "#D3869B", "string": "#B8BB26", "comment": "#A89984", "function": "#FABD2F", "type": "#FABD2F", "number": "#FE8019", "operator": "#83A598", "property": "#FE8019", "tag": "#FB4934", "variable": "#EBDBB2", "constant": "#FE8019", "heading": "#D3869B", "link": "#B8BB26", "list": "#FE8019", "quote": "#A89984", "meta": "#BDAE93", "mark": "#D3869B", "invalid": "#FB4934", "active-line-bg": "rgba(235, 219, 178, 0.04)", "selection-bg": "rgba(69, 133, 136, 0.40)", "selection-match-bg": "rgba(235, 219, 178, 0.08)" };
16483
- const gruvbox = {
16484
- $schema: $schema$5,
16485
- name: name$7,
16486
- kind: kind$5,
16487
- seeds: seeds$5,
16488
- overrides: overrides$6,
16489
- syntax: syntax$5
16490
- };
16491
- const $schema$4 = "pi-theme/v1";
16492
- const name$6 = "Breeze Dark";
16493
- const kind$4 = "dark";
16494
- const seeds$4 = { "app": "#232629", "surface": "#31363b", "text": "#cfcfc2", "accent": "#2980b9", "success": "#1c8042", "warning": "#fdbc4b", "error": "#da4453" };
16495
- const overrides$5 = { "surface-hover": "#3f4347", "card": "#3f4347", "elevated": "#4d5358", "highlight": "#31363b", "highlight-strong": "#3f4347", "secondary": "#a5a6a8", "muted": "#898a8c", "dim": "#7a7c7d", "faint": "#5f6266", "ghost": "#4d5358", "inverse": "#232629", "border": "#3f4347", "border-strong": "#4d5358", "focus": "#3daee9", "accent-hover": "#3daee9", "accent-fg": "#3daee9", "accent-bg": "rgba(45, 92, 118, 0.5)", "success-bg": "rgba(28, 128, 66, 0.15)", "warning-bg": "rgba(246, 116, 0, 0.15)", "error-bg": "rgba(218, 68, 83, 0.15)", "info": "#3daee9", "info-bg": "rgba(45, 92, 118, 0.5)", "special": "#8e44ad", "special-bg": "rgba(142, 68, 173, 0.15)", "chat-column": "#232629", "chat-column-border": "#3f4347", "scrollbar": "#3f4347", "scrollbar-hover": "#4d5358", "md-code": "#60a5fa", "md-pre-bg": "#1d2024" };
16496
- const syntax$4 = { "keyword": "#fdbc4b", "string": "#f44f4f", "comment": "#7a7c7d", "function": "#8e44ad", "type": "#2980b9", "number": "#f67400", "operator": "#3f8058", "property": "#27aeae", "tag": "#2980b9", "variable": "#cfcfc2", "constant": "#27aeae", "heading": "#8e44ad", "link": "#0099ff", "list": "#da4453", "quote": "#7a7c7d", "meta": "#a5a6a8", "mark": "#8e44ad", "invalid": "#da4453", "active-line-bg": "#2A2E32", "selection-bg": "rgba(45, 92, 118, 0.65)", "selection-match-bg": "rgba(65, 72, 87, 0.5)" };
16497
- const breezeDark = {
16498
- $schema: $schema$4,
16499
- name: name$6,
16500
- kind: kind$4,
16501
- seeds: seeds$4,
16502
- overrides: overrides$5,
16503
- syntax: syntax$4
16504
- };
16505
- const $schema$3 = "pi-theme/v1";
16506
- const name$5 = "Breeze Light";
16507
- const kind$3 = "light";
16508
- const seeds$3 = { "app": "#ffffff", "surface": "#f8f7f6", "text": "#1f1c1b", "accent": "#0057ae", "success": "#006e28", "warning": "#b08000", "error": "#bf0303" };
16509
- const overrides$4 = { "surface-hover": "#ebebeb", "card": "#ebebeb", "elevated": "#d8d8d8", "highlight": "#f8f7f6", "highlight-strong": "#ebebeb", "secondary": "#444444", "muted": "#5d5d5d", "dim": "#7a7c7d", "faint": "#898887", "ghost": "#d8d8d8", "inverse": "#ffffff", "border": "#d8d8d8", "border-strong": "#c0c0bf", "focus": "#0057ae", "accent-hover": "#2980b9", "accent-fg": "#0057ae", "accent-bg": "rgba(0, 87, 174, 0.12)", "success-bg": "rgba(0, 110, 40, 0.12)", "warning-bg": "rgba(176, 128, 0, 0.12)", "error-bg": "rgba(191, 3, 3, 0.12)", "info": "#0057ae", "info-bg": "rgba(0, 87, 174, 0.12)", "special": "#644a9b", "special-bg": "rgba(100, 74, 155, 0.12)", "chat-column": "#ffffff", "chat-column-border": "#d8d8d8", "scrollbar": "#d8d8d8", "scrollbar-hover": "#898887", "md-code": "#644a9b", "md-pre-bg": "#f8f7f6" };
16510
- const syntax$3 = { "keyword": "#b08000", "string": "#bf0303", "comment": "#898887", "function": "#644a9b", "type": "#0057ae", "number": "#b08000", "operator": "#ca60ca", "property": "#0057ae", "tag": "#0057ae", "variable": "#1f1c1b", "constant": "#aa5500", "heading": "#644a9b", "link": "#0095ff", "list": "#bf0303", "quote": "#898887", "meta": "#898887", "mark": "#644a9b", "invalid": "#bf0303", "active-line-bg": "#f8f7f6", "selection-bg": "rgba(148, 202, 239, 0.6)", "selection-match-bg": "rgba(0, 0, 0, 0.05)" };
16511
- const breezeLight = {
16512
- $schema: $schema$3,
16513
- name: name$5,
16514
- kind: kind$3,
16515
- seeds: seeds$3,
16516
- overrides: overrides$4,
16517
- syntax: syntax$3
16518
- };
16519
- const $schema$2 = "pi-theme/v1";
16520
- const name$4 = "Breeze Claudius";
16521
- const kind$2 = "dark";
16522
- const seeds$2 = { "app": "#232629", "surface": "#31363b", "text": "#cfcfc2", "accent": "#2980b9", "success": "#1c8042", "warning": "#fdbc4b", "error": "#da4453" };
16523
- const overrides$3 = { "surface-hover": "#3f4347", "card": "#3f4347", "elevated": "#4d5358", "highlight": "#31363b", "highlight-strong": "#3f4347", "secondary": "#a5a6a8", "muted": "#898a8c", "dim": "#7a7c7d", "faint": "#5f6266", "ghost": "#4d5358", "inverse": "#232629", "border": "#3f4347", "border-strong": "#4d5358", "focus": "#3daee9", "accent-hover": "#3daee9", "accent-fg": "#3daee9", "accent-bg": "rgba(45, 92, 118, 0.5)", "success-bg": "rgba(28, 128, 66, 0.15)", "warning-bg": "rgba(246, 116, 0, 0.15)", "error-bg": "rgba(218, 68, 83, 0.15)", "info": "#3daee9", "info-bg": "rgba(45, 92, 118, 0.5)", "special": "#8e44ad", "special-bg": "rgba(142, 68, 173, 0.15)", "chat-column": "#1e1e1e", "chat-column-border": "transparent", "scrollbar": "#3f4347", "scrollbar-hover": "#4d5358", "md-code": "#60a5fa", "md-pre-bg": "#1d2024" };
16524
- const syntax$2 = { "keyword": "#fdbc4b", "string": "#f44f4f", "comment": "#7a7c7d", "function": "#8e44ad", "type": "#2980b9", "number": "#f67400", "operator": "#3f8058", "property": "#27aeae", "tag": "#2980b9", "variable": "#cfcfc2", "constant": "#27aeae", "heading": "#8e44ad", "link": "#0099ff", "list": "#da4453", "quote": "#7a7c7d", "meta": "#a5a6a8", "mark": "#8e44ad", "invalid": "#da4453", "active-line-bg": "#2A2E32", "selection-bg": "rgba(45, 92, 118, 0.65)", "selection-match-bg": "rgba(65, 72, 87, 0.5)" };
16525
- const breezeClaudius = {
16526
- $schema: $schema$2,
16527
- name: name$4,
16528
- kind: kind$2,
16529
- seeds: seeds$2,
16530
- overrides: overrides$3,
16531
- syntax: syntax$2
16532
- };
16533
16432
  const $schema$1 = "pi-theme/v1";
16534
16433
  const name$3 = "Sessrúmnir";
16535
16434
  const kind$1 = "dark";
@@ -16568,27 +16467,13 @@ const fensalir = {
16568
16467
  };
16569
16468
  const BUILTIN_THEMES = [
16570
16469
  { id: "sessrumnir", file: sessrumnir },
16571
- { id: "fensalir", file: fensalir },
16572
- { id: "dark", file: dark },
16573
- { id: "light", file: light },
16574
- { id: "nord", file: nord },
16575
- { id: "gruvbox", file: gruvbox },
16576
- { id: "breeze-dark", file: breezeDark },
16577
- { id: "breeze-light", file: breezeLight },
16578
- { id: "breeze-claudius", file: breezeClaudius }
16470
+ { id: "fensalir", file: fensalir }
16579
16471
  ];
16580
16472
  const BUILTIN_THEME_IDS = BUILTIN_THEMES.map((t2) => t2.id);
16581
16473
  function isBuiltinThemeId(id2) {
16582
16474
  return BUILTIN_THEME_IDS$1.includes(id2);
16583
16475
  }
16584
16476
  const BUILTIN_THEME_NAME_KEYS = {
16585
- dark: "themes.builtin.dark",
16586
- light: "themes.builtin.light",
16587
- nord: "themes.builtin.nord",
16588
- gruvbox: "themes.builtin.gruvbox",
16589
- "breeze-dark": "themes.builtin.breeze-dark",
16590
- "breeze-light": "themes.builtin.breeze-light",
16591
- "breeze-claudius": "themes.builtin.breeze-claudius",
16592
16477
  sessrumnir: "themes.builtin.sessrumnir",
16593
16478
  fensalir: "themes.builtin.fensalir"
16594
16479
  };
@@ -16605,7 +16490,7 @@ function applyThemeVars(target, vars, previous2) {
16605
16490
  return next;
16606
16491
  }
16607
16492
  const SYSTEM_THEME_ID = "system";
16608
- const FALLBACK_THEME_ID = "dark";
16493
+ const FALLBACK_THEME_ID = "fensalir";
16609
16494
  const DARK_SCHEME_QUERY = "(prefers-color-scheme: dark)";
16610
16495
  const SYSTEM_THEME_DEFAULTS = {
16611
16496
  light: DEFAULT_SETTINGS.systemLightTheme,
@@ -21272,7 +21157,7 @@ function StatusPopover() {
21272
21157
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-4 py-2 border-t border-border flex items-center justify-between text-[10px] text-faint", children: [
21273
21158
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
21274
21159
  "v",
21275
- "0.1.16"
21160
+ "0.1.18"
21276
21161
  ] }),
21277
21162
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
21278
21163
  "button",
@@ -89047,12 +88932,12 @@ function buildTerminalTheme() {
89047
88932
  background: bg,
89048
88933
  foreground: fg,
89049
88934
  cursor: fg,
89050
- selectionBackground: v("--cm-selection-bg", "#3b82f666"),
88935
+ selectionBackground: v("--cm-selection-bg", "#c9973f66"),
89051
88936
  black: bg,
89052
88937
  red: v("--color-error", "#ef4444"),
89053
88938
  green: v("--color-success", "#22c55e"),
89054
88939
  yellow: v("--color-warning", "#eab308"),
89055
- blue: v("--color-accent", "#3b82f6"),
88940
+ blue: v("--color-accent", "#c9973f"),
89056
88941
  magenta: v("--cm-keyword", "#a855f7"),
89057
88942
  cyan: v("--cm-link", "#06b6d4"),
89058
88943
  white: fg,
@@ -89204,7 +89089,7 @@ function TerminalPanel() {
89204
89089
  }
89205
89090
  );
89206
89091
  }
89207
- const piLogo = "" + new URL("pi-logo-B48rElrT.svg", import.meta.url).href;
89092
+ const ymirMark = "" + new URL("ymir-mark-kY-7e1x6.svg", import.meta.url).href;
89208
89093
  const DEFAULT_COMPOSER_PAD_PX = 144;
89209
89094
  function ChatPanel() {
89210
89095
  const { t: t2 } = useTranslation();
@@ -89230,7 +89115,7 @@ function ChatPanel() {
89230
89115
  const streamingToolCalls = useAppStore((state) => state.streamingToolCalls);
89231
89116
  const piStatus = useAppStore((state) => state.piStatus);
89232
89117
  const piStartupPhase = useAppStore((state) => state.piStartupPhase);
89233
- const engineLabel = useAppStore((state) => agentEngineLabel(state.piEngine) ?? "Pi");
89118
+ const engineLabel = useAppStore((state) => agentEngineLabel(state.piEngine) ?? "Brokk");
89234
89119
  const terminalOpen = useAppStore((state) => state.terminalOpen);
89235
89120
  const reviewOpen = useAppStore((state) => state.reviewOpen);
89236
89121
  const sidebarOpen = useAppStore((state) => state.sidebarOpen);
@@ -89383,7 +89268,7 @@ function ChatPanel() {
89383
89268
  /* @__PURE__ */ jsxRuntimeExports.jsx(
89384
89269
  "img",
89385
89270
  {
89386
- src: piLogo,
89271
+ src: ymirMark,
89387
89272
  alt: PI_DESKTOP_PRODUCT_NAME,
89388
89273
  className: "mx-auto mb-4 block h-14 w-14"
89389
89274
  }
@@ -94119,7 +94004,7 @@ function HomeScreenInfo() {
94119
94004
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: clsx("mx-auto max-w-[952px] px-8 py-12", busy && "pointer-events-none opacity-60"), children: [
94120
94005
  /* @__PURE__ */ jsxRuntimeExports.jsx(PiErrorBanner, {}),
94121
94006
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-6 flex flex-col items-center text-center", children: [
94122
- /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: piLogo, alt: PI_DESKTOP_PRODUCT_NAME, className: "h-16 w-16" }),
94007
+ /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: ymirMark, alt: PI_DESKTOP_PRODUCT_NAME, className: "h-16 w-16" }),
94123
94008
  /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "mt-4 text-2xl font-semibold text-primary", children: PI_DESKTOP_PRODUCT_NAME }),
94124
94009
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-1 text-sm text-dim", children: t2("home.subtitle") })
94125
94010
  ] }),
@@ -97261,7 +97146,7 @@ function App() {
97261
97146
  const showChrome = !isHome;
97262
97147
  const showUpdateBanner = !!updateInfo?.updateAvailable && !updateDismissed;
97263
97148
  const globalWorkflowOpen = showChrome && workflowPanelOpen && !workflowPanelFilter && workflowPanelWorkspaceId === null;
97264
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex h-screen flex-col bg-app text-primary", children: [
97149
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex h-screen flex-col text-primary", children: [
97265
97150
  /* @__PURE__ */ jsxRuntimeExports.jsx(EmberBackground, {}),
97266
97151
  isDraggingFolder && /* @__PURE__ */ jsxRuntimeExports.jsx(
97267
97152
  "div",
@@ -484,8 +484,8 @@
484
484
  --color-border: #262626;
485
485
  --color-border-strong: #404040;
486
486
  --color-border-strong-hover: #525252;
487
- --color-focus: #3b82f6;
488
- --color-accent: #2563eb;
487
+ --color-focus: #c9973f;
488
+ --color-accent: #c9973f;
489
489
  --color-accent-hover: #1d4ed8;
490
490
  --color-accent-fg: #60a5fa;
491
491
  --color-accent-bg: #1e3a8a4d;
@@ -2181,7 +2181,7 @@
2181
2181
  }
2182
2182
 
2183
2183
  .border-accent\/40 {
2184
- border-color: #2563eb66;
2184
+ border-color: #c9973f66;
2185
2185
  }
2186
2186
 
2187
2187
  @supports (color: color-mix(in lab, red, red)) {
@@ -2191,7 +2191,7 @@
2191
2191
  }
2192
2192
 
2193
2193
  .border-accent\/50 {
2194
- border-color: #2563eb80;
2194
+ border-color: #c9973f80;
2195
2195
  }
2196
2196
 
2197
2197
  @supports (color: color-mix(in lab, red, red)) {
@@ -2409,7 +2409,7 @@
2409
2409
  }
2410
2410
 
2411
2411
  .bg-accent\/30 {
2412
- background-color: #2563eb4d;
2412
+ background-color: #c9973f4d;
2413
2413
  }
2414
2414
 
2415
2415
  @supports (color: color-mix(in lab, red, red)) {
@@ -2419,7 +2419,7 @@
2419
2419
  }
2420
2420
 
2421
2421
  .bg-accent\/50 {
2422
- background-color: #2563eb80;
2422
+ background-color: #c9973f80;
2423
2423
  }
2424
2424
 
2425
2425
  @supports (color: color-mix(in lab, red, red)) {
@@ -2429,7 +2429,7 @@
2429
2429
  }
2430
2430
 
2431
2431
  .bg-accent\/70 {
2432
- background-color: #2563ebb3;
2432
+ background-color: #c9973fb3;
2433
2433
  }
2434
2434
 
2435
2435
  @supports (color: color-mix(in lab, red, red)) {
@@ -3391,6 +3391,11 @@
3391
3391
  opacity: .9;
3392
3392
  }
3393
3393
 
3394
+ .shadow {
3395
+ --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, #0000001a), 0 1px 2px -1px var(--tw-shadow-color, #0000001a);
3396
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3397
+ }
3398
+
3394
3399
  .shadow-2xl {
3395
3400
  --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, #00000040);
3396
3401
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -3432,7 +3437,7 @@
3432
3437
  }
3433
3438
 
3434
3439
  .shadow-accent\/20 {
3435
- --tw-shadow-color: #2563eb33;
3440
+ --tw-shadow-color: #c9973f33;
3436
3441
  }
3437
3442
 
3438
3443
  @supports (color: color-mix(in lab, red, red)) {
@@ -3697,7 +3702,7 @@
3697
3702
  }
3698
3703
 
3699
3704
  .hover\:bg-accent\/90:hover {
3700
- background-color: #2563ebe6;
3705
+ background-color: #c9973fe6;
3701
3706
  }
3702
3707
 
3703
3708
  @supports (color: color-mix(in lab, red, red)) {
@@ -4107,14 +4112,18 @@
4107
4112
  }
4108
4113
 
4109
4114
  .ember-bg {
4110
- z-index: 0;
4115
+ z-index: -1;
4111
4116
  pointer-events: none;
4112
- opacity: .5;
4117
+ opacity: .55;
4113
4118
  mix-blend-mode: screen;
4114
4119
  position: fixed;
4115
4120
  inset: 0;
4116
4121
  }
4117
4122
 
4123
+ html, body {
4124
+ background-color: var(--app, #0e0c09);
4125
+ }
4126
+
4118
4127
  @property --tw-translate-x {
4119
4128
  syntax: "*";
4120
4129
  inherits: false;
@@ -0,0 +1,55 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="100%" height="100%">
2
+ <defs>
3
+ <!-- Background Slate -->
4
+ <linearGradient id="bg-grad" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="100%">
5
+ <stop offset="0%" stop-color="#0e0c09" />
6
+ <stop offset="100%" stop-color="#151209" />
7
+ </linearGradient>
8
+
9
+ <!-- Outer Dark Metal Forging -->
10
+ <linearGradient id="dark-metal" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="0%" y2="100%">
11
+ <stop offset="0%" stop-color="#7d5f2a" />
12
+ <stop offset="100%" stop-color="#0e0c09" />
13
+ </linearGradient>
14
+
15
+ <!-- Inner Cyan Edge / Chisel Highlight -->
16
+ <linearGradient id="cyan-glow" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="100%">
17
+ <stop offset="0%" stop-color="#e0b257" />
18
+ <stop offset="50%" stop-color="#c9973f" />
19
+ <stop offset="100%" stop-color="#7d5f2a" />
20
+ </linearGradient>
21
+
22
+ <!-- Drop Shadow for Depth -->
23
+ <filter id="shadow" x="-10%" y="-10%" width="120%" height="120%">
24
+ <feDropShadow dx="0" dy="8" stdDeviation="12" flood-color="#000000" flood-opacity="0.6"/>
25
+ </filter>
26
+ </defs>
27
+
28
+ <!-- Canvas -->
29
+ <rect width="512" height="512" rx="48" fill="url(#bg-grad)" stroke="#2b241a" stroke-width="4"/>
30
+
31
+ <!-- Master Group with Drop Shadow -->
32
+ <g filter="url(#shadow)">
33
+
34
+ <!-- 1. THICK OUTER BASE (The Iron Mass) -->
35
+ <g fill="none" stroke="url(#dark-metal)" stroke-width="48" stroke-linecap="square" stroke-linejoin="miter">
36
+ <!-- Algiz Y-Stem & Branches -->
37
+ <path d="M 144 144 L 256 256 L 368 144 M 256 256 V 352" />
38
+ <!-- Top Anvil Bar -->
39
+ <path d="M 128 352 H 384" />
40
+ <!-- Bottom Anvil Bar (Slightly narrower) -->
41
+ <path d="M 160 432 H 352" />
42
+ </g>
43
+
44
+ <!-- 2. THIN INNER HIGHLIGHT (The Glowing Chiseled Edge) -->
45
+ <g fill="none" stroke="url(#cyan-glow)" stroke-width="12" stroke-linecap="square" stroke-linejoin="miter">
46
+ <!-- Algiz Y-Stem & Branches -->
47
+ <path d="M 144 144 L 256 256 L 368 144 M 256 256 V 352" />
48
+ <!-- Top Anvil Bar -->
49
+ <path d="M 128 352 H 384" />
50
+ <!-- Bottom Anvil Bar -->
51
+ <path d="M 160 432 H 352" />
52
+ </g>
53
+
54
+ </g>
55
+ </svg>
@@ -7,11 +7,11 @@
7
7
  http-equiv="Content-Security-Policy"
8
8
  content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'"
9
9
  />
10
- <link rel="icon" type="image/svg+xml" href="./assets/pi-logo-B48rElrT.svg" />
10
+ <link rel="icon" type="image/svg+xml" href="./assets/ymir-mark-kY-7e1x6.svg" />
11
11
  <title>Sessrúmnir</title>
12
12
  <script src="./theme-boot.js"></script>
13
- <script type="module" crossorigin src="./assets/index-DbCaU2eq.js"></script>
14
- <link rel="stylesheet" crossorigin href="./assets/index-DL2o01yM.css">
13
+ <script type="module" crossorigin src="./assets/index-BvfL-Umc.js"></script>
14
+ <link rel="stylesheet" crossorigin href="./assets/index-W51edCEX.css">
15
15
  </head>
16
16
  <body class="bg-app text-primary antialiased">
17
17
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerwiz/sessrumnir",
3
- "version": "0.1.16",
3
+ "version": "0.1.18",
4
4
  "description": "Desktop GUI frontend for the Pi coding agent",
5
5
  "main": "out/main/index.js",
6
6
  "desktopName": "pi-desktop.desktop",
@@ -41,7 +41,7 @@
41
41
  "selectHint": "↑↓ navigate · Enter/Tab select · Esc close"
42
42
  },
43
43
  "composer": {
44
- "placeholderIdle": "Ask {{agent}} anything — / for commands",
44
+ "placeholderIdle": "Ask {{agent}} anything — / / for commands",
45
45
  "placeholderNotRunning": "{{agent}} agent is not running...",
46
46
  "placeholderSteering": "Type to steer the agent...",
47
47
  "shiftEnterNewline": "Shift+Enter newline",
@@ -53,10 +53,10 @@
53
53
  },
54
54
  "emptyState": {
55
55
  "chooseProject": "Choose a project — {{agent}} starts when you send.",
56
- "pickProject": "Pick a project and describe what you want done.",
56
+ "pickProject": "Choose the errand and speak it, Allfather.",
57
57
  "startFailed": "Failed to start {{agent}}. Check settings.",
58
58
  "starting": "Starting {{agent}} agent…",
59
- "title": "What should {{agent}} work on?",
59
+ "title": "What shall {{agent}} forge?",
60
60
  "waitingOnEngine": "{{agent}} is up — waiting for the engine to finish loading. Local models can take a while…"
61
61
  },
62
62
  "extensionUi": {
@@ -710,7 +710,7 @@
710
710
  },
711
711
  "startingSession": "Starting session",
712
712
  "subtitle": "Background sessions and workflow runs, from every project.",
713
- "title": "Mission Control",
713
+ "title": "The Hall",
714
714
  "unknownProject": "Unknown project",
715
715
  "workflowActivity": "Workflow activity",
716
716
  "workflowStatus": {
@@ -1141,7 +1141,7 @@
1141
1141
  "nav": {
1142
1142
  "activitySection": "Activity",
1143
1143
  "chat": "Chat",
1144
- "missionControl": "Mission Control",
1144
+ "missionControl": "The Hall",
1145
1145
  "missionControlTitle": "All background sessions and workflows",
1146
1146
  "newTaskTitle": "Start a task in a new Brokk session",
1147
1147
  "sessions": "Sessions",
@@ -1727,4 +1727,4 @@
1727
1727
  "sessions": "Sessions",
1728
1728
  "tools": "Tools"
1729
1729
  }
1730
- }
1730
+ }
@@ -84,7 +84,7 @@ interface WorkspaceState {
84
84
  }
85
85
 
86
86
  const WORKSPACE_COLORS = [
87
- '#3b82f6', '#ef4444', '#22c55e', '#eab308', '#a855f7',
87
+ '#38bdf8', '#f59e0b', '#f43f5e', '#8b5cf6', '#94a3b8',
88
88
  '#ec4899', '#06b6d4', '#f97316', '#6366f1', '#14b8a6',
89
89
  ]
90
90
 
@@ -7,7 +7,7 @@
7
7
  http-equiv="Content-Security-Policy"
8
8
  content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'"
9
9
  />
10
- <link rel="icon" type="image/svg+xml" href="./src/assets/pi-logo.svg" />
10
+ <link rel="icon" type="image/svg+xml" href="./src/assets/ymir-mark.svg" />
11
11
  <title>Sessrúmnir</title>
12
12
  <script src="/theme-boot.js"></script>
13
13
  </head>
@@ -96,7 +96,7 @@ export function App(): React.JSX.Element {
96
96
  showChrome && workflowPanelOpen && !workflowPanelFilter && workflowPanelWorkspaceId === null
97
97
 
98
98
  return (
99
- <div className="relative flex h-screen flex-col bg-app text-primary">
99
+ <div className="relative flex h-screen flex-col text-primary">
100
100
  <EmberBackground />
101
101
  {isDraggingFolder && (
102
102
  <div
@@ -0,0 +1,55 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="100%" height="100%">
2
+ <defs>
3
+ <!-- Background Slate -->
4
+ <linearGradient id="bg-grad" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="100%">
5
+ <stop offset="0%" stop-color="#0e0c09" />
6
+ <stop offset="100%" stop-color="#151209" />
7
+ </linearGradient>
8
+
9
+ <!-- Outer Dark Metal Forging -->
10
+ <linearGradient id="dark-metal" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="0%" y2="100%">
11
+ <stop offset="0%" stop-color="#7d5f2a" />
12
+ <stop offset="100%" stop-color="#0e0c09" />
13
+ </linearGradient>
14
+
15
+ <!-- Inner Cyan Edge / Chisel Highlight -->
16
+ <linearGradient id="cyan-glow" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="100%">
17
+ <stop offset="0%" stop-color="#e0b257" />
18
+ <stop offset="50%" stop-color="#c9973f" />
19
+ <stop offset="100%" stop-color="#7d5f2a" />
20
+ </linearGradient>
21
+
22
+ <!-- Drop Shadow for Depth -->
23
+ <filter id="shadow" x="-10%" y="-10%" width="120%" height="120%">
24
+ <feDropShadow dx="0" dy="8" stdDeviation="12" flood-color="#000000" flood-opacity="0.6"/>
25
+ </filter>
26
+ </defs>
27
+
28
+ <!-- Canvas -->
29
+ <rect width="512" height="512" rx="48" fill="url(#bg-grad)" stroke="#2b241a" stroke-width="4"/>
30
+
31
+ <!-- Master Group with Drop Shadow -->
32
+ <g filter="url(#shadow)">
33
+
34
+ <!-- 1. THICK OUTER BASE (The Iron Mass) -->
35
+ <g fill="none" stroke="url(#dark-metal)" stroke-width="48" stroke-linecap="square" stroke-linejoin="miter">
36
+ <!-- Algiz Y-Stem & Branches -->
37
+ <path d="M 144 144 L 256 256 L 368 144 M 256 256 V 352" />
38
+ <!-- Top Anvil Bar -->
39
+ <path d="M 128 352 H 384" />
40
+ <!-- Bottom Anvil Bar (Slightly narrower) -->
41
+ <path d="M 160 432 H 352" />
42
+ </g>
43
+
44
+ <!-- 2. THIN INNER HIGHLIGHT (The Glowing Chiseled Edge) -->
45
+ <g fill="none" stroke="url(#cyan-glow)" stroke-width="12" stroke-linecap="square" stroke-linejoin="miter">
46
+ <!-- Algiz Y-Stem & Branches -->
47
+ <path d="M 144 144 L 256 256 L 368 144 M 256 256 V 352" />
48
+ <!-- Top Anvil Bar -->
49
+ <path d="M 128 352 H 384" />
50
+ <!-- Bottom Anvil Bar -->
51
+ <path d="M 160 432 H 352" />
52
+ </g>
53
+
54
+ </g>
55
+ </svg>
@@ -28,7 +28,7 @@ import { useChatScroll, useGlobalWorkflowOpen } from '../hooks'
28
28
  import { useState, useCallback, useEffect, useMemo, useRef } from 'react'
29
29
  import { useTranslation } from 'react-i18next'
30
30
  import { clsx } from 'clsx'
31
- import piLogo from '../assets/pi-logo.svg'
31
+ import ymirMark from '../assets/ymir-mark.svg'
32
32
  import {
33
33
  FolderTree,
34
34
  GitCompare,
@@ -72,7 +72,7 @@ export function ChatPanel(): React.JSX.Element {
72
72
  const streamingToolCalls = useAppStore((state) => state.streamingToolCalls)
73
73
  const piStatus = useAppStore((state) => state.piStatus)
74
74
  const piStartupPhase = useAppStore((state) => state.piStartupPhase)
75
- const engineLabel = useAppStore((state) => agentEngineLabel(state.piEngine) ?? 'Pi')
75
+ const engineLabel = useAppStore((state) => agentEngineLabel(state.piEngine) ?? 'Brokk')
76
76
  const terminalOpen = useAppStore((state) => state.terminalOpen)
77
77
  const reviewOpen = useAppStore((state) => state.reviewOpen)
78
78
  const sidebarOpen = useAppStore((state) => state.sidebarOpen)
@@ -249,7 +249,7 @@ export function ChatPanel(): React.JSX.Element {
249
249
  <div className="flex min-h-0 flex-1 flex-col items-center justify-center overflow-y-auto px-4 py-10">
250
250
  <div className="mb-8 text-center">
251
251
  <img
252
- src={piLogo}
252
+ src={ymirMark}
253
253
  alt={PI_DESKTOP_PRODUCT_NAME}
254
254
  className="mx-auto mb-4 block h-14 w-14"
255
255
  />
@@ -15,7 +15,7 @@ import {
15
15
  Play,
16
16
  } from 'lucide-react'
17
17
  import { useAppStore } from '../store'
18
- import piLogo from '../assets/pi-logo.svg'
18
+ import ymirMark from '../assets/ymir-mark.svg'
19
19
  import { formatGitStatus } from './review-rail'
20
20
  import { StatsPanel } from './stats-panel'
21
21
  import type { GitFileStatus, SessionListItem } from '../../../shared/ipc-contracts'
@@ -344,7 +344,7 @@ function HomeScreenInfo(): React.JSX.Element {
344
344
  <PiErrorBanner />
345
345
 
346
346
  <div className="mb-6 flex flex-col items-center text-center">
347
- <img src={piLogo} alt={PI_DESKTOP_PRODUCT_NAME} className="h-16 w-16" />
347
+ <img src={ymirMark} alt={PI_DESKTOP_PRODUCT_NAME} className="h-16 w-16" />
348
348
  <h1 className="mt-4 text-2xl font-semibold text-primary">{PI_DESKTOP_PRODUCT_NAME}</h1>
349
349
  <p className="mt-1 text-sm text-dim">{t('home.subtitle')}</p>
350
350
  </div>
@@ -33,12 +33,12 @@ function buildTerminalTheme(): ITheme {
33
33
  background: bg,
34
34
  foreground: fg,
35
35
  cursor: fg,
36
- selectionBackground: v('--cm-selection-bg', '#3b82f666'),
36
+ selectionBackground: v('--cm-selection-bg', '#c9973f66'),
37
37
  black: bg,
38
38
  red: v('--color-error', '#ef4444'),
39
39
  green: v('--color-success', '#22c55e'),
40
40
  yellow: v('--color-warning', '#eab308'),
41
- blue: v('--color-accent', '#3b82f6'),
41
+ blue: v('--color-accent', '#c9973f'),
42
42
  magenta: v('--cm-keyword', '#a855f7'),
43
43
  cyan: v('--cm-link', '#06b6d4'),
44
44
  white: fg,
@@ -34,8 +34,8 @@
34
34
  --color-border: #262626;
35
35
  --color-border-strong: #404040;
36
36
  --color-border-strong-hover: #525252;
37
- --color-focus: #3b82f6;
38
- --color-accent: #2563eb;
37
+ --color-focus: #c9973f;
38
+ --color-accent: #c9973f;
39
39
  --color-accent-hover: #1d4ed8;
40
40
  --color-accent-fg: #60a5fa;
41
41
  --color-accent-bg: rgba(30, 58, 138, 0.3);
@@ -378,4 +378,5 @@
378
378
  at build time, so they can't live here. */
379
379
 
380
380
  /* The hearth — embers rising over the cloth. */
381
- .ember-bg { position: fixed; inset: 0; z-index: 0; pointer-events: none; opacity: 0.5; mix-blend-mode: screen; }
381
+ .ember-bg { position: fixed; inset: 0; z-index: -1; pointer-events: none; opacity: 0.55; mix-blend-mode: screen; }
382
+ html, body { background-color: var(--app, #0e0c09); }
@@ -1,26 +1,12 @@
1
1
  import type { ThemeFile } from '../../../shared/theme/theme-file'
2
2
  import { t } from '../../../shared/i18n'
3
3
  import { BUILTIN_THEME_IDS as SHARED_BUILTIN_THEME_IDS } from '../../../shared/theme/builtin-ids'
4
- import dark from './dark.json'
5
- import light from './light.json'
6
- import nord from './nord.json'
7
- import gruvbox from './gruvbox.json'
8
- import breezeDark from './breeze-dark.json'
9
- import breezeLight from './breeze-light.json'
10
- import breezeClaudius from './breeze-claudius.json'
11
4
  import sessrumnir from './sessrumnir.json'
12
5
  import fensalir from './fensalir.json'
13
6
 
14
7
  export const BUILTIN_THEMES: ReadonlyArray<{ id: string; file: ThemeFile }> = [
15
8
  { id: 'sessrumnir', file: sessrumnir as ThemeFile },
16
9
  { id: 'fensalir', file: fensalir as ThemeFile },
17
- { id: 'dark', file: dark as ThemeFile },
18
- { id: 'light', file: light as ThemeFile },
19
- { id: 'nord', file: nord as ThemeFile },
20
- { id: 'gruvbox', file: gruvbox as ThemeFile },
21
- { id: 'breeze-dark', file: breezeDark as ThemeFile },
22
- { id: 'breeze-light', file: breezeLight as ThemeFile },
23
- { id: 'breeze-claudius', file: breezeClaudius as ThemeFile },
24
10
  ]
25
11
 
26
12
  export const BUILTIN_THEME_IDS: readonly string[] = BUILTIN_THEMES.map((t) => t.id)
@@ -39,13 +25,6 @@ function isBuiltinThemeId(id: string): id is BuiltinThemeId {
39
25
  // permission-mode.ts's `getPermissionModeLabel`, extracts fine). An explicit
40
26
  // key per id keeps them extractable and typo-checked by tsc.
41
27
  const BUILTIN_THEME_NAME_KEYS = {
42
- dark: 'themes.builtin.dark',
43
- light: 'themes.builtin.light',
44
- nord: 'themes.builtin.nord',
45
- gruvbox: 'themes.builtin.gruvbox',
46
- 'breeze-dark': 'themes.builtin.breeze-dark',
47
- 'breeze-light': 'themes.builtin.breeze-light',
48
- 'breeze-claudius': 'themes.builtin.breeze-claudius',
49
28
  sessrumnir: 'themes.builtin.sessrumnir',
50
29
  fensalir: 'themes.builtin.fensalir',
51
30
  } as const satisfies Record<BuiltinThemeId, string>
@@ -11,7 +11,7 @@ export type ThemeKind = ThemeFile['kind']
11
11
  export type ThemeSettings = Pick<AppSettings, 'theme' | 'systemLightTheme' | 'systemDarkTheme'>
12
12
 
13
13
  export const SYSTEM_THEME_ID = 'system'
14
- const FALLBACK_THEME_ID = 'dark'
14
+ const FALLBACK_THEME_ID = 'fensalir'
15
15
  const DARK_SCHEME_QUERY = '(prefers-color-scheme: dark)'
16
16
  const SYSTEM_THEME_DEFAULTS: Readonly<Record<ThemeKind, string>> = {
17
17
  light: DEFAULT_SETTINGS.systemLightTheme,
@@ -7,5 +7,5 @@
7
7
  // those (separate process/bundle), so this module is the single shared
8
8
  // source of truth for just the id strings.
9
9
  export const BUILTIN_THEME_IDS = [
10
- 'dark', 'light', 'nord', 'gruvbox', 'breeze-dark', 'breeze-light', 'breeze-claudius', 'sessrumnir', 'fensalir',
10
+ 'sessrumnir', 'fensalir',
11
11
  ] as const
@@ -1,27 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="none">
2
- <!-- Charcoal rounded background -->
3
- <rect width="512" height="512" rx="77" fill="#36454F"/>
4
-
5
- <!-- Pi letterforms: official brand marks, scaled from 800 -> 512 -->
6
- <g transform="translate(5.5, 5.5) scale(0.62625)">
7
- <!-- P shape: outer boundary clockwise, inner hole counter-clockwise -->
8
- <path fill="#e67e22" fill-rule="evenodd" d="
9
- M165.29 165.29
10
- H517.36
11
- V400
12
- H400
13
- V517.36
14
- H282.65
15
- V634.72
16
- H165.29
17
- Z
18
- M282.65 282.65
19
- V400
20
- H400
21
- V282.65
22
- Z
23
- "/>
24
- <!-- i dot -->
25
- <path fill="#e67e22" d="M517.36 400 H634.72 V634.72 H517.36 Z"/>
26
- </g>
27
- </svg>