@geminilight/mindos 0.5.64 → 0.5.66

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 (86) hide show
  1. package/README.md +4 -0
  2. package/README_zh.md +4 -0
  3. package/app/app/api/ask/route.ts +12 -0
  4. package/app/app/api/file/route.ts +9 -0
  5. package/app/app/api/mcp/agents/route.ts +27 -1
  6. package/app/app/api/skills/route.ts +18 -2
  7. package/app/app/api/tree-version/route.ts +8 -0
  8. package/app/components/ActivityBar.tsx +2 -2
  9. package/app/components/Backlinks.tsx +5 -5
  10. package/app/components/CreateSpaceModal.tsx +3 -2
  11. package/app/components/DirPicker.tsx +1 -1
  12. package/app/components/DirView.tsx +2 -3
  13. package/app/components/EditorWrapper.tsx +3 -3
  14. package/app/components/FileTree.tsx +25 -10
  15. package/app/components/GuideCard.tsx +4 -4
  16. package/app/components/HomeContent.tsx +6 -11
  17. package/app/components/MarkdownView.tsx +2 -2
  18. package/app/components/OnboardingView.tsx +1 -1
  19. package/app/components/Panel.tsx +1 -1
  20. package/app/components/RightAgentDetailPanel.tsx +1 -1
  21. package/app/components/RightAskPanel.tsx +1 -1
  22. package/app/components/SearchModal.tsx +10 -2
  23. package/app/components/SidebarLayout.tsx +35 -10
  24. package/app/components/ThemeToggle.tsx +1 -1
  25. package/app/components/agents/AgentDetailContent.tsx +454 -59
  26. package/app/components/agents/AgentsContentPage.tsx +70 -5
  27. package/app/components/agents/AgentsMcpSection.tsx +474 -159
  28. package/app/components/agents/AgentsOverviewSection.tsx +418 -59
  29. package/app/components/agents/AgentsPrimitives.tsx +335 -0
  30. package/app/components/agents/AgentsSkillsSection.tsx +739 -121
  31. package/app/components/agents/SkillDetailPopover.tsx +416 -0
  32. package/app/components/agents/agents-content-model.ts +292 -10
  33. package/app/components/ask/AskContent.tsx +34 -5
  34. package/app/components/ask/FileChip.tsx +1 -0
  35. package/app/components/ask/MentionPopover.tsx +13 -1
  36. package/app/components/ask/MessageList.tsx +5 -7
  37. package/app/components/ask/ToolCallBlock.tsx +4 -4
  38. package/app/components/changes/ChangesBanner.tsx +1 -2
  39. package/app/components/echo/EchoHero.tsx +10 -24
  40. package/app/components/echo/EchoInsightCollapsible.tsx +52 -43
  41. package/app/components/echo/EchoPageSections.tsx +13 -9
  42. package/app/components/echo/EchoSegmentNav.tsx +14 -11
  43. package/app/components/echo/EchoSegmentPageClient.tsx +64 -43
  44. package/app/components/explore/ExploreContent.tsx +3 -7
  45. package/app/components/explore/UseCaseCard.tsx +4 -15
  46. package/app/components/panels/AgentsPanel.tsx +12 -104
  47. package/app/components/panels/AgentsPanelAgentDetail.tsx +2 -2
  48. package/app/components/panels/AgentsPanelAgentGroups.tsx +3 -7
  49. package/app/components/panels/AgentsPanelAgentListRow.tsx +9 -11
  50. package/app/components/panels/EchoPanel.tsx +8 -10
  51. package/app/components/panels/PanelNavRow.tsx +9 -2
  52. package/app/components/panels/PluginsPanel.tsx +2 -2
  53. package/app/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +30 -8
  54. package/app/components/renderers/agent-inspector/manifest.ts +3 -3
  55. package/app/components/renderers/todo/manifest.ts +1 -0
  56. package/app/components/settings/AiTab.tsx +3 -3
  57. package/app/components/settings/AppearanceTab.tsx +2 -2
  58. package/app/components/settings/KnowledgeTab.tsx +3 -3
  59. package/app/components/settings/McpAgentInstall.tsx +3 -6
  60. package/app/components/settings/McpSkillCreateForm.tsx +2 -3
  61. package/app/components/settings/McpSkillRow.tsx +2 -3
  62. package/app/components/settings/McpSkillsSection.tsx +2 -2
  63. package/app/components/settings/McpTab.tsx +12 -13
  64. package/app/components/settings/MonitoringTab.tsx +13 -13
  65. package/app/components/settings/PluginsTab.tsx +2 -2
  66. package/app/components/settings/Primitives.tsx +3 -4
  67. package/app/components/settings/SettingsContent.tsx +3 -3
  68. package/app/components/settings/SyncTab.tsx +11 -17
  69. package/app/components/settings/UpdateTab.tsx +18 -21
  70. package/app/components/settings/types.ts +14 -0
  71. package/app/components/setup/StepKB.tsx +1 -1
  72. package/app/hooks/useMcpData.tsx +4 -2
  73. package/app/hooks/useMention.ts +25 -8
  74. package/app/lib/agent/log.ts +15 -18
  75. package/app/lib/agent/prompt.ts +17 -29
  76. package/app/lib/agent/stream-consumer.ts +3 -0
  77. package/app/lib/agent/to-agent-messages.ts +6 -4
  78. package/app/lib/core/agent-audit-log.ts +280 -0
  79. package/app/lib/core/index.ts +11 -0
  80. package/app/lib/fs.ts +9 -0
  81. package/app/lib/i18n-en.ts +259 -33
  82. package/app/lib/i18n-zh.ts +258 -32
  83. package/app/lib/mcp-agents.ts +231 -2
  84. package/app/lib/types.ts +2 -0
  85. package/package.json +1 -1
  86. package/scripts/migrate-agent-audit-log.js +170 -0
