@skillkit/tui 1.3.1 → 1.5.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 CHANGED
@@ -1,57 +1,157 @@
1
1
  # @skillkit/tui
2
2
 
3
- Interactive terminal UI for SkillKit - browse, install, and manage skills visually.
3
+ [![npm version](https://img.shields.io/npm/v/@skillkit/tui.svg)](https://www.npmjs.com/package/@skillkit/tui)
4
+ [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
5
+
6
+ **Interactive terminal UI for SkillKit** - browse, install, translate, and manage skills visually in your terminal.
4
7
 
5
8
  ## Installation
6
9
 
7
10
  ```bash
8
11
  npm install @skillkit/tui
12
+ # or
13
+ npm install -g skillkit # includes TUI
9
14
  ```
10
15
 
11
- ## Features
12
-
13
- - **Browse Skills**: Discover skills from the marketplace
14
- - **Smart Recommendations**: Project-aware skill suggestions
15
- - **Skill Translation**: Convert between agent formats
16
- - **Context Management**: View and sync project context
17
- - **Keyboard Navigation**: Fast, intuitive controls
18
-
19
- ## Usage
20
-
21
- ```typescript
22
- import { startTUI } from '@skillkit/tui';
23
-
24
- // Launch the interactive TUI
25
- await startTUI();
26
- ```
27
-
28
- Or via CLI:
16
+ ## Quick Start
29
17
 
30
18
  ```bash
31
19
  skillkit ui
20
+ # or just
21
+ skillkit
32
22
  ```
33
23
 
24
+ ## Features
25
+
26
+ - **Browse Skills**: Explore 33+ skill repositories with search and filtering
27
+ - **Smart Recommendations**: See project-aware skill suggestions with match scores
28
+ - **Cross-Agent Translation**: Convert skills between any of 17 agent formats
29
+ - **Context Management**: View detected stack and sync to all agents
30
+ - **Multi-Agent Install**: Install skills to multiple agents at once
31
+ - **Responsive Design**: Adapts to any terminal size
32
+
34
33
  ## Screens
35
34
 
36
- - **Home**: Overview and quick actions
37
- - **Browse**: Explore available skills
38
- - **Recommend**: Get personalized recommendations
39
- - **Translate**: Convert skills between formats
40
- - **Context**: Manage project context
41
- - **Installed**: View and manage installed skills
42
- - **Sync**: Sync skills across agents
43
- - **Settings**: Configure skillkit
35
+ ### Home
36
+ Overview of your project and quick actions. Shows detected agents, installed skills count, and navigation hints.
37
+
38
+ ### Browse (b)
39
+ Explore available skills from curated repositories. Features:
40
+ - Search skills with `/`
41
+ - Filter by tags
42
+ - View skill details
43
+ - One-key installation
44
+
45
+ ### Recommend (r)
46
+ AI-powered skill suggestions based on your project:
47
+ - Analyzes your package.json, configs, and file structure
48
+ - Shows match percentage for each skill
49
+ - Explains why skills are recommended
50
+ - Filter by minimum score
51
+
52
+ ### Translate (t)
53
+ Convert skills between agent formats:
54
+ - Select source skill
55
+ - Choose target agent(s)
56
+ - Preview translation
57
+ - Apply with confirmation
58
+
59
+ ### Context (c)
60
+ View and manage project context:
61
+ - Detected languages and frameworks
62
+ - Found testing tools and databases
63
+ - Installed agents
64
+ - Sync context to all agents
65
+
66
+ ### Installed (l)
67
+ Manage your installed skills:
68
+ - View all installed skills
69
+ - Enable/disable skills
70
+ - Remove skills
71
+ - Update from source
72
+
73
+ ### Sync (s)
74
+ Sync skills across agents:
75
+ - Select target agents
76
+ - Preview changes
77
+ - Apply sync
78
+
79
+ ### Settings (,)
80
+ Configure SkillKit:
81
+ - Default agent
82
+ - Auto-sync settings
83
+ - Skill directories
44
84
 
45
85
  ## Keyboard Shortcuts
46
86
 
47
87
  | Key | Action |
48
88
  |-----|--------|
49
- | `↑/↓` | Navigate |
50
- | `Enter` | Select |
89
+ | `h` | Home screen |
90
+ | `b` | Browse skills |
91
+ | `r` | Recommendations |
92
+ | `t` | Translate skills |
93
+ | `c` | Context management |
94
+ | `l` | List installed |
95
+ | `s` | Sync skills |
96
+ | `,` | Settings |
97
+ | `↑/↓` | Navigate lists |
98
+ | `Enter` | Select / Confirm |
99
+ | `/` | Search |
100
+ | `m` | Multi-select mode |
51
101
  | `Tab` | Switch focus |
102
+ | `Esc` | Go back |
52
103
  | `?` | Help |
53
104
  | `q` | Quit |
54
105
 
106
+ ## Programmatic Usage
107
+
108
+ ```typescript
109
+ import { startTUI, TUIOptions } from '@skillkit/tui';
110
+
111
+ // Launch with defaults
112
+ await startTUI();
113
+
114
+ // Launch with options
115
+ await startTUI({
116
+ projectPath: './my-project',
117
+ initialScreen: 'browse',
118
+ theme: 'dark',
119
+ });
120
+ ```
121
+
122
+ ## Architecture
123
+
124
+ Built with:
125
+ - **Ink** - React for CLIs
126
+ - **React** - Component architecture
127
+ - **@skillkit/core** - Core functionality
128
+
129
+ ```
130
+ src/
131
+ ├── app.tsx # Main app component
132
+ ├── screens/ # Screen components
133
+ │ ├── Home.tsx
134
+ │ ├── Browse.tsx
135
+ │ ├── Recommend.tsx
136
+ │ ├── Translate.tsx
137
+ │ ├── Context.tsx
138
+ │ └── ...
139
+ ├── components/ # Reusable UI components
140
+ │ ├── SkillCard.tsx
141
+ │ ├── AgentSelector.tsx
142
+ │ └── ...
143
+ └── hooks/ # React hooks
144
+ ├── useSkills.ts
145
+ ├── useContext.ts
146
+ └── ...
147
+ ```
148
+
149
+ ## Terminal Requirements
150
+
151
+ - Minimum: 80x24 characters
152
+ - Recommended: 120x40 characters
153
+ - Supports: True Color, 256 colors, basic ANSI
154
+
55
155
  ## Documentation
56
156
 
57
157
  Full documentation: https://github.com/rohitg00/skillkit
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
- import { ScoredSkill, ProjectProfile } from '@skillkit/core';
3
+ import { ScoredSkill, ProjectProfile, Learning, Observation, MemoryStatus } from '@skillkit/core';
4
4
 
5
- type Screen = 'home' | 'browse' | 'installed' | 'sync' | 'settings' | 'recommend' | 'translate' | 'context';
5
+ type Screen = 'home' | 'browse' | 'installed' | 'sync' | 'settings' | 'recommend' | 'translate' | 'context' | 'workflow' | 'execute' | 'history' | 'marketplace' | 'memory' | 'team' | 'plugins';
6
6
  declare function App(): react_jsx_runtime.JSX.Element;
7
7
 
8
8
  interface SidebarProps {
@@ -61,47 +61,89 @@ interface HomeProps {
61
61
  }
62
62
  declare function Home({ cols, rows }: HomeProps): react_jsx_runtime.JSX.Element;
63
63
 
64
+ interface Props$d {
65
+ cols?: number;
66
+ rows?: number;
67
+ }
68
+ declare function Browse({ rows }: Props$d): react_jsx_runtime.JSX.Element;
69
+
70
+ interface Props$c {
71
+ cols?: number;
72
+ rows?: number;
73
+ }
74
+ declare function Installed({ rows }: Props$c): react_jsx_runtime.JSX.Element;
75
+
76
+ interface Props$b {
77
+ cols?: number;
78
+ rows?: number;
79
+ }
80
+ declare function Sync({ rows }: Props$b): react_jsx_runtime.JSX.Element;
81
+
82
+ interface Props$a {
83
+ cols?: number;
84
+ rows?: number;
85
+ }
86
+ declare function Settings(_props: Props$a): react_jsx_runtime.JSX.Element;
87
+
88
+ interface Props$9 {
89
+ cols?: number;
90
+ rows?: number;
91
+ }
92
+ declare function Recommend({ rows }: Props$9): react_jsx_runtime.JSX.Element;
93
+
94
+ interface Props$8 {
95
+ cols?: number;
96
+ rows?: number;
97
+ }
98
+ declare function Translate({ rows }: Props$8): react_jsx_runtime.JSX.Element;
99
+
100
+ interface Props$7 {
101
+ cols?: number;
102
+ rows?: number;
103
+ }
104
+ declare function Context({ rows }: Props$7): react_jsx_runtime.JSX.Element;
105
+
64
106
  interface Props$6 {
65
107
  cols?: number;
66
108
  rows?: number;
67
109
  }
68
- declare function Browse({ rows }: Props$6): react_jsx_runtime.JSX.Element;
110
+ declare function Memory({ rows }: Props$6): react_jsx_runtime.JSX.Element;
69
111
 
70
112
  interface Props$5 {
71
113
  cols?: number;
72
114
  rows?: number;
73
115
  }
74
- declare function Installed({ rows }: Props$5): react_jsx_runtime.JSX.Element;
116
+ declare function Workflow({ rows }: Props$5): react_jsx_runtime.JSX.Element;
75
117
 
76
118
  interface Props$4 {
77
119
  cols?: number;
78
120
  rows?: number;
79
121
  }
80
- declare function Sync({ rows }: Props$4): react_jsx_runtime.JSX.Element;
122
+ declare function Execute({ rows }: Props$4): react_jsx_runtime.JSX.Element;
81
123
 
82
124
  interface Props$3 {
83
125
  cols?: number;
84
126
  rows?: number;
85
127
  }
86
- declare function Settings({}: Props$3): react_jsx_runtime.JSX.Element;
128
+ declare function History({ rows }: Props$3): react_jsx_runtime.JSX.Element;
87
129
 
88
130
  interface Props$2 {
89
131
  cols?: number;
90
132
  rows?: number;
91
133
  }
92
- declare function Recommend({ rows }: Props$2): react_jsx_runtime.JSX.Element;
134
+ declare function Marketplace({ rows }: Props$2): react_jsx_runtime.JSX.Element;
93
135
 
94
136
  interface Props$1 {
95
137
  cols?: number;
96
138
  rows?: number;
97
139
  }
98
- declare function Translate({ rows }: Props$1): react_jsx_runtime.JSX.Element;
140
+ declare function Team({ rows }: Props$1): react_jsx_runtime.JSX.Element;
99
141
 
100
142
  interface Props {
101
143
  cols?: number;
102
144
  rows?: number;
103
145
  }
104
- declare function Context({ rows }: Props): react_jsx_runtime.JSX.Element;
146
+ declare function Plugins({ rows }: Props): react_jsx_runtime.JSX.Element;
105
147
 
106
148
  interface UseSkillsResult {
107
149
  skills: SkillItem[];
@@ -123,6 +165,7 @@ interface UseMarketplaceResult {
123
165
  totalCount: number;
124
166
  repos: RepoInfo[];
125
167
  currentRepo: string | null;
168
+ failedRepos: string[];
126
169
  refresh: () => void;
127
170
  search: (query: string) => void;
128
171
  fetchRepo: (source: string) => Promise<void>;
@@ -163,6 +206,21 @@ interface UseRecommendResult {
163
206
  }
164
207
  declare function useRecommend(projectPath?: string): UseRecommendResult;
165
208
 
209
+ interface UseMemoryResult {
210
+ learnings: Learning[];
211
+ observations: Observation[];
212
+ status: MemoryStatus | null;
213
+ loading: boolean;
214
+ error: string | null;
215
+ isGlobal: boolean;
216
+ setIsGlobal: (isGlobal: boolean) => void;
217
+ refresh: () => void;
218
+ search: (query: string) => Learning[];
219
+ deleteLearning: (id: string) => boolean;
220
+ deleteObservation: (id: string) => boolean;
221
+ }
222
+ declare function useMemory(): UseMemoryResult;
223
+
166
224
  declare const colors: {
167
225
  primary: string;
168
226
  secondary: string;
@@ -181,9 +239,15 @@ declare const symbols: {
181
239
  check: string;
182
240
  star: string;
183
241
  spinner: string[];
242
+ arrowUp: string;
243
+ arrowDown: string;
244
+ success: string;
245
+ error: string;
246
+ warning: string;
247
+ info: string;
184
248
  };
185
249
  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";
186
250
 
187
251
  declare function startTUI(): Promise<void>;
188
252
 
189
- export { App, Browse, Context, Header, Home, Installed, Recommend, type Screen, SearchInput, Settings, Sidebar, type SkillItem, SkillList, StatusBar, Sync, Translate, colors, logo, startTUI, symbols, useKeyboard, useListNavigation, useMarketplace, useRecommend, useSkills };
253
+ export { App, Browse, Context, Execute, Header, History, Home, Installed, Marketplace, Memory, 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 };