@zerwiz/sessrumnir 0.1.8-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/LICENSE +200 -0
  2. package/README.md +329 -0
  3. package/bin/sessrumnir-web.sh +117 -0
  4. package/bin/sessrumnir.js +169 -0
  5. package/out/main/index.js +10850 -0
  6. package/out/preload/index.js +719 -0
  7. package/out/renderer/assets/cormorant-cyrillic-400-normal-C8QS47vb.woff2 +0 -0
  8. package/out/renderer/assets/cormorant-cyrillic-400-normal-D3EsxgFc.woff +0 -0
  9. package/out/renderer/assets/cormorant-cyrillic-500-normal-B7dJQtg-.woff +0 -0
  10. package/out/renderer/assets/cormorant-cyrillic-500-normal-BLlg2W5x.woff2 +0 -0
  11. package/out/renderer/assets/cormorant-cyrillic-600-normal-BcIsDXzC.woff2 +0 -0
  12. package/out/renderer/assets/cormorant-cyrillic-600-normal-CBymlcNF.woff +0 -0
  13. package/out/renderer/assets/cormorant-cyrillic-ext-400-normal-Bgrpe4p1.woff +0 -0
  14. package/out/renderer/assets/cormorant-cyrillic-ext-400-normal-BlcaxZtM.woff2 +0 -0
  15. package/out/renderer/assets/cormorant-cyrillic-ext-500-normal-CdQuyvtc.woff +0 -0
  16. package/out/renderer/assets/cormorant-cyrillic-ext-500-normal-pZw22qtS.woff2 +0 -0
  17. package/out/renderer/assets/cormorant-cyrillic-ext-600-normal-Dr-wLyOm.woff +0 -0
  18. package/out/renderer/assets/cormorant-cyrillic-ext-600-normal-dLR2-a_v.woff2 +0 -0
  19. package/out/renderer/assets/cormorant-latin-400-normal-BGH8Vunh.woff2 +0 -0
  20. package/out/renderer/assets/cormorant-latin-400-normal-C3_-2Ua-.woff +0 -0
  21. package/out/renderer/assets/cormorant-latin-500-normal-Dj3SQ6fR.woff +0 -0
  22. package/out/renderer/assets/cormorant-latin-500-normal-EBdSCOD3.woff2 +0 -0
  23. package/out/renderer/assets/cormorant-latin-600-normal-B254Xisw.woff2 +0 -0
  24. package/out/renderer/assets/cormorant-latin-600-normal-DUW-TI76.woff +0 -0
  25. package/out/renderer/assets/cormorant-latin-ext-400-normal-DuQ88yz3.woff2 +0 -0
  26. package/out/renderer/assets/cormorant-latin-ext-400-normal-DuXFa1Dr.woff +0 -0
  27. package/out/renderer/assets/cormorant-latin-ext-500-normal-AH9qog1s.woff2 +0 -0
  28. package/out/renderer/assets/cormorant-latin-ext-500-normal-DAuUCO41.woff +0 -0
  29. package/out/renderer/assets/cormorant-latin-ext-600-normal-CD-dlDpD.woff +0 -0
  30. package/out/renderer/assets/cormorant-latin-ext-600-normal-D3T6BBXG.woff2 +0 -0
  31. package/out/renderer/assets/cormorant-vietnamese-400-normal-C-RiYxEf.woff2 +0 -0
  32. package/out/renderer/assets/cormorant-vietnamese-400-normal-DmUuA7Y2.woff +0 -0
  33. package/out/renderer/assets/cormorant-vietnamese-500-normal-DsPuwQHi.woff2 +0 -0
  34. package/out/renderer/assets/cormorant-vietnamese-500-normal-tGBW_mI7.woff +0 -0
  35. package/out/renderer/assets/cormorant-vietnamese-600-normal-Dar_cCT6.woff2 +0 -0
  36. package/out/renderer/assets/cormorant-vietnamese-600-normal-GIs8CF2x.woff +0 -0
  37. package/out/renderer/assets/ibm-plex-mono-cyrillic-300-normal-Ba-HN6uq.woff +0 -0
  38. package/out/renderer/assets/ibm-plex-mono-cyrillic-300-normal-ByB2hQUF.woff2 +0 -0
  39. package/out/renderer/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  40. package/out/renderer/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  41. package/out/renderer/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff +0 -0
  42. package/out/renderer/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2 +0 -0
  43. package/out/renderer/assets/ibm-plex-mono-cyrillic-ext-300-normal-B8O3uHbr.woff +0 -0
  44. package/out/renderer/assets/ibm-plex-mono-cyrillic-ext-300-normal-BbtBtHoB.woff2 +0 -0
  45. package/out/renderer/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  46. package/out/renderer/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  47. package/out/renderer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff +0 -0
  48. package/out/renderer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2 +0 -0
  49. package/out/renderer/assets/ibm-plex-mono-latin-300-normal-BPU54Tw3.woff +0 -0
  50. package/out/renderer/assets/ibm-plex-mono-latin-300-normal-BRS-C4KA.woff2 +0 -0
  51. package/out/renderer/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  52. package/out/renderer/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  53. package/out/renderer/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  54. package/out/renderer/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  55. package/out/renderer/assets/ibm-plex-mono-latin-ext-300-normal-BEtQ2wm2.woff2 +0 -0
  56. package/out/renderer/assets/ibm-plex-mono-latin-ext-300-normal-CQbCaAQ4.woff +0 -0
  57. package/out/renderer/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  58. package/out/renderer/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  59. package/out/renderer/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2 +0 -0
  60. package/out/renderer/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff +0 -0
  61. package/out/renderer/assets/ibm-plex-mono-vietnamese-300-normal-B6fSpYYV.woff +0 -0
  62. package/out/renderer/assets/ibm-plex-mono-vietnamese-300-normal-CpdbWO_2.woff2 +0 -0
  63. package/out/renderer/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  64. package/out/renderer/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  65. package/out/renderer/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff +0 -0
  66. package/out/renderer/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2 +0 -0
  67. package/out/renderer/assets/index-CgJYtdL8.js +97387 -0
  68. package/out/renderer/assets/index-CyRDW9WV.css +4824 -0
  69. package/out/renderer/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  70. package/out/renderer/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  71. package/out/renderer/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  72. package/out/renderer/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  73. package/out/renderer/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  74. package/out/renderer/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  75. package/out/renderer/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  76. package/out/renderer/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  77. package/out/renderer/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  78. package/out/renderer/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  79. package/out/renderer/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  80. package/out/renderer/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  81. package/out/renderer/assets/newsreader-latin-ext-wght-italic-DFS986qL.woff2 +0 -0
  82. package/out/renderer/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  83. package/out/renderer/assets/newsreader-latin-wght-italic-Bxi8ein9.woff2 +0 -0
  84. package/out/renderer/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  85. package/out/renderer/assets/newsreader-vietnamese-wght-italic-xAqemagA.woff2 +0 -0
  86. package/out/renderer/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  87. package/out/renderer/assets/openmoji-color-9qo_2DLG.woff2 +0 -0
  88. package/out/renderer/assets/pi-logo-8LswgQgB.svg +17 -0
  89. package/out/renderer/index.html +19 -0
  90. package/out/renderer/theme-boot.js +30 -0
  91. package/out/shared/src/shared/tsconfig.tsbuildinfo +1 -0
  92. package/package.json +183 -0
  93. package/resources/icons/generate_icons.py +38 -0
  94. package/resources/icons/icon-128.png +0 -0
  95. package/resources/icons/icon-16.png +0 -0
  96. package/resources/icons/icon-256.png +0 -0
  97. package/resources/icons/icon-32.png +0 -0
  98. package/resources/icons/icon-48.png +0 -0
  99. package/resources/icons/icon-512.png +0 -0
  100. package/resources/icons/icon-64.png +0 -0
  101. package/resources/icons/icon.icns +0 -0
  102. package/resources/icons/icon.ico +0 -0
  103. package/resources/icons/icon.png +0 -0
  104. package/resources/icons/icon.svg +55 -0
  105. package/resources/linux/after-install.sh +23 -0
  106. package/resources/linux/after-remove.sh +18 -0
  107. package/resources/locales/en/translation.json +1735 -0
  108. package/resources/permission-prompt-text.test.ts +111 -0
  109. package/resources/permission-prompt-text.ts +84 -0
  110. package/resources/permission-rules.test.ts +351 -0
  111. package/resources/permission-rules.ts +293 -0
  112. package/resources/pi-desktop-permissions.ts +62 -0
  113. package/resources/ymir-sessrumnir.desktop.in +12 -0
