k0ntext 3.2.1 ā 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +28 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/repl/core/parser.d.ts +84 -0
- package/dist/cli/repl/core/parser.d.ts.map +1 -0
- package/dist/cli/repl/core/parser.js +309 -0
- package/dist/cli/repl/core/parser.js.map +1 -0
- package/dist/cli/repl/core/session.d.ts +124 -0
- package/dist/cli/repl/core/session.d.ts.map +1 -0
- package/dist/cli/repl/core/session.js +196 -0
- package/dist/cli/repl/core/session.js.map +1 -0
- package/dist/cli/repl/index.d.ts +56 -0
- package/dist/cli/repl/index.d.ts.map +1 -0
- package/dist/cli/repl/index.js +468 -0
- package/dist/cli/repl/index.js.map +1 -0
- package/dist/cli/repl/init/wizard.d.ts +61 -0
- package/dist/cli/repl/init/wizard.d.ts.map +1 -0
- package/dist/cli/repl/init/wizard.js +245 -0
- package/dist/cli/repl/init/wizard.js.map +1 -0
- package/dist/cli/repl/tui/theme.d.ts +109 -0
- package/dist/cli/repl/tui/theme.d.ts.map +1 -0
- package/dist/cli/repl/tui/theme.js +225 -0
- package/dist/cli/repl/tui/theme.js.map +1 -0
- package/dist/cli/repl/update/checker.d.ts +64 -0
- package/dist/cli/repl/update/checker.d.ts.map +1 -0
- package/dist/cli/repl/update/checker.js +166 -0
- package/dist/cli/repl/update/checker.js.map +1 -0
- package/dist/db/client.d.ts +1 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +2 -1
- package/dist/db/client.js.map +1 -1
- package/package.json +4 -1
- package/src/cli/index.ts +28 -2
- package/src/cli/repl/core/parser.ts +373 -0
- package/src/cli/repl/core/session.ts +269 -0
- package/src/cli/repl/index.ts +554 -0
- package/src/cli/repl/init/wizard.ts +300 -0
- package/src/cli/repl/tui/theme.ts +276 -0
- package/src/cli/repl/update/checker.ts +209 -0
- package/src/db/client.ts +9 -7
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init Wizard
|
|
3
|
+
*
|
|
4
|
+
* Interactive wizard for initializing k0ntext configuration
|
|
5
|
+
*/
|
|
6
|
+
import { input, confirm, select, checkbox } from '@inquirer/prompts';
|
|
7
|
+
import { K0NTEXT_THEME } from '../tui/theme.js';
|
|
8
|
+
/**
|
|
9
|
+
* Project type options
|
|
10
|
+
*/
|
|
11
|
+
const PROJECT_TYPES = [
|
|
12
|
+
{ value: 'monorepo', name: 'Monorepo', description: 'Multiple packages/services in one repository' },
|
|
13
|
+
{ value: 'webapp', name: 'Web Application', description: 'Frontend web application (React, Vue, etc.)' },
|
|
14
|
+
{ value: 'api', name: 'API/Backend', description: 'Backend API service' },
|
|
15
|
+
{ value: 'library', name: 'Library/Package', description: 'Reusable library or npm package' },
|
|
16
|
+
{ value: 'cli', name: 'CLI Tool', description: 'Command-line interface tool' },
|
|
17
|
+
{ value: 'unknown', name: 'Other', description: 'Other type of project' }
|
|
18
|
+
];
|
|
19
|
+
/**
|
|
20
|
+
* AI tool options
|
|
21
|
+
*/
|
|
22
|
+
const AI_TOOLS = [
|
|
23
|
+
{ name: 'Claude Code', value: 'claude', description: 'Anthropic Claude with advanced reasoning' },
|
|
24
|
+
{ name: 'GitHub Copilot', value: 'copilot', description: 'GitHub AI-powered code completion' },
|
|
25
|
+
{ name: 'Cline', value: 'cline', description: 'Autonomous coding agent' },
|
|
26
|
+
{ name: 'Cursor', value: 'cursor', description: 'AI code editor with integrated AI' },
|
|
27
|
+
{ name: 'Windsurf', value: 'windsurf', description: 'AI-powered IDE with code understanding' },
|
|
28
|
+
{ name: 'Aider', value: 'aider', description: 'AI pair programming in terminal' },
|
|
29
|
+
{ name: 'Continue', value: 'continue', description: 'Open source AI autopilot' }
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Feature options
|
|
33
|
+
*/
|
|
34
|
+
const FEATURES = [
|
|
35
|
+
{ name: 'š Statistics & Analytics', value: 'stats', description: 'Track code metrics and context usage' },
|
|
36
|
+
{ name: 'š Semantic Search', value: 'search', description: 'AI-powered code search with embeddings' },
|
|
37
|
+
{ name: 'š Auto Documentation', value: 'docs', description: 'Generate documentation from code' },
|
|
38
|
+
{ name: 'š Drift Detection', value: 'drift', description: 'Detect when docs are out of sync with code' },
|
|
39
|
+
{ name: 'šÆ Workflow Tracking', value: 'workflows', description: 'Track RPI workflows and tasks' },
|
|
40
|
+
{ name: 'š¤ MCP Integration', value: 'mcp', description: 'Model Context Protocol server' }
|
|
41
|
+
];
|
|
42
|
+
/**
|
|
43
|
+
* Init Wizard
|
|
44
|
+
*/
|
|
45
|
+
export class InitWizard {
|
|
46
|
+
projectRoot;
|
|
47
|
+
hasExistingKey;
|
|
48
|
+
constructor(projectRoot) {
|
|
49
|
+
this.projectRoot = projectRoot;
|
|
50
|
+
this.hasExistingKey = !!process.env.OPENROUTER_API_KEY;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Run the complete wizard
|
|
54
|
+
*/
|
|
55
|
+
async run() {
|
|
56
|
+
this.showWelcome();
|
|
57
|
+
// Step 1: API Key
|
|
58
|
+
const apiKey = await this.stepApiKey();
|
|
59
|
+
if (!apiKey) {
|
|
60
|
+
console.log(K0NTEXT_THEME.warning('\nā Initialization cancelled.'));
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
// Step 2: Project Type
|
|
64
|
+
const projectType = await this.stepProjectType();
|
|
65
|
+
// Step 3: AI Tools
|
|
66
|
+
const aiTools = await this.stepAITools();
|
|
67
|
+
// Step 4: Features
|
|
68
|
+
const features = await this.stepFeatures();
|
|
69
|
+
// Step 5: Embeddings
|
|
70
|
+
const generateEmbeddings = await this.stepEmbeddings();
|
|
71
|
+
// Show summary
|
|
72
|
+
const config = {
|
|
73
|
+
apiKey,
|
|
74
|
+
projectType,
|
|
75
|
+
aiTools,
|
|
76
|
+
features,
|
|
77
|
+
generateEmbeddings
|
|
78
|
+
};
|
|
79
|
+
const confirmed = await this.showSummary(config);
|
|
80
|
+
if (!confirmed) {
|
|
81
|
+
console.log(K0NTEXT_THEME.warning('\nā Initialization cancelled.'));
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return config;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Show welcome message
|
|
88
|
+
*/
|
|
89
|
+
showWelcome() {
|
|
90
|
+
console.log('');
|
|
91
|
+
console.log(K0NTEXT_THEME.box('K0NTEXT INITIALIZATION', `
|
|
92
|
+
Welcome to K0ntext! This wizard will help you set up
|
|
93
|
+
AI context engineering for your project.
|
|
94
|
+
|
|
95
|
+
You'll be asked a few questions to configure K0ntext
|
|
96
|
+
for your specific needs.
|
|
97
|
+
`.trim(), 'primary'));
|
|
98
|
+
console.log('');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Step 1: API Key
|
|
102
|
+
*/
|
|
103
|
+
async stepApiKey() {
|
|
104
|
+
console.log('');
|
|
105
|
+
console.log(K0NTEXT_THEME.header('\nāāā Step 1/5: OpenRouter API Key āāā'));
|
|
106
|
+
if (this.hasExistingKey) {
|
|
107
|
+
console.log(K0NTEXT_THEME.success('\nā API key detected in OPENROUTER_API_KEY environment variable'));
|
|
108
|
+
const useExisting = await confirm({
|
|
109
|
+
message: 'Use existing API key?',
|
|
110
|
+
default: true
|
|
111
|
+
});
|
|
112
|
+
if (useExisting) {
|
|
113
|
+
return process.env.OPENROUTER_API_KEY;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
console.log('');
|
|
117
|
+
console.log(K0NTEXT_THEME.info('OpenRouter API key enables intelligent analysis and embeddings.'));
|
|
118
|
+
console.log(K0NTEXT_THEME.dim('Get your key at: https://openrouter.ai/keys'));
|
|
119
|
+
const apiKey = await input({
|
|
120
|
+
message: 'Enter your OpenRouter API key (or press Enter to skip):',
|
|
121
|
+
validate: (value) => {
|
|
122
|
+
if (!value)
|
|
123
|
+
return true; // Allow skipping
|
|
124
|
+
if (value.startsWith('sk-or-v1-'))
|
|
125
|
+
return true;
|
|
126
|
+
return 'Invalid API key format. Should start with "sk-or-v1-"';
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
if (!apiKey) {
|
|
130
|
+
const skipAnyway = await confirm({
|
|
131
|
+
message: 'Skip API key? You can add it later with "k0ntext config set apiKey"',
|
|
132
|
+
default: false
|
|
133
|
+
});
|
|
134
|
+
if (!skipAnyway) {
|
|
135
|
+
return null; // User wants to cancel
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return apiKey || '';
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Step 2: Project Type
|
|
142
|
+
*/
|
|
143
|
+
async stepProjectType() {
|
|
144
|
+
console.log('');
|
|
145
|
+
console.log(K0NTEXT_THEME.header('\nāāā Step 2/5: Project Type āāā'));
|
|
146
|
+
console.log('');
|
|
147
|
+
const projectType = await select({
|
|
148
|
+
message: 'What type of project is this?',
|
|
149
|
+
choices: PROJECT_TYPES.map((t) => ({
|
|
150
|
+
name: `${t.name} - ${K0NTEXT_THEME.dim(t.description)}`,
|
|
151
|
+
value: t.value,
|
|
152
|
+
description: t.description
|
|
153
|
+
}))
|
|
154
|
+
});
|
|
155
|
+
return projectType;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Step 3: AI Tools
|
|
159
|
+
*/
|
|
160
|
+
async stepAITools() {
|
|
161
|
+
console.log('');
|
|
162
|
+
console.log(K0NTEXT_THEME.header('\nāāā Step 3/5: AI Tools āāā'));
|
|
163
|
+
console.log('');
|
|
164
|
+
console.log(K0NTEXT_THEME.info('Select the AI coding assistants you want to configure:'));
|
|
165
|
+
const tools = await checkbox({
|
|
166
|
+
message: 'Select AI tools (use space to select, enter to continue):',
|
|
167
|
+
choices: AI_TOOLS.map((t) => ({
|
|
168
|
+
name: `${t.name} - ${K0NTEXT_THEME.dim(t.description)}`,
|
|
169
|
+
value: t.value,
|
|
170
|
+
checked: t.value === 'claude' // Default to Claude
|
|
171
|
+
}))
|
|
172
|
+
});
|
|
173
|
+
return tools.length > 0 ? tools : ['claude']; // Default to claude if none selected
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Step 4: Features
|
|
177
|
+
*/
|
|
178
|
+
async stepFeatures() {
|
|
179
|
+
console.log('');
|
|
180
|
+
console.log(K0NTEXT_THEME.header('\nāāā Step 4/5: Features āāā'));
|
|
181
|
+
console.log('');
|
|
182
|
+
console.log(K0NTEXT_THEME.info('Select the features you want to enable:'));
|
|
183
|
+
const features = await checkbox({
|
|
184
|
+
message: 'Select features (use space to select, enter to continue):',
|
|
185
|
+
choices: FEATURES.map((f) => ({
|
|
186
|
+
name: `${f.name} - ${K0NTEXT_THEME.dim(f.description)}`,
|
|
187
|
+
value: f.value,
|
|
188
|
+
checked: ['stats', 'search', 'mcp'].includes(f.value) // Default to core features
|
|
189
|
+
}))
|
|
190
|
+
});
|
|
191
|
+
return features.length > 0 ? features : ['stats', 'mcp'];
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Step 5: Embeddings
|
|
195
|
+
*/
|
|
196
|
+
async stepEmbeddings() {
|
|
197
|
+
console.log('');
|
|
198
|
+
console.log(K0NTEXT_THEME.header('\nāāā Step 5/5: Embeddings āāā'));
|
|
199
|
+
console.log('');
|
|
200
|
+
console.log(K0NTEXT_THEME.info('Generate semantic embeddings for AI-powered search?'));
|
|
201
|
+
console.log(K0NTEXT_THEME.dim('This will take a few minutes but greatly improves search quality.'));
|
|
202
|
+
const generate = await confirm({
|
|
203
|
+
message: 'Generate embeddings now?',
|
|
204
|
+
default: false
|
|
205
|
+
});
|
|
206
|
+
return generate;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Show summary and confirm
|
|
210
|
+
*/
|
|
211
|
+
async showSummary(config) {
|
|
212
|
+
console.log('');
|
|
213
|
+
console.log(K0NTEXT_THEME.header('\nāāā Configuration Summary āāā'));
|
|
214
|
+
console.log('');
|
|
215
|
+
const typeInfo = PROJECT_TYPES.find(t => t.value === config.projectType);
|
|
216
|
+
console.log(` ${K0NTEXT_THEME.primary('Project Type:')} ${typeInfo?.name || config.projectType}`);
|
|
217
|
+
console.log(` ${K0NTEXT_THEME.primary('API Key:')} ${config.apiKey ? 'ā Configured' : 'ā Skipped'}`);
|
|
218
|
+
console.log(` ${K0NTEXT_THEME.primary('AI Tools:')} ${config.aiTools.map(t => K0NTEXT_THEME.highlight(t)).join(', ')}`);
|
|
219
|
+
console.log(` ${K0NTEXT_THEME.primary('Features:')} ${config.features.map(f => {
|
|
220
|
+
const feat = FEATURES.find(ff => ff.value === f);
|
|
221
|
+
return feat?.name.split(' ')[0] || f;
|
|
222
|
+
}).join(', ')}`);
|
|
223
|
+
console.log(` ${K0NTEXT_THEME.primary('Embeddings:')} ${config.generateEmbeddings ? 'ā Yes' : 'ā Later'}`);
|
|
224
|
+
console.log('');
|
|
225
|
+
return await confirm({
|
|
226
|
+
message: 'Initialize K0ntext with these settings?',
|
|
227
|
+
default: true
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Show success message
|
|
232
|
+
*/
|
|
233
|
+
showSuccess(config) {
|
|
234
|
+
console.log('');
|
|
235
|
+
console.log(K0NTEXT_THEME.success('\nā K0ntext initialized successfully!'));
|
|
236
|
+
console.log('');
|
|
237
|
+
console.log(K0NTEXT_THEME.header('Next Steps:'));
|
|
238
|
+
console.log(` ${K0NTEXT_THEME.cyan('ā¢')} Type ${K0NTEXT_THEME.highlight('stats')} to view database statistics`);
|
|
239
|
+
console.log(` ${K0NTEXT_THEME.cyan('ā¢')} Type ${K0NTEXT_THEME.highlight('index')} to index your codebase`);
|
|
240
|
+
console.log(` ${K0NTEXT_THEME.cyan('ā¢')} Type ${K0NTEXT_THEME.highlight('search <query>')} to search your code`);
|
|
241
|
+
console.log(` ${K0NTEXT_THEME.cyan('ā¢')} Type ${K0NTEXT_THEME.highlight('help')} for all available commands`);
|
|
242
|
+
console.log('');
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../../../src/cli/repl/init/wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* K0ntext Theme System
|
|
3
|
+
*
|
|
4
|
+
* Orange gradient with purple/pink/cyan accents for modern CLI experience
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Terminal capabilities
|
|
8
|
+
*/
|
|
9
|
+
interface TerminalCapabilities {
|
|
10
|
+
isTTY: boolean;
|
|
11
|
+
supportsColor: boolean;
|
|
12
|
+
supports256: boolean;
|
|
13
|
+
supportsUnicode: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* K0ntext color theme
|
|
17
|
+
*/
|
|
18
|
+
export declare const K0NTEXT_THEME: {
|
|
19
|
+
readonly primary: import("chalk").ChalkInstance;
|
|
20
|
+
readonly primaryLight: import("chalk").ChalkInstance;
|
|
21
|
+
readonly primaryDark: import("chalk").ChalkInstance;
|
|
22
|
+
readonly header: import("chalk").ChalkInstance;
|
|
23
|
+
readonly headerLight: import("chalk").ChalkInstance;
|
|
24
|
+
readonly highlight: import("chalk").ChalkInstance;
|
|
25
|
+
readonly highlightLight: import("chalk").ChalkInstance;
|
|
26
|
+
readonly status: import("chalk").ChalkInstance;
|
|
27
|
+
readonly statusLight: import("chalk").ChalkInstance;
|
|
28
|
+
readonly cyan: import("chalk").ChalkInstance;
|
|
29
|
+
readonly success: import("chalk").ChalkInstance;
|
|
30
|
+
readonly warning: import("chalk").ChalkInstance;
|
|
31
|
+
readonly error: import("chalk").ChalkInstance;
|
|
32
|
+
readonly info: import("chalk").ChalkInstance;
|
|
33
|
+
readonly muted: import("chalk").ChalkInstance;
|
|
34
|
+
readonly dim: import("chalk").ChalkInstance;
|
|
35
|
+
readonly bgPrimary: import("chalk").ChalkInstance;
|
|
36
|
+
readonly bgHeader: import("chalk").ChalkInstance;
|
|
37
|
+
readonly bgHighlight: import("chalk").ChalkInstance;
|
|
38
|
+
readonly bgStatus: import("chalk").ChalkInstance;
|
|
39
|
+
/**
|
|
40
|
+
* Detect terminal capabilities
|
|
41
|
+
*/
|
|
42
|
+
readonly detectCapabilities: () => TerminalCapabilities;
|
|
43
|
+
/**
|
|
44
|
+
* Get gradient string for logo/banner
|
|
45
|
+
*/
|
|
46
|
+
readonly gradientText: (text: string) => string;
|
|
47
|
+
/**
|
|
48
|
+
* Get border characters based on terminal capabilities
|
|
49
|
+
*/
|
|
50
|
+
readonly getBorders: () => {
|
|
51
|
+
topLeft: string;
|
|
52
|
+
topRight: string;
|
|
53
|
+
bottomLeft: string;
|
|
54
|
+
bottomRight: string;
|
|
55
|
+
horizontal: string;
|
|
56
|
+
vertical: string;
|
|
57
|
+
leftT: string;
|
|
58
|
+
rightT: string;
|
|
59
|
+
topT: string;
|
|
60
|
+
bottomT: string;
|
|
61
|
+
cross: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Create a styled box with text
|
|
65
|
+
*/
|
|
66
|
+
readonly box: (title: string, content: string, borderColor?: string) => string;
|
|
67
|
+
/**
|
|
68
|
+
* Create progress bar
|
|
69
|
+
*/
|
|
70
|
+
readonly progressBar: (current: number, total: number, width?: number) => string;
|
|
71
|
+
/**
|
|
72
|
+
* Format file size with color
|
|
73
|
+
*/
|
|
74
|
+
readonly formatFileSize: (bytes: number) => string;
|
|
75
|
+
/**
|
|
76
|
+
* Format timestamp with color
|
|
77
|
+
*/
|
|
78
|
+
readonly formatTimestamp: (date: Date) => string;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Terminal utility functions
|
|
82
|
+
*/
|
|
83
|
+
export declare const terminal: {
|
|
84
|
+
/**
|
|
85
|
+
* Clear screen
|
|
86
|
+
*/
|
|
87
|
+
clear(): void;
|
|
88
|
+
/**
|
|
89
|
+
* Move cursor to position
|
|
90
|
+
*/
|
|
91
|
+
moveTo(x: number, y: number): void;
|
|
92
|
+
/**
|
|
93
|
+
* Hide cursor
|
|
94
|
+
*/
|
|
95
|
+
hideCursor(): void;
|
|
96
|
+
/**
|
|
97
|
+
* Show cursor
|
|
98
|
+
*/
|
|
99
|
+
showCursor(): void;
|
|
100
|
+
/**
|
|
101
|
+
* Get terminal dimensions
|
|
102
|
+
*/
|
|
103
|
+
getSize(): {
|
|
104
|
+
width: number;
|
|
105
|
+
height: number;
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
export {};
|
|
109
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../src/cli/repl/tui/theme.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,UAAU,oBAAoB;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAOD;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;IAmCxB;;OAEG;uCACmB,oBAAoB;IAU1C;;OAEG;kCACgB,MAAM,KAAG,MAAM;IAqBlC;;OAEG;;;;;;;;;;;;;;IAoCH;;OAEG;0BACQ,MAAM,WAAW,MAAM,2BAA4B,MAAM;IA0CpE;;OAEG;oCACkB,MAAM,SAAS,MAAM,qBAAe,MAAM;IAY/D;;OAEG;qCACmB,MAAM,KAAG,MAAM;IAgBrC;;OAEG;qCACmB,IAAI,KAAG,MAAM;CAc3B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;IACnB;;OAEG;aACM,IAAI;IAIb;;OAEG;cACO,MAAM,KAAK,MAAM,GAAG,IAAI;IAIlC;;OAEG;kBACW,IAAI;IAIlB;;OAEG;kBACW,IAAI;IAIlB;;OAEG;eACQ;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAM7C,CAAC"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* K0ntext Theme System
|
|
3
|
+
*
|
|
4
|
+
* Orange gradient with purple/pink/cyan accents for modern CLI experience
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
/**
|
|
8
|
+
* K0ntext color theme
|
|
9
|
+
*/
|
|
10
|
+
export const K0NTEXT_THEME = {
|
|
11
|
+
// Orange gradient for primary elements
|
|
12
|
+
primary: chalk.hex('#F97316'), // Orange-500
|
|
13
|
+
primaryLight: chalk.hex('#FB923C'), // Orange-400
|
|
14
|
+
primaryDark: chalk.hex('#EA580C'), // Orange-600
|
|
15
|
+
// Purple accents for headers
|
|
16
|
+
header: chalk.hex('#8B5CF6'), // Purple-500
|
|
17
|
+
headerLight: chalk.hex('#A78BFA'), // Purple-400
|
|
18
|
+
// Pink for highlights
|
|
19
|
+
highlight: chalk.hex('#EC4899'), // Pink-500
|
|
20
|
+
highlightLight: chalk.hex('#F472B6'), // Pink-400
|
|
21
|
+
// Cyan for status
|
|
22
|
+
status: chalk.hex('#06B6D4'), // Cyan-500
|
|
23
|
+
statusLight: chalk.hex('#22D3EE'), // Cyan-400
|
|
24
|
+
cyan: chalk.hex('#06B6D4'), // Alias for cyan
|
|
25
|
+
// Semantic colors
|
|
26
|
+
success: chalk.green,
|
|
27
|
+
warning: chalk.yellow,
|
|
28
|
+
error: chalk.red,
|
|
29
|
+
info: chalk.blue,
|
|
30
|
+
// Neutrals
|
|
31
|
+
muted: chalk.gray,
|
|
32
|
+
dim: chalk.dim,
|
|
33
|
+
// Background colors
|
|
34
|
+
bgPrimary: chalk.bgHex('#F97316'),
|
|
35
|
+
bgHeader: chalk.bgHex('#8B5CF6'),
|
|
36
|
+
bgHighlight: chalk.bgHex('#EC4899'),
|
|
37
|
+
bgStatus: chalk.bgHex('#06B6D4'),
|
|
38
|
+
/**
|
|
39
|
+
* Detect terminal capabilities
|
|
40
|
+
*/
|
|
41
|
+
detectCapabilities() {
|
|
42
|
+
const isTTY = process.stdout.isTTY;
|
|
43
|
+
const supportsColor = chalk.level > 0 && !process.env.NO_COLOR;
|
|
44
|
+
const supports256 = chalk.level >= 2;
|
|
45
|
+
const supportsUnicode = process.platform !== 'win32' ||
|
|
46
|
+
(process.env.TERM?.includes('xterm') || process.env.WT_SESSION);
|
|
47
|
+
return { isTTY: !!isTTY, supportsColor: !!supportsColor, supports256: !!supports256, supportsUnicode: !!supportsUnicode };
|
|
48
|
+
},
|
|
49
|
+
/**
|
|
50
|
+
* Get gradient string for logo/banner
|
|
51
|
+
*/
|
|
52
|
+
gradientText(text) {
|
|
53
|
+
const { supports256 } = this.detectCapabilities();
|
|
54
|
+
if (!supports256 || process.env.NO_COLOR) {
|
|
55
|
+
return this.primary(text);
|
|
56
|
+
}
|
|
57
|
+
// Create gradient effect using ANSI colors
|
|
58
|
+
const colors = ['#F97316', '#FBBF24', '#F472B6', '#8B5CF6', '#06B6D4'];
|
|
59
|
+
let result = '';
|
|
60
|
+
const chunkSize = Math.ceil(text.length / colors.length);
|
|
61
|
+
for (let i = 0; i < text.length; i++) {
|
|
62
|
+
const colorIndex = Math.floor(i / chunkSize) % colors.length;
|
|
63
|
+
const color = colors[colorIndex];
|
|
64
|
+
result += chalk.hex(color)(text[i]);
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
},
|
|
68
|
+
/**
|
|
69
|
+
* Get border characters based on terminal capabilities
|
|
70
|
+
*/
|
|
71
|
+
getBorders() {
|
|
72
|
+
const { supportsUnicode } = this.detectCapabilities();
|
|
73
|
+
if (supportsUnicode) {
|
|
74
|
+
return {
|
|
75
|
+
topLeft: 'ā',
|
|
76
|
+
topRight: 'ā',
|
|
77
|
+
bottomLeft: 'ā',
|
|
78
|
+
bottomRight: 'ā',
|
|
79
|
+
horizontal: 'ā',
|
|
80
|
+
vertical: 'ā',
|
|
81
|
+
leftT: 'ā ',
|
|
82
|
+
rightT: 'ā£',
|
|
83
|
+
topT: 'ā¦',
|
|
84
|
+
bottomT: 'ā©',
|
|
85
|
+
cross: 'ā¬'
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// ASCII fallback
|
|
89
|
+
return {
|
|
90
|
+
topLeft: '+',
|
|
91
|
+
topRight: '+',
|
|
92
|
+
bottomLeft: '+',
|
|
93
|
+
bottomRight: '+',
|
|
94
|
+
horizontal: '-',
|
|
95
|
+
vertical: '|',
|
|
96
|
+
leftT: '+',
|
|
97
|
+
rightT: '+',
|
|
98
|
+
topT: '+',
|
|
99
|
+
bottomT: '+',
|
|
100
|
+
cross: '+'
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
/**
|
|
104
|
+
* Create a styled box with text
|
|
105
|
+
*/
|
|
106
|
+
box(title, content, borderColor = 'primary') {
|
|
107
|
+
const borders = this.getBorders();
|
|
108
|
+
// Get color function based on borderColor
|
|
109
|
+
let colorFn;
|
|
110
|
+
switch (borderColor) {
|
|
111
|
+
case 'primary':
|
|
112
|
+
colorFn = this.primary;
|
|
113
|
+
break;
|
|
114
|
+
case 'header':
|
|
115
|
+
colorFn = this.header;
|
|
116
|
+
break;
|
|
117
|
+
case 'highlight':
|
|
118
|
+
colorFn = this.highlight;
|
|
119
|
+
break;
|
|
120
|
+
case 'status':
|
|
121
|
+
colorFn = this.status;
|
|
122
|
+
break;
|
|
123
|
+
case 'success':
|
|
124
|
+
colorFn = this.success;
|
|
125
|
+
break;
|
|
126
|
+
default:
|
|
127
|
+
colorFn = this.primary;
|
|
128
|
+
}
|
|
129
|
+
const lines = content.split('\n');
|
|
130
|
+
const maxLength = Math.max(title.length, ...lines.map(l => l.length));
|
|
131
|
+
let result = '';
|
|
132
|
+
result += colorFn(borders.topLeft + borders.horizontal.repeat(maxLength + 2) + borders.topRight) + '\n';
|
|
133
|
+
result += colorFn(borders.vertical) + ' ' + this.primary(title.padEnd(maxLength)) + ' ' + colorFn(borders.vertical) + '\n';
|
|
134
|
+
result += colorFn(borders.leftT + borders.horizontal.repeat(maxLength + 2) + borders.rightT) + '\n';
|
|
135
|
+
for (const line of lines) {
|
|
136
|
+
result += colorFn(borders.vertical) + ' ' + line.padEnd(maxLength) + ' ' + colorFn(borders.vertical) + '\n';
|
|
137
|
+
}
|
|
138
|
+
result += colorFn(borders.bottomLeft + borders.horizontal.repeat(maxLength + 2) + borders.bottomRight);
|
|
139
|
+
return result;
|
|
140
|
+
},
|
|
141
|
+
/**
|
|
142
|
+
* Create progress bar
|
|
143
|
+
*/
|
|
144
|
+
progressBar(current, total, width = 20) {
|
|
145
|
+
const percentage = Math.min(100, Math.max(0, (current / total) * 100));
|
|
146
|
+
const filled = Math.floor((percentage / 100) * width);
|
|
147
|
+
const empty = width - filled;
|
|
148
|
+
const filledBar = this.primary('ā'.repeat(filled));
|
|
149
|
+
const emptyBar = this.dim('ā'.repeat(empty));
|
|
150
|
+
const percentageText = ` ${Math.round(percentage)}%`;
|
|
151
|
+
return `${filledBar}${emptyBar}${percentageText}`;
|
|
152
|
+
},
|
|
153
|
+
/**
|
|
154
|
+
* Format file size with color
|
|
155
|
+
*/
|
|
156
|
+
formatFileSize(bytes) {
|
|
157
|
+
const units = ['B', 'KB', 'MB', 'GB'];
|
|
158
|
+
let size = bytes;
|
|
159
|
+
let unitIndex = 0;
|
|
160
|
+
while (size >= 1024 && unitIndex < units.length - 1) {
|
|
161
|
+
size /= 1024;
|
|
162
|
+
unitIndex++;
|
|
163
|
+
}
|
|
164
|
+
const rounded = Math.round(size * 10) / 10;
|
|
165
|
+
const colorFn = unitIndex < 2 ? this.success : this.warning;
|
|
166
|
+
return colorFn(`${rounded}${units[unitIndex]}`);
|
|
167
|
+
},
|
|
168
|
+
/**
|
|
169
|
+
* Format timestamp with color
|
|
170
|
+
*/
|
|
171
|
+
formatTimestamp(date) {
|
|
172
|
+
const now = new Date();
|
|
173
|
+
const diff = now.getTime() - date.getTime();
|
|
174
|
+
const seconds = Math.floor(diff / 1000);
|
|
175
|
+
const minutes = Math.floor(seconds / 60);
|
|
176
|
+
const hours = Math.floor(minutes / 60);
|
|
177
|
+
const days = Math.floor(hours / 24);
|
|
178
|
+
if (seconds < 60)
|
|
179
|
+
return this.success(`${seconds}s ago`);
|
|
180
|
+
if (minutes < 60)
|
|
181
|
+
return this.status(`${minutes}m ago`);
|
|
182
|
+
if (hours < 24)
|
|
183
|
+
return this.header(`${hours}h ago`);
|
|
184
|
+
return this.headerLight(`${days}d ago`);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* Terminal utility functions
|
|
189
|
+
*/
|
|
190
|
+
export const terminal = {
|
|
191
|
+
/**
|
|
192
|
+
* Clear screen
|
|
193
|
+
*/
|
|
194
|
+
clear() {
|
|
195
|
+
console.clear();
|
|
196
|
+
},
|
|
197
|
+
/**
|
|
198
|
+
* Move cursor to position
|
|
199
|
+
*/
|
|
200
|
+
moveTo(x, y) {
|
|
201
|
+
process.stdout.write(`\x1b[${y};${x}H`);
|
|
202
|
+
},
|
|
203
|
+
/**
|
|
204
|
+
* Hide cursor
|
|
205
|
+
*/
|
|
206
|
+
hideCursor() {
|
|
207
|
+
process.stdout.write('\x1b[?25l');
|
|
208
|
+
},
|
|
209
|
+
/**
|
|
210
|
+
* Show cursor
|
|
211
|
+
*/
|
|
212
|
+
showCursor() {
|
|
213
|
+
process.stdout.write('\x1b[?25h');
|
|
214
|
+
},
|
|
215
|
+
/**
|
|
216
|
+
* Get terminal dimensions
|
|
217
|
+
*/
|
|
218
|
+
getSize() {
|
|
219
|
+
return {
|
|
220
|
+
width: process.stdout.columns || 80,
|
|
221
|
+
height: process.stdout.rows || 24
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../../src/cli/repl/tui/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update Checker
|
|
3
|
+
*
|
|
4
|
+
* Checks for new versions of k0ntext and notifies users
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Version comparison result
|
|
8
|
+
*/
|
|
9
|
+
export interface VersionCheckResult {
|
|
10
|
+
current: string;
|
|
11
|
+
latest: string;
|
|
12
|
+
hasUpdate: boolean;
|
|
13
|
+
type: 'major' | 'minor' | 'patch' | 'none';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Update notification options
|
|
17
|
+
*/
|
|
18
|
+
export interface UpdateNotificationOptions {
|
|
19
|
+
showIfCurrent: boolean;
|
|
20
|
+
checkInterval: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Update Checker
|
|
24
|
+
*/
|
|
25
|
+
export declare class UpdateChecker {
|
|
26
|
+
private currentVersion;
|
|
27
|
+
private lastCheck;
|
|
28
|
+
private cachedResult;
|
|
29
|
+
private checkInterval;
|
|
30
|
+
constructor(currentVersion: string, checkInterval?: number);
|
|
31
|
+
/**
|
|
32
|
+
* Check for updates (with caching)
|
|
33
|
+
*/
|
|
34
|
+
check(force?: boolean): Promise<VersionCheckResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Fetch latest version from npm registry
|
|
37
|
+
*/
|
|
38
|
+
private fetchLatestVersion;
|
|
39
|
+
/**
|
|
40
|
+
* Check if current version needs update
|
|
41
|
+
*/
|
|
42
|
+
private needsUpdate;
|
|
43
|
+
/**
|
|
44
|
+
* Get update type
|
|
45
|
+
*/
|
|
46
|
+
private getUpdateType;
|
|
47
|
+
/**
|
|
48
|
+
* Get type emoji
|
|
49
|
+
*/
|
|
50
|
+
private getTypeEmoji;
|
|
51
|
+
/**
|
|
52
|
+
* Format update notification
|
|
53
|
+
*/
|
|
54
|
+
formatNotification(result: VersionCheckResult): string;
|
|
55
|
+
/**
|
|
56
|
+
* Show notification if update available
|
|
57
|
+
*/
|
|
58
|
+
showNotification(options?: UpdateNotificationOptions): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Check and prompt for update
|
|
61
|
+
*/
|
|
62
|
+
checkAndPrompt(): Promise<boolean>;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=checker.d.ts.map
|