@geminilight/mindos 0.5.63 → 0.5.65

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 (104) 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/changes/route.ts +7 -1
  5. package/app/app/api/file/route.ts +9 -0
  6. package/app/app/api/mcp/agents/route.ts +27 -1
  7. package/app/app/api/mcp/install-skill/route.ts +9 -24
  8. package/app/app/api/skills/route.ts +18 -2
  9. package/app/app/api/tree-version/route.ts +8 -0
  10. package/app/app/layout.tsx +1 -0
  11. package/app/app/page.tsx +1 -2
  12. package/app/app/view/[...path]/ViewPageClient.tsx +0 -1
  13. package/app/components/ActivityBar.tsx +2 -2
  14. package/app/components/Backlinks.tsx +5 -5
  15. package/app/components/CreateSpaceModal.tsx +3 -2
  16. package/app/components/DirPicker.tsx +1 -1
  17. package/app/components/DirView.tsx +2 -3
  18. package/app/components/EditorWrapper.tsx +3 -3
  19. package/app/components/FileTree.tsx +25 -10
  20. package/app/components/GuideCard.tsx +4 -4
  21. package/app/components/HomeContent.tsx +44 -14
  22. package/app/components/MarkdownView.tsx +2 -2
  23. package/app/components/OnboardingView.tsx +1 -1
  24. package/app/components/Panel.tsx +1 -1
  25. package/app/components/RightAgentDetailPanel.tsx +2 -1
  26. package/app/components/RightAskPanel.tsx +1 -1
  27. package/app/components/SearchModal.tsx +10 -2
  28. package/app/components/SidebarLayout.tsx +36 -10
  29. package/app/components/ThemeToggle.tsx +1 -1
  30. package/app/components/agents/AgentDetailContent.tsx +454 -59
  31. package/app/components/agents/AgentsContentPage.tsx +89 -20
  32. package/app/components/agents/AgentsMcpSection.tsx +513 -85
  33. package/app/components/agents/AgentsOverviewSection.tsx +418 -59
  34. package/app/components/agents/AgentsPrimitives.tsx +335 -0
  35. package/app/components/agents/AgentsSkillsSection.tsx +746 -105
  36. package/app/components/agents/SkillDetailPopover.tsx +416 -0
  37. package/app/components/agents/agents-content-model.ts +308 -10
  38. package/app/components/ask/AskContent.tsx +34 -5
  39. package/app/components/ask/FileChip.tsx +1 -0
  40. package/app/components/ask/MentionPopover.tsx +13 -1
  41. package/app/components/ask/MessageList.tsx +5 -7
  42. package/app/components/ask/ToolCallBlock.tsx +4 -4
  43. package/app/components/changes/ChangesBanner.tsx +89 -13
  44. package/app/components/changes/ChangesContentPage.tsx +134 -51
  45. package/app/components/echo/EchoHero.tsx +10 -24
  46. package/app/components/echo/EchoInsightCollapsible.tsx +52 -43
  47. package/app/components/echo/EchoPageSections.tsx +13 -9
  48. package/app/components/echo/EchoSegmentNav.tsx +14 -11
  49. package/app/components/echo/EchoSegmentPageClient.tsx +64 -43
  50. package/app/components/explore/ExploreContent.tsx +3 -7
  51. package/app/components/explore/UseCaseCard.tsx +4 -15
  52. package/app/components/panels/AgentsPanel.tsx +22 -128
  53. package/app/components/panels/AgentsPanelAgentDetail.tsx +7 -6
  54. package/app/components/panels/AgentsPanelAgentGroups.tsx +8 -13
  55. package/app/components/panels/AgentsPanelAgentListRow.tsx +39 -16
  56. package/app/components/panels/AgentsPanelHubNav.tsx +12 -12
  57. package/app/components/panels/EchoPanel.tsx +8 -10
  58. package/app/components/panels/PanelNavRow.tsx +9 -2
  59. package/app/components/panels/PluginsPanel.tsx +5 -5
  60. package/app/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +30 -8
  61. package/app/components/renderers/agent-inspector/manifest.ts +5 -3
  62. package/app/components/renderers/config/manifest.ts +1 -0
  63. package/app/components/renderers/csv/manifest.ts +1 -0
  64. package/app/components/renderers/todo/manifest.ts +1 -0
  65. package/app/components/settings/AiTab.tsx +3 -3
  66. package/app/components/settings/AppearanceTab.tsx +2 -2
  67. package/app/components/settings/KnowledgeTab.tsx +3 -3
  68. package/app/components/settings/McpAgentInstall.tsx +3 -6
  69. package/app/components/settings/McpSkillCreateForm.tsx +2 -3
  70. package/app/components/settings/McpSkillRow.tsx +2 -3
  71. package/app/components/settings/McpSkillsSection.tsx +2 -2
  72. package/app/components/settings/McpTab.tsx +12 -13
  73. package/app/components/settings/MonitoringTab.tsx +13 -13
  74. package/app/components/settings/PluginsTab.tsx +6 -5
  75. package/app/components/settings/Primitives.tsx +3 -4
  76. package/app/components/settings/SettingsContent.tsx +3 -3
  77. package/app/components/settings/SyncTab.tsx +11 -17
  78. package/app/components/settings/UpdateTab.tsx +18 -21
  79. package/app/components/settings/types.ts +14 -0
  80. package/app/components/setup/StepKB.tsx +1 -1
  81. package/app/hooks/useMcpData.tsx +7 -4
  82. package/app/hooks/useMention.ts +25 -8
  83. package/app/lib/agent/log.ts +15 -18
  84. package/app/lib/agent/stream-consumer.ts +3 -0
  85. package/app/lib/agent/to-agent-messages.ts +6 -4
  86. package/app/lib/core/agent-audit-log.ts +280 -0
  87. package/app/lib/core/content-changes.ts +148 -8
  88. package/app/lib/core/index.ts +11 -0
  89. package/app/lib/fs.ts +16 -1
  90. package/app/lib/i18n-en.ts +317 -36
  91. package/app/lib/i18n-zh.ts +316 -35
  92. package/app/lib/mcp-agents.ts +273 -2
  93. package/app/lib/renderers/index.ts +1 -2
  94. package/app/lib/renderers/registry.ts +10 -0
  95. package/app/lib/types.ts +2 -0
  96. package/app/next-env.d.ts +1 -1
  97. package/bin/lib/mcp-agents.js +38 -13
  98. package/package.json +1 -1
  99. package/scripts/migrate-agent-audit-log.js +170 -0
  100. package/scripts/migrate-agent-diff.js +146 -0
  101. package/scripts/setup.js +12 -17
  102. package/skills/plugin-core-builtin-migration/SKILL.md +178 -0
  103. package/app/components/renderers/diff/DiffRenderer.tsx +0 -311
  104. package/app/components/renderers/diff/manifest.ts +0 -14
