@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/README.md +78 -163
- package/dist/index.d.ts +642 -163
- package/dist/index.js +2701 -3544
- package/dist/index.js.map +1 -1
- package/package.json +9 -12
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 {
|
|
2
|
+
import { AgentType, SkillMetadata } from '@skillkit/core';
|
|
3
|
+
import * as _skillkit_agents from '@skillkit/agents';
|
|
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({ 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):
|
|
538
|
+
declare function Header({ title, subtitle, count, badge, icon }: HeaderProps): react.ReactNode;
|
|
21
539
|
|
|
22
|
-
interface
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
581
|
+
declare function ProgressBar({ progress, width, showPercentage, color, }: ProgressBarProps): react.ReactNode;
|
|
38
582
|
|
|
39
|
-
interface
|
|
583
|
+
interface Feature {
|
|
40
584
|
key: string;
|
|
41
585
|
label: string;
|
|
586
|
+
description: string;
|
|
587
|
+
color: keyof typeof terminalColors;
|
|
42
588
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
589
|
+
declare const FEATURES: Feature[];
|
|
590
|
+
interface FeatureListProps {
|
|
591
|
+
features?: Feature[];
|
|
46
592
|
}
|
|
47
|
-
declare function
|
|
593
|
+
declare function FeatureList({ features }: FeatureListProps): react.ReactNode;
|
|
48
594
|
|
|
49
|
-
interface
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
placeholder?: string;
|
|
53
|
-
isFocused?: boolean;
|
|
595
|
+
interface SplashProps {
|
|
596
|
+
onComplete: () => void;
|
|
597
|
+
duration?: number;
|
|
54
598
|
}
|
|
55
|
-
declare function
|
|
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
|
|
606
|
+
declare function Home({ cols }: HomeProps): react.ReactNode;
|
|
63
607
|
|
|
64
|
-
interface
|
|
608
|
+
interface BrowseProps {
|
|
609
|
+
onNavigate: (screen: Screen) => void;
|
|
65
610
|
cols?: number;
|
|
66
611
|
rows?: number;
|
|
67
612
|
}
|
|
68
|
-
declare function Browse({ rows }:
|
|
613
|
+
declare function Browse({ onNavigate, cols, rows }: BrowseProps): react.ReactNode;
|
|
69
614
|
|
|
70
|
-
interface
|
|
615
|
+
interface InstalledProps {
|
|
616
|
+
onNavigate: (screen: Screen) => void;
|
|
71
617
|
cols?: number;
|
|
72
618
|
rows?: number;
|
|
73
619
|
}
|
|
74
|
-
declare function Installed({ rows }:
|
|
620
|
+
declare function Installed({ onNavigate, cols, rows }: InstalledProps): react.ReactNode;
|
|
75
621
|
|
|
76
|
-
interface
|
|
622
|
+
interface MarketplaceProps {
|
|
623
|
+
onNavigate: (screen: Screen) => void;
|
|
77
624
|
cols?: number;
|
|
78
625
|
rows?: number;
|
|
79
626
|
}
|
|
80
|
-
declare function
|
|
627
|
+
declare function Marketplace({ onNavigate, cols, rows }: MarketplaceProps): react.ReactNode;
|
|
81
628
|
|
|
82
|
-
interface
|
|
629
|
+
interface RecommendProps {
|
|
630
|
+
onNavigate: (screen: Screen) => void;
|
|
83
631
|
cols?: number;
|
|
84
632
|
rows?: number;
|
|
85
633
|
}
|
|
86
|
-
declare function
|
|
634
|
+
declare function Recommend({ onNavigate, cols, rows }: RecommendProps): react.ReactNode;
|
|
87
635
|
|
|
88
|
-
interface
|
|
636
|
+
interface TranslateProps {
|
|
637
|
+
onNavigate: (screen: Screen) => void;
|
|
89
638
|
cols?: number;
|
|
90
639
|
rows?: number;
|
|
91
640
|
}
|
|
92
|
-
declare function
|
|
641
|
+
declare function Translate(_props: TranslateProps): react.ReactNode;
|
|
93
642
|
|
|
94
|
-
interface
|
|
643
|
+
interface ContextProps {
|
|
644
|
+
onNavigate: (screen: Screen) => void;
|
|
95
645
|
cols?: number;
|
|
96
646
|
rows?: number;
|
|
97
647
|
}
|
|
98
|
-
declare function
|
|
648
|
+
declare function Context({ onNavigate, cols, rows }: ContextProps): react.ReactNode;
|
|
99
649
|
|
|
100
|
-
interface
|
|
650
|
+
interface SyncProps {
|
|
651
|
+
onNavigate: (screen: Screen) => void;
|
|
101
652
|
cols?: number;
|
|
102
653
|
rows?: number;
|
|
103
654
|
}
|
|
104
|
-
declare function
|
|
655
|
+
declare function Sync({ onNavigate, cols, rows }: SyncProps): react.ReactNode;
|
|
105
656
|
|
|
106
|
-
interface
|
|
657
|
+
interface MemoryProps {
|
|
658
|
+
onNavigate: (screen: Screen) => void;
|
|
107
659
|
cols?: number;
|
|
108
660
|
rows?: number;
|
|
109
661
|
}
|
|
110
|
-
declare function Memory({ rows }:
|
|
662
|
+
declare function Memory({ onNavigate, cols, rows }: MemoryProps): react.ReactNode;
|
|
111
663
|
|
|
112
|
-
interface
|
|
664
|
+
interface WorkflowProps {
|
|
665
|
+
onNavigate: (screen: Screen) => void;
|
|
113
666
|
cols?: number;
|
|
114
667
|
rows?: number;
|
|
115
668
|
}
|
|
116
|
-
declare function Workflow({ rows }:
|
|
669
|
+
declare function Workflow({ onNavigate, cols, rows }: WorkflowProps): react.ReactNode;
|
|
117
670
|
|
|
118
|
-
interface
|
|
671
|
+
interface ExecuteProps {
|
|
672
|
+
onNavigate: (screen: Screen) => void;
|
|
119
673
|
cols?: number;
|
|
120
674
|
rows?: number;
|
|
121
675
|
}
|
|
122
|
-
declare function Execute({ rows }:
|
|
676
|
+
declare function Execute({ onNavigate, cols, rows }: ExecuteProps): react.ReactNode;
|
|
123
677
|
|
|
124
|
-
interface
|
|
678
|
+
interface HistoryProps {
|
|
679
|
+
onNavigate: (screen: Screen) => void;
|
|
125
680
|
cols?: number;
|
|
126
681
|
rows?: number;
|
|
127
682
|
}
|
|
128
|
-
declare function History({ rows }:
|
|
683
|
+
declare function History({ onNavigate, cols, rows }: HistoryProps): react.ReactNode;
|
|
129
684
|
|
|
130
|
-
interface
|
|
685
|
+
interface TeamProps {
|
|
686
|
+
onNavigate: (screen: Screen) => void;
|
|
131
687
|
cols?: number;
|
|
132
688
|
rows?: number;
|
|
133
689
|
}
|
|
134
|
-
declare function
|
|
690
|
+
declare function Team({ onNavigate, cols, rows }: TeamProps): react.ReactNode;
|
|
135
691
|
|
|
136
|
-
interface
|
|
692
|
+
interface PluginsProps {
|
|
693
|
+
onNavigate: (screen: Screen) => void;
|
|
137
694
|
cols?: number;
|
|
138
695
|
rows?: number;
|
|
139
696
|
}
|
|
140
|
-
declare function
|
|
697
|
+
declare function Plugins({ onNavigate, cols, rows }: PluginsProps): react.ReactNode;
|
|
141
698
|
|
|
142
|
-
interface
|
|
699
|
+
interface MethodologyProps {
|
|
700
|
+
onNavigate: (screen: Screen) => void;
|
|
143
701
|
cols?: number;
|
|
144
702
|
rows?: number;
|
|
145
703
|
}
|
|
146
|
-
declare function
|
|
704
|
+
declare function Methodology({ onNavigate, cols, rows }: MethodologyProps): react.ReactNode;
|
|
147
705
|
|
|
148
|
-
interface
|
|
706
|
+
interface PlanProps {
|
|
707
|
+
onNavigate: (screen: Screen) => void;
|
|
149
708
|
cols?: number;
|
|
150
709
|
rows?: number;
|
|
151
710
|
}
|
|
152
|
-
declare function
|
|
711
|
+
declare function Plan({ onNavigate, cols, rows }: PlanProps): react.ReactNode;
|
|
153
712
|
|
|
154
|
-
interface
|
|
713
|
+
interface SettingsProps {
|
|
714
|
+
onNavigate: (screen: Screen) => void;
|
|
155
715
|
cols?: number;
|
|
156
716
|
rows?: number;
|
|
157
717
|
}
|
|
158
|
-
declare function
|
|
718
|
+
declare function Settings({ onNavigate, cols }: SettingsProps): react.ReactNode;
|
|
159
719
|
|
|
160
|
-
interface
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
|
725
|
+
declare function Help({ cols }: HelpProps): react.ReactNode;
|
|
168
726
|
|
|
169
|
-
interface
|
|
170
|
-
|
|
171
|
-
|
|
727
|
+
interface MeshProps {
|
|
728
|
+
onNavigate: (screen: Screen) => void;
|
|
729
|
+
cols?: number;
|
|
730
|
+
rows?: number;
|
|
172
731
|
}
|
|
173
|
-
|
|
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
|
|
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;
|
|
734
|
+
interface MessageProps {
|
|
735
|
+
onNavigate: (screen: Screen) => void;
|
|
736
|
+
cols?: number;
|
|
737
|
+
rows?: number;
|
|
233
738
|
}
|
|
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";
|
|
739
|
+
declare function Message({ onNavigate, cols, rows }: MessageProps): react.ReactNode;
|
|
262
740
|
|
|
263
|
-
declare function
|
|
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,
|
|
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 };
|