erosolar-cli 2.1.231 → 2.1.234
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/agents/erosolar-security.rules.json +84 -0
- package/config/security-deployment.json +10 -9
- package/dist/bin/cliMode.d.ts +12 -0
- package/dist/bin/cliMode.d.ts.map +1 -0
- package/dist/bin/cliMode.js +27 -0
- package/dist/bin/cliMode.js.map +1 -0
- package/dist/bin/erosolar.js +47 -46
- package/dist/bin/erosolar.js.map +1 -1
- package/dist/capabilities/index.d.ts +1 -0
- package/dist/capabilities/index.d.ts.map +1 -1
- package/dist/capabilities/index.js +1 -0
- package/dist/capabilities/index.js.map +1 -1
- package/dist/capabilities/taoCapability.d.ts +13 -0
- package/dist/capabilities/taoCapability.d.ts.map +1 -0
- package/dist/capabilities/taoCapability.js +20 -0
- package/dist/capabilities/taoCapability.js.map +1 -0
- package/dist/contracts/agent-profiles.schema.json +16 -0
- package/dist/contracts/tools.schema.json +12 -0
- package/dist/core/agent.d.ts +6 -0
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +22 -0
- package/dist/core/agent.js.map +1 -1
- package/dist/core/agentOrchestrator.d.ts +3 -12
- package/dist/core/agentOrchestrator.d.ts.map +1 -1
- package/dist/core/agentOrchestrator.js +199 -107
- package/dist/core/agentOrchestrator.js.map +1 -1
- package/dist/core/baseToolFactory.d.ts +187 -0
- package/dist/core/baseToolFactory.d.ts.map +1 -0
- package/dist/core/baseToolFactory.js +352 -0
- package/dist/core/baseToolFactory.js.map +1 -0
- package/dist/core/constants.d.ts +5 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +5 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/errors/index.d.ts +50 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +156 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/errors/safetyValidator.d.ts.map +1 -1
- package/dist/core/errors/safetyValidator.js +6 -137
- package/dist/core/errors/safetyValidator.js.map +1 -1
- package/dist/headless/headlessApp.d.ts.map +1 -1
- package/dist/headless/headlessApp.js +2 -15
- package/dist/headless/headlessApp.js.map +1 -1
- package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
- package/dist/plugins/tools/nodeDefaults.js +2 -0
- package/dist/plugins/tools/nodeDefaults.js.map +1 -1
- package/dist/plugins/tools/tao/taoPlugin.d.ts +3 -0
- package/dist/plugins/tools/tao/taoPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/tao/taoPlugin.js +14 -0
- package/dist/plugins/tools/tao/taoPlugin.js.map +1 -0
- package/dist/providers/baseProvider.d.ts +148 -0
- package/dist/providers/baseProvider.d.ts.map +1 -0
- package/dist/providers/baseProvider.js +284 -0
- package/dist/providers/baseProvider.js.map +1 -0
- package/dist/shell/commandRegistry.d.ts +122 -0
- package/dist/shell/commandRegistry.d.ts.map +1 -0
- package/dist/shell/commandRegistry.js +371 -0
- package/dist/shell/commandRegistry.js.map +1 -0
- package/dist/shell/shellApp.d.ts.map +1 -1
- package/dist/shell/shellApp.js +2 -15
- package/dist/shell/shellApp.js.map +1 -1
- package/dist/tools/bashTools.d.ts.map +1 -1
- package/dist/tools/bashTools.js +1 -5
- package/dist/tools/bashTools.js.map +1 -1
- package/dist/tools/tao/index.d.ts +28 -0
- package/dist/tools/tao/index.d.ts.map +1 -0
- package/dist/tools/tao/index.js +33 -0
- package/dist/tools/tao/index.js.map +1 -0
- package/dist/tools/tao/intentParser.d.ts +9 -0
- package/dist/tools/tao/intentParser.d.ts.map +1 -0
- package/dist/tools/tao/intentParser.js +163 -0
- package/dist/tools/tao/intentParser.js.map +1 -0
- package/dist/tools/tao/rlEngine.d.ts +40 -0
- package/dist/tools/tao/rlEngine.d.ts.map +1 -0
- package/dist/tools/tao/rlEngine.js +237 -0
- package/dist/tools/tao/rlEngine.js.map +1 -0
- package/dist/tools/tao/sessionState.d.ts +9 -0
- package/dist/tools/tao/sessionState.d.ts.map +1 -0
- package/dist/tools/tao/sessionState.js +18 -0
- package/dist/tools/tao/sessionState.js.map +1 -0
- package/dist/tools/tao/types.d.ts +109 -0
- package/dist/tools/tao/types.d.ts.map +1 -0
- package/dist/tools/tao/types.js +5 -0
- package/dist/tools/tao/types.js.map +1 -0
- package/dist/tools/tao/verification.d.ts +23 -0
- package/dist/tools/tao/verification.d.ts.map +1 -0
- package/dist/tools/tao/verification.js +211 -0
- package/dist/tools/tao/verification.js.map +1 -0
- package/dist/tools/taoTools.d.ts +23 -0
- package/dist/tools/taoTools.d.ts.map +1 -0
- package/dist/tools/taoTools.js +14499 -0
- package/dist/tools/taoTools.js.map +1 -0
- package/dist/ui/UnifiedUIRenderer.d.ts +5 -0
- package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
- package/dist/ui/UnifiedUIRenderer.js +49 -20
- package/dist/ui/UnifiedUIRenderer.js.map +1 -1
- package/dist/ui/index.d.ts +102 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +120 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/orchestration/UIUpdateCoordinator.d.ts.map +1 -1
- package/dist/ui/orchestration/UIUpdateCoordinator.js +7 -0
- package/dist/ui/orchestration/UIUpdateCoordinator.js.map +1 -1
- package/dist/utils/packageInfo.d.ts +14 -0
- package/dist/utils/packageInfo.d.ts.map +1 -0
- package/dist/utils/packageInfo.js +45 -0
- package/dist/utils/packageInfo.js.map +1 -0
- package/package.json +3 -3
- package/scripts/deploy-security-capabilities.js +157 -0
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Provider - Abstract LLM Provider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Provides common functionality for LLM providers:
|
|
5
|
+
* - Retry logic with exponential backoff
|
|
6
|
+
* - Rate limit handling
|
|
7
|
+
* - Transient error recovery
|
|
8
|
+
* - Message conversion utilities
|
|
9
|
+
* - Usage tracking
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* class MyProvider extends BaseProvider {
|
|
14
|
+
* readonly id = 'my-provider';
|
|
15
|
+
*
|
|
16
|
+
* protected async doGenerate(messages, tools): Promise<ProviderResponse> {
|
|
17
|
+
* // Provider-specific implementation
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* protected async doGenerateStream(messages, tools): AsyncIterable<StreamChunk> {
|
|
21
|
+
* // Provider-specific implementation
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
27
|
+
// Constants
|
|
28
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
29
|
+
/** Patterns that indicate transient/retryable errors */
|
|
30
|
+
export const TRANSIENT_ERROR_PATTERNS = [
|
|
31
|
+
'premature close',
|
|
32
|
+
'premature end',
|
|
33
|
+
'unexpected end',
|
|
34
|
+
'aborted',
|
|
35
|
+
'fetcherror',
|
|
36
|
+
'invalid response body',
|
|
37
|
+
'gunzip',
|
|
38
|
+
'decompress',
|
|
39
|
+
'econnreset',
|
|
40
|
+
'econnrefused',
|
|
41
|
+
'epipe',
|
|
42
|
+
'socket hang up',
|
|
43
|
+
'network',
|
|
44
|
+
'timeout',
|
|
45
|
+
'500',
|
|
46
|
+
'502',
|
|
47
|
+
'503',
|
|
48
|
+
'504',
|
|
49
|
+
'overloaded',
|
|
50
|
+
];
|
|
51
|
+
/** Default retry configuration */
|
|
52
|
+
export const DEFAULT_RETRY_CONFIG = {
|
|
53
|
+
maxRetries: 3,
|
|
54
|
+
initialDelayMs: 1000,
|
|
55
|
+
maxDelayMs: 30000,
|
|
56
|
+
backoffMultiplier: 2,
|
|
57
|
+
};
|
|
58
|
+
/** Default rate limit configuration */
|
|
59
|
+
export const DEFAULT_RATE_LIMIT_CONFIG = {
|
|
60
|
+
maxRetries: 4,
|
|
61
|
+
initialDelayMs: 1500,
|
|
62
|
+
minDelayMs: 750,
|
|
63
|
+
maxDelayMs: 40000,
|
|
64
|
+
};
|
|
65
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
66
|
+
// Error Detection Utilities
|
|
67
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
68
|
+
/**
|
|
69
|
+
* Check if an error is transient and can be retried
|
|
70
|
+
*/
|
|
71
|
+
export function isTransientError(error) {
|
|
72
|
+
if (!(error instanceof Error))
|
|
73
|
+
return false;
|
|
74
|
+
const message = error.message.toLowerCase();
|
|
75
|
+
const errorName = error.name?.toLowerCase() ?? '';
|
|
76
|
+
const errorCode = error.code?.toLowerCase() ?? '';
|
|
77
|
+
const allText = `${message} ${errorName} ${errorCode}`;
|
|
78
|
+
return TRANSIENT_ERROR_PATTERNS.some((pattern) => allText.includes(pattern));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check if an error is a rate limit error
|
|
82
|
+
*/
|
|
83
|
+
export function isRateLimitError(error) {
|
|
84
|
+
if (!(error instanceof Error))
|
|
85
|
+
return false;
|
|
86
|
+
const message = error.message.toLowerCase();
|
|
87
|
+
// Check for common rate limit indicators
|
|
88
|
+
if (message.includes('rate limit') ||
|
|
89
|
+
message.includes('rate_limit') ||
|
|
90
|
+
message.includes('too many requests') ||
|
|
91
|
+
message.includes('429')) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
// Check for status code
|
|
95
|
+
const status = error.status;
|
|
96
|
+
return status === 429;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if an error is an authentication error
|
|
100
|
+
*/
|
|
101
|
+
export function isAuthError(error) {
|
|
102
|
+
if (!(error instanceof Error))
|
|
103
|
+
return false;
|
|
104
|
+
const message = error.message.toLowerCase();
|
|
105
|
+
const status = error.status;
|
|
106
|
+
return (status === 401 ||
|
|
107
|
+
status === 403 ||
|
|
108
|
+
message.includes('unauthorized') ||
|
|
109
|
+
message.includes('invalid api key') ||
|
|
110
|
+
message.includes('authentication'));
|
|
111
|
+
}
|
|
112
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
113
|
+
// Retry Utilities
|
|
114
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
115
|
+
/**
|
|
116
|
+
* Sleep for a given duration
|
|
117
|
+
*/
|
|
118
|
+
export function sleep(ms) {
|
|
119
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Calculate exponential backoff delay
|
|
123
|
+
*/
|
|
124
|
+
export function calculateBackoffDelay(attempt, config) {
|
|
125
|
+
const delay = config.initialDelayMs * Math.pow(config.backoffMultiplier, attempt);
|
|
126
|
+
// Add jitter (±10%)
|
|
127
|
+
const jitter = delay * 0.1 * (Math.random() * 2 - 1);
|
|
128
|
+
return Math.min(delay + jitter, config.maxDelayMs);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Execute an operation with retry logic
|
|
132
|
+
*/
|
|
133
|
+
export async function withRetry(operation, options = {}) {
|
|
134
|
+
const config = {
|
|
135
|
+
...DEFAULT_RETRY_CONFIG,
|
|
136
|
+
...options.config,
|
|
137
|
+
};
|
|
138
|
+
const shouldRetry = options.shouldRetry ?? isTransientError;
|
|
139
|
+
let lastError;
|
|
140
|
+
for (let attempt = 0; attempt <= config.maxRetries; attempt++) {
|
|
141
|
+
try {
|
|
142
|
+
return await operation();
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
lastError = error;
|
|
146
|
+
// Don't retry auth errors
|
|
147
|
+
if (isAuthError(error)) {
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
// Check if we should retry
|
|
151
|
+
if (attempt === config.maxRetries || !shouldRetry(error)) {
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
// Calculate delay and wait
|
|
155
|
+
const delay = calculateBackoffDelay(attempt, config);
|
|
156
|
+
options.onRetry?.(error, attempt, delay);
|
|
157
|
+
await sleep(delay);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
throw lastError;
|
|
161
|
+
}
|
|
162
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
163
|
+
// Message Utilities
|
|
164
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
165
|
+
/**
|
|
166
|
+
* Extract system message from conversation
|
|
167
|
+
*/
|
|
168
|
+
export function extractSystemMessage(messages) {
|
|
169
|
+
const systemMessages = messages.filter((m) => m.role === 'system');
|
|
170
|
+
const rest = messages.filter((m) => m.role !== 'system');
|
|
171
|
+
if (systemMessages.length === 0) {
|
|
172
|
+
return { system: null, rest };
|
|
173
|
+
}
|
|
174
|
+
// Combine all system messages
|
|
175
|
+
const system = systemMessages
|
|
176
|
+
.map((m) => (typeof m.content === 'string' ? m.content : JSON.stringify(m.content)))
|
|
177
|
+
.join('\n\n');
|
|
178
|
+
return { system, rest };
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Merge consecutive messages from the same role
|
|
182
|
+
*/
|
|
183
|
+
export function mergeConsecutiveMessages(messages) {
|
|
184
|
+
if (messages.length === 0)
|
|
185
|
+
return [];
|
|
186
|
+
const merged = [];
|
|
187
|
+
let current = null;
|
|
188
|
+
for (const message of messages) {
|
|
189
|
+
if (!current) {
|
|
190
|
+
current = { ...message };
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
if (current.role === message.role && typeof current.content === 'string' && typeof message.content === 'string') {
|
|
194
|
+
// Merge text content
|
|
195
|
+
current.content = `${current.content}\n\n${message.content}`;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
merged.push(current);
|
|
199
|
+
current = { ...message };
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (current) {
|
|
203
|
+
merged.push(current);
|
|
204
|
+
}
|
|
205
|
+
return merged;
|
|
206
|
+
}
|
|
207
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
208
|
+
// Usage Tracking
|
|
209
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
210
|
+
/**
|
|
211
|
+
* Create an empty usage object
|
|
212
|
+
*/
|
|
213
|
+
export function emptyUsage() {
|
|
214
|
+
return {
|
|
215
|
+
inputTokens: 0,
|
|
216
|
+
outputTokens: 0,
|
|
217
|
+
totalTokens: 0,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Merge usage objects
|
|
222
|
+
*/
|
|
223
|
+
export function mergeUsage(a, b) {
|
|
224
|
+
return {
|
|
225
|
+
inputTokens: (a.inputTokens ?? 0) + (b.inputTokens ?? 0),
|
|
226
|
+
outputTokens: (a.outputTokens ?? 0) + (b.outputTokens ?? 0),
|
|
227
|
+
totalTokens: (a.totalTokens ?? 0) + (b.totalTokens ?? 0),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
231
|
+
// Abstract Base Provider
|
|
232
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
233
|
+
/**
|
|
234
|
+
* Abstract base class for LLM providers
|
|
235
|
+
*
|
|
236
|
+
* Implements common functionality like retry logic and error handling.
|
|
237
|
+
* Subclasses must implement the abstract methods for provider-specific behavior.
|
|
238
|
+
*/
|
|
239
|
+
export class BaseProvider {
|
|
240
|
+
model;
|
|
241
|
+
maxTokens;
|
|
242
|
+
temperature;
|
|
243
|
+
retryConfig;
|
|
244
|
+
rateLimitConfig;
|
|
245
|
+
constructor(options) {
|
|
246
|
+
this.model = options.model;
|
|
247
|
+
this.maxTokens = options.maxTokens ?? 4096;
|
|
248
|
+
this.temperature = options.temperature ?? 0;
|
|
249
|
+
this.retryConfig = { ...DEFAULT_RETRY_CONFIG, ...options.retryConfig };
|
|
250
|
+
this.rateLimitConfig = { ...DEFAULT_RATE_LIMIT_CONFIG, ...options.rateLimitConfig };
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Generate a response (implemented by subclass)
|
|
254
|
+
*/
|
|
255
|
+
async generate(messages, tools) {
|
|
256
|
+
return withRetry(() => this.doGenerate(messages, tools), {
|
|
257
|
+
config: this.retryConfig,
|
|
258
|
+
shouldRetry: (error) => isTransientError(error) || isRateLimitError(error),
|
|
259
|
+
onRetry: (error, attempt, delay) => {
|
|
260
|
+
this.onRetry(error, attempt, delay);
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Generate a streaming response (implemented by subclass)
|
|
266
|
+
*/
|
|
267
|
+
async *generateStream(messages, tools) {
|
|
268
|
+
// Stream operations are harder to retry, so we do best-effort
|
|
269
|
+
yield* this.doGenerateStream(messages, tools);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Get available models (optional, implemented by subclass)
|
|
273
|
+
*/
|
|
274
|
+
async getModels() {
|
|
275
|
+
return [];
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Called when a retry is about to happen
|
|
279
|
+
*/
|
|
280
|
+
onRetry(error, attempt, delay) {
|
|
281
|
+
// Subclasses can override for logging
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=baseProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseProvider.js","sourceRoot":"","sources":["../../src/providers/baseProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Registry - Slash Command Management
|
|
3
|
+
*
|
|
4
|
+
* Provides a registry for slash commands with:
|
|
5
|
+
* - Command registration and discovery
|
|
6
|
+
* - Help text generation
|
|
7
|
+
* - Category organization
|
|
8
|
+
* - Command execution delegation
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const registry = new CommandRegistry();
|
|
13
|
+
*
|
|
14
|
+
* registry.register({
|
|
15
|
+
* name: '/help',
|
|
16
|
+
* aliases: ['/?'],
|
|
17
|
+
* description: 'Show help information',
|
|
18
|
+
* category: 'navigation',
|
|
19
|
+
* handler: async (context) => {
|
|
20
|
+
* context.showHelp();
|
|
21
|
+
* },
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* await registry.execute('/help', '', context);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export type CommandCategory = 'navigation' | 'model' | 'context' | 'session' | 'tools' | 'development' | 'security' | 'advanced' | 'learning' | 'ui';
|
|
28
|
+
export interface CommandContext {
|
|
29
|
+
/** The shell instance for accessing shell methods */
|
|
30
|
+
shell: unknown;
|
|
31
|
+
/** Current input/arguments */
|
|
32
|
+
input: string;
|
|
33
|
+
/** Raw command string */
|
|
34
|
+
rawCommand: string;
|
|
35
|
+
}
|
|
36
|
+
export interface CommandDefinition {
|
|
37
|
+
/** Primary command name (e.g., '/help') */
|
|
38
|
+
name: string;
|
|
39
|
+
/** Alternative names for the command */
|
|
40
|
+
aliases?: string[];
|
|
41
|
+
/** Short description for help text */
|
|
42
|
+
description: string;
|
|
43
|
+
/** Category for organization */
|
|
44
|
+
category: CommandCategory;
|
|
45
|
+
/** Whether command is async */
|
|
46
|
+
async?: boolean;
|
|
47
|
+
/** Whether command is hidden from help */
|
|
48
|
+
hidden?: boolean;
|
|
49
|
+
/** Usage example */
|
|
50
|
+
usage?: string;
|
|
51
|
+
/** Handler function */
|
|
52
|
+
handler: (context: CommandContext) => void | Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
export interface CommandMatch {
|
|
55
|
+
command: CommandDefinition;
|
|
56
|
+
matchedName: string;
|
|
57
|
+
}
|
|
58
|
+
export declare class CommandRegistry {
|
|
59
|
+
private commands;
|
|
60
|
+
private aliasMap;
|
|
61
|
+
/**
|
|
62
|
+
* Register a command
|
|
63
|
+
*/
|
|
64
|
+
register(command: CommandDefinition): this;
|
|
65
|
+
/**
|
|
66
|
+
* Register multiple commands
|
|
67
|
+
*/
|
|
68
|
+
registerAll(commands: CommandDefinition[]): this;
|
|
69
|
+
/**
|
|
70
|
+
* Find a command by name or alias
|
|
71
|
+
*/
|
|
72
|
+
find(commandName: string): CommandMatch | null;
|
|
73
|
+
/**
|
|
74
|
+
* Check if a command exists
|
|
75
|
+
*/
|
|
76
|
+
has(commandName: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Execute a command
|
|
79
|
+
*/
|
|
80
|
+
execute(commandName: string, input: string, shell: unknown): Promise<boolean>;
|
|
81
|
+
/**
|
|
82
|
+
* Get all commands in a category
|
|
83
|
+
*/
|
|
84
|
+
getByCategory(category: CommandCategory): CommandDefinition[];
|
|
85
|
+
/**
|
|
86
|
+
* Get all categories with their commands
|
|
87
|
+
*/
|
|
88
|
+
getAllCategories(): Map<CommandCategory, CommandDefinition[]>;
|
|
89
|
+
/**
|
|
90
|
+
* Get all registered commands
|
|
91
|
+
*/
|
|
92
|
+
getAll(): CommandDefinition[];
|
|
93
|
+
/**
|
|
94
|
+
* Get all visible commands (excluding hidden)
|
|
95
|
+
*/
|
|
96
|
+
getVisible(): CommandDefinition[];
|
|
97
|
+
/**
|
|
98
|
+
* Generate help text for all commands
|
|
99
|
+
*/
|
|
100
|
+
generateHelpText(): string;
|
|
101
|
+
/**
|
|
102
|
+
* Generate compact help text (just command names)
|
|
103
|
+
*/
|
|
104
|
+
generateCompactHelp(): string;
|
|
105
|
+
/**
|
|
106
|
+
* Normalize command name
|
|
107
|
+
*/
|
|
108
|
+
private normalizeName;
|
|
109
|
+
/**
|
|
110
|
+
* Format category name for display
|
|
111
|
+
*/
|
|
112
|
+
private formatCategoryName;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Create a standard set of commands for the shell
|
|
116
|
+
*
|
|
117
|
+
* This is meant to be extended/customized by the shell implementation
|
|
118
|
+
*/
|
|
119
|
+
export declare function createBaseCommands(): CommandDefinition[];
|
|
120
|
+
export declare function getCommandRegistry(): CommandRegistry;
|
|
121
|
+
export declare function resetCommandRegistry(): void;
|
|
122
|
+
//# sourceMappingURL=commandRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandRegistry.d.ts","sourceRoot":"","sources":["../../src/shell/commandRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,OAAO,GACP,SAAS,GACT,SAAS,GACT,OAAO,GACP,aAAa,GACb,UAAU,GACV,UAAU,GACV,UAAU,GACV,IAAI,CAAC;AAET,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,KAAK,EAAE,OAAO,CAAC;IACf,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,QAAQ,EAAE,eAAe,CAAC;IAC1B,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,QAAQ,CAA6B;IAE7C;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAgB1C;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAOhD;;OAEG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAqB9C;;OAEG;IACH,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBnF;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,EAAE;IAM7D;;OAEG;IACH,gBAAgB,IAAI,GAAG,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC;IAc7D;;OAEG;IACH,MAAM,IAAI,iBAAiB,EAAE;IAI7B;;OAEG;IACH,UAAU,IAAI,iBAAiB,EAAE;IAIjC;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAkC1B;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAO7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAe3B;AAMD;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,EAAE,CAyJxD;AAQD,wBAAgB,kBAAkB,IAAI,eAAe,CAMpD;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
|