@f5xc-salesdemos/xcsh 19.23.1 → 19.25.0

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@f5xc-salesdemos/xcsh",
4
- "version": "19.23.1",
4
+ "version": "19.25.0",
5
5
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
6
6
  "homepage": "https://github.com/f5xc-salesdemos/xcsh",
7
7
  "author": "Can Boluk",
@@ -50,12 +50,12 @@
50
50
  "dependencies": {
51
51
  "@agentclientprotocol/sdk": "0.16.1",
52
52
  "@mozilla/readability": "^0.6",
53
- "@f5xc-salesdemos/xcsh-stats": "19.23.1",
54
- "@f5xc-salesdemos/pi-agent-core": "19.23.1",
55
- "@f5xc-salesdemos/pi-ai": "19.23.1",
56
- "@f5xc-salesdemos/pi-natives": "19.23.1",
57
- "@f5xc-salesdemos/pi-tui": "19.23.1",
58
- "@f5xc-salesdemos/pi-utils": "19.23.1",
53
+ "@f5xc-salesdemos/xcsh-stats": "19.25.0",
54
+ "@f5xc-salesdemos/pi-agent-core": "19.25.0",
55
+ "@f5xc-salesdemos/pi-ai": "19.25.0",
56
+ "@f5xc-salesdemos/pi-natives": "19.25.0",
57
+ "@f5xc-salesdemos/pi-tui": "19.25.0",
58
+ "@f5xc-salesdemos/pi-utils": "19.25.0",
59
59
  "@sinclair/typebox": "^0.34",
60
60
  "@xterm/headless": "^6.0",
61
61
  "ajv": "^8.20",
@@ -17,17 +17,17 @@ export interface BuildInfo {
17
17
  }
18
18
 
19
19
  export const BUILD_INFO: BuildInfo = {
20
- "version": "19.23.1",
21
- "commit": "b1a85a4920cd93796d6b73b7aea3685dde5aaefc",
22
- "shortCommit": "b1a85a4",
20
+ "version": "19.25.0",
21
+ "commit": "4635eeef49227a2124c96c1f61824387bcc83b86",
22
+ "shortCommit": "4635eee",
23
23
  "branch": "main",
24
- "tag": "v19.23.1",
25
- "commitDate": "2026-06-09T23:43:51-04:00",
26
- "buildDate": "2026-06-10T04:14:47.865Z",
24
+ "tag": "v19.25.0",
25
+ "commitDate": "2026-06-10T17:26:19Z",
26
+ "buildDate": "2026-06-10T17:52:12.763Z",
27
27
  "dirty": true,
28
28
  "prNumber": "",
29
29
  "repoUrl": "https://github.com/f5xc-salesdemos/xcsh",
30
30
  "repoSlug": "f5xc-salesdemos/xcsh",
31
- "commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/b1a85a4920cd93796d6b73b7aea3685dde5aaefc",
32
- "releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v19.23.1"
31
+ "commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/4635eeef49227a2124c96c1f61824387bcc83b86",
32
+ "releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v19.25.0"
33
33
  };
@@ -151,6 +151,13 @@ export const TERRAFORM_INDEX: TerraformIndex = {
151
151
  resource_count: 4,
152
152
  resources: ["app_setting", "app_type", "discovery", "filter_set"],
153
153
  },
154
+ {
155
+ name: "Monitoring",
156
+ slug: "monitoring",
157
+ description: "Log receivers, alert policies, APM, and global logging configuration",
158
+ resource_count: 4,
159
+ resources: ["alert_receiver", "apm", "global_log_receiver", "log_receiver"],
160
+ },
154
161
  {
155
162
  name: "Certificates",
156
163
  slug: "certificates",
@@ -165,20 +172,6 @@ export const TERRAFORM_INDEX: TerraformIndex = {
165
172
  resource_count: 4,
166
173
  resources: ["ike1", "ike2", "ike_phase1_profile", "ike_phase2_profile"],
167
174
  },
168
- {
169
- name: "Monitoring",
170
- slug: "monitoring",
171
- description: "Log receivers, alert policies, APM, and global logging configuration",
172
- resource_count: 4,
173
- resources: ["alert_receiver", "apm", "global_log_receiver", "log_receiver"],
174
- },
175
- {
176
- name: "Authentication",
177
- slug: "authentication",
178
- description: "Authentication methods, cloud credentials, and secret management",
179
- resource_count: 3,
180
- resources: ["authentication", "cloud_credentials", "secret_management_access"],
181
- },
182
175
  {
183
176
  name: "DNS",
184
177
  slug: "dns",
@@ -194,11 +187,18 @@ export const TERRAFORM_INDEX: TerraformIndex = {
194
187
  resources: ["bigip_http_proxy", "data_group", "irule"],
195
188
  },
196
189
  {
197
- name: "Cloud Resources",
198
- slug: "cloud-resources",
199
- description: "Cloud elastic IPs, address allocators, and geo-location resources",
190
+ name: "Authentication",
191
+ slug: "authentication",
192
+ description: "Authentication methods, cloud credentials, and secret management",
193
+ resource_count: 3,
194
+ resources: ["authentication", "cloud_credentials", "secret_management_access"],
195
+ },
196
+ {
197
+ name: "Uncategorized",
198
+ slug: "uncategorized",
199
+ description: "Resources pending categorization",
200
200
  resource_count: 2,
201
- resources: ["address_allocator", "cloud_elastic_ip"],
201
+ resources: ["application_profiles", "authorization_server"],
202
202
  },
203
203
  {
204
204
  name: "Organization",
@@ -208,11 +208,18 @@ export const TERRAFORM_INDEX: TerraformIndex = {
208
208
  resources: ["namespace", "tenant_configuration"],
209
209
  },
210
210
  {
211
- name: "Uncategorized",
212
- slug: "uncategorized",
213
- description: "Resources pending categorization",
211
+ name: "Cloud Resources",
212
+ slug: "cloud-resources",
213
+ description: "Cloud elastic IPs, address allocators, and geo-location resources",
214
214
  resource_count: 2,
215
- resources: ["application_profiles", "authorization_server"],
215
+ resources: ["address_allocator", "cloud_elastic_ip"],
216
+ },
217
+ {
218
+ name: "Subscriptions",
219
+ slug: "subscriptions",
220
+ description: "Cloud subscription management and metering",
221
+ resource_count: 1,
222
+ resources: ["cminstance"],
216
223
  },
217
224
  {
218
225
  name: "Integrations",
@@ -228,13 +235,6 @@ export const TERRAFORM_INDEX: TerraformIndex = {
228
235
  resource_count: 1,
229
236
  resources: ["policer"],
230
237
  },
231
- {
232
- name: "Subscriptions",
233
- slug: "subscriptions",
234
- description: "Cloud subscription management and metering",
235
- resource_count: 1,
236
- resources: ["cminstance"],
237
- },
238
238
  ],
239
239
  resources: {
240
240
  address_allocator: {
@@ -52,6 +52,31 @@
52
52
  "ssh.errors.invalidPort": "خطأ: يجب أن يكون المنفذ عدداً صحيحاً بين 1 و 65535",
53
53
  "ssh.status.hostAdded": "تمت إضافة مضيف SSH \"{name}\" إلى إعداد {scope}",
54
54
  "ssh.status.hostRemoved": "تمت إزالة مضيف SSH \"{name}\" من إعداد {scope}",
55
+ "ssh.controller.unknownSubcommand": "Unknown subcommand: {subcommand}. Type /ssh help for usage.",
56
+ "ssh.add.usage": "Usage: /ssh add <name> --host <host> [--user <user>] [--port <port>] [--key <keyPath>] [--desc <description>] [--compat] [--scope project|user]",
57
+ "ssh.add.missingHost": "Missing value for --host.",
58
+ "ssh.add.missingUser": "Missing value for --user.",
59
+ "ssh.add.missingPort": "Missing value for --port.",
60
+ "ssh.add.invalidPort": "Invalid --port value. Must be an integer between 1 and 65535.",
61
+ "ssh.add.missingKey": "Missing value for --key.",
62
+ "ssh.add.missingDesc": "Missing value for --desc.",
63
+ "ssh.add.invalidScope": "Invalid --scope value. Use project or user.",
64
+ "ssh.add.unknownOption": "Unknown option: {option}",
65
+ "ssh.add.nameRequired": "Host name required. Usage: /ssh add <name> --host <host> ...",
66
+ "ssh.add.hostRequired": "--host is required. Usage: /ssh add <name> --host <host> ...",
67
+ "ssh.add.failed": "Failed to add host: {message}",
68
+ "ssh.list.noneConfigured": "No SSH hosts configured.",
69
+ "ssh.list.title": "Configured SSH Hosts",
70
+ "ssh.list.userLevel": "User level",
71
+ "ssh.list.projectLevel": "Project level",
72
+ "ssh.list.discovered": "Discovered",
73
+ "ssh.list.readOnly": "read-only",
74
+ "ssh.list.failed": "Failed to list hosts: {message}",
75
+ "ssh.remove.invalidScope": "Invalid --scope value. Use project or user.",
76
+ "ssh.remove.unknownOption": "Unknown option: {option}",
77
+ "ssh.remove.nameRequired": "Host name required. Usage: /ssh remove <name> [--scope project|user]",
78
+ "ssh.remove.notFound": "Host \"{name}\" not found in {scope} config.",
79
+ "ssh.remove.failed": "Failed to remove host: {message}",
55
80
  "mode.plan.status.enabled": "تم تفعيل وضع الخطة. ملف الخطة: {path}",
56
81
  "mode.plan.status.paused": "تم إيقاف وضع الخطة مؤقتاً.",
57
82
  "mode.plan.status.disabled": "تم تعطيل وضع الخطة.",
@@ -66,5 +91,413 @@
66
91
  "ui.status.messageQueued": "تمت إضافة الرسالة إلى قائمة الانتظار بعد الضغط",
67
92
  "ui.errors.queuedMessageFailed": "فشل إرسال الرسالة المنتظرة: {message}",
68
93
  "shell.errors.ttyRequired": "خطأ: تتطلب وحدة التحكم TTY تفاعلياً.",
69
- "search.errors.queryRequired": "خطأ: الاستعلام مطلوب"
94
+ "search.errors.queryRequired": "خطأ: الاستعلام مطلوب",
95
+ "commands.settings.description": "Open settings menu",
96
+ "commands.plan.description": "Toggle plan mode (agent plans before executing)",
97
+ "commands.plan.inlineHint": "[prompt]",
98
+ "commands.model.description": "Select model (opens selector UI)",
99
+ "commands.fast.description": "Toggle fast mode (OpenAI service tier priority)",
100
+ "commands.fast.sub.on.description": "Enable fast mode",
101
+ "commands.fast.sub.off.description": "Disable fast mode",
102
+ "commands.fast.sub.status.description": "Show fast mode status",
103
+ "commands.fast.enabled": "Fast mode enabled.",
104
+ "commands.fast.disabled": "Fast mode disabled.",
105
+ "commands.fast.statusOn": "Fast mode is on.",
106
+ "commands.fast.statusOff": "Fast mode is off.",
107
+ "commands.fast.usage": "Usage: /fast [on|off|status]",
108
+ "commands.export.description": "Export session to HTML file",
109
+ "commands.export.inlineHint": "[path]",
110
+ "commands.dump.description": "Copy session transcript to clipboard",
111
+ "commands.share.description": "Share session as a secret GitHub gist",
112
+ "commands.browser.description": "Toggle browser headless vs visible mode",
113
+ "commands.browser.sub.headless.description": "Switch to headless mode",
114
+ "commands.browser.sub.visible.description": "Switch to visible mode",
115
+ "commands.browser.disabled": "Browser tool is disabled (enable in settings)",
116
+ "commands.browser.usage": "Usage: /browser [headless|visible]",
117
+ "commands.browser.modeHeadless": "Browser mode: headless",
118
+ "commands.browser.modeVisible": "Browser mode: visible",
119
+ "commands.browser.restartFailed": "Failed to restart browser: {message}",
120
+ "commands.copy.description": "Copy last agent message to clipboard",
121
+ "commands.copy.sub.last.description": "Copy full last agent message",
122
+ "commands.copy.sub.code.description": "Copy last code block",
123
+ "commands.copy.sub.all.description": "Copy all code blocks from last message",
124
+ "commands.copy.sub.cmd.description": "Copy last bash/python command",
125
+ "commands.session.description": "Session management commands",
126
+ "commands.session.sub.info.description": "Show session info and stats",
127
+ "commands.session.sub.delete.description": "Delete current session and return to selector",
128
+ "commands.jobs.description": "Show async background jobs status",
129
+ "commands.usage.description": "Show provider usage and limits",
130
+ "commands.changelog.description": "Show changelog entries",
131
+ "commands.changelog.sub.full.description": "Show complete changelog",
132
+ "commands.hotkeys.description": "Show all keyboard shortcuts",
133
+ "commands.tools.description": "Show tools currently visible to the agent",
134
+ "commands.extensions.description": "Open Extension Control Center dashboard",
135
+ "commands.agents.description": "Open Agent Control Center dashboard",
136
+ "commands.branch.description": "Create a new branch from a previous message",
137
+ "commands.fork.description": "Create a new fork from a previous message",
138
+ "commands.tree.description": "Navigate session tree (switch branches)",
139
+ "commands.login.description": "Login with OAuth provider",
140
+ "commands.login.inlineHint": "[provider|redirect URL]",
141
+ "commands.login.alreadyInProgressFor": "OAuth login already in progress for {provider}. Paste the redirect URL with /login <url>.",
142
+ "commands.login.alreadyInProgress": "OAuth login already in progress. Paste the redirect URL with /login <url>.",
143
+ "commands.login.callbackReceived": "OAuth callback received; completing login…",
144
+ "commands.login.noCallbackWaiting": "No OAuth login is waiting for a manual callback.",
145
+ "commands.logout.description": "Logout from OAuth provider",
146
+ "commands.mcp.description": "Manage MCP servers (add, list, remove, test)",
147
+ "commands.mcp.sub.add.description": "Add a new MCP server",
148
+ "commands.mcp.sub.list.description": "List all configured MCP servers",
149
+ "commands.mcp.sub.remove.description": "Remove an MCP server",
150
+ "commands.mcp.sub.test.description": "Test connection to a server",
151
+ "commands.mcp.sub.reauth.description": "Reauthorize OAuth for a server",
152
+ "commands.mcp.sub.unauth.description": "Remove OAuth auth from a server",
153
+ "commands.mcp.sub.enable.description": "Enable an MCP server",
154
+ "commands.mcp.sub.disable.description": "Disable an MCP server",
155
+ "commands.mcp.sub.smitherySearch.description": "Search Smithery registry and deploy an MCP server",
156
+ "commands.mcp.sub.smitheryLogin.description": "Login to Smithery and cache API key",
157
+ "commands.mcp.sub.smitheryLogout.description": "Remove cached Smithery API key",
158
+ "commands.mcp.sub.reconnect.description": "Reconnect to a specific MCP server",
159
+ "commands.mcp.sub.reload.description": "Force reload MCP runtime tools",
160
+ "commands.mcp.sub.resources.description": "List available resources from connected servers",
161
+ "commands.mcp.sub.prompts.description": "List available prompts from connected servers",
162
+ "commands.mcp.sub.notifications.description": "Show notification capabilities and subscriptions",
163
+ "commands.mcp.sub.help.description": "Show help message",
164
+ "commands.ssh.description": "Manage SSH hosts (add, list, remove)",
165
+ "commands.ssh.sub.add.description": "Add an SSH host",
166
+ "commands.ssh.sub.list.description": "List all configured SSH hosts",
167
+ "commands.ssh.sub.remove.description": "Remove an SSH host",
168
+ "commands.ssh.sub.help.description": "Show help message",
169
+ "commands.new.description": "Start a new session",
170
+ "commands.compact.description": "Manually compact the session context",
171
+ "commands.compact.inlineHint": "[focus instructions]",
172
+ "commands.handoff.description": "Hand off session context to a new session",
173
+ "commands.handoff.inlineHint": "[focus instructions]",
174
+ "commands.resume.description": "Resume a different session",
175
+ "commands.btw.description": "Ask an ephemeral side question using the current session context",
176
+ "commands.btw.inlineHint": "<question>",
177
+ "commands.background.description": "Detach UI and continue running in background",
178
+ "commands.debug.description": "Open debug tools selector",
179
+ "commands.memory.description": "Inspect and operate memory maintenance",
180
+ "commands.memory.sub.view.description": "Show current memory injection payload",
181
+ "commands.memory.sub.clear.description": "Clear persisted memory data and artifacts",
182
+ "commands.memory.sub.reset.description": "Alias for clear",
183
+ "commands.memory.sub.enqueue.description": "Enqueue memory consolidation maintenance",
184
+ "commands.memory.sub.rebuild.description": "Alias for enqueue",
185
+ "commands.rename.description": "Rename the current session",
186
+ "commands.rename.inlineHint": "<title>",
187
+ "commands.rename.usage": "Usage: /rename <title>",
188
+ "commands.move.description": "Move session to a different working directory",
189
+ "commands.move.inlineHint": "<path>",
190
+ "commands.move.usage": "Usage: /move <path>",
191
+ "commands.exit.description": "Exit the application",
192
+ "commands.plugin.description": "Manage plugins and marketplace sources",
193
+ "commands.plugin.sub.marketplace.description": "Manage marketplace sources (add, remove, update, list)",
194
+ "commands.plugin.sub.install.description": "Install a plugin",
195
+ "commands.plugin.sub.uninstall.description": "Uninstall a plugin",
196
+ "commands.plugin.sub.enable.description": "Enable a plugin",
197
+ "commands.plugin.sub.disable.description": "Disable a plugin",
198
+ "commands.plugin.sub.upgrade.description": "Upgrade plugins",
199
+ "commands.plugin.sub.discover.description": "Browse available plugins",
200
+ "commands.plugin.sub.list.description": "List all installed plugins",
201
+ "commands.plugin.sub.validate.description": "Validate marketplace or plugin manifest",
202
+ "commands.plugin.sub.setup.description": "Guided setup for recommended plugins",
203
+ "commands.plugin.sub.help.description": "Show usage guide",
204
+ "commands.plugin.marketplace.addUsage": "Usage: /plugin marketplace add <source>",
205
+ "commands.plugin.marketplace.added": "Added marketplace: {name}",
206
+ "commands.plugin.marketplace.removeUsage": "Usage: /plugin marketplace remove <name>",
207
+ "commands.plugin.marketplace.removed": "Removed marketplace: {name}",
208
+ "commands.plugin.marketplace.updated": "Updated marketplace: {name}",
209
+ "commands.plugin.marketplace.updatedAll": "Updated {count} marketplace(s)",
210
+ "commands.plugin.marketplace.noneConfiguredGetStarted": "No marketplaces configured.\n\nGet started:\n /plugin marketplace add f5xc-salesdemos/marketplace",
211
+ "commands.plugin.marketplace.listHint": "Use /plugin discover to browse plugins",
212
+ "commands.plugin.marketplace.noneConfiguredTry": "No marketplaces configured. Try:\n /plugin marketplace add f5xc-salesdemos/marketplace",
213
+ "commands.plugin.marketplace.noPluginsAvailable": "No plugins available in configured marketplaces",
214
+ "commands.plugin.installed": "Installed {name} from {marketplace}",
215
+ "commands.plugin.uninstalled": "Uninstalled {pluginId}",
216
+ "commands.plugin.enabled": "Enabled {pluginId}",
217
+ "commands.plugin.disabled": "Disabled {pluginId}",
218
+ "commands.plugin.upgraded": "Upgraded {pluginId} to {version}",
219
+ "commands.plugin.allUpToDate": "All plugins are up to date",
220
+ "commands.plugin.upgradedCount": "Upgraded {count} plugin(s):",
221
+ "commands.plugin.npmPlugins": "npm plugins:",
222
+ "commands.plugin.marketplacePlugins": "marketplace plugins:",
223
+ "commands.plugin.noneInstalled": "No plugins installed",
224
+ "commands.plugin.validate.marketplaceValid": "Marketplace \"{name}\" is valid ({count} plugin(s))",
225
+ "commands.plugin.validate.pluginValid": "Plugin \"{name}\" manifest is valid",
226
+ "commands.plugin.validate.notFound": "No .xcsh-plugin/marketplace.json or .xcsh-plugin/plugin.json found at {path}",
227
+ "commands.plugin.setup.noRecommended": "No recommended plugins found in configured marketplaces",
228
+ "commands.plugin.setup.allInstalled": "All recommended plugins are already installed",
229
+ "commands.plugin.setup.title": "Recommended plugins setup:",
230
+ "commands.plugin.setup.installCount": "Installed {installed}/{total} recommended plugin(s)",
231
+ "commands.plugin.setup.skippedCount": "{count} skipped — fix issues above and run /plugin setup again (idempotent)",
232
+ "commands.plugin.setup.installFailed": "install failed",
233
+ "commands.plugin.setup.installed": "installed",
234
+ "commands.plugin.setup.notAuthenticated": "not authenticated",
235
+ "commands.plugin.setup.authenticatedAs": "authenticated as {user}",
236
+ "commands.plugin.setup.ready": "ready",
237
+ "commands.plugin.setup.pluginInstalled": "plugin installed",
238
+ "commands.plugin.setup.pluginInstallFailed": "plugin install failed: {message}",
239
+ "commands.plugin.setup.notFoundInMarketplace": "not found in any marketplace",
240
+ "commands.plugin.help": "Plugin commands:\n /plugin Open plugin dashboard\n /plugin marketplace add <source> Add a marketplace (e.g. owner/repo)\n /plugin marketplace remove <name> Remove a marketplace\n /plugin marketplace update [name] Re-fetch catalog(s)\n /plugin marketplace list List configured marketplaces\n /plugin discover [marketplace] Browse available plugins\n /plugin install <name@marketplace> Install a plugin\n /plugin uninstall <name@marketplace> Uninstall a plugin\n /plugin enable <name@marketplace> Enable a plugin\n /plugin disable <name@marketplace> Disable a plugin\n /plugin upgrade [name@marketplace] Upgrade plugin(s)\n /plugin list List installed plugins\n /plugin validate [path] Validate marketplace or plugin\n /plugin setup Guided setup for recommended plugins\n\nQuick start:\n /plugin marketplace add f5xc-salesdemos/marketplace\n /plugin (opens plugin dashboard)\n\nAliases: /marketplace, /plugins",
241
+ "commands.plugin.marketplace.noneConfiguredBrowse": "No marketplaces configured.\n\nGet started:\n /plugin marketplace add f5xc-salesdemos/marketplace\n\nThen browse plugins with /plugin or /plugin discover",
242
+ "commands.plugin.marketplace.listHintAll": "Use /plugin discover to browse plugins, or /plugin help for all commands",
243
+ "commands.plugin.error": "Plugin error: {message}",
244
+ "commands.reloadPlugins.description": "Reload all plugins (skills, commands, hooks, tools, agents, MCP)",
245
+ "commands.reloadPlugins.done": "Plugins reloaded.",
246
+ "commands.force.description": "Force next turn to use a specific tool",
247
+ "commands.force.inlineHint": "<tool-name> [prompt]",
248
+ "commands.force.usage": "Usage: /force:<tool-name> [prompt]",
249
+ "commands.force.set": "Next turn forced to use {toolName}.",
250
+ "commands.quit.description": "Quit the application",
251
+ "commands.context.description": "Manage F5 XC authentication contexts",
252
+ "commands.context.sub.list.description": "List all contexts",
253
+ "commands.context.sub.activate.description": "Switch to a named context",
254
+ "commands.context.sub.validate.description": "Validate credentials for a context without activating",
255
+ "commands.context.sub.show.description": "Show context details (masked)",
256
+ "commands.context.sub.status.description": "Show current auth status",
257
+ "commands.context.sub.create.description": "Create a new context",
258
+ "commands.context.sub.delete.description": "Delete a context",
259
+ "commands.context.sub.rename.description": "Rename a context",
260
+ "commands.context.sub.export.description": "Export a context (or all contexts) as JSON",
261
+ "commands.context.sub.import.description": "Import contexts from a file path or inline JSON",
262
+ "commands.context.sub.namespace.description": "Switch namespace within active context",
263
+ "commands.context.sub.env.description": "Manage environment variables",
264
+ "commands.context.sub.set.description": "Set environment variable(s)",
265
+ "commands.context.sub.unset.description": "Remove environment variable(s)",
266
+ "commands.context.sub.wizard.description": "Guided interactive context setup",
267
+ "welcome.modelProvider": "Model Provider",
268
+ "welcome.plugins": "Plugins",
269
+ "welcome.pluginSetupHint": "run: /plugin setup",
270
+ "welcome.updateHint": "run: xcsh update",
271
+ "welcome.newVersion": "new version",
272
+ "welcome.connectionFailed": "— connection failed",
273
+ "welcome.runLoginReconnect": "Run /login to reconnect",
274
+ "welcome.noModelProvider": "No model provider configured",
275
+ "welcome.runLoginConnect": "Run /login to connect",
276
+ "plugins.tabs.installed": "Installed",
277
+ "plugins.tabs.recommended": "Recommended",
278
+ "plugins.tabs.discover": "Discover",
279
+ "plugins.tabs.updates": "Updates",
280
+ "plugins.list.searchPlaceholder": "type to filter",
281
+ "plugins.list.emptyDiscover": "No plugins available. Add a marketplace first.",
282
+ "plugins.list.emptyRecommended": "All recommended plugins are installed.",
283
+ "plugins.list.emptyUpdates": "All plugins are up to date.",
284
+ "plugins.list.emptyInstalled": "No plugins installed.",
285
+ "plugins.list.shadowed": "shadowed",
286
+ "plugins.list.disabled": "disabled",
287
+ "plugins.dashboard.title": "xcsh Plugin Center",
288
+ "plugins.dashboard.helpRecommended": "↑/↓: navigate Enter: install A: install all Tab: next tab Ctrl+R: reload Esc: close",
289
+ "plugins.dashboard.helpDiscover": "↑/↓: navigate Enter: install Tab: next tab Ctrl+R: reload Esc: close",
290
+ "plugins.dashboard.helpUpdates": "↑/↓: navigate Enter: upgrade Tab: next tab Ctrl+R: reload Esc: close",
291
+ "plugins.dashboard.helpInstalled": "↑/↓: navigate Space: toggle Enter: uninstall U: upgrade Tab: next tab Ctrl+R: reload Esc: close",
292
+ "plugins.dashboard.settingUp": "Setting up {name}... ({current}/{total})",
293
+ "plugins.dashboard.installCount": "Installed {installed}/{total} recommended plugin(s)",
294
+ "plugins.dashboard.allRecommendedInstalled": "All recommended plugins are already installed",
295
+ "plugins.dashboard.failedCount": "{count} failed",
296
+ "plugins.dashboard.authNeeded": "Auth needed: {items}",
297
+ "plugins.dashboard.uninstalled": "Uninstalled {name}",
298
+ "plugins.dashboard.uninstallFailed": "Uninstall failed: {message}",
299
+ "plugins.dashboard.upgraded": "Upgraded {name}",
300
+ "plugins.dashboard.upgradeFailed": "Upgrade failed: {message}",
301
+ "plugins.dashboard.upgrading": "Upgrading {name}...",
302
+ "controller.export.warnings.useDump": "Use /dump to copy the session to clipboard.",
303
+ "controller.export.status.exported": "Session exported to: {path}",
304
+ "controller.export.errors.failed": "Failed to export session: {message}",
305
+ "controller.dump.errors.noMessages": "No messages to dump yet.",
306
+ "controller.dump.status.copied": "Session copied to clipboard",
307
+ "controller.dump.errors.failed": "Failed to copy session: {message}",
308
+ "controller.debug.errors.noMessages": "No messages to dump yet.",
309
+ "controller.debug.status.written": "Debug transcript written to:\n{path}",
310
+ "controller.debug.errors.failed": "Failed to write debug transcript: {message}",
311
+ "controller.copy.errors.unknownSub": "Unknown subcommand: {sub}. Use code, all, cmd, or last.",
312
+ "controller.copy.errors.noMessages": "No agent messages to copy yet.",
313
+ "controller.copy.status.lastMessage": "Copied last agent message to clipboard",
314
+ "controller.copy.warnings.noCodeBlock": "No code block found in the last agent message.",
315
+ "controller.copy.status.codeBlock": "Copied last code block to clipboard",
316
+ "controller.copy.warnings.noCodeBlocks": "No code blocks found in the last agent message.",
317
+ "controller.copy.status.codeBlocks": "Copied {count} code block(s) to clipboard",
318
+ "controller.copy.status.bashCommand": "Copied last bash command to clipboard",
319
+ "controller.copy.status.pythonCode": "Copied last python code to clipboard",
320
+ "controller.copy.warnings.noCommand": "No bash or python command found in the conversation.",
321
+ "controller.session.title": "Session Info",
322
+ "controller.session.file": "File:",
323
+ "controller.session.inMemory": "In-memory",
324
+ "controller.session.id": "ID:",
325
+ "controller.session.provider": "Provider",
326
+ "controller.session.noModel": "No model selected",
327
+ "controller.session.messages": "Messages",
328
+ "controller.session.user": "User:",
329
+ "controller.session.assistant": "Assistant:",
330
+ "controller.session.toolCalls": "Tool Calls:",
331
+ "controller.session.toolResults": "Tool Results:",
332
+ "controller.session.total": "Total:",
333
+ "controller.session.tokens": "Tokens",
334
+ "controller.session.input": "Input:",
335
+ "controller.session.output": "Output:",
336
+ "controller.session.cacheRead": "Cache Read:",
337
+ "controller.session.cacheWrite": "Cache Write:",
338
+ "controller.session.cost": "Cost",
339
+ "controller.session.premiumRequests": "Premium Requests:",
340
+ "controller.session.pythonGateway": "Python Gateway",
341
+ "controller.session.status": "Status:",
342
+ "controller.session.gatewayActive": "Active (Global)",
343
+ "controller.session.gatewayInactive": "Inactive",
344
+ "controller.session.url": "URL:",
345
+ "controller.session.pid": "PID:",
346
+ "controller.session.python": "Python:",
347
+ "controller.session.venv": "Venv:",
348
+ "controller.session.uptime": "Uptime:",
349
+ "controller.session.lspServers": "LSP Servers",
350
+ "controller.session.mcpServers": "MCP Servers",
351
+ "controller.session.noneConnected": "None connected",
352
+ "controller.jobs.title": "Background Jobs",
353
+ "controller.jobs.running": "Running:",
354
+ "controller.jobs.noJobs": "No async jobs yet.",
355
+ "controller.jobs.runningJobs": "Running Jobs",
356
+ "controller.jobs.recentJobs": "Recent Jobs",
357
+ "controller.jobs.unavailable": "Async background jobs are unavailable in this session.",
358
+ "controller.usage.notConfigured": "Usage reporting is not configured for this session.",
359
+ "controller.usage.fetchFailed": "Failed to fetch usage data: {message}",
360
+ "controller.usage.noData": "No usage data available.",
361
+ "controller.changelog.noEntries": "No changelog entries found.",
362
+ "controller.changelog.fullTitle": "Full Changelog",
363
+ "controller.changelog.recentTitle": "Recent Changes",
364
+ "controller.hotkeys.title": "Keyboard Shortcuts",
365
+ "controller.tools.title": "Available Tools",
366
+ "controller.memory.title": "Memory Injection Payload",
367
+ "controller.memory.empty": "Memory payload is empty (memories disabled or no memory summary found).",
368
+ "controller.memory.cleared": "Memory data cleared and system prompt refreshed.",
369
+ "controller.memory.clearFailed": "Memory clear failed: {message}",
370
+ "controller.memory.enqueued": "Memory consolidation enqueued.",
371
+ "controller.memory.enqueueFailed": "Memory enqueue failed: {message}",
372
+ "controller.memory.usage": "Usage: /memory <view|clear|reset|enqueue|rebuild>",
373
+ "controller.newSession": "New session started",
374
+ "controller.fork.streaming": "Wait for the current response to finish or abort it before forking.",
375
+ "controller.fork.failed": "Fork failed (session not persisted or cancelled)",
376
+ "controller.fork.success": "Session forked to {path}",
377
+ "controller.move.streaming": "Wait for the current response to finish or abort it before moving.",
378
+ "controller.move.usage": "Usage: /move <path>",
379
+ "controller.move.notDirectory": "Not a directory: {path}",
380
+ "controller.move.notExists": "Directory does not exist: {path}",
381
+ "controller.move.success": "Session moved to {path}",
382
+ "controller.move.failed": "Move failed: {message}",
383
+ "controller.rename.empty": "Session name cannot be empty.",
384
+ "controller.rename.success": "Session renamed to \"{name}\".",
385
+ "controller.rename.failed": "Rename failed: {message}",
386
+ "controller.share.ghNotLoggedIn": "GitHub CLI is not logged in. Run 'gh auth login' first.",
387
+ "controller.share.ghNotInstalled": "GitHub CLI (gh) is not installed. Install it from https://cli.github.com/",
388
+ "controller.share.creatingGist": "Creating gist...",
389
+ "controller.share.sharing": "Sharing...",
390
+ "controller.share.cancelled": "Share cancelled",
391
+ "controller.share.sessionShared": "Session shared",
392
+ "controller.share.customFailed": "Custom share failed: {message}",
393
+ "controller.share.gistFailed": "Failed to create gist: {message}",
394
+ "controller.share.gistParseFailed": "Failed to parse gist ID from gh output",
395
+ "controller.bash.failed": "Bash command failed: {message}",
396
+ "hotkeys.navigation.title": "Navigation",
397
+ "hotkeys.navigation.moveCursor": "Move cursor / browse history (Up when empty)",
398
+ "hotkeys.navigation.moveByWord": "Move by word",
399
+ "hotkeys.navigation.startOfLine": "Start of line",
400
+ "hotkeys.navigation.endOfLine": "End of line",
401
+ "hotkeys.editing.title": "Editing",
402
+ "hotkeys.editing.sendMessage": "Send message",
403
+ "hotkeys.editing.newLine": "New line",
404
+ "hotkeys.editing.deleteWordBackwards": "Delete word backwards",
405
+ "hotkeys.editing.deleteToStart": "Delete to start of line",
406
+ "hotkeys.editing.deleteToEnd": "Delete to end of line",
407
+ "hotkeys.editing.copyLine": "Copy current line",
408
+ "hotkeys.editing.copyPrompt": "Copy whole prompt",
409
+ "hotkeys.other.title": "Other",
410
+ "hotkeys.other.pathCompletion": "Path completion / accept autocomplete",
411
+ "hotkeys.other.cancelInterrupt": "Cancel autocomplete / interrupt active work",
412
+ "hotkeys.other.clearExit": "Clear editor (first) / exit (second)",
413
+ "hotkeys.other.exit": "Exit (when editor is empty)",
414
+ "hotkeys.other.suspend": "Suspend to background",
415
+ "hotkeys.other.cycleThinking": "Cycle thinking level",
416
+ "hotkeys.other.cycleModelsForward": "Cycle role models (slow/default/smol)",
417
+ "hotkeys.other.cycleModelsBackward": "Cycle role models (temporary)",
418
+ "hotkeys.other.selectModelTemp": "Select model (temporary)",
419
+ "hotkeys.other.selectModel": "Select model (set roles)",
420
+ "hotkeys.other.togglePlan": "Toggle plan mode",
421
+ "hotkeys.other.searchHistory": "Search prompt history",
422
+ "hotkeys.other.toggleToolExpand": "Toggle tool output expansion",
423
+ "hotkeys.other.toggleThinking": "Toggle thinking block visibility",
424
+ "hotkeys.other.externalEditor": "Edit message in external editor",
425
+ "hotkeys.other.pasteImage": "Paste image from clipboard",
426
+ "hotkeys.other.toggleStt": "Toggle speech-to-text recording",
427
+ "hotkeys.other.promptActions": "Open prompt actions",
428
+ "hotkeys.other.slashCommands": "Slash commands",
429
+ "hotkeys.other.runBash": "Run bash command",
430
+ "hotkeys.other.runBashExcluded": "Run bash command (excluded from context)",
431
+ "hotkeys.other.runPython": "Run Python in shared kernel",
432
+ "hotkeys.other.runPythonExcluded": "Run Python (excluded from context)",
433
+ "tools.emptyState": "No tools are currently visible to the agent.",
434
+ "tools.noDescription": "No description provided.",
435
+ "tools.tableHeaderTool": "Tool",
436
+ "tools.tableHeaderDescription": "Description",
437
+ "context.list.noneFound": "No F5 XC contexts found. Use /context create or ask me to help set one up.",
438
+ "context.activate.usage": "Usage: /context activate <name>. Run `/context list` to see available contexts.",
439
+ "context.activate.notFound": "Context '{name}' not found. Run /context list to see available contexts, or /context create {name} <url> <token> to create one.",
440
+ "context.show.noActive": "No active context. Run `/context create <name>` to create one, or `/context activate <name>` if contexts exist.",
441
+ "context.show.notFound": "Context '{name}' not found. Run `/context list` to see available contexts.",
442
+ "context.validate.usage": "Missing context name. Usage: /context validate <name>. For the active context, use /context status.",
443
+ "context.status.notConfigured": "Not configured. Use /context create or ask me to help set one up.",
444
+ "context.create.usage": "Usage: /context create <name> <url> <token> [namespace]",
445
+ "context.create.invalidName": "Context name must be alphanumeric with dashes/underscores, max 64 chars.",
446
+ "context.create.invalidUrl": "API URL must be a valid HTTPS URL (e.g. https://tenant.console.ves.volterra.io)",
447
+ "context.rename.usage": "Usage: /context rename <old> <new>",
448
+ "context.export.usage": "Usage: /context export [name] [--include-token]",
449
+ "context.import.usage": "Usage: /context import <path-or-json> [--overwrite]",
450
+ "context.import.invalidJson": "Import source is not valid JSON: {message}",
451
+ "context.import.fileNotFound": "Import file not found: {path}",
452
+ "context.delete.usage": "Usage: /context delete <name> --confirm",
453
+ "context.delete.cannotDeleteActive": "Cannot delete the active context. Run `/context activate <other>` to switch first.",
454
+ "context.namespace.usage": "Usage: /context namespace <name>\nSwitches the active namespace without changing the context. Default is 'default'.",
455
+ "context.env.unknownAction": "Unknown env action: {action}. Use /context env set|unset|list",
456
+ "context.env.noActive": "No active context. Use /context activate <name> first.",
457
+ "context.env.set.usage": "No KEY=VALUE pairs found. Usage: /context set KEY=VALUE [KEY2=VALUE2 ...]",
458
+ "context.env.unset.usage": "No variable names found. Usage: /context unset KEY [KEY2 ...]",
459
+ "mcp.errors.unknownSubcommand": "Unknown subcommand: {subcommand}. Type /mcp help for usage.",
460
+ "mcp.errors.invalidScope": "Invalid --scope value. Use project or user.",
461
+ "mcp.errors.unknownOption": "Unknown option: {option}",
462
+ "mcp.errors.missingUrl": "Missing value for --url.",
463
+ "mcp.errors.invalidTransport": "Invalid --transport value. Use http or sse.",
464
+ "mcp.errors.missingToken": "Missing value for --token.",
465
+ "mcp.errors.missingLimit": "Missing value for --limit.",
466
+ "mcp.errors.invalidLimit": "Invalid --limit value. Use an integer between 1 and 100.",
467
+ "mcp.errors.serverNotFound": "Server \"{name}\" not found.",
468
+ "mcp.errors.serverNotFoundInScope": "Server \"{name}\" not found in {scope} config.",
469
+ "mcp.errors.noManager": "No MCP manager available.",
470
+ "mcp.action.enable": "enable",
471
+ "mcp.action.disable": "disable",
472
+ "mcp.add.nameRequired": "Server name required for quick add. Usage: /mcp add <name> ...",
473
+ "mcp.add.urlOrCommand": "Use either --url or -- <command...>, not both.",
474
+ "mcp.add.tokenRequiresUrl": "--token requires --url (HTTP/SSE transport).",
475
+ "mcp.remove.usage": "Server name required. Usage: /mcp remove <name> [--scope project|user]",
476
+ "mcp.remove.failed": "Failed to remove server: {message}",
477
+ "mcp.test.usage": "Server name required. Usage: /mcp test <name>",
478
+ "mcp.test.disabled": "Server \"{name}\" is disabled. Run /mcp enable {name} first.",
479
+ "mcp.test.cancelled": "Cancelled MCP test for \"{name}\"",
480
+ "mcp.test.failed": "Failed to connect to \"{name}\": {message}",
481
+ "mcp.enable.usage": "Server name required. Usage: /mcp enable <name>",
482
+ "mcp.disable.usage": "Server name required. Usage: /mcp disable <name>",
483
+ "mcp.setEnabled.failed": "Failed to {action} server: {message}",
484
+ "mcp.unauth.usage": "Server name required. Usage: /mcp unauth <name>",
485
+ "mcp.unauth.failed": "Failed to clear auth: {message}",
486
+ "mcp.reauth.usage": "Server name required. Usage: /mcp reauth <name>",
487
+ "mcp.reauth.disabled": "Server \"{name}\" is disabled. Run /mcp enable {name} first.",
488
+ "mcp.reauth.failed": "Failed to reauthorize server: {message}",
489
+ "mcp.reload.failed": "Failed to reload MCP: {message}",
490
+ "mcp.reconnect.usage": "Server name required. Usage: /mcp reconnect <name>",
491
+ "mcp.reconnect.failed": "Failed to reconnect to \"{name}\". Check server status and logs.",
492
+ "mcp.reconnect.failedWithError": "Failed to reconnect to \"{name}\": {message}",
493
+ "mcp.smithery.searchUsage": "Keyword required. Usage: /mcp smithery-search <keyword> [--scope project|user] [--limit <1-100>] [--semantic]",
494
+ "mcp.smithery.keyEmpty": "Smithery API key cannot be empty.",
495
+ "mcp.smithery.keySaved": "Smithery API key saved.",
496
+ "mcp.smithery.validationFailed": "Smithery API key validation failed: {message}",
497
+ "mcp.smithery.loginCancelled": "Smithery login cancelled.",
498
+ "mcp.smithery.keyRemoved": "Smithery API key removed.",
499
+ "mcp.smithery.noKeyFound": "No cached Smithery API key found.",
500
+ "mcp.smithery.deployCancelled": "MCP deploy cancelled.",
501
+ "mcp.smithery.selectionCancelled": "MCP Smithery selection cancelled.",
502
+ "mcp.smithery.searchFailed": "Smithery search failed: {message}"
70
503
  }