@@ -0,0 +1,1735 @@
1
+ {
2
+ "activity": {
3
+ "completed": "Finished in the background",
4
+ "completedInAnotherWorkspace": "Finished in the background in another workspace",
5
+ "failed": "Stopped with an error",
6
+ "failedInAnotherWorkspace": "Stopped with an error in another workspace",
7
+ "working": "Pi is working",
8
+ "workingInAnotherWorkspace": "Pi is working in another workspace"
9
+ },
10
+ "app": {
11
+ "dropFolder": {
12
+ "description": "Opens that folder as a workspace (creates one if needed)",
13
+ "title": "Drop folder to open as project"
14
+ },
15
+ "errorBoundary": {
16
+ "fallback": "Failed to render content"
17
+ },
18
+ "quit": "Quit Pi Desktop",
19
+ "resizeHandle": {
20
+ "title": "Drag to resize"
21
+ },
22
+ "updateBanner": {
23
+ "available": "Pi Desktop <strong>v{{latestVersion}}</strong> is available — you're on v{{currentVersion}}.",
24
+ "dismissAriaLabel": "Dismiss update notification",
25
+ "downloadButton": "Download"
26
+ }
27
+ },
28
+ "chat": {
29
+ "attach": {
30
+ "allFilesFilter": "All Files",
31
+ "attachFailed": "Could not attach file",
32
+ "imagesFilter": "Images",
33
+ "onlyImagesPasted": "Only images can be pasted into the composer",
34
+ "pasteFailed": "Could not paste image",
35
+ "readImageFailed": "Could not read image data",
36
+ "unknownMimeType": "unknown",
37
+ "unsupportedImageType": "Unsupported image type ({{mimeType}}). Use PNG, JPEG, GIF, or WebP."
38
+ },
39
+ "closeFileTree": "Close file tree",
40
+ "commandPopup": {
41
+ "selectHint": "↑↓ navigate · Enter/Tab select · Esc close"
42
+ },
43
+ "composer": {
44
+ "placeholderIdle": "Ask {{agent}} anything — / for commands",
45
+ "placeholderNotRunning": "{{agent}} agent is not running...",
46
+ "placeholderSteering": "Type to steer the agent...",
47
+ "shiftEnterNewline": "Shift+Enter newline",
48
+ "streaming": "Streaming…"
49
+ },
50
+ "council": {
51
+ "planWithCouncil": "Plan with Council",
52
+ "startEngineFirst": "Start Pi/OMP before planning with Council"
53
+ },
54
+ "emptyState": {
55
+ "chooseProject": "Choose a project — {{agent}} starts when you send.",
56
+ "pickProject": "Pick a project and describe what you want done.",
57
+ "startFailed": "Failed to start {{agent}}. Check settings.",
58
+ "starting": "Starting {{agent}} agent…",
59
+ "title": "What should {{agent}} work on?",
60
+ "waitingOnEngine": "{{agent}} is up — waiting for the engine to finish loading. Local models can take a while…"
61
+ },
62
+ "extensionUi": {
63
+ "editFallbackTitle": "Edit",
64
+ "hideForNowWithShortcut": "Hide for now ({{shortcut}})",
65
+ "inputFallbackTitle": "Input",
66
+ "notificationFallback": "Notification",
67
+ "selectFallbackTitle": "Select",
68
+ "showWithShortcut": "Show ({{shortcut}})",
69
+ "waitingForAnswer": "Pi is waiting for an answer"
70
+ },
71
+ "insertNote": {
72
+ "ariaLabel": "Insert note",
73
+ "titleWithShortcut": "Insert note (Ctrl+Shift+P)"
74
+ },
75
+ "loadingSession": "Loading session…",
76
+ "mentionPopup": {
77
+ "insertHint": "↑↓ navigate · Enter/Tab insert path · Esc close"
78
+ },
79
+ "message": {
80
+ "branchedFrom": "Branched from: \"{{excerpt}}\"",
81
+ "branchFromHere": "Branch from here",
82
+ "editAndResend": "Edit & resend"
83
+ },
84
+ "projectPicker": {
85
+ "noProject": "No project",
86
+ "noProjectHomeDirectory": "No project — home directory",
87
+ "openFolder": "Open folder…",
88
+ "yourHomeDirectory": "Your home directory"
89
+ },
90
+ "reattached": {
91
+ "responseWillAppear": "The response appears here the moment it finishes.",
92
+ "stillWorking": "{{agent}} is still working in this session."
93
+ },
94
+ "scrollToBottom": "Scroll to bottom",
95
+ "search": {
96
+ "closeWithShortcut": "Close (Esc)",
97
+ "nextMatch": "Next match (Enter)",
98
+ "placeholder": "Find in page",
99
+ "previousMatch": "Previous match (Shift+Enter)"
100
+ },
101
+ "searchWorkspace": {
102
+ "ariaLabel": "Search workspace",
103
+ "titleWithShortcut": "Search workspace (Ctrl+Shift+F)"
104
+ },
105
+ "sendButton": {
106
+ "ariaLabel": "Send message",
107
+ "titleWithShortcut": "Send (Enter)"
108
+ },
109
+ "startingAgent": "Starting agent…",
110
+ "stopButton": {
111
+ "ariaLabel": "Stop generating",
112
+ "titleWithShortcut": "Stop (Esc)"
113
+ },
114
+ "subagentProgress": {
115
+ "done_one": "{{count}} subagent done",
116
+ "done_other": "{{count}} subagents done",
117
+ "running_one": "{{count}} subagent running",
118
+ "running_other": "{{count}} subagents running"
119
+ },
120
+ "svgBlock": {
121
+ "renderedSvgAlt": "Rendered SVG",
122
+ "renderSvg": "Render SVG",
123
+ "viewSource": "View source"
124
+ },
125
+ "toolbar": {
126
+ "diffViewer": "Diff viewer",
127
+ "fileTree": "File tree",
128
+ "reviewPanel": "Review panel",
129
+ "terminal": "Terminal",
130
+ "ymir": "Ymir"
131
+ },
132
+ "toolCall": {
133
+ "status": {
134
+ "done": "done",
135
+ "error": "error",
136
+ "running": "running"
137
+ }
138
+ },
139
+ "waitingForResponse": "Waiting for response..."
140
+ },
141
+ "commandGroups": {
142
+ "commands": "Commands",
143
+ "extensions": "Extensions",
144
+ "other": "Other",
145
+ "prompts": "Prompts"
146
+ },
147
+ "commands": {
148
+ "clone": {
149
+ "description": "Clone the current branch into a new session"
150
+ },
151
+ "compact": {
152
+ "description": "Compact the conversation to free up context"
153
+ },
154
+ "fork": {
155
+ "description": "Open Branches to fork from a message"
156
+ },
157
+ "new": {
158
+ "description": "Start a new session"
159
+ },
160
+ "resume": {
161
+ "description": "Open the Sessions list"
162
+ },
163
+ "settings": {
164
+ "description": "Open Settings"
165
+ },
166
+ "task": {
167
+ "description": "Launch a task in a new Pi session"
168
+ }
169
+ },
170
+ "commandSources": {
171
+ "builtin": "builtin",
172
+ "extension": "extension",
173
+ "prompt": "prompt",
174
+ "skill": "skill"
175
+ },
176
+ "common": {
177
+ "attachFile": "Attach file",
178
+ "cancel": "Cancel",
179
+ "changedFilesHeading": "Changed Files",
180
+ "close": "Close",
181
+ "collapse": "Collapse",
182
+ "confirm": "Confirm",
183
+ "copied": "Copied",
184
+ "copy": "Copy",
185
+ "cut": "Cut",
186
+ "delete": "Delete",
187
+ "dismiss": "Dismiss",
188
+ "export": "Export",
189
+ "global": "Global",
190
+ "hideSidebar": "Hide sidebar",
191
+ "import": "Import",
192
+ "install": "Install",
193
+ "installed": "Installed",
194
+ "loading": "Loading…",
195
+ "moreCount_one": "+{{count}} more",
196
+ "moreCount_other": "+{{count}} more",
197
+ "newSession": "New Session",
198
+ "no": "no",
199
+ "noWorkingTreeChanges": "No working tree changes.",
200
+ "paste": "Paste",
201
+ "project": "Project",
202
+ "refresh": "Refresh",
203
+ "remove": "Remove",
204
+ "retry": "Retry",
205
+ "save": "Save",
206
+ "selectAll": "Select All",
207
+ "send": "Send",
208
+ "settings": "Settings",
209
+ "showSidebar": "Show sidebar",
210
+ "skills": "Skills",
211
+ "submit": "Submit",
212
+ "thinking": "Thinking",
213
+ "workflowRuns": "Workflow runs",
214
+ "yes": "yes"
215
+ },
216
+ "composer": {
217
+ "permissionMenu": {
218
+ "title": "Permissions"
219
+ }
220
+ },
221
+ "contextMenu": {
222
+ "addMessageToNotes": "Add Message to Notes",
223
+ "addSelectionToNotes": "Add Selection to Notes",
224
+ "archive": "Archive",
225
+ "copyAllVisibleText": "Copy All Visible Text",
226
+ "copyCodeBlock": "Copy Code Block",
227
+ "copyLink": "Copy Link",
228
+ "copyMessage": "Copy Message",
229
+ "copySelection": "Copy Selection",
230
+ "deleteSessionConfirmMessage": "Delete session \"{{name}}\"?\n\nWill use the system 'trash' CLI if installed (recoverable); otherwise the .jsonl session file is permanently removed.",
231
+ "deleteSessionConfirmTitle": "Delete session",
232
+ "deleteSessionLabel": "Delete…",
233
+ "openLink": "Open Link",
234
+ "openSession": "Open Session",
235
+ "rename": "Rename…",
236
+ "searchSelection": "Search Selection",
237
+ "shortcuts": {
238
+ "copy": "Ctrl+C",
239
+ "copyCodeBlock": "Ctrl+Shift+C",
240
+ "cut": "Ctrl+X",
241
+ "paste": "Ctrl+V",
242
+ "selectAll": "Ctrl+A"
243
+ },
244
+ "unarchive": "Unarchive",
245
+ "workflowRuns": "Workflow Runs"
246
+ },
247
+ "conveyor": {
248
+ "branchStatusClean": "{{branch}}",
249
+ "branchStatusDirty_one": "{{branch}} · {{count}} changed",
250
+ "branchStatusDirty_other": "{{branch}} · {{count}} changed",
251
+ "commit": "Commit",
252
+ "commitButtonTitle": "Commit staged changes or changes in this workspace",
253
+ "createPrButton": "Create PR",
254
+ "detachedBranch": "detached",
255
+ "dialog": {
256
+ "baseBranchLabel": "Base branch",
257
+ "baseBranchPlaceholder": "Leave blank for repository default",
258
+ "closeAriaLabel": "Close dialog",
259
+ "commitMessageLabel": "Commit message",
260
+ "commitTitle": "Commit changes",
261
+ "descriptionLabel": "Description",
262
+ "prTitle": "Create pull request",
263
+ "titleLabel": "Title"
264
+ },
265
+ "errors": {
266
+ "branchRequired": "A named branch is required to create a pull request.",
267
+ "commitBeforePr": "Commit changes before creating a pull request.",
268
+ "commitBeforePush": "Commit the working tree before pushing.",
269
+ "commitMessageRequired": "Commit message is required.",
270
+ "prTitleRequired": "Pull request title is required.",
271
+ "pushBeforePr": "Push the branch before creating a pull request."
272
+ },
273
+ "feedback": {
274
+ "branchPushed": "Branch pushed.",
275
+ "committed": "Committed {{sha}}.",
276
+ "prCreated": "Pull request created.",
277
+ "prCreatedWithUrl": "Pull request created: {{url}}",
278
+ "pushedCommits_one": "Pushed {{count}} commit.",
279
+ "pushedCommits_other": "Pushed {{count}} commits."
280
+ },
281
+ "prButtonLabel": "PR",
282
+ "prButtonTitle": "Create a pull request with GitHub CLI",
283
+ "push": "Push",
284
+ "pushButtonTitle": "Push the current branch after confirmation",
285
+ "pushConfirm": {
286
+ "branchNameFallback": "current branch",
287
+ "currentBranchFallback": "the current branch",
288
+ "message": "Push {{branch}} to {{target}}?",
289
+ "remoteFallback": "remote",
290
+ "title": "Push branch?"
291
+ }
292
+ },
293
+ "council": {
294
+ "consensusPlan": {
295
+ "heading": "Consensus plan",
296
+ "implementButton": "Implement this",
297
+ "reviseButton": "Revise",
298
+ "reviseInputPlaceholder": "Request changes to the plan…"
299
+ },
300
+ "header": "Council planning — {{phase}}",
301
+ "phase": {
302
+ "awaitingApproval": "awaiting-approval",
303
+ "consulting": "consulting",
304
+ "detecting": "detecting",
305
+ "merging": "merging",
306
+ "refused": "refused"
307
+ },
308
+ "status": {
309
+ "contributed": "contributed",
310
+ "errored": "errored",
311
+ "merging": "merging…",
312
+ "readyForReview": "ready for review",
313
+ "streaming": "streaming…",
314
+ "timedOut": "timed out",
315
+ "working": "working…"
316
+ }
317
+ },
318
+ "customModels": {
319
+ "addModelButton": "Add model",
320
+ "addProviderButton": "Add provider",
321
+ "apiKeyPlaceholder": "apiKey — literal, $ENV_VAR, or !shell-command",
322
+ "baseUrlPlaceholder": "baseUrl",
323
+ "capabilityHint": "Heads-up: imported models may load without capability flags set. If a model supports thinking, tick <reasoning>reasoning</reasoning>; if it accepts images, tick <vision>vision</vision>. Restart {{engine}} to apply.",
324
+ "contextWindowLabel": "ctx",
325
+ "defaultFileName": "models file",
326
+ "description": "Custom providers and models in <code>{{path}}</code>. Applied when {{engine}} restarts.",
327
+ "errors": {
328
+ "duplicateKeys": "Provider keys must be unique",
329
+ "emptyKey": "Every provider needs a non-empty key",
330
+ "saveFailed": "Save failed"
331
+ },
332
+ "loadError": {
333
+ "message": "Could not load {{fileName}} safely, so editing is disabled to avoid overwriting it."
334
+ },
335
+ "maxTokensLabel": "max",
336
+ "modelIdPlaceholder": "model id (required)",
337
+ "modelNamePlaceholder": "name",
338
+ "providerKeyPlaceholder": "provider-key (e.g. ollama)",
339
+ "reasoningLabel": "reasoning",
340
+ "removeModelTitle": "Remove model",
341
+ "removeProviderTitle": "Remove provider",
342
+ "saveButton": "Save {{fileName}}",
343
+ "savedRestartButton": "Saved — Restart {{engine}} to apply",
344
+ "supportsReasoningEffortLabel": "supports reasoning effort",
345
+ "visionLabel": "vision"
346
+ },
347
+ "diagnostics": {
348
+ "fields": {
349
+ "appVersion": "App version",
350
+ "binaryFound": "Binary found",
351
+ "chromium": "Chromium",
352
+ "electron": "Electron",
353
+ "engineVersion": "{{agent}} version",
354
+ "globalRules": "Global rules",
355
+ "globalRulesInvalid": "invalid file: {{error}}",
356
+ "guiDataDir": "GUI data dir",
357
+ "mode": "Mode",
358
+ "needsShell": "Needs shell",
359
+ "node": "Node",
360
+ "nodeBinary": "Node binary",
361
+ "pathEntriesSearched": "PATH entries searched",
362
+ "platform": "Platform",
363
+ "rejectedOverride": "Configured path ignored (does not exist): {{path}}",
364
+ "resolutionSource": "Resolution source",
365
+ "script": "Script",
366
+ "sessionsRoot": "Sessions root",
367
+ "settingsFile": "Settings file",
368
+ "unknownError": "unknown error",
369
+ "unknownVersion": "unknown",
370
+ "workspaceRules": "Workspace rules",
371
+ "workspaceRulesNone": "none",
372
+ "workspaceRulesPresent": "present",
373
+ "workspaceRulesPresentWithAllowRules": "present, has allow rules",
374
+ "workspaceTrust": "Workspace trust"
375
+ },
376
+ "keyState": {
377
+ "envMissing": "env var missing",
378
+ "envSet": "env var set",
379
+ "literal": "key configured",
380
+ "none": "no key",
381
+ "shell": "shell command"
382
+ },
383
+ "loadErrorTitle": "Couldn't build the report",
384
+ "noCustomProviders": "No custom providers configured (models.json).",
385
+ "noRecentErrors": "No warnings or errors recorded this run.",
386
+ "noWorkspaces": "No workspaces.",
387
+ "providerModelCount_one": "{{count}} model",
388
+ "providerModelCount_other": "{{count}} models",
389
+ "refreshAriaLabel": "Refresh diagnostics",
390
+ "resolutionSource": {
391
+ "commonLocation": "Common install location",
392
+ "engineInstall": "{{agent}} install location",
393
+ "fallback": "Fallback (not found)",
394
+ "npmPrefix": "npm global prefix",
395
+ "override": "Configured path",
396
+ "path": "PATH",
397
+ "versionManager": "Version manager"
398
+ },
399
+ "sections": {
400
+ "application": "Application",
401
+ "binaryTitle": "{{agent}} Binary",
402
+ "permissions": "Permissions",
403
+ "providers": "Providers",
404
+ "recentErrors": "Recent Errors",
405
+ "storage": "Storage",
406
+ "workspaces": "Workspaces"
407
+ },
408
+ "title": "Diagnostics",
409
+ "workspaceNotTrustedBadge": "not trusted",
410
+ "workspacePathMissing": "missing",
411
+ "workspaceTrustedBadge": "trusted"
412
+ },
413
+ "dialogs": {
414
+ "openFolder": {
415
+ "title": "Open Folder"
416
+ },
417
+ "openProject": {
418
+ "title": "Open Project"
419
+ },
420
+ "permissionRules": {
421
+ "exportTitle": "Export Permission Rules",
422
+ "fileFilterName": "Permission Rules",
423
+ "importTitle": "Import Permission Rules"
424
+ },
425
+ "selectWorkspaceFolder": {
426
+ "title": "Select Workspace Folder"
427
+ },
428
+ "theme": {
429
+ "exportTitle": "Export Theme",
430
+ "fileFilterName": "Theme",
431
+ "importTitle": "Import Theme"
432
+ }
433
+ },
434
+ "diff": {
435
+ "closeAriaLabel": "Close diff viewer",
436
+ "deletedFileBadge": "DELETED",
437
+ "fileCount_one": "{{count}} file",
438
+ "fileCount_other": "{{count}} files",
439
+ "heading": "Diff Viewer",
440
+ "loadErrorTitle": "Couldn't load the diff",
441
+ "newFileBadge": "NEW",
442
+ "noChanges": "No changes",
443
+ "noStagedChanges": "No staged changes",
444
+ "refreshAriaLabel": "Refresh diff",
445
+ "stagedToggle": "Staged",
446
+ "workingToggle": "Working",
447
+ "workingTreeClean": "Working tree is clean"
448
+ },
449
+ "editorGuard": {
450
+ "discard": "Discard unsaved changes?",
451
+ "discardButton": "Discard changes",
452
+ "discardFile": "Discard unsaved changes to {{fileName}}?",
453
+ "keepEditing": "Keep editing",
454
+ "title": "Unsaved changes"
455
+ },
456
+ "errors": {
457
+ "attachments": {
458
+ "pathNotPermitted": "Attachment path is not permitted",
459
+ "tooLarge": "Attachment is too large (max {{limit}} MB)"
460
+ },
461
+ "council": {
462
+ "arbiterFailed": "Arbiter failed",
463
+ "arbiterTimedOut": "Arbiter timed out",
464
+ "notEnoughMembers": "Council needs at least {{min}} agents. Install or enable Pi, Claude, or Codex, or turn the council off.",
465
+ "planningDisabled": "Council planning is disabled in Settings.",
466
+ "timeoutNotNumber": "Council timeout must be a finite number",
467
+ "timeoutRange": "Council timeout must be between {{min}} and {{max}} seconds",
468
+ "unknownConsensusMode": "Unknown consensus mode: {{mode}}",
469
+ "unknownError": "unknown error"
470
+ },
471
+ "fileService": {
472
+ "refusedRead": "Refusing to read outside the active workspace",
473
+ "refusedWrite": "Refusing to write outside the active workspace"
474
+ },
475
+ "fs": {
476
+ "blockedWrite": "Could not write \"{{path}}\" ({{code}}). On Windows this is usually Controlled Folder Access (Ransomware protection) blocking the change. Either allow Pi Desktop in Windows Security → Virus & threat protection → Ransomware protection → \"Allow an app through Controlled folder access\", or move this project out of Documents/Desktop to an unprotected folder (for example C:\\dev)."
477
+ },
478
+ "git": {
479
+ "commandFailed": "{{command}} failed",
480
+ "commandFailedWithDetail": "{{command}} failed: {{detail}}",
481
+ "commitBeforePullRequest": "Commit the working tree before creating a pull request",
482
+ "commitBeforePush": "Commit the working tree before pushing",
483
+ "commitMessageRequired": "Commit message is required",
484
+ "commitMessageTooLong": "Commit message must be {{max}} characters or fewer",
485
+ "detachedHeadCommit": "Cannot commit from a detached HEAD",
486
+ "detachedHeadPush": "Cannot push from a detached HEAD",
487
+ "namedBranchRequired": "A named branch is required to create a pull request",
488
+ "noTrackedChanges": "No tracked changes to commit in this workspace. Stage untracked files first to include them.",
489
+ "operationInProgressCommit": "Cannot commit while a Git {{operation}} is in progress",
490
+ "operationInProgressPush": "Cannot push while a Git {{operation}} is in progress",
491
+ "pullRequestTitleRequired": "Pull request title is required",
492
+ "pushBeforePullRequest": "Push the branch before creating a pull request",
493
+ "pushUpstreamIsLocal": "Cannot push a branch whose upstream is the local repository",
494
+ "stagedOutsideWorkspace": "The index contains staged files outside the active workspace",
495
+ "subprocessTimedOut": "{{command}} timed out",
496
+ "workingTreeClean": "Working tree is clean"
497
+ },
498
+ "models": {
499
+ "duplicateModelId": "Provider \"{{key}}\": duplicate model id \"{{id}}\"",
500
+ "fieldNotFiniteNumber": "Provider \"{{key}}\", model \"{{id}}\": {{field}} must be a finite number",
501
+ "modelMissingId": "Provider \"{{key}}\": a model is missing an id",
502
+ "providerKeyEmpty": "Provider key must not be empty"
503
+ },
504
+ "notes": {
505
+ "bodyRequired": "Note body is required",
506
+ "notFound": "Note not found: {{id}}",
507
+ "titleRequired": "Note title is required"
508
+ },
509
+ "packages": {
510
+ "invalidSpec": "Invalid package specification",
511
+ "listFailed": "Could not read the OMP plugin list: {{detail}}",
512
+ "missingBun": "OMP needs bun to install or update npm plugins. Install bun from https://bun.sh, then try again.",
513
+ "pinnedOrNotFromNpm": "{{spec}} is pinned or was not installed from npm, so it cannot be updated here."
514
+ },
515
+ "permissionRules": {
516
+ "fileTooLarge": "rules file too large (limit {{limit}} bytes)"
517
+ },
518
+ "pi": {
519
+ "commandFailedFallback": "Command failed",
520
+ "commandTimedOut": "Command {{commandType}} timed out after {{timeoutMs}}ms",
521
+ "configuredPathMissing": "The Pi executable path set in {{settingsHint}} does not exist:\n {{path}}\n\nPoint it at Pi's cli.js (or its install directory), or clear the field to auto-detect. Auto-detection also found nothing.\n\n{{installHint}}",
522
+ "crashedBeforeReady": "Pi crashed before becoming ready.",
523
+ "cwdMissing": "Pi working directory does not exist or is not a directory:\n {{cwd}}",
524
+ "exitedBeforeReady": "Pi exited with code {{code}} before becoming ready.",
525
+ "failedToCreateManager": "Failed to create Pi manager",
526
+ "installHint": "Install Pi with:\n {{npmCommand}}\nor install OMP with:\n {{bunCommand}}",
527
+ "nodeNotFound": "Node binary not found at resolved path:\n {{node}}\n\nPi's .js entry point requires Node. Install Node from https://nodejs.org or set the NODE env var to your Node binary path.",
528
+ "noManagerForWorkspace": "No Pi manager for workspace",
529
+ "notFound": "Pi binary not found. Searched the login shell PATH, npm's global prefix, node version managers (nvm, fnm, volta, asdf, mise, nodenv, n) and common install locations.\n\n{{installHint}}\n\nAlready installed? Set the full path to Pi's cli.js in {{settingsHint}}.",
530
+ "processExited": "Pi process exited",
531
+ "processKilled": "Pi process killed",
532
+ "processNotRunning": "Pi process is not running",
533
+ "settingsHint": "Settings > Agent Configuration > Agent Installation",
534
+ "spawnError": "Spawn error: {{detail}}",
535
+ "startupTimeoutBusy": "Pi started but did not become ready within {{seconds}}s.\n\nPi was alive and producing output, but never answered the readiness check. Extension startup hooks run before Pi reads commands, and a hook that calls a local model server can wait this long while the model loads or prefills a large prompt. Check the engine and model-server logs, then retry.",
536
+ "startupTimeoutBusyWithStderr": "{{message}}\n\nPi stderr captured during startup:\n{{detail}}",
537
+ "startupTimeoutSilentNoOutput": "Pi produced no output within {{seconds}}s.\n\nNo output captured. Check the app log for the exact spawn command, and try running `pi --mode rpc` directly in a terminal.",
538
+ "startupTimeoutSilentWithStderr": "Pi produced no output within {{seconds}}s.\n\nPi stderr captured during startup:\n{{detail}}"
539
+ },
540
+ "session": {
541
+ "alreadyAttached": "Session file is already attached to a live runtime",
542
+ "attachedToDifferentWorkspace": "Session is already attached to a different workspace runtime",
543
+ "ompNoClone": "The OMP engine does not support cloning a session",
544
+ "pathMustExist": "{{field}} must point to an existing Pi session file",
545
+ "projectMismatch": "Session project does not match the active workspace",
546
+ "runtimeNotFound": "Session runtime not found: {{runtimeId}}"
547
+ },
548
+ "system": {
549
+ "externalUrlHttpOnly": "Only http(s) URLs are allowed"
550
+ },
551
+ "theme": {
552
+ "downloadFailed": "theme download failed: {{status}}",
553
+ "exportWriteFailed": "Could not write theme to {{path}}",
554
+ "fileTooLarge": "theme file too large (limit {{limit}} bytes)",
555
+ "galleryIndexDownloadFailed": "gallery index download failed: {{status}}",
556
+ "galleryIndexNotArray": "gallery index is not a JSON array",
557
+ "hostBlockedIPv4": "theme URL host \"{{host}}\" is blocked (private/reserved IPv4 address)",
558
+ "hostBlockedIPv6": "theme URL host \"{{host}}\" is blocked (private/reserved IPv6 address)",
559
+ "hostBlockedLocal": "theme URL host \"{{host}}\" is blocked (local/loopback hostname)",
560
+ "kindInvalid": "kind must be \"dark\" or \"light\"",
561
+ "missingKey": "{{label}} is missing \"{{key}}\"",
562
+ "mustBeJsonObject": "theme must be a JSON object",
563
+ "mustBeObject": "{{label}} must be an object",
564
+ "mustUseHttps": "theme URLs must use https, got {{protocol}}",
565
+ "notValidColor": "{{label}}.{{key}} is not a valid color",
566
+ "redirectMissingLocation": "theme URL redirect ({{status}}) had no location header",
567
+ "screenshotDownloadFailed": "screenshot download failed: {{status}}",
568
+ "screenshotPathNotAllowed": "screenshot URL is not an allowed gallery path",
569
+ "screenshotTooLarge": "screenshot too large (limit {{limit}} bytes)",
570
+ "screenshotTypeMissing": "screenshot is not an allowed image type (content-type: none)",
571
+ "screenshotTypeNotAllowed": "screenshot is not an allowed image type (content-type: {{contentType}})",
572
+ "textFieldInvalid": "{{label}} must be a non-empty string of at most {{max}} characters",
573
+ "tooManyRedirects": "theme URL exceeded {{max}} redirects",
574
+ "unknownKey": "{{label}} has unknown key \"{{key}}\"",
575
+ "unsupportedSchema": "unsupported $schema (expected {{expected}})"
576
+ },
577
+ "workflow": {
578
+ "runNotFound": "Workflow run not found"
579
+ },
580
+ "workspace": {
581
+ "folderMissing": "Folder does not exist: {{path}}",
582
+ "managedWorktreeCannotChangeFolder": "Managed worktree tabs cannot change folder; close the tab and create another one",
583
+ "noneActive": "No active workspace",
584
+ "noSourceForNewTab": "No source workspace available for a new tab",
585
+ "notFound": "Workspace not found: {{workspaceId}}",
586
+ "notFoundPlain": "Workspace not found",
587
+ "pullRequestNotCheckedOut": "The task references a GitHub pull request that is not checked out in a local worktree",
588
+ "sourceFolderMissing": "Source folder does not exist: {{path}}"
589
+ }
590
+ },
591
+ "files": {
592
+ "preview": {
593
+ "closeTitle": "Close editor",
594
+ "modifiedBadge": "modified",
595
+ "previewViewTitle": "Preview",
596
+ "readFailed": "Failed to read file",
597
+ "revertTitle": "Revert changes",
598
+ "savedBadge": "saved",
599
+ "saveFailed": "Failed to save file",
600
+ "saveTitle": "Save file",
601
+ "scriptsDisabledNotice": "Scripts are disabled for this untrusted workspace's preview.",
602
+ "sourceViewTitle": "Source"
603
+ },
604
+ "search": {
605
+ "contentPlaceholder": "Search file contents...",
606
+ "contentToggle": "CONTENT",
607
+ "escToClose": "Esc to close",
608
+ "filesToggle": "FILES",
609
+ "lineSnippet": "Line {{line}}: {{snippet}}",
610
+ "namePlaceholder": "Search files by name...",
611
+ "noResults": "No results found",
612
+ "resultCount_one": "{{count}} results",
613
+ "resultCount_other": "{{count}} results",
614
+ "typeToSearch": "Type to search..."
615
+ },
616
+ "tree": {
617
+ "folderMissingHint": "The folder may have moved or been deleted. Right-click the workspace in the sidebar and choose “Change folder…” to point it somewhere else.",
618
+ "folderNotFound": "Folder not found",
619
+ "noWorkspaceHint": "Switch to a project folder from the workspace switcher in the sidebar.",
620
+ "noWorkspaceOpen": "No workspace open"
621
+ }
622
+ },
623
+ "home": {
624
+ "actions": {
625
+ "newSession": {
626
+ "inWorkspace": "In {{project}}",
627
+ "pickFolderFirst": "Pick a folder first"
628
+ },
629
+ "newTask": {
630
+ "description": "Start work in a fresh Pi session",
631
+ "title": "New Task"
632
+ },
633
+ "openFolder": {
634
+ "description": "Browse for a project to open as a workspace",
635
+ "title": "Open Folder"
636
+ }
637
+ },
638
+ "changedFiles": {
639
+ "moreOpenDiff_one": "+{{count}} more — open diff review",
640
+ "moreOpenDiff_other": "+{{count}} more — open diff review",
641
+ "noWorkspace": "No workspace selected."
642
+ },
643
+ "errorBanner": {
644
+ "checkInstalled": "Check that {{agent}} is installed and its path is correct.",
645
+ "couldntStart": "Couldn't start {{agent}}"
646
+ },
647
+ "recentSessions": {
648
+ "empty": "No sessions yet.",
649
+ "title": "Recent Sessions"
650
+ },
651
+ "recentWorkspaces": {
652
+ "empty": "No workspaces yet.",
653
+ "last": "last",
654
+ "title": "Recent Workspaces"
655
+ },
656
+ "subtitle": "Open a workspace or pick up where you left off."
657
+ },
658
+ "imageViewer": {
659
+ "closeTitle": "Close image",
660
+ "readFailed": "Failed to read image",
661
+ "unsupportedFile": "Not a supported image file"
662
+ },
663
+ "language": {
664
+ "nativeName": "English"
665
+ },
666
+ "menu": {
667
+ "actualSize": "Actual Size",
668
+ "close": "Close Window",
669
+ "edit": "Edit",
670
+ "file": "File",
671
+ "forceReload": "Force Reload",
672
+ "minimize": "Minimize",
673
+ "newWorkspace": "New Workspace...",
674
+ "openProject": "Open Project...",
675
+ "redo": "Redo",
676
+ "reload": "Reload",
677
+ "toggleDevTools": "Toggle Developer Tools",
678
+ "toggleFullScreen": "Toggle Full Screen",
679
+ "undo": "Undo",
680
+ "view": "View",
681
+ "window": "Window",
682
+ "zoom": "Zoom",
683
+ "zoomIn": "Zoom In",
684
+ "zoomOut": "Zoom Out"
685
+ },
686
+ "missionControl": {
687
+ "controlUnavailable": "control unavailable",
688
+ "idle": "{{agent}} is idle",
689
+ "liveSessions": "Live sessions",
690
+ "needsAttention_one": "{{count}} needs attention",
691
+ "needsAttention_other": "{{count}} needs attention",
692
+ "newTask": "New task",
693
+ "noLiveRuntimes": "No live session runtimes yet. Start a task to put Pi to work in the background.",
694
+ "noWorkflowRuns": "No workflow runs yet.",
695
+ "open": "Open",
696
+ "openAllWorkflows": "Open all workflows",
697
+ "proceed": "Proceed",
698
+ "proceedWithWorkflow": "Proceed with this workflow",
699
+ "refreshWorkflowRuns": "Refresh workflow runs",
700
+ "resumeFailed": "Could not proceed with {{workflow}}: {{reason}}",
701
+ "resumeFailedGeneric": "Could not proceed with {{workflow}}. Open the run for details.",
702
+ "retryWithWorkflow": "Retry this workflow",
703
+ "review": "Review",
704
+ "runtimeState": {
705
+ "completed": "completed",
706
+ "failed": "failed",
707
+ "idle": "idle",
708
+ "needsApproval": "needs approval",
709
+ "stopped": "stopped",
710
+ "working": "working"
711
+ },
712
+ "startingSession": "Starting session",
713
+ "subtitle": "Background sessions and workflow runs, from every project.",
714
+ "title": "Mission Control",
715
+ "unknownProject": "Unknown project",
716
+ "workflowActivity": "Workflow activity",
717
+ "workflowStatus": {
718
+ "aborted": "aborted",
719
+ "completed": "completed",
720
+ "failed": "failed",
721
+ "paused": "paused",
722
+ "pending": "pending",
723
+ "running": "running",
724
+ "unknown": "unknown"
725
+ }
726
+ },
727
+ "models": {
728
+ "readFailure": {
729
+ "invalidJson": "{{file}} is not valid JSON: {{detail}}",
730
+ "invalidJsonNoDetail": "{{file}} is not valid JSON",
731
+ "invalidYaml": "{{file}} is not valid YAML: {{detail}}",
732
+ "invalidYamlNoDetail": "{{file}} is not valid YAML",
733
+ "missingProviders": "{{file}} is not a valid models config (missing \"providers\")",
734
+ "unreadable": "Could not read {{file}}: {{detail}}"
735
+ },
736
+ "selector": {
737
+ "current": "Current",
738
+ "loadFailed": "Could not load models",
739
+ "noModelsMatch": "No models match",
740
+ "searchPlaceholder": "Search models…",
741
+ "selectModel": "Select model",
742
+ "selectModelWithShortcut": "Select model (Ctrl+P to cycle when {{agent}} is running)",
743
+ "startToListModels": "Start Pi to list and change models."
744
+ }
745
+ },
746
+ "notes": {
747
+ "backButton": "Back",
748
+ "backTitle": "Back to notes",
749
+ "deleteNoteTitle": "Delete note",
750
+ "editNoteTitle": "Edit note",
751
+ "empty": {
752
+ "noMatch": "No notes match your search.",
753
+ "noneYet": "No notes yet. Create one to reuse prompts."
754
+ },
755
+ "form": {
756
+ "bodyLabel": "Prompt / Command",
757
+ "bodyPlaceholder": "The reusable prompt or command text...",
758
+ "editHeading": "Edit Note",
759
+ "saveFailed": "Failed to save note",
760
+ "saving": "Saving...",
761
+ "scopeLabel": "Scope",
762
+ "tagsLabel": "Tags",
763
+ "tagsPlaceholder": "space or comma separated",
764
+ "thisWorkspaceFallback": "This workspace",
765
+ "titleLabel": "Title",
766
+ "titlePlaceholder": "e.g. Refactor with tests"
767
+ },
768
+ "insertButton": "Insert",
769
+ "insertIntoChatTitle": "Insert into chat input",
770
+ "newNoteButton": "New Note",
771
+ "picker": {
772
+ "createNote": "Create a note",
773
+ "navigationHint": "↑↓ navigate · Enter insert · Esc close",
774
+ "noMatchingNotes": "No matching notes",
775
+ "noSavedNotes": "No saved notes yet.",
776
+ "notComposeBox": "This picker inserts notes you've saved — it's not a compose box.",
777
+ "searchPlaceholder": "Search saved notes to insert..."
778
+ },
779
+ "scope": {
780
+ "other": "Other workspace",
781
+ "workspaceFallback": "Workspace"
782
+ },
783
+ "searchPlaceholder": "Search title, body, or tag...",
784
+ "title": "Notes",
785
+ "viewNoteTitle": "View note"
786
+ },
787
+ "notifications": {
788
+ "completed": "Pi finished working.",
789
+ "failed": "Pi stopped with an error.",
790
+ "needs-approval": "Pi is waiting for your approval.",
791
+ "withSession": "{{body}} Click to open the finished session."
792
+ },
793
+ "packages": {
794
+ "catalog": {
795
+ "emptyHint": "Visit <link>pi.dev/packages</link> to browse",
796
+ "emptyTitle": "No packages found",
797
+ "resultsCap": "Showing {{shown}} of {{total}} — refine your search to narrow results.",
798
+ "searchPlaceholder": "Search packages...",
799
+ "viewRepo": "View repo"
800
+ },
801
+ "installBar": {
802
+ "placeholder": "npm:package-name or git:github.com/user/repo"
803
+ },
804
+ "installed": {
805
+ "checkingUpdates": "Checking for updates…",
806
+ "checkUpdatesButton": "Check for updates",
807
+ "emptyHint": "Browse the catalog or use the install bar above",
808
+ "emptyTitle": "No packages installed",
809
+ "removeButton": "Remove package",
810
+ "updateAllButton": "Update all",
811
+ "updatePackageAria": "Update {{name}}",
812
+ "updatesAvailable_one": "{{count}} update available",
813
+ "updatesAvailable_other": "{{count}} updates available",
814
+ "updateToVersion": "Update to v{{version}}",
815
+ "versionUpdateArrow": "v{{from}} → v{{to}}"
816
+ },
817
+ "tabs": {
818
+ "catalog": "Catalog",
819
+ "installed": "Installed"
820
+ },
821
+ "title": "Packages & Skills",
822
+ "type": {
823
+ "extension": "extension",
824
+ "package": "package",
825
+ "prompt": "prompt",
826
+ "skill": "skill",
827
+ "theme": "theme"
828
+ },
829
+ "viewOnNpm": "View on npm"
830
+ },
831
+ "palette": {
832
+ "navigationHint": "↑↓ navigate · Enter/Tab run · / commands only · Esc close",
833
+ "noMatches": "No matches",
834
+ "searchPlaceholder": "Search commands, workspaces, sessions, files...",
835
+ "sections": {
836
+ "files": "Files",
837
+ "sessions": "Sessions",
838
+ "workspaces": "Workspaces"
839
+ }
840
+ },
841
+ "permissionMode": {
842
+ "ask-commands": {
843
+ "description": "Pi will ask before running shell commands.",
844
+ "label": "Ask before commands"
845
+ },
846
+ "ask-edits": {
847
+ "description": "Pi will ask before file edits and shell commands that can change files.",
848
+ "label": "Ask before edits"
849
+ },
850
+ "plan-readonly": {
851
+ "description": "Only read/search/list tools are enabled. File edits and shell commands are blocked.",
852
+ "label": "Plan / Read-only"
853
+ },
854
+ "trusted": {
855
+ "description": "All Pi tools are enabled for workflows you trust.",
856
+ "label": "Trusted"
857
+ }
858
+ },
859
+ "permissionRules": {
860
+ "action": {
861
+ "allow": "Allow",
862
+ "deny": "Deny"
863
+ },
864
+ "addRuleButton": "Add rule",
865
+ "copyFromGlobalButton": "Copy from global",
866
+ "copyFromGlobalTitle": "Copy the global rules list into this workspace (replaces the list below until you save)",
867
+ "exportTitle": "Export the list below to a JSON file",
868
+ "importTitle": "Import rules from a JSON file (replaces the list below until you save)",
869
+ "legend": "Deny always wins, then allow, then the mode above decides. Use * as a wildcard.",
870
+ "loadErrorMessage": "Saved rules file is invalid and is being ignored: {{error}}",
871
+ "noRules": "No rules yet — the mode above decides everything.",
872
+ "patternPlaceholder": "pattern, e.g. npm test* (empty = any input)",
873
+ "removeRuleAria": "Remove rule {{index}}",
874
+ "removeRuleTitle": "Remove rule",
875
+ "removeWorkspaceRulesButton": "Remove workspace rules",
876
+ "removeWorkspaceRulesTitle": "Delete this workspace's .pi-desktop/permission-rules.json; global rules apply again",
877
+ "revokeTrustButton": "Revoke trust",
878
+ "rowActionAria": "Rule {{index}} action",
879
+ "rowPatternAria": "Rule {{index}} pattern",
880
+ "rowToolAria": "Rule {{index}} tool",
881
+ "toolPlaceholder": "tool (* = any)",
882
+ "toolRequiredError": "Rule {{index}}: tool is required (use * for any tool)",
883
+ "trustedMessage": "Trusted — this workspace's allow rules apply and HTML previews run scripts.",
884
+ "trustWorkspaceButton": "Trust workspace",
885
+ "untrustedMessage": "HTML previews for this workspace are static (scripts disabled). Trust it to enable interactive previews and any allow rules.",
886
+ "untrustedWithAllowRulesMessage": "This workspace's allow rules are inactive and HTML previews are static until you trust it. Its deny rules still apply. Trust only workspaces from a source you trust.",
887
+ "workspaceOverrideNotice": "This workspace has its own rules file (.pi-desktop/permission-rules.json). Its deny rules apply on top of these global rules; its allow rules apply only if you trust the workspace — see the This workspace tab."
888
+ },
889
+ "permissions": {
890
+ "prompt": {
891
+ "body": "{{agent}} wants to run the {{tool}} tool.",
892
+ "command": "Command:\n{{command}}",
893
+ "target": "Target: {{path}}",
894
+ "title": "Allow {{tool}}?"
895
+ }
896
+ },
897
+ "review": {
898
+ "gitStatusUnavailable": "Git status unavailable",
899
+ "heading": "Review",
900
+ "openDiffButton": "Open diff review",
901
+ "openDiffHint": "Inspect working tree changes.",
902
+ "pendingApprovals": {
903
+ "none": "No approval requests waiting.",
904
+ "queued_one": "{{count}} queued item waiting for the active session.",
905
+ "queued_other": "{{count}} queued items waiting for the active session."
906
+ },
907
+ "pendingApprovalsHeading": "Pending Approvals",
908
+ "permissionsHeading": "Permissions",
909
+ "sessionStatus": {
910
+ "idle": "{{agent}} is idle in the active session.",
911
+ "working": "{{agent}} is working in the active session."
912
+ },
913
+ "sessionStatusHeading": "Session Status",
914
+ "subtitle": "Control what {{agent}} can do before changes move forward."
915
+ },
916
+ "sessions": {
917
+ "activeBadge": "active",
918
+ "archivedBadge": "archived",
919
+ "archivedToggle": {
920
+ "hideTitle": "Hide archived sessions",
921
+ "hidingNone": "Hiding none",
922
+ "showTitle": "Show archived sessions"
923
+ },
924
+ "currentProjectBadge": "current",
925
+ "currentWorkspaceLabel": "Current workspace:",
926
+ "deleteConfirm": {
927
+ "message": "Delete this session? Will use <code>trash</code> if available, otherwise permanent."
928
+ },
929
+ "deleteEllipsis": "Delete...",
930
+ "empty": {
931
+ "createFirst": "Create your first session",
932
+ "noMatch": "No sessions match your search",
933
+ "noneInProject": "No sessions in this project yet",
934
+ "noneYet": "No sessions yet",
935
+ "openProjectToSee": "Open a project to see its sessions"
936
+ },
937
+ "engineSession": "{{engine}} session",
938
+ "header": {
939
+ "projectCount_one": "{{count}} project",
940
+ "projectCount_other": "{{count}} projects",
941
+ "sessionCount_one": "{{count}} session",
942
+ "sessionCount_other": "{{count}} sessions"
943
+ },
944
+ "runtime": {
945
+ "completed": "{{agent}} finished",
946
+ "failed": "{{agent}} stopped with an error",
947
+ "needsApproval": "{{agent}} is waiting for approval",
948
+ "working": "{{agent}} is working"
949
+ },
950
+ "scopeToggle": {
951
+ "allSessions": "All Sessions",
952
+ "currentOnly": "Current Only",
953
+ "showCurrentProjectOnly": "Only show sessions from the current project",
954
+ "showEveryProject": "Show sessions from every project"
955
+ },
956
+ "searchPlaceholder": "Search sessions or projects...",
957
+ "sessionActions": {
958
+ "ariaLabel": "Session actions",
959
+ "title": "Session actions (or right-click the row)"
960
+ },
961
+ "tags": {
962
+ "add": "Add",
963
+ "addPlaceholder": "Add tag...",
964
+ "addTag": "Add tag",
965
+ "autoTagHint": "Auto-tagged from chat context — add your own tag to replace it",
966
+ "removeAutoTag": "Remove auto-tag {{tag}}",
967
+ "removeTag": "Remove tag {{tag}}"
968
+ },
969
+ "time": {
970
+ "days_one": "{{count}}d ago",
971
+ "days_other": "{{count}}d ago",
972
+ "hours_one": "{{count}}h ago",
973
+ "hours_other": "{{count}}h ago",
974
+ "minutes_one": "{{count}}m ago",
975
+ "minutes_other": "{{count}}m ago"
976
+ },
977
+ "title": "Sessions",
978
+ "unknownProject": "Unknown"
979
+ },
980
+ "settings": {
981
+ "actions": {
982
+ "reset": "Reset to Defaults",
983
+ "save": "Save Settings",
984
+ "saved": "Saved!"
985
+ },
986
+ "agentInstallation": {
987
+ "autoDetectOption": "Auto-detect (Pi first, then OMP)",
988
+ "chooseExecutableTitle": "Choose executable or install directory",
989
+ "customPathOption": "Custom path…",
990
+ "description": "Auto-detect Pi and OMP, choose an installed engine, or use a custom executable/path.",
991
+ "detectedCount_one": "{{count}} installed engine detected",
992
+ "detectedCount_other": "{{count}} installed engines detected",
993
+ "engineAriaLabel": "Agent engine",
994
+ "engineAutoOption": "Auto",
995
+ "installedOption": "{{engine}} — {{path}}",
996
+ "label": "Agent Installation",
997
+ "noneDetected": "No Pi or OMP installation detected yet",
998
+ "ompNotFoundOption": "OMP (not found)",
999
+ "pathPlaceholder": "Path to executable, cli.js, or install directory",
1000
+ "rescanTitle": "Rescan installed agents",
1001
+ "scanningStatus": "Scanning common install locations and PATH…",
1002
+ "selectDialogTitle": "Select Agent Executable or Directory"
1003
+ },
1004
+ "autoScroll": {
1005
+ "description": "Automatically scroll to new messages",
1006
+ "label": "Auto Scroll"
1007
+ },
1008
+ "codeEditorFontSize": {
1009
+ "description": "Font size for the code editor / file viewer",
1010
+ "label": "Code Editor Font Size"
1011
+ },
1012
+ "consensusMode": {
1013
+ "arbiterOption": "Arbiter merge (fast)",
1014
+ "debateOption": "One debate round (slower, ~2x cost)",
1015
+ "description": "How council members reach agreement",
1016
+ "label": "Consensus mode"
1017
+ },
1018
+ "councilEnabled": {
1019
+ "confirmButton": "Enable",
1020
+ "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.",
1021
+ "confirmTitle": "Enable council planning?",
1022
+ "description": "Spawns Claude/Codex alongside Pi to plan tasks. Increases token usage and credit/API costs.",
1023
+ "label": "Enable council planning"
1024
+ },
1025
+ "councilMembers": {
1026
+ "description": "Which agents participate in council planning",
1027
+ "label": "Members",
1028
+ "notDetected": "(not detected)"
1029
+ },
1030
+ "councilTimeout": {
1031
+ "description": "How long to wait for each agent ({{min}}-{{max}})",
1032
+ "label": "Per-member timeout (seconds)"
1033
+ },
1034
+ "customTheme": {
1035
+ "createButton": "Create theme",
1036
+ "description": "Fork the current theme or edit one you created",
1037
+ "editButton": "Edit theme",
1038
+ "label": "Custom Theme"
1039
+ },
1040
+ "darkTheme": {
1041
+ "description": "Used when the system is in dark mode",
1042
+ "label": "Dark Theme"
1043
+ },
1044
+ "desktopNotifications": {
1045
+ "description": "Notify when Pi finishes, fails, or waits for approval in a workspace you are not looking at",
1046
+ "label": "Desktop Notifications"
1047
+ },
1048
+ "language": {
1049
+ "description": "Language of menus, buttons, and messages",
1050
+ "label": "Language",
1051
+ "labelWithEnglish": "{{label}} ({{english}})",
1052
+ "system": "System default ({{language}})"
1053
+ },
1054
+ "lightTheme": {
1055
+ "description": "Used when the system is in light mode",
1056
+ "label": "Light Theme"
1057
+ },
1058
+ "minimizeToTrayOnClose": {
1059
+ "description": "Keep Pi Desktop running in the system tray when you close the window instead of quitting (Windows and Linux)",
1060
+ "label": "Minimize to Tray on Close"
1061
+ },
1062
+ "openToHomeOnLaunch": {
1063
+ "description": "On: full Home launcher (stats, recents, open folder). Off: open Chat with the empty-session center prompt and project picker.",
1064
+ "label": "Open to Home Screen on Launch"
1065
+ },
1066
+ "permissionMode": {
1067
+ "description": "Default safety mode for Pi actions",
1068
+ "label": "Permission Mode"
1069
+ },
1070
+ "permissionRules": {
1071
+ "description": "Fine-grained per-tool overrides for the mode above",
1072
+ "exportFailed": "Export failed",
1073
+ "importFailed": "Import failed",
1074
+ "label": "Permission Rules",
1075
+ "removeWorkspaceConfirmMessage": "Delete this workspace's .pi-desktop/permission-rules.json? Global permission rules will apply again.",
1076
+ "removeWorkspaceConfirmTitle": "Remove workspace rules",
1077
+ "saveError_global": "Settings saved, but global permission rules were not saved: {{error}}",
1078
+ "saveError_workspace": "Settings saved, but workspace permission rules were not saved: {{error}}",
1079
+ "scopeTabListAriaLabel": "Permission rules scope",
1080
+ "workspaceScopeTab": "This workspace"
1081
+ },
1082
+ "resumeLastSession": {
1083
+ "description": "When opening a workspace, continue its most recent session instead of starting a new one",
1084
+ "label": "Resume Last Session"
1085
+ },
1086
+ "runOnStartup": {
1087
+ "description": "Automatically start Pi Desktop when you log in to your computer (takes effect in installed builds)",
1088
+ "label": "Run on Startup"
1089
+ },
1090
+ "sections": {
1091
+ "agentConfiguration": "Agent Configuration",
1092
+ "appearance": "Appearance",
1093
+ "behavior": "Behavior",
1094
+ "customModels": "Custom Models",
1095
+ "multiAgentCouncilPlanning": "Multi-Agent Council Planning"
1096
+ },
1097
+ "showThinking": {
1098
+ "description": "Display model thinking blocks in responses",
1099
+ "label": "Show Thinking"
1100
+ },
1101
+ "terminalFontSize": {
1102
+ "description": "Font size for the terminal panel",
1103
+ "label": "Terminal Font Size"
1104
+ },
1105
+ "theme": {
1106
+ "deleteConfirmMessage": "Delete theme \"{{themeName}}\"? This cannot be undone.",
1107
+ "deleteConfirmTitle": "Delete theme",
1108
+ "description": "Application color scheme",
1109
+ "editNotFoundError": "Could not find the current theme to edit",
1110
+ "exportNotFoundError": "Could not find the current theme to export",
1111
+ "label": "Theme",
1112
+ "systemOption": "System"
1113
+ },
1114
+ "themeActions": {
1115
+ "browseGalleryButton": "Browse gallery",
1116
+ "description": "Import, export, or install a theme from a URL",
1117
+ "label": "Theme Actions"
1118
+ },
1119
+ "uiFontSize": {
1120
+ "description": "Chat, panels, and sidebar — not the terminal or code editor",
1121
+ "label": "UI Font Size"
1122
+ }
1123
+ },
1124
+ "sidebar": {
1125
+ "archived": {
1126
+ "collapseTitle": "Collapse archived sessions",
1127
+ "expandTitle": "Expand archived sessions",
1128
+ "heading_one": "Archived ({{count}})",
1129
+ "heading_other": "Archived ({{count}})"
1130
+ },
1131
+ "currentSession": {
1132
+ "heading": "Current Session",
1133
+ "messageCount_one": "{{count}} messages",
1134
+ "messageCount_other": "{{count}} messages",
1135
+ "openTitle": "Open current session in chat · double-click to rename"
1136
+ },
1137
+ "header": {
1138
+ "closeSidebar": "Close sidebar",
1139
+ "homeAriaLabel": "Home",
1140
+ "homeTitle": "Home (Esc to launcher)"
1141
+ },
1142
+ "nav": {
1143
+ "activitySection": "Activity",
1144
+ "chat": "Chat",
1145
+ "missionControl": "Mission Control",
1146
+ "missionControlTitle": "All background sessions and workflows",
1147
+ "newTaskTitle": "Start a task in a new Pi session",
1148
+ "sessions": "Sessions",
1149
+ "sessionsTitle": "Sessions in this project",
1150
+ "timeline": "Timeline",
1151
+ "timelineTitleWithProject": "Timeline for {{project}}",
1152
+ "workflows": "Workflows",
1153
+ "workflowsTitleNoProject": "All workflow runs (no project open)",
1154
+ "workflowsTitleWithProject": "Workflow runs in {{project}}",
1155
+ "workspaceSection": "Workspace"
1156
+ },
1157
+ "newSessionButton": {
1158
+ "label": "New session",
1159
+ "openProjectToBegin": "Open a project to begin",
1160
+ "shortcutKbd": "Ctrl N",
1161
+ "startsIn": "Starts in {{project}}",
1162
+ "titleNoProject": "Open a project first",
1163
+ "titleWithShortcut": "Start a new session in this project (Ctrl/Cmd+N)"
1164
+ },
1165
+ "openProjectFolder": {
1166
+ "ariaLabel": "Open project folder",
1167
+ "titleWithShortcut": "Open project folder (Ctrl/Cmd+O)"
1168
+ },
1169
+ "promptsWaitingInOtherWorkspaces_one": "{{count}} Pi prompt waiting in other workspaces",
1170
+ "promptsWaitingInOtherWorkspaces_other": "{{count}} Pi prompts waiting in other workspaces",
1171
+ "recentSessions": {
1172
+ "emptyInProject": "No sessions in this project yet.",
1173
+ "emptyNoProject": "Open a project to see its sessions.",
1174
+ "headingNoProject": "Recent sessions",
1175
+ "headingWithProject": "Recent in {{project}}",
1176
+ "startOneNow": "Start one now",
1177
+ "viewAll": "View all"
1178
+ },
1179
+ "sessionNamePlaceholder": "Session name",
1180
+ "sessionRow": {
1181
+ "tooltipActive": "{{title}}\n\nClick to open · double-click to rename · right-click for actions",
1182
+ "tooltipInactive": "{{title}}\n\nClick to open · right-click for actions"
1183
+ },
1184
+ "tools": {
1185
+ "allWorkflows": "All Workflows",
1186
+ "allWorkflowsTitle": "Workflow runs from every project",
1187
+ "diagnostics": "Diagnostics",
1188
+ "notes": "Notes",
1189
+ "packages": "Packages",
1190
+ "sectionLabel": "Tools"
1191
+ },
1192
+ "workflowRunsForSession": "Workflow runs for this session",
1193
+ "workspaceMenu": {
1194
+ "changeFolder": "Change folder…",
1195
+ "rename": "Rename"
1196
+ },
1197
+ "workspaceSwitcher": {
1198
+ "namePlaceholder": "Workspace name",
1199
+ "noWorkspace": "No workspace",
1200
+ "openProjectEllipsis": "Open project…",
1201
+ "triggerTitle": "Click to switch · double-click to rename · right-click for options"
1202
+ }
1203
+ },
1204
+ "skills": {
1205
+ "emptyHint": "Install skill packages or create skills in .pi/skills/",
1206
+ "emptyOmp": "No skills found in ~/.omp/agent/skills, ~/.claude/skills, or project .omp/skills",
1207
+ "emptyPi": "No skills found in ~/.pi/agent/skills or project .pi/skills",
1208
+ "emptyTitle": "No skills found",
1209
+ "providedByPlugin": "Provided by an installed plugin",
1210
+ "refreshAriaLabel": "Refresh skills",
1211
+ "runButton": "Run",
1212
+ "selectPrompt": "Select a skill to view its SKILL.md"
1213
+ },
1214
+ "stats": {
1215
+ "heatmap": {
1216
+ "dayTooltip_one": "{{date}} — {{count}} messages",
1217
+ "dayTooltip_other": "{{date}} — {{count}} messages"
1218
+ },
1219
+ "modelLegend": {
1220
+ "empty": "No model usage in this range.",
1221
+ "tokenBreakdown": "{{input}} in · {{output}} out"
1222
+ },
1223
+ "overview": {
1224
+ "activeDaysLabel": "Active days",
1225
+ "currentStreakLabel": "Current streak",
1226
+ "favoriteModelLabel": "Favorite model",
1227
+ "longestStreakLabel": "Longest streak",
1228
+ "messagesLabel": "Messages",
1229
+ "peakHourLabel": "Peak hour",
1230
+ "sessionsLabel": "Sessions",
1231
+ "streakDays_one": "{{count}}d",
1232
+ "streakDays_other": "{{count}}d",
1233
+ "totalTokensLabel": "Total tokens"
1234
+ },
1235
+ "ranges": {
1236
+ "oneYear": "1y",
1237
+ "sevenDays": "7d",
1238
+ "sixMonths": "6mo",
1239
+ "thirtyDays": "30d",
1240
+ "threeMonths": "3mo"
1241
+ },
1242
+ "tabs": {
1243
+ "models": "models",
1244
+ "overview": "overview"
1245
+ },
1246
+ "tokenChart": {
1247
+ "barTooltip": "{{label}} — {{tokens}} tokens",
1248
+ "empty": "No token usage in this range."
1249
+ }
1250
+ },
1251
+ "status": {
1252
+ "agentSection": {
1253
+ "title": "{{agent}} Agent"
1254
+ },
1255
+ "compactButton": {
1256
+ "compact": "Compact context",
1257
+ "compacting": "Compacting…",
1258
+ "title": "Summarize and compact the conversation to free up context"
1259
+ },
1260
+ "contextSection": {
1261
+ "title": "Context Usage"
1262
+ },
1263
+ "errorCopied": "copied",
1264
+ "errorCopy": "copy",
1265
+ "extensionsSection": {
1266
+ "title": "Extensions"
1267
+ },
1268
+ "header": {
1269
+ "title": "System Status"
1270
+ },
1271
+ "mcpSection": {
1272
+ "title": "MCP Servers"
1273
+ },
1274
+ "noExtensionsOrSkills": "No extensions or skills loaded",
1275
+ "noMcpServers": "No MCP servers configured",
1276
+ "pidLabel": "(PID: {{pid}})",
1277
+ "processStatus": {
1278
+ "error": "error",
1279
+ "running": "running",
1280
+ "starting": "starting",
1281
+ "stopped": "stopped"
1282
+ },
1283
+ "promptTemplatesSection": {
1284
+ "title": "Prompt Templates"
1285
+ },
1286
+ "row": {
1287
+ "cost": "Cost",
1288
+ "error": "Error",
1289
+ "messages": "Messages",
1290
+ "model": "Model",
1291
+ "name": "Name",
1292
+ "path": "Path",
1293
+ "provider": "Provider",
1294
+ "session": "Session",
1295
+ "status": "Status",
1296
+ "tokens": "Tokens",
1297
+ "usage": "Usage",
1298
+ "window": "Window"
1299
+ },
1300
+ "scope": {
1301
+ "cli": "cli",
1302
+ "global": "global",
1303
+ "package": "package",
1304
+ "project": "project"
1305
+ },
1306
+ "skillCommandsSection": {
1307
+ "title": "Skill Commands"
1308
+ },
1309
+ "trigger": {
1310
+ "title": "System status"
1311
+ },
1312
+ "workspaceSection": {
1313
+ "title": "Workspace"
1314
+ }
1315
+ },
1316
+ "statusBar": {
1317
+ "compact": "compact",
1318
+ "compactContextTitle": "Compact context — summarize the conversation to free up space",
1319
+ "compacting": "compacting…",
1320
+ "contextUsage": "Context: {{tokens}} / {{contextWindow}} tokens",
1321
+ "followUpQueued_one": "{{count}} follow-up queued",
1322
+ "followUpQueued_other": "{{count}} follow-up queued",
1323
+ "gitBranch": "Git branch: {{branch}}",
1324
+ "hideTerminal": "Hide terminal",
1325
+ "openWorkflowRuns": "Open workflow runs",
1326
+ "piError": "{{agent}} error",
1327
+ "piRunning": "{{agent}} running (PID: {{pid}})",
1328
+ "piStarting": "{{agent}} starting",
1329
+ "piStopped": "{{agent}} stopped",
1330
+ "showTerminal": "Show terminal",
1331
+ "steerQueued_one": "{{count}} steer queued",
1332
+ "steerQueued_other": "{{count}} steer queued",
1333
+ "streaming": "streaming",
1334
+ "toTheHall": "To the Hall — open the Ymir landing page",
1335
+ "toTheHallShort": "To the Hall",
1336
+ "waitingOnPromptElsewhere": "{{agent}} is waiting on a prompt in another workspace; switch to it to answer",
1337
+ "workflowCount_one": "{{count}} workflow",
1338
+ "workflowCount_other": "{{count}} workflows",
1339
+ "workflowsFallback": "workflows"
1340
+ },
1341
+ "store": {
1342
+ "confirm": {
1343
+ "changeAnywayLabel": "Change anyway",
1344
+ "changeFolderMessage": "Pi has not finished responding in this session. Changing the project folder restarts Pi, which stops it: whatever Pi already wrote to the session is kept, but the rest of the response — including any tool calls still running — is discarded.",
1345
+ "cloneAnywayLabel": "Clone anyway",
1346
+ "cloneMessage": "Pi has not finished responding in this session. Cloning this branch stops it: whatever Pi already wrote to the session is kept, but the rest of the response — including any tool calls still running — is discarded.",
1347
+ "closeManagedWorktreeMessage": "Close \"{{name}}\"? Clean worktrees are removed; tabs with uncommitted changes are preserved on disk.",
1348
+ "closeSessionTabMessage": "Pi is still working in this session. Closing the tab stops its runtime; saved messages remain available from Sessions.",
1349
+ "closeSessionTabTitle": "Close session tab?",
1350
+ "closeTabLabel": "Close tab",
1351
+ "closeUnmanagedWorktreeMessage": "Close \"{{name}}\"? This existing worktree and its files remain on disk.",
1352
+ "forkAnywayLabel": "Fork anyway",
1353
+ "forkMessage": "Pi has not finished responding in this session. Forking this session stops it: whatever Pi already wrote to the session is kept, but the rest of the response — including any tool calls still running — is discarded.",
1354
+ "keepUntrustedLabel": "Keep untrusted",
1355
+ "keepWorkingLabel": "Keep working",
1356
+ "newMessage": "Pi has not finished responding in this session. Starting a new session stops it: whatever Pi already wrote to the session is kept, but the rest of the response — including any tool calls still running — is discarded.",
1357
+ "okLabel": "OK",
1358
+ "removeWorkspaceMessage": "Remove \"{{name}}\" from the sidebar? Its Pi process stops; files on disk are not touched.",
1359
+ "removeWorkspaceTitle": "Remove workspace",
1360
+ "startAnywayLabel": "Start anyway",
1361
+ "stillWorkingTitle": "Pi is still working",
1362
+ "switchAnywayLabel": "Switch anyway",
1363
+ "switchMessage": "Pi has not finished responding in this session. Opening another session stops it: whatever Pi already wrote to the session is kept, but the rest of the response — including any tool calls still running — is discarded.",
1364
+ "trustWorkspaceMessage": "This workspace defines permission rules (.pi-desktop/permission-rules.json) with allow rules that would let Pi skip confirmation prompts. They are ignored until you trust this workspace; its deny rules always apply. Only trust workspaces from a source you trust.",
1365
+ "trustWorkspaceTitle": "Trust this workspace?",
1366
+ "workspaceMessage": "Pi has not finished responding in this session. It keeps working after you switch: the response is saved to the session and restored when you come back, and any prompt Pi raises while you are away is held and shown on your return.",
1367
+ "workspaceRulesNoticeMessage": "This workspace defines its own permission rules (.pi-desktop/permission-rules.json). Its deny rules restrict Pi while you work here; your global rules apply otherwise.",
1368
+ "workspaceRulesNoticeTitle": "Workspace permission rules"
1369
+ },
1370
+ "messages": {
1371
+ "arbiterFailed": "Arbiter failed: {{detail}}",
1372
+ "archiveError": "Archive error: {{detail}}",
1373
+ "cannotActivateSession": "Cannot activate session",
1374
+ "cannotCreateSession": "Cannot create session",
1375
+ "changeFolderError": "Change folder error: {{detail}}",
1376
+ "closeSessionError": "Close session error: {{detail}}",
1377
+ "compactingContext": "Compacting context ({{reason}})...",
1378
+ "compactionAborted": "Compaction aborted.",
1379
+ "contextCompacted": "Context compacted.",
1380
+ "councilFailed": "Council failed: {{detail}}",
1381
+ "councilNoQuorum": "No consultant produced a plan (all timed out or errored). Council aborted.",
1382
+ "createWorkspaceError": "Create workspace error: {{detail}}",
1383
+ "defaultTaskLabel": "Task",
1384
+ "deleteError": "Delete error: {{detail}}",
1385
+ "error": "Error: {{detail}}",
1386
+ "followUpError": "Follow-up error: {{detail}}",
1387
+ "imageFallbackName": "Image {{index}}",
1388
+ "installedPackage": "Installed {{spec}}. Restart Pi to load it.",
1389
+ "installFailed": "Install failed",
1390
+ "modelError": "Model error: {{detail}}",
1391
+ "newIsolatedTabError": "New isolated tab error: {{detail}}",
1392
+ "newSessionError": "New session error: {{detail}}",
1393
+ "notAFolder": "Cannot open as project — not a folder: {{path}}",
1394
+ "notGitRepository": "This project is not a Git repository. Use New session for another conversation, or open a Git project for an isolated tab.",
1395
+ "openFolderError": "Open folder error: {{detail}}",
1396
+ "removedPackage": "Removed {{spec}}",
1397
+ "removePackageFailed": "Remove failed",
1398
+ "removeWorkspaceError": "Remove workspace error: {{detail}}",
1399
+ "retrying": "Retrying (attempt {{attempt}}/{{maxAttempts}}): {{detail}}",
1400
+ "reusedWorktree": "Found the related existing Git worktree and continued the task there.",
1401
+ "steerError": "Steer error: {{detail}}",
1402
+ "switchSessionError": "Switch session error: {{detail}}",
1403
+ "switchWorkspaceError": "Switch workspace error: {{detail}}",
1404
+ "tabClosedWorktreePreserved": "Tab closed, but its uncommitted worktree was preserved at {{path}}",
1405
+ "tabFromLastCommit": "This tab starts from the last commit. Uncommitted files remain in the source tab.",
1406
+ "taskLaunchError": "Task launch error: {{detail}}",
1407
+ "truncatedHistory_one": "Showing the latest {{count}} of {{total}} message for performance. Older turns are still on disk in the session file.",
1408
+ "truncatedHistory_other": "Showing the latest {{count}} of {{total}} messages for performance. Older turns are still on disk in the session file.",
1409
+ "unarchiveError": "Unarchive error: {{detail}}",
1410
+ "unknownError": "Unknown error",
1411
+ "updatedAllPackages": "Updated packages. Restart Pi to load them.",
1412
+ "updatedPackage": "Updated {{spec}}. Restart Pi to load it.",
1413
+ "updatePackageFailed": "Update failed",
1414
+ "writeFailed": "Write failed"
1415
+ },
1416
+ "promptsWaiting_one": "{{count}} Pi prompt waiting",
1417
+ "promptsWaiting_other": "{{count}} Pi prompts waiting"
1418
+ },
1419
+ "taskLauncher": {
1420
+ "closeAriaLabel": "Close task launcher",
1421
+ "footerNote": "The task runs in a new session and continues in the background if you switch away. Existing matching PR/task worktrees are reused. Ctrl/Cmd+Enter starts it.",
1422
+ "isolatedWorktree": {
1423
+ "description": "Reuses a matching local PR/task worktree; otherwise creates one. The source project stays untouched.",
1424
+ "label": "Use an isolated Git worktree"
1425
+ },
1426
+ "openProjectFirst": "Open a project first",
1427
+ "starting": "Starting…",
1428
+ "startTask": "Start task",
1429
+ "subtitle": "Start a fresh Pi session and send the task immediately.",
1430
+ "task": "Task",
1431
+ "taskPlaceholder": "Fix the failing tests, explain the root cause, and prepare the changes for review…"
1432
+ },
1433
+ "terminal": {
1434
+ "clearAriaLabel": "Clear terminal",
1435
+ "clearTitle": "Clear",
1436
+ "closeTitle": "Close terminal",
1437
+ "maximizeLabel": "Maximize terminal",
1438
+ "restoreLabel": "Restore terminal",
1439
+ "title": "Terminal"
1440
+ },
1441
+ "themes": {
1442
+ "builtin": {
1443
+ "breeze-claudius": "Breeze Claudius",
1444
+ "breeze-dark": "Breeze Dark",
1445
+ "breeze-light": "Breeze Light",
1446
+ "dark": "Dark",
1447
+ "fensalir": "Fensalir",
1448
+ "gruvbox": "Gruvbox",
1449
+ "light": "Light",
1450
+ "nord": "Nord",
1451
+ "sessrumnir": "Sessrúmnir"
1452
+ },
1453
+ "editor": {
1454
+ "advancedSummary": "Advanced",
1455
+ "authorLabel": "Author (optional)",
1456
+ "authorPlaceholder": "Shown in the gallery",
1457
+ "copySuffix": "{{name}} Copy",
1458
+ "createTitle": "Create theme",
1459
+ "descriptionLabel": "Description (optional)",
1460
+ "descriptionPlaceholder": "One or two sentences about the theme",
1461
+ "editTitle": "Edit theme",
1462
+ "kindLabel": "Kind",
1463
+ "nameLabel": "Name",
1464
+ "renameCleanupWarning": "Theme saved as \"{{name}}\", but the old version could not be removed and may still appear in the list.",
1465
+ "resetToDerivedTitle": "Reset to derived value",
1466
+ "savingLabel": "Saving…",
1467
+ "seedLabels": {
1468
+ "accent": "Accent",
1469
+ "app": "App background",
1470
+ "error": "Error",
1471
+ "success": "Success",
1472
+ "surface": "Surface",
1473
+ "text": "Text",
1474
+ "warning": "Warning"
1475
+ },
1476
+ "syntaxColorsSummary": "Syntax colors"
1477
+ },
1478
+ "gallery": {
1479
+ "authorScreenshotLabel": "Author screenshot",
1480
+ "backAriaLabel": "Back to all themes",
1481
+ "detailSubtitle": "Live preview from the theme’s real colors",
1482
+ "empty": "No themes are available yet.",
1483
+ "installingLabel": "Installing…",
1484
+ "loadError": "Could not load the gallery: {{error}}",
1485
+ "loading": "Loading themes…",
1486
+ "screenshotAlt": "Screenshot of {{name}}",
1487
+ "screenshotError": "Screenshot could not be loaded.",
1488
+ "screenshotLoading": "Loading screenshot…",
1489
+ "showMore_one": "Show more ({{count}})",
1490
+ "showMore_other": "Show more ({{count}})",
1491
+ "subtitle": "From the pi-desktop-themes gallery — click a theme for details",
1492
+ "title": "Community themes",
1493
+ "viewDetailsAria": "View {{name}} details"
1494
+ },
1495
+ "kind": {
1496
+ "dark": "Dark",
1497
+ "light": "Light"
1498
+ }
1499
+ },
1500
+ "thinking": {
1501
+ "effort": "Effort",
1502
+ "effortWithLevel": "Thinking effort: {{level}}",
1503
+ "modelAwareDepth": "Model-aware thinking depth"
1504
+ },
1505
+ "time": {
1506
+ "justNow": "just now"
1507
+ },
1508
+ "timeline": {
1509
+ "agentFinished": "Agent finished",
1510
+ "agentStarted": "Agent started processing",
1511
+ "assistantResponseComplete": "Assistant response complete",
1512
+ "assistantResponseFailed": "Assistant response failed",
1513
+ "branchesHeading": "Branches",
1514
+ "clearButton": "Clear",
1515
+ "cloneBranchButton": "Clone branch",
1516
+ "cloneBranchTitle": "Clone the current branch into a new session",
1517
+ "compactionComplete": "Compaction complete",
1518
+ "compactionStarted": "Compaction started",
1519
+ "emptyHint": "Agent events will appear here in real-time",
1520
+ "emptyTitle": "No activity yet",
1521
+ "externalPromptReceived": "External prompt received",
1522
+ "forkButton": "Fork",
1523
+ "forkFromTitle": "Fork a new session from this message",
1524
+ "heading": "Agent Timeline",
1525
+ "noForkMessages": "No earlier messages to fork from.",
1526
+ "retryAttempt": "Retry attempt {{attempt}}",
1527
+ "retryComplete": "Retry complete",
1528
+ "sessionTreeHeading": "Session tree",
1529
+ "tool": "Tool: {{tool}}"
1530
+ },
1531
+ "tools": {
1532
+ "edit": {
1533
+ "done": "Edited {{target}}",
1534
+ "doneWithoutTarget": "Edited a file",
1535
+ "label": "Edit file",
1536
+ "summaryFirst_one": "Edited a file",
1537
+ "summaryFirst_other": "Edited {{count}} files",
1538
+ "summaryNext_one": "edited a file",
1539
+ "summaryNext_other": "edited {{count}} files"
1540
+ },
1541
+ "fetch": {
1542
+ "done": "Fetched {{target}}",
1543
+ "doneWithoutTarget": "Fetched a URL",
1544
+ "label": "Fetch URL",
1545
+ "summaryFirst_one": "Fetched a URL",
1546
+ "summaryFirst_other": "Fetched {{count}} URLs",
1547
+ "summaryNext_one": "fetched a URL",
1548
+ "summaryNext_other": "fetched {{count}} URLs"
1549
+ },
1550
+ "list": {
1551
+ "done": "Listed {{target}}",
1552
+ "doneWithoutTarget": "Listed a location",
1553
+ "label": "List files",
1554
+ "summaryFirst_one": "Listed a location",
1555
+ "summaryFirst_other": "Listed {{count}} locations",
1556
+ "summaryNext_one": "listed a location",
1557
+ "summaryNext_other": "listed {{count}} locations"
1558
+ },
1559
+ "other": {
1560
+ "summaryFirst_one": "Ran a tool",
1561
+ "summaryFirst_other": "Ran {{count}} tools",
1562
+ "summaryNext_one": "ran a tool",
1563
+ "summaryNext_other": "ran {{count}} tools"
1564
+ },
1565
+ "read": {
1566
+ "done": "Read {{target}}",
1567
+ "doneWithoutTarget": "Read a file",
1568
+ "label": "Read file",
1569
+ "summaryFirst_one": "Read a file",
1570
+ "summaryFirst_other": "Read {{count}} files",
1571
+ "summaryNext_one": "read a file",
1572
+ "summaryNext_other": "read {{count}} files"
1573
+ },
1574
+ "run": {
1575
+ "doneWithoutTarget": "Ran a command",
1576
+ "label": "Run command",
1577
+ "summaryFirst_one": "Ran a command",
1578
+ "summaryFirst_other": "Ran {{count}} commands",
1579
+ "summaryNext_one": "ran a command",
1580
+ "summaryNext_other": "ran {{count}} commands"
1581
+ },
1582
+ "search": {
1583
+ "done": "Searched {{target}}",
1584
+ "doneWithoutTarget": "Searched a query",
1585
+ "label": "Search",
1586
+ "summaryFirst_one": "Searched a query",
1587
+ "summaryFirst_other": "Searched {{count}} queries",
1588
+ "summaryNext_one": "searched a query",
1589
+ "summaryNext_other": "searched {{count}} queries"
1590
+ },
1591
+ "summarySeparator": ", ",
1592
+ "write": {
1593
+ "done": "Created {{target}}",
1594
+ "doneWithoutTarget": "Created a file",
1595
+ "label": "Write file",
1596
+ "summaryFirst_one": "Created a file",
1597
+ "summaryFirst_other": "Created {{count}} files",
1598
+ "summaryNext_one": "created a file",
1599
+ "summaryNext_other": "created {{count}} files"
1600
+ }
1601
+ },
1602
+ "tray": {
1603
+ "show": "Show Pi Desktop",
1604
+ "stillRunningBody": "The window was hidden to the system tray. Click the tray icon to reopen it, or use Quit to exit.",
1605
+ "stillRunningTitle": "Pi Desktop is still running",
1606
+ "unavailableBody": "This desktop has no system tray, so Pi Desktop will close normally instead of minimizing to the tray.",
1607
+ "unavailableTitle": "System tray unavailable"
1608
+ },
1609
+ "workflows": {
1610
+ "agentGrid": {
1611
+ "noTranscriptCaptured": "No transcript captured",
1612
+ "openTranscript": "Open transcript"
1613
+ },
1614
+ "card": {
1615
+ "activeCount_one": "· {{count}} active",
1616
+ "activeCount_other": "· {{count}} active",
1617
+ "agentsProgress": "{{done}}/{{total}} agents"
1618
+ },
1619
+ "control": {
1620
+ "abortAriaLabel": "Abort run",
1621
+ "abortButtonLabel": "Abort",
1622
+ "dispatchFailed": "The control command could not be sent to {{agent}}.",
1623
+ "extensionMissing": "The workflows extension is not loaded in this workspace’s {{agent}} process.",
1624
+ "notPermittedResume": "This run cannot be resumed in its current state.",
1625
+ "notPermittedStop": "This run can no longer be aborted in its current state.",
1626
+ "notRunning": "{{agent}} is not running for this workspace, so the run cannot be controlled from here.",
1627
+ "pausedFallback": "Paused",
1628
+ "resumeAriaLabel": "Resume run",
1629
+ "resumeButtonLabel": "Resume",
1630
+ "resumeRequested": "Resume requested — restarting the run in its workspace…",
1631
+ "resumeTitle": "Resume the workflow in its workspace",
1632
+ "stopRequested": "Abort requested — stopping the run in its workspace…",
1633
+ "stopTitle": "Stop the workflow in its workspace",
1634
+ "timeout": "{{agent}} did not respond. The run may have changed state — refresh to see the latest.",
1635
+ "unavailable": "The workflow control is unavailable for this workspace right now.",
1636
+ "unreachable": "Could not reach the workflow control path for this workspace."
1637
+ },
1638
+ "detail": {
1639
+ "backAriaLabel": "All workflow runs",
1640
+ "refreshAriaLabel": "Refresh run",
1641
+ "statAgents": "agents",
1642
+ "statCostTime": "cost/time",
1643
+ "statTokens": "tokens",
1644
+ "stepsHeading": "Steps"
1645
+ },
1646
+ "panel": {
1647
+ "activeCount_one": "{{count}} active",
1648
+ "activeCount_other": "{{count}} active",
1649
+ "closeAriaLabel": "Close workflow runs",
1650
+ "loading": "Loading workflow…",
1651
+ "maximizeAriaLabel": "Maximize workflow navigator",
1652
+ "noRunsForProject": "No runs for this project",
1653
+ "noRunsForSession": "No runs for this session",
1654
+ "noRunsProjectDetail": "No workflow runs recorded for {{name}}. Runs from other projects appear in the global list.",
1655
+ "noRunsSessionDetail": "No workflow runs recorded for this session. Runs from older sessions appear in the global list.",
1656
+ "noRunsYet": "No runs yet",
1657
+ "recordedCount_one": "{{count}} recorded",
1658
+ "recordedCount_other": "{{count}} recorded",
1659
+ "refreshAriaLabel": "Refresh workflow runs",
1660
+ "restoreAriaLabel": "Restore workflow navigator",
1661
+ "runCommandHint": "Run <cmd>/workflows run …</cmd> in chat.",
1662
+ "stepTranscriptTitle": "Step transcript",
1663
+ "thisProjectFallback": "this project",
1664
+ "workflowDetailTitle": "Workflow detail"
1665
+ },
1666
+ "phaseStepper": {
1667
+ "agentsProgress": "{{done}}/{{total}} agents"
1668
+ },
1669
+ "result": {
1670
+ "characterCount_one": "{{count}} character",
1671
+ "characterCount_other": "{{count}} characters",
1672
+ "detailCount_one": "{{count}} detail",
1673
+ "detailCount_other": "{{count}} details",
1674
+ "emptyObject": "The workflow returned an empty object.",
1675
+ "emptyShape": "empty",
1676
+ "emptyValue": "Empty",
1677
+ "fieldCount_one": "{{count}} field",
1678
+ "fieldCount_other": "{{count}} fields",
1679
+ "itemCount_one": "{{count}} item",
1680
+ "itemCount_other": "{{count}} items",
1681
+ "itemTitle": "Item {{index}}",
1682
+ "markdownReport": "Markdown report",
1683
+ "moreItems_one": "+ {{count}} more items",
1684
+ "moreItems_other": "+ {{count}} more items",
1685
+ "nestedHidden": "Nested details hidden",
1686
+ "no": "No",
1687
+ "noAdditionalDetails": "No additional details.",
1688
+ "noDetails": "No details",
1689
+ "noItems": "No items",
1690
+ "none": "None",
1691
+ "outputLabel": "Output",
1692
+ "outputTitle": "Workflow output",
1693
+ "sectionCount_one": "{{count}} section",
1694
+ "sectionCount_other": "{{count}} sections",
1695
+ "yes": "Yes"
1696
+ },
1697
+ "status": {
1698
+ "aborted": "stopped"
1699
+ },
1700
+ "tabs": {
1701
+ "logs": "Logs",
1702
+ "overview": "Overview",
1703
+ "results": "Results",
1704
+ "script": "Script"
1705
+ },
1706
+ "transcript": {
1707
+ "backAriaLabel": "Back to run",
1708
+ "defaultPhaseLabel": "workflow step",
1709
+ "enableFullTranscriptsButton": "Enable full transcripts for future runs",
1710
+ "historyNotice": "Showing the workflow’s captured history. Future runs can retain every raw {{agent}} message and tool result.",
1711
+ "noTranscriptMessage": "No transcript was persisted for this step.",
1712
+ "persistenceEnabled": "Enabled globally. Reload {{agent}} before the next workflow run.",
1713
+ "settingsUpdateFailed": "Could not update workflow settings.",
1714
+ "sourceCapturedHistory": "captured workflow history",
1715
+ "sourceFullSession": "full session transcript",
1716
+ "sourceNone": "no transcript",
1717
+ "stepPromptLabel": "Step prompt",
1718
+ "stepResultLabel": "Step result",
1719
+ "subtitle": "{{phase}} · {{source}}"
1720
+ }
1721
+ },
1722
+ "workspaceTabs": {
1723
+ "closeSessionTab": "Close session tab",
1724
+ "closeTabAriaLabel": "Close {{name}}",
1725
+ "closeTools": "Close tools",
1726
+ "newIsolatedTabAriaLabel": "New isolated Git tab",
1727
+ "newIsolatedTabTitle": "New isolated Git tab (requires a Git project)",
1728
+ "newSessionAriaLabel": "New session in this project",
1729
+ "newSessionFallback": "New session",
1730
+ "newSessionTitle": "New session in this project (Ctrl/Cmd+N)",
1731
+ "removeWorkspaceAriaLabel": "Remove {{name}}",
1732
+ "sessions": "Sessions",
1733
+ "tools": "Tools"
1734
+ }
1735
+ }