@@ -223,11 +223,16 @@ export const en = {
223
223
  },
224
224
  echo: {
225
225
  title: 'Echo',
226
- aboutYouTitle: 'Tied to you',
227
- continuedTitle: 'Still open',
228
- dailyEchoTitle: 'Daily echo',
229
- pastYouTitle: 'Who you were',
230
- intentGrowthTitle: 'Heart & growth',
226
+ aboutYouTitle: 'About you',
227
+ aboutYouDesc: 'Notes that point back to you',
228
+ continuedTitle: 'Unfinished',
229
+ continuedDesc: 'Drafts and open loops',
230
+ dailyEchoTitle: 'Today',
231
+ dailyDesc: 'One line, no pressure',
232
+ pastYouTitle: 'Past self',
233
+ pastYouDesc: 'A glimpse at another time',
234
+ intentGrowthTitle: 'Growth',
235
+ growthDesc: 'The direction you\'re pushing',
231
236
  },
232
237
  discover: {
233
238
  title: 'Discover',
@@ -245,27 +250,26 @@ export const en = {
245
250
  },
246
251
  },
247
252
  echoPages: {
248
- breadcrumbNav: 'Breadcrumb',
249
253
  parent: 'Echo',
250
254
  heroKicker: 'Echo',
251
255
  segmentNavAria: 'Echo sections',
252
256
  snapshotBadge: 'Local · private',
253
257
  factsHeading: 'Snapshot',
254
- snapshotAboutYouTitle: 'Clues will gather here',
258
+ snapshotAboutYouTitle: 'Clues gather here',
255
259
  snapshotAboutYouBody:
256
- 'Soon this will list notes whose paths, links, or titles curve back toward you—each one opens in the editor. Aggregation is still wiring up; for now, use the button below to talk it through in MindOS Agent.',
260
+ 'Notes whose paths, links, or titles point back to you will surface here each one opens in the editor. Use the button below to explore with Agent.',
257
261
  snapshotContinuedTitle: 'Drafts and open loops',
258
262
  snapshotContinuedBody:
259
- 'This will hold untitled drafts, half-finished pieces, and unchecked tasks. The list feed is on the way; the two columns set the rhythm early.',
263
+ 'Untitled drafts, half-finished pieces, and unchecked tasks will collect here once the library feed is connected.',
260
264
  snapshotDailyTitle: 'Start with one line',
261
265
  snapshotDailyBody:
262
- 'Your line for today saves in this browser only, as soon as you leave the field. Echo does not have to be an essay—one line is enough; open Agent when you want depth.',
263
- snapshotPastYouTitle: 'A glance at the past',
266
+ 'Your line saves in this browser the moment you leave the field. One line is enough open Agent when you want depth.',
267
+ snapshotPastYouTitle: 'A glimpse at another time',
264
268
  snapshotPastYouBody:
265
- 'We will gently sample an older note so you can see who you were at another point—not a diff tool, just a glimpse. Sampling arrives in a later pass.',
269
+ 'A random older note will surface here not a diff tool, just a gentle glance at who you were. Coming soon.',
266
270
  snapshotGrowthTitle: 'Intent lives here',
267
271
  snapshotGrowthBody:
268
- 'Below, write one sentence about what you are steering toward. It stays on this device and can change over time; later you may see how it drifts.',
272
+ 'Write one sentence about the direction you are pushing. It stays on this device and can change over time.',
269
273
  insightTitle: 'Insight',
270
274
  insightShow: 'Show insight',
271
275
  insightHide: 'Hide insight',
@@ -276,30 +280,42 @@ export const en = {
276
280
  insightGenerating: 'Generating…',
277
281
  insightErrorPrefix: 'Something went wrong:',
278
282
  insightRetry: 'Try again',
279
- continueAgent: 'Continue in MindOS Agent',
283
+ continueAgent: 'Open in Agent',
280
284
  continuedDrafts: 'Drafts',
281
285
  continuedTodos: 'Open loops',
282
286
  subEmptyHint: 'Items will appear in each column once the library feed is connected.',
283
287
  dailyLineLabel: 'A line for today',
284
288
  dailyLinePlaceholder: 'Write one quiet line…',
285
289
  dailySavedNote: 'Saved in this browser; visible only on this device.',
290
+ savedFlash: 'Saved',
286
291
  dailyAskPrefill: (line: string) =>
287
292
  `Echo / Daily — reflect on this line:\n\n${line.trim() || '(empty line)'}`,
288
- pastYouDrawLabel: 'A draw from the past',
293
+ pastYouDrawLabel: 'A glimpse from the past',
289
294
  pastYouAnother: 'Draw another moment',
290
- pastYouDisabledHint: 'We are connecting time and your library; soon a tap here will surface an old excerpt.',
295
+ pastYouComingSoon: 'Coming soon',
296
+ pastYouDisabledHint: 'Sampling from your timeline is on the way — soon a tap here will surface an old excerpt.',
291
297
  growthIntentLabel: 'What you are steering toward',
292
298
  growthIntentPlaceholder: 'Write your current intent…',
293
299
  growthSavedNote: 'Saved on this device.',
294
- aboutYouLead: 'Sense what curves toward you—without digging through every folder.',
295
- continuedLead: 'Pick up the sentence you left mid-air.',
296
- dailyLead: 'One quiet line for today no need to open a full chat.',
297
- pastYouLead: 'Choices and moods you set down at another point on the timeline.',
298
- growthLead: 'What you are steering toward, and how it slowly shifts.',
300
+ aboutYouLead: 'Notes and links that point back to you surfaced, not searched.',
301
+ continuedLead: 'Drafts, open tasks, and thoughts you left mid-sentence.',
302
+ dailyLead: 'One line. No pressure. Open Agent when you want depth.',
303
+ pastYouLead: 'A gentle glimpse at who you were at another time.',
304
+ growthLead: 'The direction you are pushing and how it drifts.',
299
305
  },
300
306
  agentsContent: {
301
307
  title: 'Agents',
302
- subtitle: 'Manage connections, skills, and per-agent status in one place.',
308
+ subtitle: 'Connections, skills, and status at a glance.',
309
+ workspacePulse: {
310
+ title: 'Workspace Pulse',
311
+ connected: 'Connected',
312
+ detected: 'Detected',
313
+ notFound: 'Not found',
314
+ risk: 'Risks',
315
+ enabledSkills: 'Skills on',
316
+ healthy: 'Healthy',
317
+ needsAttention: (n: number) => `${n} issue${n !== 1 ? 's' : ''}`,
318
+ },
303
319
  navOverview: 'Overview',
304
320
  navMcp: 'MCP',
305
321
  navSkills: 'Skills',
@@ -314,24 +330,69 @@ export const en = {
314
330
  connected: 'Connected',
315
331
  detected: 'Detected',
316
332
  notFound: 'Not found',
317
- riskQueue: 'Risk action queue',
318
- noRisk: 'No active risks detected.',
319
- usagePulse: 'Usage pulse',
320
- successRate7d: 'Success rate (7d)',
321
- topSkills: 'Top enabled skills',
322
- failedAgents: 'Most failed agents',
333
+ riskQueue: 'Attention',
334
+ noRisk: 'All clear no issues detected.',
335
+ usagePulse: 'All agents',
336
+ nextAction: 'Suggested next',
337
+ nextActionHint: 'Reconnect detected agents first, then enable remaining skills.',
338
+ riskLevelError: 'Error',
339
+ riskLevelWarn: 'Warning',
323
340
  na: 'N/A',
341
+ colAgent: 'Agent',
342
+ colStatus: 'Status',
343
+ colMcp: 'MCP',
344
+ colSkills: 'Skills',
345
+ colMode: 'Mode',
346
+ colRuntime: 'Runtime',
347
+ pulseMcp: 'MCP',
348
+ pulseTools: 'Tools',
349
+ mcpOffline: 'Offline',
350
+ toolsUnit: (n: number) => `${n} tools`,
351
+ enabledUnit: (n: number) => `${n} enabled`,
352
+ agentCount: (n: number) => `${n} agent${n !== 1 ? 's' : ''}`,
353
+ runtimeActive: 'Active',
324
354
  },
325
355
  mcp: {
326
- title: 'MCP health',
356
+ title: 'MCP Connections',
327
357
  refresh: 'Refresh',
328
- connectionGraph: 'Connection graph',
358
+ connectionGraph: 'Server connections across agents',
329
359
  tabs: {
330
360
  manage: 'Manage',
331
361
  topology: 'Topology',
362
+ byAgent: 'By Agent',
363
+ byServer: 'By MCP Server',
332
364
  },
333
365
  searchPlaceholder: 'Search agents...',
366
+ installMindos: 'Install MindOS MCP',
367
+ installed: 'Installed',
368
+ mcpServerLabel: 'MCP Server',
369
+ searchServersPlaceholder: 'Search MCP servers...',
370
+ serverAgentCount: (n: number) => `${n} agent${n !== 1 ? 's' : ''}`,
334
371
  emptyState: 'No agents match current filters.',
372
+ resultCount: (n: number) => `${n} agents`,
373
+ filteredSummaryTitle: 'Filtered status summary',
374
+ filteredConnected: (n: number) => `Connected: ${n}`,
375
+ filteredDetected: (n: number) => `Detected: ${n}`,
376
+ filteredNotFound: (n: number) => `Not found: ${n}`,
377
+ crossAgentServersTitle: 'MCP Servers',
378
+ crossAgentServersEmpty: 'No MCP servers detected.',
379
+ crossAgentServerAgents: (names: string) => `Used by ${names}`,
380
+ configVisibilityTitle: 'Configuration',
381
+ hiddenRootDetected: (n: number, total: number) => `Hidden roots: ${n}/${total}`,
382
+ runtimeSignalDetected: (n: number, total: number) => `Runtime signals: ${n}/${total}`,
383
+ riskQueueTitle: 'Attention',
384
+ riskMcpStopped: 'MCP server is not running.',
385
+ riskDetected: (n: number) => `${n} detected agent(s) need configuration.`,
386
+ riskNotFound: (n: number) => `${n} agent(s) not found on this machine.`,
387
+ bulkReconnectFiltered: 'Reconnect all',
388
+ bulkRunning: 'Running reconnect...',
389
+ bulkSummary: (ok: number, failed: number) => `Reconnected ${ok}, failed ${failed}.`,
390
+ transportFilters: {
391
+ all: 'All transport',
392
+ stdio: 'stdio',
393
+ http: 'http',
394
+ other: 'other',
395
+ },
335
396
  filters: {
336
397
  all: 'All',
337
398
  connected: 'Connected',
@@ -350,18 +411,93 @@ export const en = {
350
411
  testConnection: 'Test Connection',
351
412
  reconnect: 'Reconnect',
352
413
  },
414
+ addAgent: 'Add',
415
+ removeFromServer: 'Remove',
416
+ confirmRemoveTitle: 'Remove from server?',
417
+ confirmRemoveMessage: (agent: string, server: string) => `Remove "${agent}" from "${server}"? This requires editing the agent config file.`,
418
+ cancel: 'Cancel',
419
+ noAvailableAgents: 'All agents already connected.',
420
+ manualRemoveHint: 'Flagged for removal — edit the agent config to finalize.',
421
+ reconnectAllInServer: 'Reconnect all',
422
+ reconnectAllRunning: 'Reconnecting...',
423
+ reconnectAllDone: (ok: number, failed: number) => `Done: ${ok} reconnected${failed > 0 ? `, ${failed} failed` : ''}.`,
424
+ serverTransport: (t: string) => `Transport: ${t}`,
353
425
  },
354
426
  skills: {
355
427
  title: 'Skills',
356
- capabilityGroups: 'Capability groups',
428
+ summaryTitle: 'Skill Status',
429
+ summaryEnabled: (n: number) => `Enabled: ${n}`,
430
+ summaryDisabled: (n: number) => `Disabled: ${n}`,
431
+ summaryAttention: (n: number) => `Needs attention: ${n}`,
432
+ crossAgentSkillsTitle: 'Installed Skills',
433
+ crossAgentSkillsEmpty: 'No skills detected.',
434
+ crossAgentSkillAgents: (names: string) => `Installed in ${names}`,
435
+ capabilityGroups: 'Skill management across agents',
436
+ registrySummaryTitle: 'Skill Registry',
437
+ registryUniversal: (n: number) => `Universal: ${n}`,
438
+ registryAdditional: (n: number) => `Additional: ${n}`,
439
+ registryUnsupported: (n: number) => `Unsupported: ${n}`,
440
+ registryHiddenRoots: (n: number, total: number) => `Hidden roots: ${n}/${total}`,
357
441
  tabs: {
358
442
  manage: 'Manage',
359
443
  matrix: 'Matrix',
444
+ bySkill: 'By Skill',
445
+ byAgent: 'By Agent',
360
446
  },
361
447
  searchPlaceholder: 'Search skills...',
448
+ agentSkillMode: 'Skill Mode',
449
+ agentMcpServers: 'MCP Servers',
450
+ agentNativeSkills: 'Native Skills',
451
+ agentMindosSkills: 'MindOS Skills',
452
+ noAgentsYet: 'No agents detected yet.',
453
+ moreSkills: (n: number) => `+${n} more`,
362
454
  sourceAll: 'All',
363
455
  sourceBuiltin: 'Built-in',
364
456
  sourceUser: 'Custom',
457
+ sourceNative: 'Native',
458
+ summaryNative: (n: number) => `Native: ${n}`,
459
+ statusAll: 'All status',
460
+ statusEnabled: 'Enabled',
461
+ statusDisabled: 'Disabled',
462
+ statusAttention: 'Needs attention',
463
+ capabilityAll: 'All capabilities',
464
+ bulkEnableFiltered: 'Enable all',
465
+ bulkDisableFiltered: 'Disable all',
466
+ bulkRunning: 'Applying changes...',
467
+ bulkNoChanges: 'No skill changes needed.',
468
+ bulkAllSucceeded: (n: number) => `Updated ${n} skills.`,
469
+ bulkPartialFailed: (ok: number, failed: number) => `Updated ${ok}, failed ${failed}.`,
470
+ resultCount: (n: number) => `${n} skills`,
471
+ matrixAgentFocusLabel: 'Agent focus',
472
+ matrixAgentFocusAll: 'All agents',
473
+ matrixColumnSkill: 'Skill',
474
+ matrixEnabled: 'Enabled',
475
+ matrixDisabled: 'Disabled',
476
+ matrixUnsupported: 'Unsupported',
477
+ matrixNoAgents: 'No agents available for matrix.',
478
+ noSkillsMatchFilter: 'No skills match current filters.',
479
+ matrixEmpty: 'No skills match current filters.',
480
+ addAgentToSkill: 'Add',
481
+ removeAgentFromSkill: 'Remove',
482
+ confirmRemoveAgentTitle: 'Remove from skill?',
483
+ confirmRemoveAgentMessage: (agent: string, skill: string) => `Remove "${agent}" from "${skill}"? This requires editing the agent config file.`,
484
+ cancelSkillAction: 'Cancel',
485
+ noAvailableAgentsForSkill: 'All agents already have this skill.',
486
+ manualSkillHint: 'Flagged — edit the agent config to finalize.',
487
+ skillDescription: 'Description',
488
+ skillNoDescription: 'No description available.',
489
+ skillDeleteAction: 'Delete',
490
+ confirmDeleteSkillTitle: 'Delete skill?',
491
+ confirmDeleteSkillMessage: (name: string) => `Permanently delete skill "${name}"? This cannot be undone.`,
492
+ skillDeleted: 'Skill deleted.',
493
+ skillDeleteFailed: 'Failed to delete skill.',
494
+ copyInstallCmd: 'Copy install command',
495
+ installCmdCopied: 'Copied!',
496
+ skillAgentCount: (n: number) => `${n} agent${n === 1 ? '' : 's'}`,
497
+ quickStatsMcp: (n: number) => `${n} MCP`,
498
+ quickStatsSkills: (n: number) => `${n} skills`,
499
+ showAllNative: (n: number) => `Show all ${n}`,
500
+ collapseNative: 'Collapse',
365
501
  emptyGroup: 'No skills in this group.',
366
502
  groupLabels: {
367
503
  research: 'Research',
@@ -370,12 +506,46 @@ export const en = {
370
506
  ops: 'Ops',
371
507
  memory: 'Memory',
372
508
  },
509
+ skillPopover: {
510
+ close: 'Close',
511
+ source: 'Source',
512
+ sourceBuiltin: 'Built-in',
513
+ sourceUser: 'Custom',
514
+ sourceNative: 'Native',
515
+ capability: 'Capability',
516
+ path: 'File path',
517
+ enabled: 'Enabled',
518
+ disabled: 'Disabled',
519
+ agents: 'Agents',
520
+ noAgents: 'No agents have this skill.',
521
+ content: 'Skill content',
522
+ loading: 'Loading...',
523
+ loadFailed: 'Failed to load skill content.',
524
+ retry: 'Retry',
525
+ copyContent: 'Copy',
526
+ copied: 'Copied!',
527
+ noDescription: 'No description available.',
528
+ deleteSkill: 'Delete',
529
+ confirmDeleteTitle: 'Delete skill?',
530
+ confirmDeleteMessage: (name: string) => `Permanently delete skill "${name}"? This cannot be undone.`,
531
+ confirmDeleteAction: 'Delete',
532
+ cancelAction: 'Cancel',
533
+ deleted: 'Skill deleted.',
534
+ deleteFailed: 'Failed to delete skill.',
535
+ },
373
536
  },
374
537
  detail: {
538
+ healthStripTitle: 'Status',
539
+ healthConnected: 'Connected',
540
+ healthInstalled: 'MCP installed',
541
+ healthRuntimeSignals: 'Runtime signals',
542
+ healthConfiguredServers: 'Configured servers',
543
+ healthInstalledSkills: 'Native installed skills',
375
544
  identity: 'Identity',
376
545
  connection: 'Connection',
377
546
  capabilities: 'Capability Profile',
378
547
  skillAssignments: 'Skill Assignments',
548
+ runtimeSignals: 'Runtime',
379
549
  recentActivity: 'Recent Activity',
380
550
  spaceReach: 'Space Reach',
381
551
  agentKey: 'Agent key',
@@ -389,14 +559,70 @@ export const en = {
389
559
  projectScope: 'Project scope',
390
560
  globalScope: 'Global scope',
391
561
  format: 'Config format',
562
+ skillMode: 'Skill mode',
563
+ hiddenRoot: 'Hidden root path',
564
+ hiddenRootPresent: 'Hidden root',
565
+ conversationSignal: 'Conversation',
566
+ usageSignal: 'Usage',
567
+ lastActivityAt: 'Last active',
568
+ skillsAll: 'All skills',
569
+ skillsEnabled: 'Enabled skills',
570
+ skillsSourceBuiltin: 'Built-in',
571
+ skillsSourceUser: 'Custom',
572
+ skillsSearchPlaceholder: 'Search all configured skills...',
573
+ skillsFilterAll: 'All',
574
+ skillsFilterBuiltin: 'Built-in',
575
+ skillsFilterUser: 'Custom',
576
+ skillEnable: 'Enable',
577
+ skillDisable: 'Disable',
578
+ skillEdit: 'Edit',
579
+ skillSave: 'Save',
580
+ skillCancel: 'Cancel',
581
+ skillActionLoading: 'Working...',
582
+ skillReadFailed: 'Failed to read skill content.',
583
+ skillSaveFailed: 'Failed to save skill content.',
584
+ mcpManagement: 'MCP Management',
585
+ mcpInstalled: 'Installed',
586
+ mcpScope: 'Current scope',
587
+ mcpConfigPath: 'Config path',
588
+ mcpTargetScope: 'Target scope',
589
+ mcpTargetTransport: 'Target transport',
590
+ mcpScopeProject: 'Project',
591
+ mcpScopeGlobal: 'Global',
592
+ mcpCopySnippet: 'Copy snippet',
593
+ mcpCopied: 'Copied',
594
+ mcpRefresh: 'Refresh status',
595
+ mcpReconnect: 'Apply MCP config',
596
+ mcpApplying: 'Applying MCP config...',
597
+ mcpApplySuccess: 'MCP config applied.',
598
+ mcpApplyFailed: 'Failed to apply MCP config.',
599
+ nativeInstalledSkills: 'Installed Skills',
600
+ nativeInstalledSkillsCount: (n: number) => `${n} detected`,
601
+ nativeInstalledSkillsEmpty: 'No installed skills detected.',
602
+ nativeInstalledSkillsMore: (n: number) => `+${n} more`,
603
+ configuredMcpServers: 'MCP Servers',
604
+ configuredMcpServersCount: (n: number) => `${n} detected`,
605
+ configuredMcpServersEmpty: 'No MCP servers configured.',
606
+ configuredMcpServersMore: (n: number) => `+${n} more`,
392
607
  yes: 'Yes',
393
608
  no: 'No',
394
609
  noSkills: 'No enabled skills.',
395
610
  noActivity: 'No activity recorded yet.',
396
611
  noSpaceReach: 'No space reach data yet.',
612
+ skillDelete: 'Delete',
613
+ skillDeleteConfirm: (name: string) => `Delete skill "${name}"? This cannot be undone.`,
614
+ skillDeleteSuccess: 'Skill deleted.',
615
+ skillDeleteFailed: 'Failed to delete skill.',
616
+ mcpServerAdd: 'Add MCP server',
617
+ mcpServerRemove: 'Remove',
618
+ mcpServerRemoveConfirm: (name: string) => `Remove "${name}" from this agent? This requires editing the config file.`,
619
+ mcpServerHint: 'Flagged — edit the agent config to finalize.',
620
+ mcpReconnectAll: 'Reconnect all',
621
+ mcpReconnectAllRunning: 'Reconnecting...',
622
+ mcpReconnectAllDone: (ok: number, failed: number) => `Reconnected ${ok}${failed > 0 ? `, failed ${failed}` : ''}.`,
397
623
  },
398
- detailSubtitle: 'Inspect this agent without leaving the content view.',
399
- detailNotFound: 'Agent not found. It may have been uninstalled or renamed.',
624
+ detailSubtitle: '',
625
+ detailNotFound: 'Agent not found it may have been removed or renamed.',
400
626
  },
401
627
  shortcutPanel: {
402
628
  title: 'Keyboard Shortcuts',