@skillkit/tui 1.6.3 → 1.8.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/dist/index.d.ts CHANGED
@@ -1,265 +1,744 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import * as react from 'react';
3
- import { ScoredSkill, ProjectProfile, Learning, Observation, MemoryStatus } from '@skillkit/core';
2
+ import { AgentType, SkillMetadata } from '@skillkit/core';
3
+ import * as _skillkit_agents from '@skillkit/agents';
4
4
 
5
- type Screen = 'home' | 'browse' | 'installed' | 'sync' | 'settings' | 'recommend' | 'translate' | 'context' | 'workflow' | 'execute' | 'history' | 'marketplace' | 'memory' | 'team' | 'plugins' | 'methodology' | 'plan';
6
- declare function App(): react_jsx_runtime.JSX.Element;
7
-
8
- interface SidebarProps {
5
+ interface SkillItem {
6
+ name: string;
7
+ description?: string;
8
+ source?: string;
9
+ installs?: number;
10
+ enabled?: boolean;
11
+ quality?: number;
12
+ grade?: string;
13
+ warnings?: number;
14
+ }
15
+ interface RepoInfo {
16
+ source: string;
17
+ name: string;
18
+ }
19
+ interface FetchedSkill {
20
+ name: string;
21
+ source: string;
22
+ repoName: string;
23
+ description?: string;
24
+ }
25
+ type Screen = 'home' | 'browse' | 'installed' | 'marketplace' | 'recommend' | 'translate' | 'context' | 'memory' | 'team' | 'plugins' | 'methodology' | 'plan' | 'workflow' | 'execute' | 'history' | 'sync' | 'settings' | 'help' | 'mesh' | 'message';
26
+ declare const NAV_KEYS: Record<string, Screen>;
27
+ declare const STATUS_BAR_SHORTCUTS = "b browse m market i installed s sync / help q quit";
28
+ interface ScreenMeta {
29
+ key: string;
30
+ label: string;
9
31
  screen: Screen;
10
- onNavigate: (screen: Screen) => void;
11
- isCompact?: boolean;
12
32
  }
13
- declare function Sidebar({ screen }: SidebarProps): react_jsx_runtime.JSX.Element;
33
+ interface SidebarSection {
34
+ section: string;
35
+ items: ScreenMeta[];
36
+ }
37
+ declare const SIDEBAR_NAV: SidebarSection[];
38
+
39
+ interface AppProps {
40
+ onExit?: (code?: number) => void;
41
+ }
42
+ declare function App({ onExit }?: AppProps): react.ReactNode;
43
+
44
+ /**
45
+ * Monochromatic color palette for SkillKit TUI
46
+ * Inspired by OpenSync's elegant dark theme
47
+ */
48
+ declare const colors: {
49
+ readonly background: "#0d0d0d";
50
+ readonly surface: "#1a1a1a";
51
+ readonly surfaceHover: "#262626";
52
+ readonly border: "#333333";
53
+ readonly borderDim: "#1f1f1f";
54
+ readonly text: "#ffffff";
55
+ readonly textSecondary: "#a0a0a0";
56
+ readonly textMuted: "#666666";
57
+ readonly accent: "#00ff88";
58
+ readonly accentDim: "#00cc6a";
59
+ readonly success: "#22c55e";
60
+ readonly warning: "#eab308";
61
+ readonly error: "#ef4444";
62
+ readonly info: "#3b82f6";
63
+ readonly sync: "#00d9ff";
64
+ readonly browse: "#22c55e";
65
+ readonly recommend: "#fbbf24";
66
+ readonly translate: "#a855f7";
67
+ readonly workflow: "#3b82f6";
68
+ readonly team: "#ffffff";
69
+ readonly private: "#ef4444";
70
+ readonly tag: "#fbbf24";
71
+ readonly export: "#22c55e";
72
+ readonly delete: "#ef4444";
73
+ };
74
+ type ColorName = keyof typeof colors;
75
+ type ColorValue = (typeof colors)[ColorName];
76
+ /**
77
+ * Get a color value by name
78
+ */
79
+ declare function getColor(name: ColorName): ColorValue;
80
+ /**
81
+ * Terminal-safe color names for OpenTUI
82
+ * Maps our design system colors to terminal-compatible values
83
+ */
84
+ declare const terminalColors: {
85
+ readonly background: "black";
86
+ readonly surface: "black";
87
+ readonly text: "white";
88
+ readonly textSecondary: "gray";
89
+ readonly textMuted: "gray";
90
+ readonly accent: "green";
91
+ readonly success: "green";
92
+ readonly warning: "yellow";
93
+ readonly error: "red";
94
+ readonly info: "blue";
95
+ readonly sync: "cyan";
96
+ readonly browse: "green";
97
+ readonly recommend: "yellow";
98
+ readonly translate: "magenta";
99
+ readonly workflow: "blue";
100
+ readonly team: "white";
101
+ readonly border: "gray";
102
+ };
103
+
104
+ /**
105
+ * Unicode symbols and agent logos for SkillKit TUI
106
+ * Monochromatic design system for terminal display
107
+ */
108
+ /**
109
+ * Agent logo definitions with monochromatic icons
110
+ */
111
+ interface AgentLogo {
112
+ icon: string;
113
+ name: string;
114
+ company: string;
115
+ }
116
+ /**
117
+ * All 32 supported agents with monochromatic Unicode logos
118
+ */
119
+ declare const AGENT_LOGOS: Record<string, AgentLogo>;
120
+ /**
121
+ * UI symbols for status and navigation
122
+ */
123
+ declare const symbols: {
124
+ readonly pointer: "▸";
125
+ readonly pointerInactive: " ";
126
+ readonly bullet: "●";
127
+ readonly bulletEmpty: "○";
128
+ readonly success: "✓";
129
+ readonly error: "✗";
130
+ readonly warning: "⚠";
131
+ readonly info: "ℹ";
132
+ readonly pending: "○";
133
+ readonly active: "●";
134
+ readonly synced: "●";
135
+ readonly progressFilled: "█";
136
+ readonly progressEmpty: "░";
137
+ readonly spinner: readonly ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
138
+ readonly arrowUp: "↑";
139
+ readonly arrowDown: "↓";
140
+ readonly arrowLeft: "←";
141
+ readonly arrowRight: "→";
142
+ readonly diamond: "◆";
143
+ readonly diamondEmpty: "◇";
144
+ readonly star: "★";
145
+ readonly starEmpty: "☆";
146
+ readonly horizontalLine: "─";
147
+ readonly verticalLine: "│";
148
+ readonly topLeft: "┌";
149
+ readonly topRight: "┐";
150
+ readonly bottomLeft: "└";
151
+ readonly bottomRight: "┘";
152
+ readonly brandIcon: "◆";
153
+ };
154
+ type SymbolName = keyof typeof symbols;
155
+ /**
156
+ * Get agent logo by agent type ID
157
+ */
158
+ declare function getAgentLogo(agentType: string): AgentLogo | undefined;
159
+ /**
160
+ * Get all agent types
161
+ */
162
+ declare function getAgentTypes(): string[];
163
+ /**
164
+ * Get formatted agent display string (icon + name)
165
+ */
166
+ declare function formatAgentDisplay(agentType: string): string;
167
+
168
+ /**
169
+ * Animation presets for SkillKit TUI
170
+ * Uses OpenTUI's useTimeline for smooth 60fps animations
171
+ */
172
+ /**
173
+ * Animation easing functions available in OpenTUI
174
+ */
175
+ type EasingFunction = 'linear' | 'easeInQuad' | 'easeOutQuad' | 'easeInOutQuad' | 'easeInCubic' | 'easeOutCubic' | 'easeInOutCubic' | 'easeInQuart' | 'easeOutQuart' | 'easeInOutQuart';
176
+ /**
177
+ * Animation preset configuration
178
+ */
179
+ interface AnimationPreset {
180
+ duration: number;
181
+ ease: EasingFunction;
182
+ stagger?: number;
183
+ }
184
+ /**
185
+ * Predefined animation presets
186
+ */
187
+ declare const animations: {
188
+ /**
189
+ * Staggered fade-in for entrance animations
190
+ * Used on home screen for progressive content reveal
191
+ */
192
+ readonly staggeredFadeIn: {
193
+ readonly duration: 800;
194
+ readonly ease: EasingFunction;
195
+ readonly stagger: 100;
196
+ };
197
+ /**
198
+ * Logo reveal with scramble effect
199
+ * Used for branding animation on startup
200
+ */
201
+ readonly logoReveal: {
202
+ readonly duration: 600;
203
+ readonly ease: EasingFunction;
204
+ };
205
+ /**
206
+ * Count-up animation for stats
207
+ * Used in StatsCard component
208
+ */
209
+ readonly countUp: {
210
+ readonly duration: 1200;
211
+ readonly ease: EasingFunction;
212
+ };
213
+ /**
214
+ * Screen transition animation
215
+ * Used when navigating between screens
216
+ */
217
+ readonly screenTransition: {
218
+ readonly duration: 200;
219
+ readonly ease: EasingFunction;
220
+ };
221
+ /**
222
+ * Quick fade for tooltips and hints
223
+ */
224
+ readonly quickFade: {
225
+ readonly duration: 150;
226
+ readonly ease: EasingFunction;
227
+ };
228
+ /**
229
+ * Pulse animation for active states
230
+ */
231
+ readonly pulse: {
232
+ readonly duration: 1000;
233
+ readonly ease: EasingFunction;
234
+ };
235
+ };
236
+ /**
237
+ * Scramble effect characters
238
+ * Used for text reveal animations
239
+ */
240
+ declare const SCRAMBLE_CHARS = "\u2588\u2593\u2592\u2591\u25C6\u25C7\u25C8\u27C1\u25CE\u2726\u2B21\u25A3";
241
+ /**
242
+ * Scramble animation configuration
243
+ */
244
+ interface ScrambleConfig {
245
+ /** Animation duration in ms */
246
+ duration: number;
247
+ /** Progress increment per frame */
248
+ increment: number;
249
+ /** Frame interval in ms */
250
+ interval: number;
251
+ }
252
+ /**
253
+ * Default scramble animation config
254
+ */
255
+ declare const DEFAULT_SCRAMBLE_CONFIG: ScrambleConfig;
256
+ /**
257
+ * Generate scrambled text with progressive reveal
258
+ * @param target - The target text to reveal
259
+ * @param progress - Progress percentage (0-100)
260
+ * @param chars - Characters to use for scrambling
261
+ */
262
+ declare function scrambleText(target: string, progress: number, chars?: string): string;
263
+ /**
264
+ * Calculate staggered delay for an item in a list
265
+ * @param index - Item index
266
+ * @param stagger - Delay between items in ms
267
+ * @returns Delay in ms for this item
268
+ */
269
+ declare function getStaggerDelay(index: number, stagger?: number): number;
270
+
271
+ /**
272
+ * Navigation state management for SkillKit TUI
273
+ */
274
+
275
+ /**
276
+ * Navigation state
277
+ */
278
+ interface NavigationState {
279
+ currentScreen: Screen;
280
+ previousScreen: Screen | null;
281
+ history: Screen[];
282
+ }
283
+ /**
284
+ * Create initial navigation state
285
+ */
286
+ declare function createNavigationState(): NavigationState;
287
+ /**
288
+ * Navigate to a new screen
289
+ */
290
+ declare function navigateTo(state: NavigationState, screen: Screen): NavigationState;
291
+ /**
292
+ * Go back to previous screen (or home)
293
+ */
294
+ declare function goBack(state: NavigationState): NavigationState;
295
+ /**
296
+ * Get screen from key press
297
+ */
298
+ declare function getScreenFromKey(key: string): Screen | undefined;
299
+ /**
300
+ * Check if a key is a navigation key
301
+ */
302
+ declare function isNavKey(key: string): boolean;
303
+
304
+ /**
305
+ * Skills store state
306
+ */
307
+ interface SkillsState {
308
+ skills: SkillItem[];
309
+ loading: boolean;
310
+ error: string | null;
311
+ }
312
+ /**
313
+ * Create initial skills state
314
+ */
315
+ declare function createSkillsState(): SkillsState;
316
+ /**
317
+ * Load installed skills
318
+ * @param agentType - Optional agent type to load skills for
319
+ * @returns Updated skills state
320
+ */
321
+ declare function loadSkills(agentType?: AgentType): SkillsState;
322
+ /**
323
+ * Remove a skill by name
324
+ * @param skillName - Name of the skill to remove
325
+ * @param agentType - Optional agent type
326
+ * @returns true if removed, false otherwise
327
+ */
328
+ declare function removeSkill(skillName: string, agentType?: AgentType): boolean;
329
+ /**
330
+ * Filter skills by search query
331
+ */
332
+ declare function filterSkills(skills: SkillItem[], query: string): SkillItem[];
333
+
334
+ /**
335
+ * Agent status information
336
+ */
337
+ interface AgentStatus {
338
+ type: AgentType;
339
+ name: string;
340
+ detected: boolean;
341
+ configured: boolean;
342
+ }
343
+ /**
344
+ * Agents state
345
+ */
346
+ interface AgentsState {
347
+ agents: AgentStatus[];
348
+ currentAgent: AgentType;
349
+ loading: boolean;
350
+ error: string | null;
351
+ }
352
+ /**
353
+ * Create initial agents state
354
+ */
355
+ declare function createAgentsState(): AgentsState;
356
+ /**
357
+ * Load all agents with their detection status
358
+ */
359
+ declare function loadAgents(): Promise<AgentsState>;
360
+ /**
361
+ * Get count of detected agents
362
+ */
363
+ declare function getDetectedAgentCount(state: AgentsState): number;
364
+ /**
365
+ * Get list of detected agents
366
+ */
367
+ declare function getDetectedAgents(state: AgentsState): AgentStatus[];
368
+ /**
369
+ * Get agent adapter by type
370
+ */
371
+ declare function getAgentAdapter(type: AgentType): _skillkit_agents.AgentAdapter;
372
+ /**
373
+ * Total number of supported agents (derived from adapters)
374
+ */
375
+ declare const TOTAL_AGENTS: number;
376
+
377
+ declare const DEFAULT_REPOS: RepoInfo[];
378
+ /**
379
+ * Marketplace state
380
+ */
381
+ interface MarketplaceState {
382
+ allSkills: FetchedSkill[];
383
+ filteredSkills: FetchedSkill[];
384
+ loading: boolean;
385
+ error: string | null;
386
+ currentRepo: string | null;
387
+ fetchedRepos: Set<string>;
388
+ failedRepos: string[];
389
+ repos: RepoInfo[];
390
+ }
391
+ /**
392
+ * Get marketplace repos from config or use defaults
393
+ */
394
+ declare function getMarketplaceRepos(): RepoInfo[];
395
+ /**
396
+ * Create initial marketplace state
397
+ */
398
+ declare function createMarketplaceState(): MarketplaceState;
399
+ /**
400
+ * Try to read skill description from frontmatter
401
+ */
402
+ declare function readSkillDescription(skillPath: string): string | undefined;
403
+ /**
404
+ * Fetch skills from a single repository
405
+ */
406
+ declare function fetchRepoSkills(source: string, repos: RepoInfo[]): Promise<{
407
+ skills: FetchedSkill[];
408
+ tempRoot?: string;
409
+ error?: string;
410
+ }>;
411
+ /**
412
+ * Clean up temp directory from fetch
413
+ */
414
+ declare function cleanupTempRoot(tempRoot: string): void;
415
+ /**
416
+ * Filter skills by search query
417
+ */
418
+ declare function filterMarketplaceSkills(skills: FetchedSkill[], query: string): FetchedSkill[];
419
+ /**
420
+ * Convert fetched skills to skill items for display
421
+ */
422
+ declare function toSkillItems(skills: FetchedSkill[]): SkillItem[];
423
+ /**
424
+ * Sort skills alphabetically by name
425
+ */
426
+ declare function sortSkillsByName(skills: FetchedSkill[]): FetchedSkill[];
427
+
428
+ /**
429
+ * Get search directories for skills based on agent type
430
+ * @param agentType - Optional agent type (defaults to configured agent)
431
+ * @returns Array of directories to search for skills
432
+ */
433
+ declare function getSearchDirs(agentType?: AgentType): string[];
434
+ /**
435
+ * Get installation directory for skills
436
+ * @param global - Whether to get global or project-local directory
437
+ * @param agentType - Optional agent type (defaults to configured agent)
438
+ * @returns Installation directory path
439
+ */
440
+ declare function getInstallDir(global?: boolean, agentType?: AgentType): string;
441
+ /**
442
+ * Save skill metadata to a skill directory
443
+ * @param skillDir - Directory containing the skill
444
+ * @param metadata - Metadata to save
445
+ */
446
+ declare function saveSkillMetadata(skillDir: string, metadata: SkillMetadata): void;
447
+ /**
448
+ * Get version from package.json
449
+ * @returns Version string
450
+ */
451
+ declare function getVersion(): string;
452
+
453
+ /**
454
+ * List navigation and pagination utilities
455
+ */
456
+ /**
457
+ * Calculate visible items for paginated list display
458
+ * Centers the selected item in the visible window
459
+ */
460
+ interface PaginationResult {
461
+ /** Starting index in the full list */
462
+ start: number;
463
+ /** Ending index (exclusive) in the full list */
464
+ end: number;
465
+ /** Number of items above the visible window */
466
+ itemsAbove: number;
467
+ /** Number of items below the visible window */
468
+ itemsBelow: number;
469
+ }
470
+ /**
471
+ * Calculate pagination for a list with a selected index
472
+ * @param totalItems - Total number of items in the list
473
+ * @param selectedIndex - Currently selected item index
474
+ * @param maxVisible - Maximum number of items to show at once
475
+ * @returns Pagination information
476
+ */
477
+ declare function calculatePagination(totalItems: number, selectedIndex: number, maxVisible: number): PaginationResult;
478
+ /**
479
+ * Move selection up in a list
480
+ * @param currentIndex - Current selected index
481
+ * @param minIndex - Minimum allowed index (default: 0)
482
+ * @returns New index after moving up
483
+ */
484
+ declare function moveUp(currentIndex: number, minIndex?: number): number;
485
+ /**
486
+ * Move selection down in a list
487
+ * @param currentIndex - Current selected index
488
+ * @param maxIndex - Maximum allowed index
489
+ * @returns New index after moving down
490
+ */
491
+ declare function moveDown(currentIndex: number, maxIndex: number): number;
492
+ /**
493
+ * Clamp an index within valid bounds
494
+ * @param index - Index to clamp
495
+ * @param listLength - Length of the list
496
+ * @returns Clamped index
497
+ */
498
+ declare function clampIndex(index: number, listLength: number): number;
499
+ /**
500
+ * Calculate max visible items based on available rows
501
+ * @param availableRows - Total available rows
502
+ * @param reservedRows - Rows reserved for headers, footers, etc.
503
+ * @param minVisible - Minimum visible items (default: 5)
504
+ * @returns Maximum visible items
505
+ */
506
+ declare function calculateMaxVisible(availableRows: number, reservedRows: number, minVisible?: number): number;
507
+
508
+ interface AgentGridProps {
509
+ /** Maximum number of agents to display */
510
+ maxVisible?: number;
511
+ /** Show status indicators for detected agents */
512
+ showStatus?: boolean;
513
+ /** Agent types that are detected/active */
514
+ detectedAgents?: string[];
515
+ /** Number of columns in the grid */
516
+ columns?: number;
517
+ }
518
+ declare function AgentGrid({ maxVisible, showStatus, detectedAgents, columns, }: AgentGridProps): react.ReactNode;
519
+
520
+ interface StatItem {
521
+ label: string;
522
+ value: number;
523
+ color?: keyof typeof terminalColors;
524
+ }
525
+ interface StatsCardProps {
526
+ items: StatItem[];
527
+ animated?: boolean;
528
+ }
529
+ declare function StatsCard({ items, animated }: StatsCardProps): react.ReactNode;
14
530
 
15
531
  interface HeaderProps {
16
532
  title: string;
17
533
  subtitle?: string;
18
534
  count?: number;
535
+ badge?: string;
536
+ icon?: string;
19
537
  }
20
- declare function Header({ title, subtitle, count }: HeaderProps): react_jsx_runtime.JSX.Element;
538
+ declare function Header({ title, subtitle, count, badge, icon }: HeaderProps): react.ReactNode;
21
539
 
22
- interface SkillItem {
23
- name: string;
24
- description?: string;
25
- source?: string;
26
- installs?: number;
27
- enabled?: boolean;
540
+ interface SidebarProps {
541
+ screen: Screen;
542
+ onNavigate: (screen: Screen) => void;
28
543
  }
544
+ declare function Sidebar({ screen }: SidebarProps): react.ReactNode;
545
+
546
+ interface StatusBarProps {
547
+ message?: string;
548
+ messageType?: 'info' | 'success' | 'error' | 'warning';
549
+ shortcuts?: string;
550
+ }
551
+ declare function StatusBar({ message, messageType, shortcuts, }: StatusBarProps): react.ReactNode;
552
+
29
553
  interface SkillListProps {
30
554
  skills: SkillItem[];
31
555
  selectedIndex: number;
32
- showInstalls?: boolean;
33
- showRank?: boolean;
34
- showSource?: boolean;
35
556
  maxVisible?: number;
557
+ onSelect?: (skill: SkillItem) => void;
558
+ }
559
+ declare function SkillList({ skills, selectedIndex, maxVisible, onSelect, }: SkillListProps): react.ReactNode;
560
+
561
+ interface SearchInputProps {
562
+ value: string;
563
+ placeholder?: string;
564
+ focused?: boolean;
565
+ onChange?: (value: string) => void;
566
+ }
567
+ declare function SearchInput({ value, placeholder, focused, }: SearchInputProps): react.ReactNode;
568
+
569
+ interface SpinnerProps {
570
+ label?: string;
571
+ color?: keyof typeof terminalColors;
572
+ }
573
+ declare function Spinner({ label, color }: SpinnerProps): react.ReactNode;
574
+
575
+ interface ProgressBarProps {
576
+ progress: number;
577
+ width?: number;
578
+ showPercentage?: boolean;
579
+ color?: keyof typeof terminalColors;
36
580
  }
37
- declare function SkillList({ skills, selectedIndex, showInstalls, showRank, showSource, maxVisible, }: SkillListProps): react_jsx_runtime.JSX.Element;
581
+ declare function ProgressBar({ progress, width, showPercentage, color, }: ProgressBarProps): react.ReactNode;
38
582
 
39
- interface Shortcut {
583
+ interface Feature {
40
584
  key: string;
41
585
  label: string;
586
+ description: string;
587
+ color: keyof typeof terminalColors;
42
588
  }
43
- interface StatusBarProps {
44
- shortcuts: Shortcut[];
45
- message?: string;
589
+ declare const FEATURES: Feature[];
590
+ interface FeatureListProps {
591
+ features?: Feature[];
46
592
  }
47
- declare function StatusBar({ shortcuts, message }: StatusBarProps): react_jsx_runtime.JSX.Element;
593
+ declare function FeatureList({ features }: FeatureListProps): react.ReactNode;
48
594
 
49
- interface SearchInputProps {
50
- value: string;
51
- onChange: (value: string) => void;
52
- placeholder?: string;
53
- isFocused?: boolean;
595
+ interface SplashProps {
596
+ onComplete: () => void;
597
+ duration?: number;
54
598
  }
55
- declare function SearchInput({ value, onChange, placeholder, isFocused, }: SearchInputProps): react_jsx_runtime.JSX.Element;
599
+ declare function Splash({ onComplete, duration }: SplashProps): react.ReactNode;
56
600
 
57
601
  interface HomeProps {
58
602
  onNavigate: (screen: Screen) => void;
59
603
  cols?: number;
60
604
  rows?: number;
61
605
  }
62
- declare function Home({ cols, rows }: HomeProps): react_jsx_runtime.JSX.Element;
606
+ declare function Home({ cols }: HomeProps): react.ReactNode;
63
607
 
64
- interface Props$f {
608
+ interface BrowseProps {
609
+ onNavigate: (screen: Screen) => void;
65
610
  cols?: number;
66
611
  rows?: number;
67
612
  }
68
- declare function Browse({ rows }: Props$f): react_jsx_runtime.JSX.Element;
613
+ declare function Browse({ onNavigate, cols, rows }: BrowseProps): react.ReactNode;
69
614
 
70
- interface Props$e {
615
+ interface InstalledProps {
616
+ onNavigate: (screen: Screen) => void;
71
617
  cols?: number;
72
618
  rows?: number;
73
619
  }
74
- declare function Installed({ rows }: Props$e): react_jsx_runtime.JSX.Element;
620
+ declare function Installed({ onNavigate, cols, rows }: InstalledProps): react.ReactNode;
75
621
 
76
- interface Props$d {
622
+ interface MarketplaceProps {
623
+ onNavigate: (screen: Screen) => void;
77
624
  cols?: number;
78
625
  rows?: number;
79
626
  }
80
- declare function Sync({ rows }: Props$d): react_jsx_runtime.JSX.Element;
627
+ declare function Marketplace({ onNavigate, cols, rows }: MarketplaceProps): react.ReactNode;
81
628
 
82
- interface Props$c {
629
+ interface RecommendProps {
630
+ onNavigate: (screen: Screen) => void;
83
631
  cols?: number;
84
632
  rows?: number;
85
633
  }
86
- declare function Settings(_props: Props$c): react_jsx_runtime.JSX.Element;
634
+ declare function Recommend({ onNavigate, cols, rows }: RecommendProps): react.ReactNode;
87
635
 
88
- interface Props$b {
636
+ interface TranslateProps {
637
+ onNavigate: (screen: Screen) => void;
89
638
  cols?: number;
90
639
  rows?: number;
91
640
  }
92
- declare function Recommend({ rows }: Props$b): react_jsx_runtime.JSX.Element;
641
+ declare function Translate(_props: TranslateProps): react.ReactNode;
93
642
 
94
- interface Props$a {
643
+ interface ContextProps {
644
+ onNavigate: (screen: Screen) => void;
95
645
  cols?: number;
96
646
  rows?: number;
97
647
  }
98
- declare function Translate({ rows }: Props$a): react_jsx_runtime.JSX.Element;
648
+ declare function Context({ onNavigate, cols, rows }: ContextProps): react.ReactNode;
99
649
 
100
- interface Props$9 {
650
+ interface SyncProps {
651
+ onNavigate: (screen: Screen) => void;
101
652
  cols?: number;
102
653
  rows?: number;
103
654
  }
104
- declare function Context({ rows }: Props$9): react_jsx_runtime.JSX.Element;
655
+ declare function Sync({ onNavigate, cols, rows }: SyncProps): react.ReactNode;
105
656
 
106
- interface Props$8 {
657
+ interface MemoryProps {
658
+ onNavigate: (screen: Screen) => void;
107
659
  cols?: number;
108
660
  rows?: number;
109
661
  }
110
- declare function Memory({ rows }: Props$8): react_jsx_runtime.JSX.Element;
662
+ declare function Memory({ onNavigate, cols, rows }: MemoryProps): react.ReactNode;
111
663
 
112
- interface Props$7 {
664
+ interface WorkflowProps {
665
+ onNavigate: (screen: Screen) => void;
113
666
  cols?: number;
114
667
  rows?: number;
115
668
  }
116
- declare function Workflow({ rows }: Props$7): react_jsx_runtime.JSX.Element;
669
+ declare function Workflow({ onNavigate, cols, rows }: WorkflowProps): react.ReactNode;
117
670
 
118
- interface Props$6 {
671
+ interface ExecuteProps {
672
+ onNavigate: (screen: Screen) => void;
119
673
  cols?: number;
120
674
  rows?: number;
121
675
  }
122
- declare function Execute({ rows }: Props$6): react_jsx_runtime.JSX.Element;
676
+ declare function Execute({ onNavigate, cols, rows }: ExecuteProps): react.ReactNode;
123
677
 
124
- interface Props$5 {
678
+ interface HistoryProps {
679
+ onNavigate: (screen: Screen) => void;
125
680
  cols?: number;
126
681
  rows?: number;
127
682
  }
128
- declare function History({ rows }: Props$5): react_jsx_runtime.JSX.Element;
683
+ declare function History({ onNavigate, cols, rows }: HistoryProps): react.ReactNode;
129
684
 
130
- interface Props$4 {
685
+ interface TeamProps {
686
+ onNavigate: (screen: Screen) => void;
131
687
  cols?: number;
132
688
  rows?: number;
133
689
  }
134
- declare function Marketplace({ rows }: Props$4): react_jsx_runtime.JSX.Element;
690
+ declare function Team({ onNavigate, cols, rows }: TeamProps): react.ReactNode;
135
691
 
136
- interface Props$3 {
692
+ interface PluginsProps {
693
+ onNavigate: (screen: Screen) => void;
137
694
  cols?: number;
138
695
  rows?: number;
139
696
  }
140
- declare function Team({ rows }: Props$3): react_jsx_runtime.JSX.Element;
697
+ declare function Plugins({ onNavigate, cols, rows }: PluginsProps): react.ReactNode;
141
698
 
142
- interface Props$2 {
699
+ interface MethodologyProps {
700
+ onNavigate: (screen: Screen) => void;
143
701
  cols?: number;
144
702
  rows?: number;
145
703
  }
146
- declare function Plugins({ rows }: Props$2): react_jsx_runtime.JSX.Element;
704
+ declare function Methodology({ onNavigate, cols, rows }: MethodologyProps): react.ReactNode;
147
705
 
148
- interface Props$1 {
706
+ interface PlanProps {
707
+ onNavigate: (screen: Screen) => void;
149
708
  cols?: number;
150
709
  rows?: number;
151
710
  }
152
- declare function Methodology({ rows }: Props$1): react_jsx_runtime.JSX.Element;
711
+ declare function Plan({ onNavigate, cols, rows }: PlanProps): react.ReactNode;
153
712
 
154
- interface Props {
713
+ interface SettingsProps {
714
+ onNavigate: (screen: Screen) => void;
155
715
  cols?: number;
156
716
  rows?: number;
157
717
  }
158
- declare function Plan({ rows }: Props): react_jsx_runtime.JSX.Element;
718
+ declare function Settings({ onNavigate, cols }: SettingsProps): react.ReactNode;
159
719
 
160
- interface UseSkillsResult {
161
- skills: SkillItem[];
162
- loading: boolean;
163
- error: string | null;
164
- refresh: () => void;
165
- remove: (name: string) => Promise<void>;
720
+ interface HelpProps {
721
+ onNavigate: (screen: Screen) => void;
722
+ cols?: number;
723
+ rows?: number;
166
724
  }
167
- declare function useSkills(): UseSkillsResult;
725
+ declare function Help({ cols }: HelpProps): react.ReactNode;
168
726
 
169
- interface RepoInfo {
170
- source: string;
171
- name: string;
727
+ interface MeshProps {
728
+ onNavigate: (screen: Screen) => void;
729
+ cols?: number;
730
+ rows?: number;
172
731
  }
173
- interface UseMarketplaceResult {
174
- skills: SkillItem[];
175
- loading: boolean;
176
- error: string | null;
177
- totalCount: number;
178
- repos: RepoInfo[];
179
- currentRepo: string | null;
180
- failedRepos: string[];
181
- refresh: () => void;
182
- search: (query: string) => void;
183
- fetchRepo: (source: string) => Promise<void>;
184
- fetchAllRepos: () => Promise<void>;
185
- }
186
- declare function useMarketplace(): UseMarketplaceResult;
187
-
188
- interface UseKeyboardOptions {
189
- onNavigate?: (screen: Screen) => void;
190
- onSelect?: () => void;
191
- onSearch?: () => void;
192
- onInstall?: () => void;
193
- onBack?: () => void;
194
- onUp?: () => void;
195
- onDown?: () => void;
196
- disabled?: boolean;
197
- }
198
- declare function useKeyboard(options?: UseKeyboardOptions): void;
199
- declare function useListNavigation(listLength: number, initialIndex?: number): {
200
- selectedIndex: number;
201
- setSelectedIndex: react.Dispatch<react.SetStateAction<number>>;
202
- moveUp: () => void;
203
- moveDown: () => void;
204
- reset: () => void;
205
- };
732
+ declare function Mesh({ onNavigate, cols, rows }: MeshProps): react.ReactNode;
206
733
 
207
- interface UseRecommendResult {
208
- recommendations: ScoredSkill[];
209
- profile: ProjectProfile | null;
210
- loading: boolean;
211
- error: string | null;
212
- totalScanned: number;
213
- indexStatus: 'missing' | 'stale' | 'fresh';
214
- refresh: () => void;
215
- updateIndex: () => void;
216
- search: (query: string) => void;
217
- searchResults: ScoredSkill[];
218
- }
219
- declare function useRecommend(projectPath?: string): UseRecommendResult;
220
-
221
- interface UseMemoryResult {
222
- learnings: Learning[];
223
- observations: Observation[];
224
- status: MemoryStatus | null;
225
- loading: boolean;
226
- error: string | null;
227
- isGlobal: boolean;
228
- setIsGlobal: (isGlobal: boolean) => void;
229
- refresh: () => void;
230
- search: (query: string) => Learning[];
231
- deleteLearning: (id: string) => boolean;
232
- deleteObservation: (id: string) => boolean;
734
+ interface MessageProps {
735
+ onNavigate: (screen: Screen) => void;
736
+ cols?: number;
737
+ rows?: number;
233
738
  }
234
- declare function useMemory(): UseMemoryResult;
235
-
236
- declare const colors: {
237
- primary: string;
238
- secondary: string;
239
- secondaryDim: string;
240
- success: string;
241
- danger: string;
242
- warning: string;
243
- background: string;
244
- borderDim: string;
245
- };
246
- declare const symbols: {
247
- pointer: string;
248
- bullet: string;
249
- checkboxOn: string;
250
- checkboxOff: string;
251
- check: string;
252
- star: string;
253
- spinner: string[];
254
- arrowUp: string;
255
- arrowDown: string;
256
- success: string;
257
- error: string;
258
- warning: string;
259
- info: string;
260
- };
261
- declare const logo = "\n\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u255D\u2588\u2588\u2551\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\n\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2551 \u2588\u2588\u2551\n\u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551\n\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\n\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\n";
739
+ declare function Message({ onNavigate, cols, rows }: MessageProps): react.ReactNode;
262
740
 
263
- declare function startTUI(): Promise<void>;
741
+ declare function exitTUI(code?: number): void;
742
+ declare function startTUI(): Promise<never>;
264
743
 
265
- export { App, Browse, Context, Execute, Header, History, Home, Installed, Marketplace, Memory, Methodology, Plan, Plugins, Recommend, type Screen, SearchInput, Settings, Sidebar, type SkillItem, SkillList, StatusBar, Sync, Team, Translate, Workflow, colors, logo, startTUI, symbols, useKeyboard, useListNavigation, useMarketplace, useMemory, useRecommend, useSkills };
744
+ export { AGENT_LOGOS, AgentGrid, type AgentLogo, type AgentStatus, type AgentsState, type AnimationPreset, App, Browse, type ColorName, type ColorValue, Context, DEFAULT_REPOS, DEFAULT_SCRAMBLE_CONFIG, type EasingFunction, Execute, FEATURES, type Feature, FeatureList, type FetchedSkill, Header, Help, History, Home, Installed, Marketplace, type MarketplaceState, Memory, Mesh, Message, Methodology, NAV_KEYS, type NavigationState, type PaginationResult, Plan, Plugins, ProgressBar, Recommend, type RepoInfo, SCRAMBLE_CHARS, SIDEBAR_NAV, STATUS_BAR_SHORTCUTS, type ScrambleConfig, type Screen, type ScreenMeta, SearchInput, Settings, Sidebar, type SidebarSection, type SkillItem, SkillList, type SkillsState, Spinner, Splash, StatsCard, StatusBar, type SymbolName, Sync, TOTAL_AGENTS, Team, Translate, Workflow, animations, calculateMaxVisible, calculatePagination, clampIndex, cleanupTempRoot, colors, createAgentsState, createMarketplaceState, createNavigationState, createSkillsState, exitTUI, fetchRepoSkills, filterMarketplaceSkills, filterSkills, formatAgentDisplay, getAgentAdapter, getAgentLogo, getAgentTypes, getColor, getDetectedAgentCount, getDetectedAgents, getInstallDir, getMarketplaceRepos, getScreenFromKey, getSearchDirs, getStaggerDelay, getVersion, goBack, isNavKey, loadAgents, loadSkills, moveDown, moveUp, navigateTo, readSkillDescription, removeSkill, saveSkillMetadata, scrambleText, sortSkillsByName, startTUI, symbols, terminalColors, toSkillItems };