@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 +8 -15
- package/out/renderer/assets/{index-DbCaU2eq.js → index-BvfL-Umc.js} +13 -128
- package/out/renderer/assets/{index-DL2o01yM.css → index-W51edCEX.css} +20 -11
- package/out/renderer/assets/ymir-mark-kY-7e1x6.svg +55 -0
- package/out/renderer/index.html +3 -3
- package/package.json +1 -1
- package/resources/locales/en/translation.json +6 -6
- package/src/main/workspace-manager.ts +1 -1
- package/src/renderer/index.html +1 -1
- package/src/renderer/src/app.tsx +1 -1
- package/src/renderer/src/assets/ymir-mark.svg +55 -0
- package/src/renderer/src/components/chat-panel.tsx +3 -3
- package/src/renderer/src/components/home-screen.tsx +2 -2
- package/src/renderer/src/components/terminal.tsx +2 -2
- package/src/renderer/src/index.css +4 -3
- package/src/renderer/src/themes/index.ts +0 -21
- package/src/renderer/src/utils/theme.ts +1 -1
- package/src/shared/theme/builtin-ids.ts +1 -1
- package/out/renderer/assets/pi-logo-B48rElrT.svg +0 -27
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": "
|
|
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": "
|
|
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": "
|
|
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
|
-
"#
|
|
3213
|
-
"#
|
|
3214
|
-
"#
|
|
3215
|
-
"#
|
|
3216
|
-
"#
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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 = "
|
|
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.
|
|
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", "#
|
|
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", "#
|
|
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
|
|
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) ?? "
|
|
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:
|
|
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:
|
|
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
|
|
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: #
|
|
488
|
-
--color-accent: #
|
|
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: #
|
|
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: #
|
|
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: #
|
|
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: #
|
|
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: #
|
|
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: #
|
|
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: #
|
|
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:
|
|
4115
|
+
z-index: -1;
|
|
4111
4116
|
pointer-events: none;
|
|
4112
|
-
opacity: .
|
|
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>
|
package/out/renderer/index.html
CHANGED
|
@@ -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/
|
|
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-
|
|
14
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
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
|
@@ -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": "
|
|
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
|
|
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": "
|
|
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": "
|
|
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
|
+
}
|
package/src/renderer/index.html
CHANGED
|
@@ -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/
|
|
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>
|
package/src/renderer/src/app.tsx
CHANGED
|
@@ -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
|
|
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
|
|
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) ?? '
|
|
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={
|
|
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
|
|
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={
|
|
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', '#
|
|
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', '#
|
|
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: #
|
|
38
|
-
--color-accent: #
|
|
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:
|
|
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 = '
|
|
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
|
-
'
|
|
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>
|