@skillkit/tui 1.6.4 → 1.8.1
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/README.md +78 -163
- package/dist/index.d.ts +1109 -160
- package/dist/index.js +13338 -3654
- package/dist/index.js.map +1 -1
- package/package.json +9 -12
package/dist/index.d.ts
CHANGED
|
@@ -1,265 +1,1214 @@
|
|
|
1
|
-
import
|
|
2
|
-
import * as
|
|
3
|
-
import {
|
|
1
|
+
import { AgentType, SkillMetadata } from '@skillkit/core';
|
|
2
|
+
import * as _skillkit_agents from '@skillkit/agents';
|
|
3
|
+
import { JSX } from 'solid-js';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
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(props: AppProps): any;
|
|
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
|
+
* Detailed skill info including path for translation
|
|
306
|
+
*/
|
|
307
|
+
interface SkillWithDetails {
|
|
308
|
+
name: string;
|
|
309
|
+
description?: string;
|
|
310
|
+
path: string;
|
|
311
|
+
source?: string;
|
|
312
|
+
enabled: boolean;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Skills store state
|
|
316
|
+
*/
|
|
317
|
+
interface SkillsState {
|
|
318
|
+
skills: SkillItem[];
|
|
319
|
+
loading: boolean;
|
|
320
|
+
error: string | null;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Create initial skills state
|
|
324
|
+
*/
|
|
325
|
+
declare function createSkillsState(): SkillsState;
|
|
326
|
+
/**
|
|
327
|
+
* Load installed skills
|
|
328
|
+
* @param agentType - Optional agent type to load skills for
|
|
329
|
+
* @returns Updated skills state
|
|
330
|
+
*/
|
|
331
|
+
declare function loadSkills(agentType?: AgentType): SkillsState;
|
|
332
|
+
/**
|
|
333
|
+
* Remove a skill by name
|
|
334
|
+
* @param skillName - Name of the skill to remove
|
|
335
|
+
* @param agentType - Optional agent type
|
|
336
|
+
* @returns true if removed, false otherwise
|
|
337
|
+
*/
|
|
338
|
+
declare function removeSkill(skillName: string, agentType?: AgentType): boolean;
|
|
339
|
+
/**
|
|
340
|
+
* Filter skills by search query
|
|
341
|
+
*/
|
|
342
|
+
declare function filterSkills(skills: SkillItem[], query: string): SkillItem[];
|
|
343
|
+
/**
|
|
344
|
+
* Load skills with full details including path for translation
|
|
345
|
+
* @param agentType - Optional agent type to load skills for
|
|
346
|
+
* @returns Array of skills with path details
|
|
347
|
+
*/
|
|
348
|
+
declare function loadSkillsWithDetails(agentType?: AgentType): SkillWithDetails[];
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Agent status information
|
|
352
|
+
*/
|
|
353
|
+
interface AgentStatus {
|
|
354
|
+
type: AgentType;
|
|
355
|
+
name: string;
|
|
356
|
+
detected: boolean;
|
|
357
|
+
configured: boolean;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Agents state
|
|
361
|
+
*/
|
|
362
|
+
interface AgentsState {
|
|
363
|
+
agents: AgentStatus[];
|
|
364
|
+
currentAgent: AgentType;
|
|
365
|
+
loading: boolean;
|
|
366
|
+
error: string | null;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Create initial agents state
|
|
370
|
+
*/
|
|
371
|
+
declare function createAgentsState(): AgentsState;
|
|
372
|
+
/**
|
|
373
|
+
* Load all agents with their detection status
|
|
374
|
+
*/
|
|
375
|
+
declare function loadAgents(): Promise<AgentsState>;
|
|
376
|
+
/**
|
|
377
|
+
* Get count of detected agents
|
|
378
|
+
*/
|
|
379
|
+
declare function getDetectedAgentCount(state: AgentsState): number;
|
|
380
|
+
/**
|
|
381
|
+
* Get list of detected agents
|
|
382
|
+
*/
|
|
383
|
+
declare function getDetectedAgents(state: AgentsState): AgentStatus[];
|
|
384
|
+
/**
|
|
385
|
+
* Get agent adapter by type
|
|
386
|
+
*/
|
|
387
|
+
declare function getAgentAdapter(type: AgentType): _skillkit_agents.AgentAdapter;
|
|
388
|
+
/**
|
|
389
|
+
* Total number of supported agents (derived from adapters)
|
|
390
|
+
*/
|
|
391
|
+
declare const TOTAL_AGENTS: number;
|
|
392
|
+
|
|
393
|
+
declare const DEFAULT_REPOS: RepoInfo[];
|
|
394
|
+
/**
|
|
395
|
+
* Marketplace state
|
|
396
|
+
*/
|
|
397
|
+
interface MarketplaceState {
|
|
398
|
+
allSkills: FetchedSkill[];
|
|
399
|
+
filteredSkills: FetchedSkill[];
|
|
400
|
+
loading: boolean;
|
|
401
|
+
error: string | null;
|
|
402
|
+
currentRepo: string | null;
|
|
403
|
+
fetchedRepos: Set<string>;
|
|
404
|
+
failedRepos: string[];
|
|
405
|
+
repos: RepoInfo[];
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Get marketplace repos from config or use defaults
|
|
409
|
+
*/
|
|
410
|
+
declare function getMarketplaceRepos(): RepoInfo[];
|
|
411
|
+
/**
|
|
412
|
+
* Create initial marketplace state
|
|
413
|
+
*/
|
|
414
|
+
declare function createMarketplaceState(): MarketplaceState;
|
|
415
|
+
/**
|
|
416
|
+
* Try to read skill description from frontmatter
|
|
417
|
+
*/
|
|
418
|
+
declare function readSkillDescription(skillPath: string): string | undefined;
|
|
419
|
+
/**
|
|
420
|
+
* Fetch skills from a single repository
|
|
421
|
+
*/
|
|
422
|
+
declare function fetchRepoSkills(source: string, repos: RepoInfo[]): Promise<{
|
|
423
|
+
skills: FetchedSkill[];
|
|
424
|
+
tempRoot?: string;
|
|
425
|
+
error?: string;
|
|
426
|
+
}>;
|
|
427
|
+
/**
|
|
428
|
+
* Clean up temp directory from fetch
|
|
429
|
+
*/
|
|
430
|
+
declare function cleanupTempRoot(tempRoot: string): void;
|
|
431
|
+
/**
|
|
432
|
+
* Filter skills by search query
|
|
433
|
+
*/
|
|
434
|
+
declare function filterMarketplaceSkills(skills: FetchedSkill[], query: string): FetchedSkill[];
|
|
435
|
+
/**
|
|
436
|
+
* Convert fetched skills to skill items for display
|
|
437
|
+
*/
|
|
438
|
+
declare function toSkillItems(skills: FetchedSkill[]): SkillItem[];
|
|
439
|
+
/**
|
|
440
|
+
* Sort skills alphabetically by name
|
|
441
|
+
*/
|
|
442
|
+
declare function sortSkillsByName(skills: FetchedSkill[]): FetchedSkill[];
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Get search directories for skills based on agent type
|
|
446
|
+
* @param agentType - Optional agent type (defaults to configured agent)
|
|
447
|
+
* @returns Array of directories to search for skills
|
|
448
|
+
*/
|
|
449
|
+
declare function getSearchDirs(agentType?: AgentType): string[];
|
|
450
|
+
/**
|
|
451
|
+
* Get installation directory for skills
|
|
452
|
+
* @param global - Whether to get global or project-local directory
|
|
453
|
+
* @param agentType - Optional agent type (defaults to configured agent)
|
|
454
|
+
* @returns Installation directory path
|
|
455
|
+
*/
|
|
456
|
+
declare function getInstallDir(global?: boolean, agentType?: AgentType): string;
|
|
457
|
+
/**
|
|
458
|
+
* Save skill metadata to a skill directory
|
|
459
|
+
* @param skillDir - Directory containing the skill
|
|
460
|
+
* @param metadata - Metadata to save
|
|
461
|
+
*/
|
|
462
|
+
declare function saveSkillMetadata(skillDir: string, metadata: SkillMetadata): void;
|
|
463
|
+
/**
|
|
464
|
+
* Get version from package.json
|
|
465
|
+
* @returns Version string
|
|
466
|
+
*/
|
|
467
|
+
declare function getVersion(): string;
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* List navigation and pagination utilities
|
|
471
|
+
*/
|
|
472
|
+
/**
|
|
473
|
+
* Calculate visible items for paginated list display
|
|
474
|
+
* Centers the selected item in the visible window
|
|
475
|
+
*/
|
|
476
|
+
interface PaginationResult {
|
|
477
|
+
/** Starting index in the full list */
|
|
478
|
+
start: number;
|
|
479
|
+
/** Ending index (exclusive) in the full list */
|
|
480
|
+
end: number;
|
|
481
|
+
/** Number of items above the visible window */
|
|
482
|
+
itemsAbove: number;
|
|
483
|
+
/** Number of items below the visible window */
|
|
484
|
+
itemsBelow: number;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Calculate pagination for a list with a selected index
|
|
488
|
+
* @param totalItems - Total number of items in the list
|
|
489
|
+
* @param selectedIndex - Currently selected item index
|
|
490
|
+
* @param maxVisible - Maximum number of items to show at once
|
|
491
|
+
* @returns Pagination information
|
|
492
|
+
*/
|
|
493
|
+
declare function calculatePagination(totalItems: number, selectedIndex: number, maxVisible: number): PaginationResult;
|
|
494
|
+
/**
|
|
495
|
+
* Move selection up in a list
|
|
496
|
+
* @param currentIndex - Current selected index
|
|
497
|
+
* @param minIndex - Minimum allowed index (default: 0)
|
|
498
|
+
* @returns New index after moving up
|
|
499
|
+
*/
|
|
500
|
+
declare function moveUp(currentIndex: number, minIndex?: number): number;
|
|
501
|
+
/**
|
|
502
|
+
* Move selection down in a list
|
|
503
|
+
* @param currentIndex - Current selected index
|
|
504
|
+
* @param maxIndex - Maximum allowed index
|
|
505
|
+
* @returns New index after moving down
|
|
506
|
+
*/
|
|
507
|
+
declare function moveDown(currentIndex: number, maxIndex: number): number;
|
|
508
|
+
/**
|
|
509
|
+
* Clamp an index within valid bounds
|
|
510
|
+
* @param index - Index to clamp
|
|
511
|
+
* @param listLength - Length of the list
|
|
512
|
+
* @returns Clamped index
|
|
513
|
+
*/
|
|
514
|
+
declare function clampIndex(index: number, listLength: number): number;
|
|
515
|
+
/**
|
|
516
|
+
* Calculate max visible items based on available rows
|
|
517
|
+
* @param availableRows - Total available rows
|
|
518
|
+
* @param reservedRows - Rows reserved for headers, footers, etc.
|
|
519
|
+
* @param minVisible - Minimum visible items (default: 5)
|
|
520
|
+
* @returns Maximum visible items
|
|
521
|
+
*/
|
|
522
|
+
declare function calculateMaxVisible(availableRows: number, reservedRows: number, minVisible?: number): number;
|
|
523
|
+
|
|
524
|
+
interface AgentGridProps {
|
|
525
|
+
maxVisible?: number;
|
|
526
|
+
showStatus?: boolean;
|
|
527
|
+
detectedAgents?: string[];
|
|
528
|
+
columns?: number;
|
|
529
|
+
}
|
|
530
|
+
declare function AgentGrid(props: AgentGridProps): any;
|
|
531
|
+
|
|
532
|
+
interface StatItem {
|
|
533
|
+
label: string;
|
|
534
|
+
value: number;
|
|
535
|
+
color?: keyof typeof terminalColors;
|
|
536
|
+
}
|
|
537
|
+
interface StatsCardProps {
|
|
538
|
+
items: StatItem[];
|
|
539
|
+
animated?: boolean;
|
|
540
|
+
}
|
|
541
|
+
declare function StatsCard(props: StatsCardProps): any;
|
|
14
542
|
|
|
15
543
|
interface HeaderProps {
|
|
16
544
|
title: string;
|
|
17
545
|
subtitle?: string;
|
|
18
546
|
count?: number;
|
|
547
|
+
badge?: string;
|
|
548
|
+
icon?: string;
|
|
19
549
|
}
|
|
20
|
-
declare function Header(
|
|
550
|
+
declare function Header(props: HeaderProps): any;
|
|
21
551
|
|
|
22
|
-
interface
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
552
|
+
interface SidebarProps {
|
|
553
|
+
screen: Screen;
|
|
554
|
+
onNavigate: (screen: Screen) => void;
|
|
555
|
+
}
|
|
556
|
+
declare function Sidebar(props: SidebarProps): any;
|
|
557
|
+
|
|
558
|
+
interface RightSidebarProps {
|
|
559
|
+
width: number;
|
|
560
|
+
rows: number;
|
|
28
561
|
}
|
|
562
|
+
declare function RightSidebar(props: RightSidebarProps): any;
|
|
563
|
+
|
|
564
|
+
interface BottomStatusBarProps {
|
|
565
|
+
currentScreen: Screen;
|
|
566
|
+
}
|
|
567
|
+
declare function BottomStatusBar(props: BottomStatusBarProps): any;
|
|
568
|
+
|
|
569
|
+
interface StatusBarProps {
|
|
570
|
+
message?: string;
|
|
571
|
+
messageType?: 'info' | 'success' | 'error' | 'warning';
|
|
572
|
+
shortcuts?: string;
|
|
573
|
+
}
|
|
574
|
+
declare function StatusBar(props: StatusBarProps): any;
|
|
575
|
+
|
|
29
576
|
interface SkillListProps {
|
|
30
577
|
skills: SkillItem[];
|
|
31
578
|
selectedIndex: number;
|
|
32
|
-
showInstalls?: boolean;
|
|
33
|
-
showRank?: boolean;
|
|
34
|
-
showSource?: boolean;
|
|
35
579
|
maxVisible?: number;
|
|
580
|
+
onSelect?: (skill: SkillItem) => void;
|
|
36
581
|
}
|
|
37
|
-
declare function SkillList(
|
|
582
|
+
declare function SkillList(props: SkillListProps): any;
|
|
38
583
|
|
|
39
|
-
interface
|
|
584
|
+
interface SearchInputProps {
|
|
585
|
+
value: string;
|
|
586
|
+
placeholder?: string;
|
|
587
|
+
focused?: boolean;
|
|
588
|
+
onChange?: (value: string) => void;
|
|
589
|
+
}
|
|
590
|
+
declare function SearchInput(props: SearchInputProps): any;
|
|
591
|
+
|
|
592
|
+
interface SpinnerProps {
|
|
593
|
+
label?: string;
|
|
594
|
+
color?: keyof typeof terminalColors;
|
|
595
|
+
}
|
|
596
|
+
declare function Spinner(props: SpinnerProps): any;
|
|
597
|
+
|
|
598
|
+
interface ProgressBarProps {
|
|
599
|
+
progress: number;
|
|
600
|
+
width?: number;
|
|
601
|
+
showPercentage?: boolean;
|
|
602
|
+
color?: keyof typeof terminalColors;
|
|
603
|
+
}
|
|
604
|
+
declare function ProgressBar(props: ProgressBarProps): any;
|
|
605
|
+
|
|
606
|
+
interface Feature {
|
|
40
607
|
key: string;
|
|
41
608
|
label: string;
|
|
609
|
+
description: string;
|
|
610
|
+
color: keyof typeof terminalColors;
|
|
42
611
|
}
|
|
43
|
-
|
|
44
|
-
|
|
612
|
+
declare const FEATURES: Feature[];
|
|
613
|
+
interface FeatureListProps {
|
|
614
|
+
features?: Feature[];
|
|
615
|
+
}
|
|
616
|
+
declare function FeatureList(props: FeatureListProps): any;
|
|
617
|
+
|
|
618
|
+
interface SplashProps {
|
|
619
|
+
onComplete: () => void;
|
|
620
|
+
duration?: number;
|
|
621
|
+
}
|
|
622
|
+
declare function Splash(props: SplashProps): any;
|
|
623
|
+
|
|
624
|
+
/**
|
|
625
|
+
* SelectList Component
|
|
626
|
+
* Reusable list with j/k + mouse navigation
|
|
627
|
+
*/
|
|
628
|
+
interface SelectListItem {
|
|
629
|
+
id: string;
|
|
630
|
+
label: string;
|
|
631
|
+
description?: string;
|
|
632
|
+
icon?: string;
|
|
633
|
+
meta?: string;
|
|
634
|
+
disabled?: boolean;
|
|
635
|
+
}
|
|
636
|
+
interface SelectListProps {
|
|
637
|
+
items: SelectListItem[];
|
|
638
|
+
selectedIndex: number;
|
|
639
|
+
hoveredIndex?: number | null;
|
|
640
|
+
onSelect?: (item: SelectListItem, index: number) => void;
|
|
641
|
+
onHover?: (index: number) => void;
|
|
642
|
+
maxVisible?: number;
|
|
643
|
+
showIndex?: boolean;
|
|
644
|
+
emptyText?: string;
|
|
645
|
+
compact?: boolean;
|
|
646
|
+
}
|
|
647
|
+
declare function SelectList(props: SelectListProps): any;
|
|
648
|
+
|
|
649
|
+
/**
|
|
650
|
+
* DetailPane Component
|
|
651
|
+
* Right-side detail panel with animated slide-in
|
|
652
|
+
*/
|
|
653
|
+
|
|
654
|
+
interface DetailField {
|
|
655
|
+
label: string;
|
|
656
|
+
value: string | string[];
|
|
657
|
+
color?: string;
|
|
658
|
+
}
|
|
659
|
+
interface DetailPaneProps {
|
|
660
|
+
title: string;
|
|
661
|
+
subtitle?: string;
|
|
662
|
+
icon?: string;
|
|
663
|
+
fields?: DetailField[];
|
|
664
|
+
content?: string;
|
|
665
|
+
actions?: Array<{
|
|
666
|
+
key: string;
|
|
667
|
+
label: string;
|
|
668
|
+
}>;
|
|
669
|
+
width?: number;
|
|
670
|
+
visible?: boolean;
|
|
671
|
+
onClose?: () => void;
|
|
672
|
+
children?: JSX.Element;
|
|
673
|
+
}
|
|
674
|
+
declare function DetailPane(props: DetailPaneProps): any;
|
|
675
|
+
|
|
676
|
+
/**
|
|
677
|
+
* SplitPane Component
|
|
678
|
+
* Horizontal/vertical split layout
|
|
679
|
+
*/
|
|
680
|
+
|
|
681
|
+
interface SplitPaneProps {
|
|
682
|
+
direction?: 'horizontal' | 'vertical';
|
|
683
|
+
primarySize?: number | string;
|
|
684
|
+
secondarySize?: number | string;
|
|
685
|
+
showDivider?: boolean;
|
|
686
|
+
dividerChar?: string;
|
|
687
|
+
primary: JSX.Element;
|
|
688
|
+
secondary?: JSX.Element;
|
|
689
|
+
gap?: number;
|
|
690
|
+
}
|
|
691
|
+
declare function SplitPane(props: SplitPaneProps): any;
|
|
692
|
+
interface ThreePaneLayoutProps {
|
|
693
|
+
left?: JSX.Element;
|
|
694
|
+
center: JSX.Element;
|
|
695
|
+
right?: JSX.Element;
|
|
696
|
+
leftWidth?: number;
|
|
697
|
+
rightWidth?: number;
|
|
698
|
+
showLeftDivider?: boolean;
|
|
699
|
+
showRightDivider?: boolean;
|
|
700
|
+
}
|
|
701
|
+
declare function ThreePaneLayout(props: ThreePaneLayoutProps): any;
|
|
702
|
+
|
|
703
|
+
/**
|
|
704
|
+
* EmptyState Component
|
|
705
|
+
* Consistent "no data" display
|
|
706
|
+
*/
|
|
707
|
+
interface EmptyStateProps {
|
|
708
|
+
icon?: string;
|
|
709
|
+
title: string;
|
|
710
|
+
description?: string;
|
|
711
|
+
action?: {
|
|
712
|
+
label: string;
|
|
713
|
+
key?: string;
|
|
714
|
+
};
|
|
715
|
+
compact?: boolean;
|
|
716
|
+
}
|
|
717
|
+
declare function EmptyState(props: EmptyStateProps): any;
|
|
718
|
+
interface LoadingStateProps {
|
|
45
719
|
message?: string;
|
|
720
|
+
compact?: boolean;
|
|
46
721
|
}
|
|
47
|
-
declare function
|
|
722
|
+
declare function LoadingState(props: LoadingStateProps): any;
|
|
723
|
+
interface ErrorStateProps {
|
|
724
|
+
title?: string;
|
|
725
|
+
message: string;
|
|
726
|
+
action?: {
|
|
727
|
+
label: string;
|
|
728
|
+
key?: string;
|
|
729
|
+
};
|
|
730
|
+
compact?: boolean;
|
|
731
|
+
}
|
|
732
|
+
declare function ErrorState(props: ErrorStateProps): any;
|
|
48
733
|
|
|
49
|
-
|
|
734
|
+
/**
|
|
735
|
+
* StatusIndicator Component
|
|
736
|
+
* Loading/success/error/warning indicator
|
|
737
|
+
*/
|
|
738
|
+
type StatusType = 'loading' | 'success' | 'error' | 'warning' | 'info' | 'pending';
|
|
739
|
+
interface StatusIndicatorProps {
|
|
740
|
+
status: StatusType;
|
|
741
|
+
label?: string;
|
|
742
|
+
showLabel?: boolean;
|
|
743
|
+
size?: 'sm' | 'md' | 'lg';
|
|
744
|
+
animated?: boolean;
|
|
745
|
+
}
|
|
746
|
+
declare function StatusIndicator(props: StatusIndicatorProps): any;
|
|
747
|
+
interface InlineStatusProps {
|
|
748
|
+
status: StatusType;
|
|
749
|
+
compact?: boolean;
|
|
750
|
+
}
|
|
751
|
+
declare function InlineStatus(props: InlineStatusProps): any;
|
|
752
|
+
interface StatusBadgeProps {
|
|
753
|
+
status: StatusType;
|
|
754
|
+
label: string;
|
|
755
|
+
}
|
|
756
|
+
declare function StatusBadge(props: StatusBadgeProps): any;
|
|
757
|
+
|
|
758
|
+
/**
|
|
759
|
+
* CodeBlock Component
|
|
760
|
+
* Basic syntax highlighting for code display
|
|
761
|
+
*/
|
|
762
|
+
interface CodeBlockProps {
|
|
763
|
+
code: string;
|
|
764
|
+
language?: string;
|
|
765
|
+
showLineNumbers?: boolean;
|
|
766
|
+
maxLines?: number;
|
|
767
|
+
highlightLines?: number[];
|
|
768
|
+
title?: string;
|
|
769
|
+
}
|
|
770
|
+
declare function CodeBlock(props: CodeBlockProps): any;
|
|
771
|
+
interface InlineCodeProps {
|
|
772
|
+
children: string;
|
|
773
|
+
}
|
|
774
|
+
declare function InlineCode(props: InlineCodeProps): any;
|
|
775
|
+
|
|
776
|
+
/**
|
|
777
|
+
* FormField Component
|
|
778
|
+
* Input with label and validation
|
|
779
|
+
*/
|
|
780
|
+
interface FormFieldProps {
|
|
781
|
+
label: string;
|
|
782
|
+
value: string;
|
|
783
|
+
placeholder?: string;
|
|
784
|
+
error?: string;
|
|
785
|
+
hint?: string;
|
|
786
|
+
required?: boolean;
|
|
787
|
+
disabled?: boolean;
|
|
788
|
+
focused?: boolean;
|
|
789
|
+
type?: 'text' | 'password' | 'search';
|
|
790
|
+
width?: number;
|
|
791
|
+
}
|
|
792
|
+
declare function FormField(props: FormFieldProps): any;
|
|
793
|
+
interface TextAreaFieldProps {
|
|
794
|
+
label: string;
|
|
50
795
|
value: string;
|
|
51
|
-
onChange: (value: string) => void;
|
|
52
796
|
placeholder?: string;
|
|
797
|
+
error?: string;
|
|
798
|
+
rows?: number;
|
|
799
|
+
width?: number;
|
|
800
|
+
focused?: boolean;
|
|
801
|
+
}
|
|
802
|
+
declare function TextAreaField(props: TextAreaFieldProps): any;
|
|
803
|
+
interface SelectFieldProps {
|
|
804
|
+
label: string;
|
|
805
|
+
value: string;
|
|
806
|
+
options: Array<{
|
|
807
|
+
value: string;
|
|
808
|
+
label: string;
|
|
809
|
+
}>;
|
|
810
|
+
focused?: boolean;
|
|
811
|
+
expanded?: boolean;
|
|
812
|
+
selectedOptionIndex?: number;
|
|
813
|
+
}
|
|
814
|
+
declare function SelectField(props: SelectFieldProps): any;
|
|
815
|
+
|
|
816
|
+
/**
|
|
817
|
+
* ErrorBoundary Component
|
|
818
|
+
* Catch and display errors gracefully
|
|
819
|
+
*/
|
|
820
|
+
|
|
821
|
+
interface ErrorBoundaryProps {
|
|
822
|
+
children: JSX.Element;
|
|
823
|
+
fallback?: JSX.Element | ((error: Error, reset: () => void) => JSX.Element);
|
|
824
|
+
onError?: (error: Error) => void;
|
|
825
|
+
}
|
|
826
|
+
declare function ErrorBoundary(props: ErrorBoundaryProps): any;
|
|
827
|
+
interface TryProps {
|
|
828
|
+
children: JSX.Element;
|
|
829
|
+
catch?: JSX.Element;
|
|
830
|
+
}
|
|
831
|
+
declare function Try(props: TryProps): any;
|
|
832
|
+
|
|
833
|
+
/**
|
|
834
|
+
* Button Component
|
|
835
|
+
* Clickable button with hover/active states
|
|
836
|
+
*/
|
|
837
|
+
type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';
|
|
838
|
+
type ButtonSize = 'sm' | 'md' | 'lg';
|
|
839
|
+
interface ButtonProps {
|
|
840
|
+
label: string;
|
|
841
|
+
shortcut?: string;
|
|
842
|
+
icon?: string;
|
|
843
|
+
variant?: ButtonVariant;
|
|
844
|
+
size?: ButtonSize;
|
|
845
|
+
disabled?: boolean;
|
|
846
|
+
focused?: boolean;
|
|
847
|
+
pressed?: boolean;
|
|
848
|
+
hovered?: boolean;
|
|
849
|
+
onClick?: () => void;
|
|
850
|
+
}
|
|
851
|
+
declare function Button(props: ButtonProps): any;
|
|
852
|
+
interface ButtonGroupProps {
|
|
853
|
+
buttons: Array<{
|
|
854
|
+
id: string;
|
|
855
|
+
label: string;
|
|
856
|
+
shortcut?: string;
|
|
857
|
+
icon?: string;
|
|
858
|
+
variant?: ButtonVariant;
|
|
859
|
+
disabled?: boolean;
|
|
860
|
+
onClick?: () => void;
|
|
861
|
+
}>;
|
|
862
|
+
selectedId?: string;
|
|
863
|
+
focusedId?: string;
|
|
864
|
+
direction?: 'horizontal' | 'vertical';
|
|
865
|
+
gap?: number;
|
|
866
|
+
}
|
|
867
|
+
declare function ButtonGroup(props: ButtonGroupProps): any;
|
|
868
|
+
interface IconButtonProps {
|
|
869
|
+
icon: string;
|
|
870
|
+
label?: string;
|
|
871
|
+
disabled?: boolean;
|
|
872
|
+
focused?: boolean;
|
|
873
|
+
hovered?: boolean;
|
|
874
|
+
onClick?: () => void;
|
|
875
|
+
}
|
|
876
|
+
declare function IconButton(props: IconButtonProps): any;
|
|
877
|
+
|
|
878
|
+
/**
|
|
879
|
+
* Clickable Component
|
|
880
|
+
* Wrapper to make any element clickable with hover effects
|
|
881
|
+
*/
|
|
882
|
+
|
|
883
|
+
interface ClickableProps {
|
|
884
|
+
children: JSX.Element;
|
|
885
|
+
onClick?: () => void;
|
|
886
|
+
onDoubleClick?: () => void;
|
|
887
|
+
onRightClick?: () => void;
|
|
888
|
+
disabled?: boolean;
|
|
889
|
+
hovered?: boolean;
|
|
890
|
+
pressed?: boolean;
|
|
891
|
+
focusable?: boolean;
|
|
892
|
+
focused?: boolean;
|
|
893
|
+
cursor?: string;
|
|
894
|
+
hoverEffect?: 'highlight' | 'underline' | 'pointer' | 'none';
|
|
895
|
+
}
|
|
896
|
+
declare function Clickable(props: ClickableProps): any;
|
|
897
|
+
interface ClickableTextProps {
|
|
898
|
+
children: string;
|
|
899
|
+
onClick?: () => void;
|
|
900
|
+
disabled?: boolean;
|
|
901
|
+
hovered?: boolean;
|
|
902
|
+
color?: string;
|
|
903
|
+
hoverColor?: string;
|
|
904
|
+
underlineOnHover?: boolean;
|
|
905
|
+
}
|
|
906
|
+
declare function ClickableText(props: ClickableTextProps): any;
|
|
907
|
+
interface ClickableRowProps {
|
|
908
|
+
children: JSX.Element;
|
|
909
|
+
selected?: boolean;
|
|
910
|
+
hovered?: boolean;
|
|
911
|
+
disabled?: boolean;
|
|
912
|
+
showIndicator?: boolean;
|
|
913
|
+
indicatorChar?: string;
|
|
914
|
+
onClick?: () => void;
|
|
915
|
+
}
|
|
916
|
+
declare function ClickableRow(props: ClickableRowProps): any;
|
|
917
|
+
interface InteractiveAreaProps {
|
|
918
|
+
children: JSX.Element;
|
|
919
|
+
x?: number;
|
|
920
|
+
y?: number;
|
|
921
|
+
width?: number;
|
|
922
|
+
height?: number;
|
|
923
|
+
onMouseOver?: () => void;
|
|
924
|
+
onMouseOut?: () => void;
|
|
925
|
+
onClick?: () => void;
|
|
926
|
+
onMouseDown?: () => void;
|
|
927
|
+
onMouseUp?: () => void;
|
|
928
|
+
}
|
|
929
|
+
declare function InteractiveArea(props: InteractiveAreaProps): any;
|
|
930
|
+
|
|
931
|
+
/**
|
|
932
|
+
* HoverHighlight Component
|
|
933
|
+
* Hover highlight effect for list items and buttons
|
|
934
|
+
* Note: Terminal background colors are limited, so we use text color changes for highlighting
|
|
935
|
+
*/
|
|
936
|
+
|
|
937
|
+
interface HoverHighlightProps {
|
|
938
|
+
children: JSX.Element;
|
|
939
|
+
isHovered?: boolean;
|
|
940
|
+
isSelected?: boolean;
|
|
941
|
+
isDisabled?: boolean;
|
|
942
|
+
highlightColor?: string;
|
|
943
|
+
selectedColor?: string;
|
|
944
|
+
transitionMs?: number;
|
|
945
|
+
}
|
|
946
|
+
declare function HoverHighlight(props: HoverHighlightProps): any;
|
|
947
|
+
interface HighlightableListItemProps {
|
|
948
|
+
children: JSX.Element;
|
|
949
|
+
index: number;
|
|
950
|
+
selectedIndex?: number;
|
|
951
|
+
hoveredIndex?: number | null;
|
|
952
|
+
showPrefix?: boolean;
|
|
953
|
+
prefixWidth?: number;
|
|
954
|
+
}
|
|
955
|
+
declare function HighlightableListItem(props: HighlightableListItemProps): any;
|
|
956
|
+
interface FocusRingProps {
|
|
957
|
+
children: JSX.Element;
|
|
53
958
|
isFocused?: boolean;
|
|
959
|
+
ringColor?: string;
|
|
54
960
|
}
|
|
55
|
-
declare function
|
|
961
|
+
declare function FocusRing(props: FocusRingProps): any;
|
|
962
|
+
interface PressEffectProps {
|
|
963
|
+
children: JSX.Element;
|
|
964
|
+
isPressed?: boolean;
|
|
965
|
+
pressColor?: string;
|
|
966
|
+
}
|
|
967
|
+
declare function PressEffect(props: PressEffectProps): any;
|
|
968
|
+
|
|
969
|
+
/**
|
|
970
|
+
* AnimatedText Component
|
|
971
|
+
* Text with fade/slide animations
|
|
972
|
+
*/
|
|
973
|
+
interface AnimatedTextProps {
|
|
974
|
+
text: string;
|
|
975
|
+
animation?: 'fadeIn' | 'typewriter' | 'scramble' | 'countUp' | 'none';
|
|
976
|
+
duration?: number;
|
|
977
|
+
delay?: number;
|
|
978
|
+
color?: string;
|
|
979
|
+
onComplete?: () => void;
|
|
980
|
+
}
|
|
981
|
+
declare function AnimatedText(props: AnimatedTextProps): any;
|
|
982
|
+
interface CountUpTextProps {
|
|
983
|
+
value: number;
|
|
984
|
+
duration?: number;
|
|
985
|
+
delay?: number;
|
|
986
|
+
prefix?: string;
|
|
987
|
+
suffix?: string;
|
|
988
|
+
color?: string;
|
|
989
|
+
formatter?: (value: number) => string;
|
|
990
|
+
}
|
|
991
|
+
declare function CountUpText(props: CountUpTextProps): any;
|
|
992
|
+
interface BlinkingTextProps {
|
|
993
|
+
text: string;
|
|
994
|
+
interval?: number;
|
|
995
|
+
color?: string;
|
|
996
|
+
blinkColor?: string;
|
|
997
|
+
}
|
|
998
|
+
declare function BlinkingText(props: BlinkingTextProps): any;
|
|
999
|
+
interface PulsingTextProps {
|
|
1000
|
+
text: string;
|
|
1001
|
+
color?: string;
|
|
1002
|
+
pulseColor?: string;
|
|
1003
|
+
interval?: number;
|
|
1004
|
+
}
|
|
1005
|
+
declare function PulsingText(props: PulsingTextProps): any;
|
|
1006
|
+
|
|
1007
|
+
/**
|
|
1008
|
+
* TabBar Component
|
|
1009
|
+
* Clickable tab navigation
|
|
1010
|
+
*/
|
|
1011
|
+
interface Tab {
|
|
1012
|
+
id: string;
|
|
1013
|
+
label: string;
|
|
1014
|
+
icon?: string;
|
|
1015
|
+
badge?: string | number;
|
|
1016
|
+
disabled?: boolean;
|
|
1017
|
+
}
|
|
1018
|
+
interface TabBarProps {
|
|
1019
|
+
tabs: Tab[];
|
|
1020
|
+
activeId: string;
|
|
1021
|
+
hoveredId?: string | null;
|
|
1022
|
+
onSelect?: (id: string) => void;
|
|
1023
|
+
variant?: 'default' | 'pills' | 'underline';
|
|
1024
|
+
size?: 'sm' | 'md' | 'lg';
|
|
1025
|
+
showShortcuts?: boolean;
|
|
1026
|
+
}
|
|
1027
|
+
declare function TabBar(props: TabBarProps): any;
|
|
1028
|
+
interface VerticalTabBarProps {
|
|
1029
|
+
tabs: Tab[];
|
|
1030
|
+
activeId: string;
|
|
1031
|
+
hoveredId?: string | null;
|
|
1032
|
+
onSelect?: (id: string) => void;
|
|
1033
|
+
width?: number;
|
|
1034
|
+
}
|
|
1035
|
+
declare function VerticalTabBar(props: VerticalTabBarProps): any;
|
|
1036
|
+
|
|
1037
|
+
/**
|
|
1038
|
+
* Breadcrumb Component
|
|
1039
|
+
* Clickable breadcrumb navigation
|
|
1040
|
+
*/
|
|
1041
|
+
interface BreadcrumbItem {
|
|
1042
|
+
id: string;
|
|
1043
|
+
label: string;
|
|
1044
|
+
icon?: string;
|
|
1045
|
+
}
|
|
1046
|
+
interface BreadcrumbProps {
|
|
1047
|
+
items: BreadcrumbItem[];
|
|
1048
|
+
separator?: string;
|
|
1049
|
+
hoveredId?: string | null;
|
|
1050
|
+
onNavigate?: (id: string) => void;
|
|
1051
|
+
}
|
|
1052
|
+
declare function Breadcrumb(props: BreadcrumbProps): any;
|
|
1053
|
+
interface PathBreadcrumbProps {
|
|
1054
|
+
path: string;
|
|
1055
|
+
separator?: string;
|
|
1056
|
+
maxSegments?: number;
|
|
1057
|
+
hoveredSegment?: number | null;
|
|
1058
|
+
onNavigate?: (path: string, segmentIndex: number) => void;
|
|
1059
|
+
}
|
|
1060
|
+
declare function PathBreadcrumb(props: PathBreadcrumbProps): any;
|
|
1061
|
+
interface NavigationTrailProps {
|
|
1062
|
+
items: Array<{
|
|
1063
|
+
screen: string;
|
|
1064
|
+
label: string;
|
|
1065
|
+
}>;
|
|
1066
|
+
currentIndex: number;
|
|
1067
|
+
hoveredIndex?: number | null;
|
|
1068
|
+
}
|
|
1069
|
+
declare function NavigationTrail(props: NavigationTrailProps): any;
|
|
56
1070
|
|
|
57
1071
|
interface HomeProps {
|
|
58
1072
|
onNavigate: (screen: Screen) => void;
|
|
59
1073
|
cols?: number;
|
|
60
1074
|
rows?: number;
|
|
61
1075
|
}
|
|
62
|
-
declare function Home(
|
|
1076
|
+
declare function Home(props: HomeProps): any;
|
|
63
1077
|
|
|
64
|
-
interface
|
|
1078
|
+
interface BrowseProps {
|
|
1079
|
+
onNavigate: (screen: Screen) => void;
|
|
65
1080
|
cols?: number;
|
|
66
1081
|
rows?: number;
|
|
67
1082
|
}
|
|
68
|
-
declare function Browse(
|
|
1083
|
+
declare function Browse(props: BrowseProps): any;
|
|
69
1084
|
|
|
70
|
-
interface
|
|
1085
|
+
interface InstalledProps {
|
|
1086
|
+
onNavigate: (screen: Screen) => void;
|
|
71
1087
|
cols?: number;
|
|
72
1088
|
rows?: number;
|
|
73
1089
|
}
|
|
74
|
-
declare function Installed(
|
|
1090
|
+
declare function Installed(props: InstalledProps): any;
|
|
75
1091
|
|
|
76
|
-
interface
|
|
1092
|
+
interface MarketplaceProps {
|
|
1093
|
+
onNavigate: (screen: Screen) => void;
|
|
77
1094
|
cols?: number;
|
|
78
1095
|
rows?: number;
|
|
79
1096
|
}
|
|
80
|
-
declare function
|
|
1097
|
+
declare function Marketplace(props: MarketplaceProps): any;
|
|
81
1098
|
|
|
82
|
-
interface
|
|
1099
|
+
interface RecommendProps {
|
|
1100
|
+
onNavigate: (screen: Screen) => void;
|
|
83
1101
|
cols?: number;
|
|
84
1102
|
rows?: number;
|
|
85
1103
|
}
|
|
86
|
-
declare function
|
|
1104
|
+
declare function Recommend(props: RecommendProps): any;
|
|
87
1105
|
|
|
88
|
-
interface
|
|
1106
|
+
interface TranslateProps {
|
|
1107
|
+
onNavigate: (screen: Screen) => void;
|
|
89
1108
|
cols?: number;
|
|
90
1109
|
rows?: number;
|
|
91
1110
|
}
|
|
92
|
-
declare function
|
|
1111
|
+
declare function Translate(props: TranslateProps): any;
|
|
93
1112
|
|
|
94
|
-
interface
|
|
1113
|
+
interface ContextProps {
|
|
1114
|
+
onNavigate: (screen: Screen) => void;
|
|
95
1115
|
cols?: number;
|
|
96
1116
|
rows?: number;
|
|
97
1117
|
}
|
|
98
|
-
declare function
|
|
1118
|
+
declare function Context(props: ContextProps): any;
|
|
99
1119
|
|
|
100
|
-
interface
|
|
1120
|
+
interface SyncProps {
|
|
1121
|
+
onNavigate: (screen: Screen) => void;
|
|
101
1122
|
cols?: number;
|
|
102
1123
|
rows?: number;
|
|
103
1124
|
}
|
|
104
|
-
declare function
|
|
1125
|
+
declare function Sync(props: SyncProps): any;
|
|
105
1126
|
|
|
106
|
-
interface
|
|
1127
|
+
interface MemoryProps {
|
|
1128
|
+
onNavigate: (screen: Screen) => void;
|
|
107
1129
|
cols?: number;
|
|
108
1130
|
rows?: number;
|
|
109
1131
|
}
|
|
110
|
-
declare function Memory(
|
|
1132
|
+
declare function Memory(props: MemoryProps): any;
|
|
111
1133
|
|
|
112
|
-
interface
|
|
1134
|
+
interface WorkflowProps {
|
|
1135
|
+
onNavigate: (screen: Screen) => void;
|
|
113
1136
|
cols?: number;
|
|
114
1137
|
rows?: number;
|
|
115
1138
|
}
|
|
116
|
-
declare function Workflow(
|
|
1139
|
+
declare function Workflow(props: WorkflowProps): any;
|
|
117
1140
|
|
|
118
|
-
interface
|
|
1141
|
+
interface ExecuteProps {
|
|
1142
|
+
onNavigate: (screen: Screen) => void;
|
|
119
1143
|
cols?: number;
|
|
120
1144
|
rows?: number;
|
|
121
1145
|
}
|
|
122
|
-
declare function Execute(
|
|
1146
|
+
declare function Execute(props: ExecuteProps): any;
|
|
123
1147
|
|
|
124
|
-
interface
|
|
1148
|
+
interface HistoryProps {
|
|
1149
|
+
onNavigate: (screen: Screen) => void;
|
|
125
1150
|
cols?: number;
|
|
126
1151
|
rows?: number;
|
|
127
1152
|
}
|
|
128
|
-
declare function History(
|
|
1153
|
+
declare function History(props: HistoryProps): any;
|
|
129
1154
|
|
|
130
|
-
interface
|
|
1155
|
+
interface TeamProps {
|
|
1156
|
+
onNavigate: (screen: Screen) => void;
|
|
131
1157
|
cols?: number;
|
|
132
1158
|
rows?: number;
|
|
133
1159
|
}
|
|
134
|
-
declare function
|
|
1160
|
+
declare function Team(props: TeamProps): any;
|
|
135
1161
|
|
|
136
|
-
interface
|
|
1162
|
+
interface PluginsProps {
|
|
1163
|
+
onNavigate: (screen: Screen) => void;
|
|
137
1164
|
cols?: number;
|
|
138
1165
|
rows?: number;
|
|
139
1166
|
}
|
|
140
|
-
declare function
|
|
1167
|
+
declare function Plugins(props: PluginsProps): any;
|
|
141
1168
|
|
|
142
|
-
interface
|
|
1169
|
+
interface MethodologyProps {
|
|
1170
|
+
onNavigate: (screen: Screen) => void;
|
|
143
1171
|
cols?: number;
|
|
144
1172
|
rows?: number;
|
|
145
1173
|
}
|
|
146
|
-
declare function
|
|
1174
|
+
declare function Methodology(props: MethodologyProps): any;
|
|
147
1175
|
|
|
148
|
-
interface
|
|
1176
|
+
interface PlanProps {
|
|
1177
|
+
onNavigate: (screen: Screen) => void;
|
|
149
1178
|
cols?: number;
|
|
150
1179
|
rows?: number;
|
|
151
1180
|
}
|
|
152
|
-
declare function
|
|
1181
|
+
declare function Plan(props: PlanProps): any;
|
|
153
1182
|
|
|
154
|
-
interface
|
|
1183
|
+
interface SettingsProps {
|
|
1184
|
+
onNavigate: (screen: Screen) => void;
|
|
155
1185
|
cols?: number;
|
|
156
1186
|
rows?: number;
|
|
157
1187
|
}
|
|
158
|
-
declare function
|
|
1188
|
+
declare function Settings(props: SettingsProps): any;
|
|
159
1189
|
|
|
160
|
-
interface
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
refresh: () => void;
|
|
165
|
-
remove: (name: string) => Promise<void>;
|
|
1190
|
+
interface HelpProps {
|
|
1191
|
+
onNavigate: (screen: Screen) => void;
|
|
1192
|
+
cols?: number;
|
|
1193
|
+
rows?: number;
|
|
166
1194
|
}
|
|
167
|
-
declare function
|
|
1195
|
+
declare function Help(props: HelpProps): any;
|
|
168
1196
|
|
|
169
|
-
interface
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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;
|
|
1197
|
+
interface MeshProps {
|
|
1198
|
+
onNavigate: (screen: Screen) => void;
|
|
1199
|
+
cols?: number;
|
|
1200
|
+
rows?: number;
|
|
197
1201
|
}
|
|
198
|
-
declare function
|
|
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
|
-
};
|
|
1202
|
+
declare function Mesh(props: MeshProps): any;
|
|
206
1203
|
|
|
207
|
-
interface
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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;
|
|
1204
|
+
interface MessageProps {
|
|
1205
|
+
onNavigate: (screen: Screen) => void;
|
|
1206
|
+
cols?: number;
|
|
1207
|
+
rows?: number;
|
|
233
1208
|
}
|
|
234
|
-
declare function
|
|
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";
|
|
1209
|
+
declare function Message(props: MessageProps): any;
|
|
262
1210
|
|
|
263
|
-
declare function
|
|
1211
|
+
declare function exitTUI(code?: number): void;
|
|
1212
|
+
declare function startTUI(): Promise<never>;
|
|
264
1213
|
|
|
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,
|
|
1214
|
+
export { AGENT_LOGOS, AgentGrid, type AgentLogo, type AgentStatus, type AgentsState, AnimatedText, type AnimationPreset, App, BlinkingText, BottomStatusBar, Breadcrumb, type BreadcrumbItem, Browse, Button, ButtonGroup, type ButtonSize, type ButtonVariant, Clickable, ClickableRow, ClickableText, CodeBlock, type ColorName, type ColorValue, Context, CountUpText, DEFAULT_REPOS, DEFAULT_SCRAMBLE_CONFIG, type DetailField, DetailPane, type EasingFunction, EmptyState, ErrorBoundary, ErrorState, Execute, FEATURES, type Feature, FeatureList, type FetchedSkill, FocusRing, FormField, Header, Help, HighlightableListItem, History, Home, HoverHighlight, IconButton, InlineCode, InlineStatus, Installed, InteractiveArea, LoadingState, Marketplace, type MarketplaceState, Memory, Mesh, Message, Methodology, NAV_KEYS, type NavigationState, NavigationTrail, type PaginationResult, PathBreadcrumb, Plan, Plugins, PressEffect, ProgressBar, PulsingText, Recommend, type RepoInfo, RightSidebar, SCRAMBLE_CHARS, SIDEBAR_NAV, STATUS_BAR_SHORTCUTS, type ScrambleConfig, type Screen, type ScreenMeta, SearchInput, SelectField, SelectList, type SelectListItem, Settings, Sidebar, type SidebarSection, type SkillItem, SkillList, type SkillWithDetails, type SkillsState, Spinner, Splash, SplitPane, StatsCard, StatusBadge, StatusBar, StatusIndicator, type StatusType, type SymbolName, Sync, TOTAL_AGENTS, type Tab, TabBar, Team, TextAreaField, ThreePaneLayout, Translate, Try, VerticalTabBar, 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, loadSkillsWithDetails, moveDown, moveUp, navigateTo, readSkillDescription, removeSkill, saveSkillMetadata, scrambleText, sortSkillsByName, startTUI, symbols, terminalColors, toSkillItems };
|