@@ -32,6 +32,9 @@ export const en = {
32
32
  cancelCreate: 'Cancel',
33
33
  continueEditing: 'Continue editing',
34
34
  newNote: 'New Notes',
35
+ builtinFeatures: 'Built-in capabilities',
36
+ builtinActive: 'Active',
37
+ builtinInactive: 'Not active',
35
38
  plugins: 'Extensions',
36
39
  showMore: 'Show more',
37
40
  showLess: 'Show less',
@@ -124,6 +127,41 @@ export const en = {
124
127
  noSessions: 'No saved sessions.',
125
128
  draftingHint: 'AI is still running — you can draft the next step now.',
126
129
  },
130
+ changes: {
131
+ unreadBanner: (n: number) => `${n} content change${n === 1 ? '' : 's'} unread`,
132
+ reviewNow: 'Review now',
133
+ dismiss: 'Dismiss notification',
134
+ title: 'Content changes',
135
+ subtitle: 'Review recent edits across user and agent operations.',
136
+ eventsCount: (n: number) => `${n} event${n === 1 ? '' : 's'}`,
137
+ unreadCount: (n: number) => `${n} unread`,
138
+ refresh: 'Refresh',
139
+ markSeen: 'Mark seen',
140
+ markAllRead: 'Mark all read',
141
+ filters: {
142
+ filePath: 'File path',
143
+ filePathPlaceholder: 'e.g. Projects/plan.md',
144
+ source: 'Agents (source)',
145
+ operation: 'Tools (operation)',
146
+ operationAll: 'All operations',
147
+ keyword: 'Keyword',
148
+ keywordPlaceholder: 'summary / op / path',
149
+ all: 'All',
150
+ agent: 'Agent',
151
+ user: 'User',
152
+ system: 'System',
153
+ },
154
+ loading: 'Loading changes...',
155
+ empty: 'No content changes yet.',
156
+ open: 'Open',
157
+ unchangedLines: (n: number) => `... ${n} unchanged lines ...`,
158
+ relativeTime: {
159
+ justNow: 'just now',
160
+ minutesAgo: (n: number) => `${n}m ago`,
161
+ hoursAgo: (n: number) => `${n}h ago`,
162
+ daysAgo: (n: number) => `${n}d ago`,
163
+ },
164
+ },
127
165
  panels: {
128
166
  agents: {
129
167
  title: 'Agents',
@@ -139,9 +177,11 @@ export const en = {
139
177
  noAgents: 'No agents detected.',
140
178
  autoRefresh: 'Auto-refresh every 30s',
141
179
  connect: 'Connect',
142
- openDashboard: 'Dashboard',
143
180
  installing: 'Installing...',
144
- install: (name: string) => `Install ${name}`,
181
+ install: 'Install',
182
+ installSuccess: 'Installed',
183
+ installFailed: 'Install failed',
184
+ retryInstall: 'Retry',
145
185
  // Snippet section
146
186
  copyConfig: 'Copy Config',
147
187
  copied: 'Copied!',
@@ -183,11 +223,16 @@ export const en = {
183
223
  },
184
224
  echo: {
185
225
  title: 'Echo',
186
- aboutYouTitle: 'Tied to you',
187
- continuedTitle: 'Still open',
188
- dailyEchoTitle: 'Daily echo',
189
- pastYouTitle: 'Who you were',
190
- 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',
191
236
  },
192
237
  discover: {
193
238
  title: 'Discover',
@@ -205,27 +250,26 @@ export const en = {
205
250
  },
206
251
  },
207
252
  echoPages: {
208
- breadcrumbNav: 'Breadcrumb',
209
253
  parent: 'Echo',
210
254
  heroKicker: 'Echo',
211
255
  segmentNavAria: 'Echo sections',
212
256
  snapshotBadge: 'Local · private',
213
257
  factsHeading: 'Snapshot',
214
- snapshotAboutYouTitle: 'Clues will gather here',
258
+ snapshotAboutYouTitle: 'Clues gather here',
215
259
  snapshotAboutYouBody:
216
- '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.',
217
261
  snapshotContinuedTitle: 'Drafts and open loops',
218
262
  snapshotContinuedBody:
219
- '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.',
220
264
  snapshotDailyTitle: 'Start with one line',
221
265
  snapshotDailyBody:
222
- '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.',
223
- 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',
224
268
  snapshotPastYouBody:
225
- '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.',
226
270
  snapshotGrowthTitle: 'Intent lives here',
227
271
  snapshotGrowthBody:
228
- '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.',
229
273
  insightTitle: 'Insight',
230
274
  insightShow: 'Show insight',
231
275
  insightHide: 'Hide insight',
@@ -236,30 +280,42 @@ export const en = {
236
280
  insightGenerating: 'Generating…',
237
281
  insightErrorPrefix: 'Something went wrong:',
238
282
  insightRetry: 'Try again',
239
- continueAgent: 'Continue in MindOS Agent',
283
+ continueAgent: 'Open in Agent',
240
284
  continuedDrafts: 'Drafts',
241
285
  continuedTodos: 'Open loops',
242
286
  subEmptyHint: 'Items will appear in each column once the library feed is connected.',
243
287
  dailyLineLabel: 'A line for today',
244
288
  dailyLinePlaceholder: 'Write one quiet line…',
245
289
  dailySavedNote: 'Saved in this browser; visible only on this device.',
290
+ savedFlash: 'Saved',
246
291
  dailyAskPrefill: (line: string) =>
247
292
  `Echo / Daily — reflect on this line:\n\n${line.trim() || '(empty line)'}`,
248
- pastYouDrawLabel: 'A draw from the past',
293
+ pastYouDrawLabel: 'A glimpse from the past',
249
294
  pastYouAnother: 'Draw another moment',
250
- 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.',
251
297
  growthIntentLabel: 'What you are steering toward',
252
298
  growthIntentPlaceholder: 'Write your current intent…',
253
299
  growthSavedNote: 'Saved on this device.',
254
- aboutYouLead: 'Sense what curves toward you—without digging through every folder.',
255
- continuedLead: 'Pick up the sentence you left mid-air.',
256
- dailyLead: 'One quiet line for today no need to open a full chat.',
257
- pastYouLead: 'Choices and moods you set down at another point on the timeline.',
258
- 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.',
259
305
  },
260
306
  agentsContent: {
261
307
  title: 'Agents',
262
- 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
+ },
263
319
  navOverview: 'Overview',
264
320
  navMcp: 'MCP',
265
321
  navSkills: 'Skills',
@@ -274,18 +330,75 @@ export const en = {
274
330
  connected: 'Connected',
275
331
  detected: 'Detected',
276
332
  notFound: 'Not found',
277
- riskQueue: 'Risk action queue',
278
- noRisk: 'No active risks detected.',
279
- usagePulse: 'Usage pulse',
280
- successRate7d: 'Success rate (7d)',
281
- topSkills: 'Top enabled skills',
282
- 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',
283
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',
284
354
  },
285
355
  mcp: {
286
- title: 'MCP health',
356
+ title: 'MCP Connections',
287
357
  refresh: 'Refresh',
288
- connectionGraph: 'Connection graph',
358
+ connectionGraph: 'Server connections across agents',
359
+ tabs: {
360
+ manage: 'Manage',
361
+ topology: 'Topology',
362
+ byAgent: 'By Agent',
363
+ byServer: 'By MCP Server',
364
+ },
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' : ''}`,
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
+ },
396
+ filters: {
397
+ all: 'All',
398
+ connected: 'Connected',
399
+ detected: 'Detected',
400
+ notFound: 'Not found',
401
+ },
289
402
  table: {
290
403
  agent: 'Agent',
291
404
  status: 'Status',
@@ -298,15 +411,93 @@ export const en = {
298
411
  testConnection: 'Test Connection',
299
412
  reconnect: 'Reconnect',
300
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}`,
301
425
  },
302
426
  skills: {
303
427
  title: 'Skills',
304
- 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}`,
441
+ tabs: {
442
+ manage: 'Manage',
443
+ matrix: 'Matrix',
444
+ bySkill: 'By Skill',
445
+ byAgent: 'By Agent',
446
+ },
305
447
  searchPlaceholder: 'Search skills...',
306
- matrixToggle: 'Skill x Agent compatibility matrix',
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`,
307
454
  sourceAll: 'All',
308
455
  sourceBuiltin: 'Built-in',
309
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',
310
501
  emptyGroup: 'No skills in this group.',
311
502
  groupLabels: {
312
503
  research: 'Research',
@@ -315,12 +506,46 @@ export const en = {
315
506
  ops: 'Ops',
316
507
  memory: 'Memory',
317
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
+ },
318
536
  },
319
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',
320
544
  identity: 'Identity',
321
545
  connection: 'Connection',
322
546
  capabilities: 'Capability Profile',
323
547
  skillAssignments: 'Skill Assignments',
548
+ runtimeSignals: 'Runtime',
324
549
  recentActivity: 'Recent Activity',
325
550
  spaceReach: 'Space Reach',
326
551
  agentKey: 'Agent key',
@@ -334,14 +559,70 @@ export const en = {
334
559
  projectScope: 'Project scope',
335
560
  globalScope: 'Global scope',
336
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`,
337
607
  yes: 'Yes',
338
608
  no: 'No',
339
609
  noSkills: 'No enabled skills.',
340
610
  noActivity: 'No activity recorded yet.',
341
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}` : ''}.`,
342
623
  },
343
- detailSubtitle: 'Inspect this agent without leaving the content view.',
344
- 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.',
345
626
  },
346
627
  shortcutPanel: {
347
628
  title: 'Keyboard Shortcuts',