@oflow-ai/oflow-cli 0.1.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/LICENSE +21 -0
- package/README.md +117 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +339 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.js +467 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +320 -0
- package/dist/postinstall.d.ts +10 -0
- package/dist/postinstall.js +58 -0
- package/dist/utils/markdown.d.ts +10 -0
- package/dist/utils/markdown.js +69 -0
- package/package.json +69 -0
- package/scripts/postinstall.js +61 -0
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.isSlashCommand = isSlashCommand;
|
|
40
|
+
exports.executeSlashCommand = executeSlashCommand;
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const core_1 = require("@oflow-ai/core");
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
function isSlashCommand(input) {
|
|
46
|
+
return input.startsWith('/');
|
|
47
|
+
}
|
|
48
|
+
async function executeSlashCommand(input, context) {
|
|
49
|
+
const [command, ...args] = input.split(' ');
|
|
50
|
+
const argString = args.join(' ');
|
|
51
|
+
switch (command.toLowerCase()) {
|
|
52
|
+
case '/help':
|
|
53
|
+
return showHelp();
|
|
54
|
+
case '/exit':
|
|
55
|
+
case '/quit':
|
|
56
|
+
case '/q':
|
|
57
|
+
return false;
|
|
58
|
+
case '/clear':
|
|
59
|
+
return clearConversation(context);
|
|
60
|
+
case '/init':
|
|
61
|
+
return initProject(context);
|
|
62
|
+
case '/model':
|
|
63
|
+
return showOrSetModel(argString, context);
|
|
64
|
+
case '/config':
|
|
65
|
+
return showConfig(context);
|
|
66
|
+
case '/reset':
|
|
67
|
+
return resetConfig(context);
|
|
68
|
+
case '/history':
|
|
69
|
+
return showHistory(context);
|
|
70
|
+
case '/tools':
|
|
71
|
+
return showTools();
|
|
72
|
+
case '/version':
|
|
73
|
+
return showVersion();
|
|
74
|
+
case '/agents':
|
|
75
|
+
return showAgents();
|
|
76
|
+
case '/sandbox':
|
|
77
|
+
return showSandboxInfo();
|
|
78
|
+
case '/skills':
|
|
79
|
+
return showSkills(argString);
|
|
80
|
+
case '/mcp':
|
|
81
|
+
return showMCPInfo();
|
|
82
|
+
case '/memory':
|
|
83
|
+
return showMemory();
|
|
84
|
+
case '/commit':
|
|
85
|
+
return generateCommit(context);
|
|
86
|
+
case '/review':
|
|
87
|
+
return reviewCode(context);
|
|
88
|
+
case '/thinking':
|
|
89
|
+
return toggleThinking(context);
|
|
90
|
+
default:
|
|
91
|
+
console.log(chalk_1.default.yellow(`Unknown command: ${command}`));
|
|
92
|
+
console.log(chalk_1.default.gray('Type /help for available commands.'));
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function showHelp() {
|
|
97
|
+
console.log('');
|
|
98
|
+
console.log(chalk_1.default.bold('Available Commands:'));
|
|
99
|
+
console.log('');
|
|
100
|
+
const commands = [
|
|
101
|
+
{ cmd: '/help', desc: 'Show this help message' },
|
|
102
|
+
{ cmd: '/exit, /quit, /q', desc: 'Exit oflow CLI' },
|
|
103
|
+
{ cmd: '/clear', desc: 'Clear conversation history' },
|
|
104
|
+
{ cmd: '/init', desc: 'Analyze and initialize current project' },
|
|
105
|
+
{ cmd: '/model [name]', desc: 'Show or set the current model' },
|
|
106
|
+
{ cmd: '/thinking', desc: 'Toggle thinking process display (ON/OFF)' },
|
|
107
|
+
{ cmd: '/config', desc: 'Show current configuration' },
|
|
108
|
+
{ cmd: '/reset', desc: 'Reset configuration to defaults' },
|
|
109
|
+
{ cmd: '/history', desc: 'Show conversation history' },
|
|
110
|
+
{ cmd: '/tools', desc: 'List available tools' },
|
|
111
|
+
{ cmd: '/agents', desc: 'List available sub-agents' },
|
|
112
|
+
{ cmd: '/sandbox', desc: 'Show sandbox status' },
|
|
113
|
+
{ cmd: '/skills [list|refresh]', desc: 'Manage skills' },
|
|
114
|
+
{ cmd: '/mcp', desc: 'Show MCP server status' },
|
|
115
|
+
{ cmd: '/memory', desc: 'Show saved memories' },
|
|
116
|
+
{ cmd: '/commit', desc: 'Generate commit message' },
|
|
117
|
+
{ cmd: '/review', desc: 'Review recent code changes' },
|
|
118
|
+
{ cmd: '/version', desc: 'Show version information' }
|
|
119
|
+
];
|
|
120
|
+
commands.forEach(({ cmd, desc }) => {
|
|
121
|
+
console.log(` ${chalk_1.default.cyan(cmd.padEnd(20))} ${chalk_1.default.gray(desc)}`);
|
|
122
|
+
});
|
|
123
|
+
console.log('');
|
|
124
|
+
console.log(chalk_1.default.bold('Special Syntax:'));
|
|
125
|
+
console.log(` ${chalk_1.default.cyan('!command')} ${chalk_1.default.gray('Execute a shell command')}`);
|
|
126
|
+
console.log(` ${chalk_1.default.cyan('@filepath')} ${chalk_1.default.gray('Reference a file in your message')}`);
|
|
127
|
+
console.log(` ${chalk_1.default.cyan('$agent')} ${chalk_1.default.gray('Call a sub-agent (e.g., $explore-agent "task")')}`);
|
|
128
|
+
console.log('');
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
function clearConversation(context) {
|
|
132
|
+
context.conversation.clear();
|
|
133
|
+
console.log(chalk_1.default.green('✓ Conversation history cleared.'));
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
async function initProject(context) {
|
|
137
|
+
const workingDir = process.cwd();
|
|
138
|
+
const projectName = path.basename(workingDir);
|
|
139
|
+
console.log(chalk_1.default.cyan(`\nAnalyzing project: ${projectName}\n`));
|
|
140
|
+
// Check for common project files
|
|
141
|
+
const checks = [
|
|
142
|
+
{ file: 'package.json', type: 'Node.js' },
|
|
143
|
+
{ file: 'tsconfig.json', type: 'TypeScript' },
|
|
144
|
+
{ file: 'pyproject.toml', type: 'Python (modern)' },
|
|
145
|
+
{ file: 'requirements.txt', type: 'Python' },
|
|
146
|
+
{ file: 'Cargo.toml', type: 'Rust' },
|
|
147
|
+
{ file: 'go.mod', type: 'Go' },
|
|
148
|
+
{ file: 'pom.xml', type: 'Java (Maven)' },
|
|
149
|
+
{ file: 'build.gradle', type: 'Java (Gradle)' },
|
|
150
|
+
{ file: '.git', type: 'Git repository' }
|
|
151
|
+
];
|
|
152
|
+
const detected = [];
|
|
153
|
+
for (const check of checks) {
|
|
154
|
+
const filePath = path.join(workingDir, check.file);
|
|
155
|
+
if (fs.existsSync(filePath)) {
|
|
156
|
+
detected.push(check.type);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (detected.length > 0) {
|
|
160
|
+
console.log(chalk_1.default.bold('Detected project types:'));
|
|
161
|
+
detected.forEach(t => console.log(` • ${t}`));
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
console.log(chalk_1.default.yellow('No recognized project type detected.'));
|
|
165
|
+
}
|
|
166
|
+
// List top-level files and directories
|
|
167
|
+
console.log(chalk_1.default.bold('\nProject structure:'));
|
|
168
|
+
const entries = fs.readdirSync(workingDir, { withFileTypes: true });
|
|
169
|
+
entries.slice(0, 20).forEach(entry => {
|
|
170
|
+
const prefix = entry.isDirectory() ? '📁 ' : '📄 ';
|
|
171
|
+
console.log(` ${prefix}${entry.name}`);
|
|
172
|
+
});
|
|
173
|
+
if (entries.length > 20) {
|
|
174
|
+
console.log(chalk_1.default.gray(` ... and ${entries.length - 20} more items`));
|
|
175
|
+
}
|
|
176
|
+
console.log('');
|
|
177
|
+
// Add init context to conversation
|
|
178
|
+
const initMessage = `Please analyze the current project structure and provide:
|
|
179
|
+
1. A brief overview of the project type and purpose
|
|
180
|
+
2. Key files and their roles
|
|
181
|
+
3. Suggestions for improvements or best practices
|
|
182
|
+
|
|
183
|
+
Working directory: ${workingDir}
|
|
184
|
+
Detected types: ${detected.join(', ')}`;
|
|
185
|
+
try {
|
|
186
|
+
await context.conversation.sendMessage(initMessage);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.log(chalk_1.default.red('Error during analysis.'));
|
|
190
|
+
}
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
function showOrSetModel(modelName, context) {
|
|
194
|
+
if (modelName) {
|
|
195
|
+
context.configManager.setDefaultModel(modelName);
|
|
196
|
+
console.log(chalk_1.default.green(`✓ Model set to: ${modelName}`));
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
const currentModel = context.configManager.getDefaultModel();
|
|
200
|
+
console.log(chalk_1.default.cyan(`Current model: ${currentModel}`));
|
|
201
|
+
console.log('');
|
|
202
|
+
console.log('Available models:');
|
|
203
|
+
const models = ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'gpt-3.5-turbo', 'o1-preview', 'o1-mini'];
|
|
204
|
+
models.forEach(m => {
|
|
205
|
+
if (m === currentModel) {
|
|
206
|
+
console.log(chalk_1.default.green(` * ${m} (current)`));
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
console.log(` ${m}`);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
function showConfig(context) {
|
|
216
|
+
const config = context.configManager.getAll();
|
|
217
|
+
console.log(chalk_1.default.bold('\nCurrent Configuration:'));
|
|
218
|
+
console.log(JSON.stringify(config, null, 2));
|
|
219
|
+
console.log('');
|
|
220
|
+
console.log(chalk_1.default.gray(`Config file: ${context.configManager.getConfigPath()}`));
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
function resetConfig(context) {
|
|
224
|
+
context.configManager.clear();
|
|
225
|
+
console.log(chalk_1.default.green('✓ Configuration reset to defaults.'));
|
|
226
|
+
console.log(chalk_1.default.yellow('You will need to run `oflow auth` to reconfigure authentication.'));
|
|
227
|
+
return false; // Exit to force re-auth
|
|
228
|
+
}
|
|
229
|
+
function showHistory(context) {
|
|
230
|
+
const messages = context.conversation.getMessages();
|
|
231
|
+
if (messages.length === 0) {
|
|
232
|
+
console.log(chalk_1.default.gray('No conversation history.'));
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
console.log(chalk_1.default.bold('\nConversation History:'));
|
|
236
|
+
console.log('');
|
|
237
|
+
messages.forEach((msg, index) => {
|
|
238
|
+
if (msg.role === 'system')
|
|
239
|
+
return;
|
|
240
|
+
const roleColors = {
|
|
241
|
+
user: chalk_1.default.green,
|
|
242
|
+
assistant: chalk_1.default.blue,
|
|
243
|
+
tool: chalk_1.default.gray
|
|
244
|
+
};
|
|
245
|
+
const color = roleColors[msg.role] || chalk_1.default.white;
|
|
246
|
+
const preview = typeof msg.content === 'string'
|
|
247
|
+
? msg.content.substring(0, 100) + (msg.content.length > 100 ? '...' : '')
|
|
248
|
+
: '[complex content]';
|
|
249
|
+
console.log(`${index}. ${color(msg.role)}: ${preview}`);
|
|
250
|
+
});
|
|
251
|
+
console.log('');
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
function showTools() {
|
|
255
|
+
console.log(chalk_1.default.bold('\nAvailable Tools:'));
|
|
256
|
+
console.log('');
|
|
257
|
+
const tools = [
|
|
258
|
+
{ name: 'read_file', desc: 'Read file contents' },
|
|
259
|
+
{ name: 'write_file', desc: 'Write to files' },
|
|
260
|
+
{ name: 'list_directory', desc: 'List directory contents' },
|
|
261
|
+
{ name: 'glob', desc: 'Find files by pattern' },
|
|
262
|
+
{ name: 'search_file_content', desc: 'Search within files' },
|
|
263
|
+
{ name: 'run_shell_command', desc: 'Execute shell commands' },
|
|
264
|
+
{ name: 'web_search', desc: 'Search the web' },
|
|
265
|
+
{ name: 'web_fetch', desc: 'Fetch web content' },
|
|
266
|
+
{ name: 'replace', desc: 'Replace text in files' },
|
|
267
|
+
{ name: 'image_read', desc: 'Analyze images with VL models' },
|
|
268
|
+
{ name: 'pdf_extract', desc: 'Extract content from PDFs' },
|
|
269
|
+
{ name: 'ask_user_question', desc: 'Ask user for input' },
|
|
270
|
+
{ name: 'task', desc: 'Launch sub-agents' },
|
|
271
|
+
{ name: 'save_memory', desc: 'Save information for future' }
|
|
272
|
+
];
|
|
273
|
+
tools.forEach(({ name, desc }) => {
|
|
274
|
+
console.log(` ${chalk_1.default.cyan(name.padEnd(20))} ${chalk_1.default.gray(desc)}`);
|
|
275
|
+
});
|
|
276
|
+
console.log('');
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
function showVersion() {
|
|
280
|
+
const packageJsonPath = path.join(__dirname, '..', '..', 'package.json');
|
|
281
|
+
try {
|
|
282
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
283
|
+
console.log(chalk_1.default.cyan(`oflow CLI v${packageJson.version}`));
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
console.log(chalk_1.default.cyan('oflow CLI (version unknown)'));
|
|
287
|
+
}
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
function showAgents() {
|
|
291
|
+
console.log(chalk_1.default.bold('\nAvailable Sub-Agents:'));
|
|
292
|
+
console.log('');
|
|
293
|
+
const agents = Object.values(core_1.AGENT_DEFINITIONS);
|
|
294
|
+
agents.forEach(agent => {
|
|
295
|
+
console.log(` ${chalk_1.default.cyan(`$${agent.type}`)}`);
|
|
296
|
+
console.log(` ${chalk_1.default.gray(agent.description)}`);
|
|
297
|
+
console.log(` Tools: ${agent.allowedTools === '*' ? 'all' : agent.allowedTools.join(', ')}`);
|
|
298
|
+
console.log('');
|
|
299
|
+
});
|
|
300
|
+
console.log(chalk_1.default.gray('Usage: $agent-type "your task here"'));
|
|
301
|
+
console.log('');
|
|
302
|
+
return true;
|
|
303
|
+
}
|
|
304
|
+
async function showSandboxInfo() {
|
|
305
|
+
console.log(chalk_1.default.bold('\nSandbox Status:'));
|
|
306
|
+
console.log('');
|
|
307
|
+
try {
|
|
308
|
+
const backend = await (0, core_1.createSandboxExecutor)();
|
|
309
|
+
console.log(` Backend: ${chalk_1.default.cyan(backend ? 'available' : 'unavailable')}`);
|
|
310
|
+
console.log(` Mode: ${chalk_1.default.cyan(backend ? backend['config']?.backend || 'none' : 'none')}`);
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
console.log(' Backend: ' + chalk_1.default.yellow('not available'));
|
|
314
|
+
}
|
|
315
|
+
console.log('');
|
|
316
|
+
console.log(chalk_1.default.gray('Enable with: oflow --sandbox'));
|
|
317
|
+
console.log('');
|
|
318
|
+
return true;
|
|
319
|
+
}
|
|
320
|
+
function showSkills(subCommand) {
|
|
321
|
+
console.log(chalk_1.default.bold('\nSkills System:'));
|
|
322
|
+
console.log('');
|
|
323
|
+
if (subCommand === 'list' || !subCommand) {
|
|
324
|
+
console.log('Skills allow extending oflow with specialized capabilities.');
|
|
325
|
+
console.log('');
|
|
326
|
+
console.log(chalk_1.default.bold('Available Skill Categories:'));
|
|
327
|
+
console.log(' • Document Processing (pdf, docx, pptx)');
|
|
328
|
+
console.log(' • Creative Tools (algorithmic-art, canvas-design)');
|
|
329
|
+
console.log(' • Development Tools (mcp-builder, skill-creator)');
|
|
330
|
+
console.log('');
|
|
331
|
+
console.log(chalk_1.default.gray('Skills are stored in:'));
|
|
332
|
+
console.log(chalk_1.default.gray(' Global: ~/.oflow/skills/'));
|
|
333
|
+
console.log(chalk_1.default.gray(' Project: ./.oflow/skills/'));
|
|
334
|
+
}
|
|
335
|
+
else if (subCommand === 'refresh') {
|
|
336
|
+
console.log(chalk_1.default.green('✓ Skills registry refreshed.'));
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
console.log(chalk_1.default.yellow(`Unknown subcommand: ${subCommand}`));
|
|
340
|
+
console.log(chalk_1.default.gray('Usage: /skills [list|refresh]'));
|
|
341
|
+
}
|
|
342
|
+
console.log('');
|
|
343
|
+
return true;
|
|
344
|
+
}
|
|
345
|
+
function showMCPInfo() {
|
|
346
|
+
console.log(chalk_1.default.bold('\nMCP (Model Context Protocol) Status:'));
|
|
347
|
+
console.log('');
|
|
348
|
+
console.log('MCP allows extending oflow with external tool servers.');
|
|
349
|
+
console.log('');
|
|
350
|
+
console.log(chalk_1.default.bold('Configuration:'));
|
|
351
|
+
console.log(chalk_1.default.gray('Add servers to ~/.oflow/settings.json:'));
|
|
352
|
+
console.log('');
|
|
353
|
+
console.log(chalk_1.default.cyan(`{
|
|
354
|
+
"mcpServers": {
|
|
355
|
+
"my_server": {
|
|
356
|
+
"command": "npx",
|
|
357
|
+
"args": ["-y", "my-mcp-server"]
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}`));
|
|
361
|
+
console.log('');
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
function showMemory() {
|
|
365
|
+
console.log(chalk_1.default.bold('\nSaved Memories:'));
|
|
366
|
+
console.log('');
|
|
367
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
368
|
+
const memoryFile = path.join(homeDir, '.oflow', 'memory.json');
|
|
369
|
+
try {
|
|
370
|
+
if (fs.existsSync(memoryFile)) {
|
|
371
|
+
const content = fs.readFileSync(memoryFile, 'utf-8');
|
|
372
|
+
const memories = JSON.parse(content);
|
|
373
|
+
if (memories.length === 0) {
|
|
374
|
+
console.log(chalk_1.default.gray('No memories saved.'));
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
memories.forEach((m, i) => {
|
|
378
|
+
console.log(`${i + 1}. ${chalk_1.default.white(m.fact)}`);
|
|
379
|
+
console.log(` ${chalk_1.default.gray(new Date(m.createdAt).toLocaleString())}`);
|
|
380
|
+
console.log('');
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
console.log(chalk_1.default.gray('No memories saved.'));
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
catch {
|
|
389
|
+
console.log(chalk_1.default.yellow('Could not read memory file.'));
|
|
390
|
+
}
|
|
391
|
+
console.log('');
|
|
392
|
+
return true;
|
|
393
|
+
}
|
|
394
|
+
async function generateCommit(context) {
|
|
395
|
+
console.log(chalk_1.default.cyan('\nGenerating commit message...'));
|
|
396
|
+
console.log('');
|
|
397
|
+
// 检查是否是git仓库
|
|
398
|
+
const gitDir = path.join(process.cwd(), '.git');
|
|
399
|
+
if (!fs.existsSync(gitDir)) {
|
|
400
|
+
console.log(chalk_1.default.yellow('Not a git repository.'));
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
const commitPrompt = `Please analyze the current git repository state and generate an appropriate commit message.
|
|
404
|
+
|
|
405
|
+
Working directory: ${process.cwd()}
|
|
406
|
+
|
|
407
|
+
Steps:
|
|
408
|
+
1. Run 'git status' to see changed files
|
|
409
|
+
2. Run 'git diff --staged' to see staged changes (if any)
|
|
410
|
+
3. Run 'git diff' to see unstaged changes
|
|
411
|
+
4. Generate a clear, concise commit message following conventional commit format
|
|
412
|
+
|
|
413
|
+
Provide the commit message as your response.`;
|
|
414
|
+
try {
|
|
415
|
+
await context.conversation.sendMessage(commitPrompt);
|
|
416
|
+
}
|
|
417
|
+
catch (error) {
|
|
418
|
+
console.log(chalk_1.default.red('Error generating commit message.'));
|
|
419
|
+
}
|
|
420
|
+
return true;
|
|
421
|
+
}
|
|
422
|
+
async function reviewCode(context) {
|
|
423
|
+
console.log(chalk_1.default.cyan('\nReviewing recent changes...'));
|
|
424
|
+
console.log('');
|
|
425
|
+
// 检查是否是git仓库
|
|
426
|
+
const gitDir = path.join(process.cwd(), '.git');
|
|
427
|
+
if (!fs.existsSync(gitDir)) {
|
|
428
|
+
console.log(chalk_1.default.yellow('Not a git repository.'));
|
|
429
|
+
return true;
|
|
430
|
+
}
|
|
431
|
+
const reviewPrompt = `Please review the recent code changes in this repository.
|
|
432
|
+
|
|
433
|
+
Working directory: ${process.cwd()}
|
|
434
|
+
|
|
435
|
+
Steps:
|
|
436
|
+
1. Run 'git log -5 --oneline' to see recent commits
|
|
437
|
+
2. Run 'git diff HEAD~1 HEAD' to see the latest changes
|
|
438
|
+
3. Review the code for:
|
|
439
|
+
- Potential bugs
|
|
440
|
+
- Security vulnerabilities
|
|
441
|
+
- Code style issues
|
|
442
|
+
- Performance concerns
|
|
443
|
+
- Best practice violations
|
|
444
|
+
|
|
445
|
+
Provide a structured review with specific findings and suggestions.`;
|
|
446
|
+
try {
|
|
447
|
+
await context.conversation.sendMessage(reviewPrompt);
|
|
448
|
+
}
|
|
449
|
+
catch (error) {
|
|
450
|
+
console.log(chalk_1.default.red('Error during code review.'));
|
|
451
|
+
}
|
|
452
|
+
return true;
|
|
453
|
+
}
|
|
454
|
+
function toggleThinking(context) {
|
|
455
|
+
const newValue = context.configManager.toggleShowThinking();
|
|
456
|
+
console.log('');
|
|
457
|
+
console.log(chalk_1.default.green(`✓ Thinking process display: ${newValue ? chalk_1.default.cyan('ON') : chalk_1.default.gray('OFF')}`));
|
|
458
|
+
console.log('');
|
|
459
|
+
if (newValue) {
|
|
460
|
+
console.log(chalk_1.default.gray('The AI will now show its thinking/reasoning process (for supported models like DeepSeek Reasoner).'));
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
console.log(chalk_1.default.gray('The AI thinking process is now hidden.'));
|
|
464
|
+
}
|
|
465
|
+
return true;
|
|
466
|
+
}
|
|
467
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSx3Q0FFQztBQUVELGtEQXFFQztBQXJGRCxrREFBMEI7QUFDMUIseUNBQXFIO0FBRXJILHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFRN0IsU0FBZ0IsY0FBYyxDQUFDLEtBQWE7SUFDMUMsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFTSxLQUFLLFVBQVUsbUJBQW1CLENBQ3ZDLEtBQWEsRUFDYixPQUF1QjtJQUV2QixNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWpDLFFBQVEsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDOUIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxRQUFRLEVBQUUsQ0FBQztRQUVwQixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxJQUFJO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFFZixLQUFLLFFBQVE7WUFDWCxPQUFPLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBDLEtBQUssT0FBTztZQUNWLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlCLEtBQUssUUFBUTtZQUNYLE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1QyxLQUFLLFNBQVM7WUFDWixPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QixLQUFLLFFBQVE7WUFDWCxPQUFPLFdBQVcsQ0FBQyxP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LENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uLCBDb25maWdNYW5hZ2VyLCBBZ2VudEZhY3RvcnksIEFHRU5UX0RFRklOSVRJT05TLCBjcmVhdGVTYW5kYm94RXhlY3V0b3IgfSBmcm9tICdAb2Zsb3ctYWkvY29yZSc7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tICdyZWFkbGluZSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRDb250ZXh0IHtcbiAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XG4gIHJsOiByZWFkbGluZS5JbnRlcmZhY2U7XG4gIGNvbmZpZ01hbmFnZXI6IENvbmZpZ01hbmFnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NsYXNoQ29tbWFuZChpbnB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpbnB1dC5zdGFydHNXaXRoKCcvJyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlU2xhc2hDb21tYW5kKFxuICBpbnB1dDogc3RyaW5nLFxuICBjb250ZXh0OiBDb21tYW5kQ29udGV4dFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IGlucHV0LnNwbGl0KCcgJyk7XG4gIGNvbnN0IGFyZ1N0cmluZyA9IGFyZ3Muam9pbignICcpO1xuXG4gIHN3aXRjaCAoY29tbWFuZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnL2hlbHAnOlxuICAgICAgcmV0dXJuIHNob3dIZWxwKCk7XG4gICAgXG4gICAgY2FzZSAnL2V4aXQnOlxuICAgIGNhc2UgJy9xdWl0JzpcbiAgICBjYXNlICcvcSc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgY2FzZSAnL2NsZWFyJzpcbiAgICAgIHJldHVybiBjbGVhckNvbnZlcnNhdGlvbihjb250ZXh0KTtcbiAgICBcbiAgICBjYXNlICcvaW5pdCc6XG4gICAgICByZXR1cm4gaW5pdFByb2plY3QoY29udGV4dCk7XG4gICAgXG4gICAgY2FzZSAnL21vZGVsJzpcbiAgICAgIHJldHVybiBzaG93T3JTZXRNb2RlbChhcmdTdHJpbmcsIGNvbnRleHQpO1xuICAgIFxuICAgIGNhc2UgJy9jb25maWcnOlxuICAgICAgcmV0dXJuIHNob3dDb25maWcoY29udGV4dCk7XG4gICAgXG4gICAgY2FzZSAnL3Jlc2V0JzpcbiAgICAgIHJldHVybiByZXNldENvbmZpZyhjb250ZXh0KTtcbiAgICBcbiAgICBjYXNlICcvaGlzdG9yeSc6XG4gICAgICByZXR1cm4gc2hvd0hpc3RvcnkoY29udGV4dCk7XG4gICAgXG4gICAgY2FzZSAnL3Rvb2xzJzpcbiAgICAgIHJldHVybiBzaG93VG9vbHMoKTtcbiAgICBcbiAgICBjYXNlICcvdmVyc2lvbic6XG4gICAgICByZXR1cm4gc2hvd1ZlcnNpb24oKTtcbiAgICBcbiAgICBjYXNlICcvYWdlbnRzJzpcbiAgICAgIHJldHVybiBzaG93QWdlbnRzKCk7XG4gICAgXG4gICAgY2FzZSAnL3NhbmRib3gnOlxuICAgICAgcmV0dXJuIHNob3dTYW5kYm94SW5mbygpO1xuICAgIFxuICAgIGNhc2UgJy9za2lsbHMnOlxuICAgICAgcmV0dXJuIHNob3dTa2lsbHMoYXJnU3RyaW5nKTtcbiAgICBcbiAgICBjYXNlICcvbWNwJzpcbiAgICAgIHJldHVybiBzaG93TUNQSW5mbygpO1xuICAgIFxuICAgIGNhc2UgJy9tZW1vcnknOlxuICAgICAgcmV0dXJuIHNob3dNZW1vcnkoKTtcbiAgICBcbiAgICBjYXNlICcvY29tbWl0JzpcbiAgICAgIHJldHVybiBnZW5lcmF0ZUNvbW1pdChjb250ZXh0KTtcbiAgICBcbiAgICBjYXNlICcvcmV2aWV3JzpcbiAgICAgIHJldHVybiByZXZpZXdDb2RlKGNvbnRleHQpO1xuICAgIFxuICAgIGNhc2UgJy90aGlua2luZyc6XG4gICAgICByZXR1cm4gdG9nZ2xlVGhpbmtpbmcoY29udGV4dCk7XG4gICAgXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmR9YCkpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVHlwZSAvaGVscCBmb3IgYXZhaWxhYmxlIGNvbW1hbmRzLicpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3dIZWxwKCk6IGJvb2xlYW4ge1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ0F2YWlsYWJsZSBDb21tYW5kczonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgIHsgY21kOiAnL2hlbHAnLCBkZXNjOiAnU2hvdyB0aGlzIGhlbHAgbWVzc2FnZScgfSxcbiAgICB7IGNtZDogJy9leGl0LCAvcXVpdCwgL3EnLCBkZXNjOiAnRXhpdCBvZmxvdyBDTEknIH0sXG4gICAgeyBjbWQ6ICcvY2xlYXInLCBkZXNjOiAnQ2xlYXIgY29udmVyc2F0aW9uIGhpc3RvcnknIH0sXG4gICAgeyBjbWQ6ICcvaW5pdCcsIGRlc2M6ICdBbmFseXplIGFuZCBpbml0aWFsaXplIGN1cnJlbnQgcHJvamVjdCcgfSxcbiAgICB7IGNtZDogJy9tb2RlbCBbbmFtZV0nLCBkZXNjOiAnU2hvdyBvciBzZXQgdGhlIGN1cnJlbnQgbW9kZWwnIH0sXG4gICAgeyBjbWQ6ICcvdGhpbmtpbmcnLCBkZXNjOiAnVG9nZ2xlIHRoaW5raW5nIHByb2Nlc3MgZGlzcGxheSAoT04vT0ZGKScgfSxcbiAgICB7IGNtZDogJy9jb25maWcnLCBkZXNjOiAnU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb24nIH0sXG4gICAgeyBjbWQ6ICcvcmVzZXQnLCBkZXNjOiAnUmVzZXQgY29uZmlndXJhdGlvbiB0byBkZWZhdWx0cycgfSxcbiAgICB7IGNtZDogJy9oaXN0b3J5JywgZGVzYzogJ1Nob3cgY29udmVyc2F0aW9uIGhpc3RvcnknIH0sXG4gICAgeyBjbWQ6ICcvdG9vbHMnLCBkZXNjOiAnTGlzdCBhdmFpbGFibGUgdG9vbHMnIH0sXG4gICAgeyBjbWQ6ICcvYWdlbnRzJywgZGVzYzogJ0xpc3QgYXZhaWxhYmxlIHN1Yi1hZ2VudHMnIH0sXG4gICAgeyBjbWQ6ICcvc2FuZGJveCcsIGRlc2M6ICdTaG93IHNhbmRib3ggc3RhdHVzJyB9LFxuICAgIHsgY21kOiAnL3NraWxscyBbbGlzdHxyZWZyZXNoXScsIGRlc2M6ICdNYW5hZ2Ugc2tpbGxzJyB9LFxuICAgIHsgY21kOiAnL21jcCcsIGRlc2M6ICdTaG93IE1DUCBzZXJ2ZXIgc3RhdHVzJyB9LFxuICAgIHsgY21kOiAnL21lbW9yeScsIGRlc2M6ICdTaG93IHNhdmVkIG1lbW9yaWVzJyB9LFxuICAgIHsgY21kOiAnL2NvbW1pdCcsIGRlc2M6ICdHZW5lcmF0ZSBjb21taXQgbWVzc2FnZScgfSxcbiAgICB7IGNtZDogJy9yZXZpZXcnLCBkZXNjOiAnUmV2aWV3IHJlY2VudCBjb2RlIGNoYW5nZXMnIH0sXG4gICAgeyBjbWQ6ICcvdmVyc2lvbicsIGRlc2M6ICdTaG93IHZlcnNpb24gaW5mb3JtYXRpb24nIH1cbiAgXTtcblxuICBjb21tYW5kcy5mb3JFYWNoKCh7IGNtZCwgZGVzYyB9KSA9PiB7XG4gICAgY29uc29sZS5sb2coYCAgJHtjaGFsay5jeWFuKGNtZC5wYWRFbmQoMjApKX0gJHtjaGFsay5ncmF5KGRlc2MpfWApO1xuICB9KTtcblxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1NwZWNpYWwgU3ludGF4OicpKTtcbiAgY29uc29sZS5sb2coYCAgJHtjaGFsay5jeWFuKCchY29tbWFuZCcpfSAgICAke2NoYWxrLmdyYXkoJ0V4ZWN1dGUgYSBzaGVsbCBjb21tYW5kJyl9YCk7XG4gIGNvbnNvbGUubG9nKGAgICR7Y2hhbGsuY3lhbignQGZpbGVwYXRoJyl9ICAgJHtjaGFsay5ncmF5KCdSZWZlcmVuY2UgYSBmaWxlIGluIHlvdXIgbWVzc2FnZScpfWApO1xuICBjb25zb2xlLmxvZyhgICAke2NoYWxrLmN5YW4oJyRhZ2VudCcpfSAgICAgICR7Y2hhbGsuZ3JheSgnQ2FsbCBhIHN1Yi1hZ2VudCAoZS5nLiwgJGV4cGxvcmUtYWdlbnQgXCJ0YXNrXCIpJyl9YCk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjbGVhckNvbnZlcnNhdGlvbihjb250ZXh0OiBDb21tYW5kQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb250ZXh0LmNvbnZlcnNhdGlvbi5jbGVhcigpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbign4pyTIENvbnZlcnNhdGlvbiBoaXN0b3J5IGNsZWFyZWQuJykpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5pdFByb2plY3QoY29udGV4dDogQ29tbWFuZENvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IHByb2plY3ROYW1lID0gcGF0aC5iYXNlbmFtZSh3b3JraW5nRGlyKTtcbiAgXG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFxcbkFuYWx5emluZyBwcm9qZWN0OiAke3Byb2plY3ROYW1lfVxcbmApKTtcbiAgXG4gIC8vIENoZWNrIGZvciBjb21tb24gcHJvamVjdCBmaWxlc1xuICBjb25zdCBjaGVja3MgPSBbXG4gICAgeyBmaWxlOiAncGFja2FnZS5qc29uJywgdHlwZTogJ05vZGUuanMnIH0sXG4gICAgeyBmaWxlOiAndHNjb25maWcuanNvbicsIHR5cGU6ICdUeXBlU2NyaXB0JyB9LFxuICAgIHsgZmlsZTogJ3B5cHJvamVjdC50b21sJywgdHlwZTogJ1B5dGhvbiAobW9kZXJuKScgfSxcbiAgICB7IGZpbGU6ICdyZXF1aXJlbWVudHMudHh0JywgdHlwZTogJ1B5dGhvbicgfSxcbiAgICB7IGZpbGU6ICdDYXJnby50b21sJywgdHlwZTogJ1J1c3QnIH0sXG4gICAgeyBmaWxlOiAnZ28ubW9kJywgdHlwZTogJ0dvJyB9LFxuICAgIHsgZmlsZTogJ3BvbS54bWwnLCB0eXBlOiAnSmF2YSAoTWF2ZW4pJyB9LFxuICAgIHsgZmlsZTogJ2J1aWxkLmdyYWRsZScsIHR5cGU6ICdKYXZhIChHcmFkbGUpJyB9LFxuICAgIHsgZmlsZTogJy5naXQnLCB0eXBlOiAnR2l0IHJlcG9zaXRvcnknIH1cbiAgXTtcblxuICBjb25zdCBkZXRlY3RlZDogc3RyaW5nW10gPSBbXTtcbiAgXG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4od29ya2luZ0RpciwgY2hlY2suZmlsZSk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICBkZXRlY3RlZC5wdXNoKGNoZWNrLnR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZXRlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnRGV0ZWN0ZWQgcHJvamVjdCB0eXBlczonKSk7XG4gICAgZGV0ZWN0ZWQuZm9yRWFjaCh0ID0+IGNvbnNvbGUubG9nKGAgIOKAoiAke3R9YCkpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnTm8gcmVjb2duaXplZCBwcm9qZWN0IHR5cGUgZGV0ZWN0ZWQuJykpO1xuICB9XG5cbiAgLy8gTGlzdCB0b3AtbGV2ZWwgZmlsZXMgYW5kIGRpcmVjdG9yaWVzXG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcblByb2plY3Qgc3RydWN0dXJlOicpKTtcbiAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKHdvcmtpbmdEaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgZW50cmllcy5zbGljZSgwLCAyMCkuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgY29uc3QgcHJlZml4ID0gZW50cnkuaXNEaXJlY3RvcnkoKSA/ICfwn5OBICcgOiAn8J+ThCAnO1xuICAgIGNvbnNvbGUubG9nKGAgICR7cHJlZml4fSR7ZW50cnkubmFtZX1gKTtcbiAgfSk7XG5cbiAgaWYgKGVudHJpZXMubGVuZ3RoID4gMjApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGAgIC4uLiBhbmQgJHtlbnRyaWVzLmxlbmd0aCAtIDIwfSBtb3JlIGl0ZW1zYCkpO1xuICB9XG5cbiAgY29uc29sZS5sb2coJycpO1xuXG4gIC8vIEFkZCBpbml0IGNvbnRleHQgdG8gY29udmVyc2F0aW9uXG4gIGNvbnN0IGluaXRNZXNzYWdlID0gYFBsZWFzZSBhbmFseXplIHRoZSBjdXJyZW50IHByb2plY3Qgc3RydWN0dXJlIGFuZCBwcm92aWRlOlxuMS4gQSBicmllZiBvdmVydmlldyBvZiB0aGUgcHJvamVjdCB0eXBlIGFuZCBwdXJwb3NlXG4yLiBLZXkgZmlsZXMgYW5kIHRoZWlyIHJvbGVzXG4zLiBTdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnRzIG9yIGJlc3QgcHJhY3RpY2VzXG5cbldvcmtpbmcgZGlyZWN0b3J5OiAke3dvcmtpbmdEaXJ9XG5EZXRlY3RlZCB0eXBlczogJHtkZXRlY3RlZC5qb2luKCcsICcpfWA7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjb250ZXh0LmNvbnZlcnNhdGlvbi5zZW5kTWVzc2FnZShpbml0TWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdFcnJvciBkdXJpbmcgYW5hbHlzaXMuJykpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNob3dPclNldE1vZGVsKG1vZGVsTmFtZTogc3RyaW5nLCBjb250ZXh0OiBDb21tYW5kQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAobW9kZWxOYW1lKSB7XG4gICAgY29udGV4dC5jb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChtb2RlbE5hbWUpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgTW9kZWwgc2V0IHRvOiAke21vZGVsTmFtZX1gKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY3VycmVudE1vZGVsID0gY29udGV4dC5jb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYEN1cnJlbnQgbW9kZWw6ICR7Y3VycmVudE1vZGVsfWApKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgY29uc29sZS5sb2coJ0F2YWlsYWJsZSBtb2RlbHM6Jyk7XG4gICAgY29uc3QgbW9kZWxzID0gWydncHQtNG8nLCAnZ3B0LTRvLW1pbmknLCAnZ3B0LTQtdHVyYm8nLCAnZ3B0LTMuNS10dXJibycsICdvMS1wcmV2aWV3JywgJ28xLW1pbmknXTtcbiAgICBtb2RlbHMuZm9yRWFjaChtID0+IHtcbiAgICAgIGlmIChtID09PSBjdXJyZW50TW9kZWwpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYCAgKiAke219IChjdXJyZW50KWApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICAgJHttfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzaG93Q29uZmlnKGNvbnRleHQ6IENvbW1hbmRDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvbmZpZyA9IGNvbnRleHQuY29uZmlnTWFuYWdlci5nZXRBbGwoKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuQ3VycmVudCBDb25maWd1cmF0aW9uOicpKTtcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgQ29uZmlnIGZpbGU6ICR7Y29udGV4dC5jb25maWdNYW5hZ2VyLmdldENvbmZpZ1BhdGgoKX1gKSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXNldENvbmZpZyhjb250ZXh0OiBDb21tYW5kQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb250ZXh0LmNvbmZpZ01hbmFnZXIuY2xlYXIoKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBDb25maWd1cmF0aW9uIHJlc2V0IHRvIGRlZmF1bHRzLicpKTtcbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdZb3Ugd2lsbCBuZWVkIHRvIHJ1biBgb2Zsb3cgYXV0aGAgdG8gcmVjb25maWd1cmUgYXV0aGVudGljYXRpb24uJykpO1xuICByZXR1cm4gZmFsc2U7IC8vIEV4aXQgdG8gZm9yY2UgcmUtYXV0aFxufVxuXG5mdW5jdGlvbiBzaG93SGlzdG9yeShjb250ZXh0OiBDb21tYW5kQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb25zdCBtZXNzYWdlcyA9IGNvbnRleHQuY29udmVyc2F0aW9uLmdldE1lc3NhZ2VzKCk7XG4gIFxuICBpZiAobWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnTm8gY29udmVyc2F0aW9uIGhpc3RvcnkuJykpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuQ29udmVyc2F0aW9uIEhpc3Rvcnk6JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBtZXNzYWdlcy5mb3JFYWNoKChtc2csIGluZGV4KSA9PiB7XG4gICAgaWYgKG1zZy5yb2xlID09PSAnc3lzdGVtJykgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHJvbGVDb2xvcnM6IFJlY29yZDxzdHJpbmcsIGNoYWxrLkNoYWxrPiA9IHtcbiAgICAgIHVzZXI6IGNoYWxrLmdyZWVuLFxuICAgICAgYXNzaXN0YW50OiBjaGFsay5ibHVlLFxuICAgICAgdG9vbDogY2hhbGsuZ3JheVxuICAgIH07XG4gICAgXG4gICAgY29uc3QgY29sb3IgPSByb2xlQ29sb3JzW21zZy5yb2xlXSB8fCBjaGFsay53aGl0ZTtcbiAgICBjb25zdCBwcmV2aWV3ID0gdHlwZW9mIG1zZy5jb250ZW50ID09PSAnc3RyaW5nJyBcbiAgICAgID8gbXNnLmNvbnRlbnQuc3Vic3RyaW5nKDAsIDEwMCkgKyAobXNnLmNvbnRlbnQubGVuZ3RoID4gMTAwID8gJy4uLicgOiAnJylcbiAgICAgIDogJ1tjb21wbGV4IGNvbnRlbnRdJztcbiAgICBcbiAgICBjb25zb2xlLmxvZyhgJHtpbmRleH0uICR7Y29sb3IobXNnLnJvbGUpfTogJHtwcmV2aWV3fWApO1xuICB9KTtcblxuICBjb25zb2xlLmxvZygnJyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzaG93VG9vbHMoKTogYm9vbGVhbiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbkF2YWlsYWJsZSBUb29sczonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIGNvbnN0IHRvb2xzID0gW1xuICAgIHsgbmFtZTogJ3JlYWRfZmlsZScsIGRlc2M6ICdSZWFkIGZpbGUgY29udGVudHMnIH0sXG4gICAgeyBuYW1lOiAnd3JpdGVfZmlsZScsIGRlc2M6ICdXcml0ZSB0byBmaWxlcycgfSxcbiAgICB7IG5hbWU6ICdsaXN0X2RpcmVjdG9yeScsIGRlc2M6ICdMaXN0IGRpcmVjdG9yeSBjb250ZW50cycgfSxcbiAgICB7IG5hbWU6ICdnbG9iJywgZGVzYzogJ0ZpbmQgZmlsZXMgYnkgcGF0dGVybicgfSxcbiAgICB7IG5hbWU6ICdzZWFyY2hfZmlsZV9jb250ZW50JywgZGVzYzogJ1NlYXJjaCB3aXRoaW4gZmlsZXMnIH0sXG4gICAgeyBuYW1lOiAncnVuX3NoZWxsX2NvbW1hbmQnLCBkZXNjOiAnRXhlY3V0ZSBzaGVsbCBjb21tYW5kcycgfSxcbiAgICB7IG5hbWU6ICd3ZWJfc2VhcmNoJywgZGVzYzogJ1NlYXJjaCB0aGUgd2ViJyB9LFxuICAgIHsgbmFtZTogJ3dlYl9mZXRjaCcsIGRlc2M6ICdGZXRjaCB3ZWIgY29udGVudCcgfSxcbiAgICB7IG5hbWU6ICdyZXBsYWNlJywgZGVzYzogJ1JlcGxhY2UgdGV4dCBpbiBmaWxlcycgfSxcbiAgICB7IG5hbWU6ICdpbWFnZV9yZWFkJywgZGVzYzogJ0FuYWx5emUgaW1hZ2VzIHdpdGggVkwgbW9kZWxzJyB9LFxuICAgIHsgbmFtZTogJ3BkZl9leHRyYWN0JywgZGVzYzogJ0V4dHJhY3QgY29udGVudCBmcm9tIFBERnMnIH0sXG4gICAgeyBuYW1lOiAnYXNrX3VzZXJfcXVlc3Rpb24nLCBkZXNjOiAnQXNrIHVzZXIgZm9yIGlucHV0JyB9LFxuICAgIHsgbmFtZTogJ3Rhc2snLCBkZXNjOiAnTGF1bmNoIHN1Yi1hZ2VudHMnIH0sXG4gICAgeyBuYW1lOiAnc2F2ZV9tZW1vcnknLCBkZXNjOiAnU2F2ZSBpbmZvcm1hdGlvbiBmb3IgZnV0dXJlJyB9XG4gIF07XG5cbiAgdG9vbHMuZm9yRWFjaCgoeyBuYW1lLCBkZXNjIH0pID0+IHtcbiAgICBjb25zb2xlLmxvZyhgICAke2NoYWxrLmN5YW4obmFtZS5wYWRFbmQoMjApKX0gJHtjaGFsay5ncmF5KGRlc2MpfWApO1xuICB9KTtcblxuICBjb25zb2xlLmxvZygnJyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzaG93VmVyc2lvbigpOiBib29sZWFuIHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ3BhY2thZ2UuanNvbicpO1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgb2Zsb3cgQ0xJIHYke3BhY2thZ2VKc29uLnZlcnNpb259YCkpO1xuICB9IGNhdGNoIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdvZmxvdyBDTEkgKHZlcnNpb24gdW5rbm93biknKSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNob3dBZ2VudHMoKTogYm9vbGVhbiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbkF2YWlsYWJsZSBTdWItQWdlbnRzOicpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgY29uc3QgYWdlbnRzID0gT2JqZWN0LnZhbHVlcyhBR0VOVF9ERUZJTklUSU9OUyk7XG4gIGFnZW50cy5mb3JFYWNoKGFnZW50ID0+IHtcbiAgICBjb25zb2xlLmxvZyhgICAke2NoYWxrLmN5YW4oYCQke2FnZW50LnR5cGV9YCl9YCk7XG4gICAgY29uc29sZS5sb2coYCAgICAke2NoYWxrLmdyYXkoYWdlbnQuZGVzY3JpcHRpb24pfWApO1xuICAgIGNvbnNvbGUubG9nKGAgICAgVG9vbHM6ICR7YWdlbnQuYWxsb3dlZFRvb2xzID09PSAnKicgPyAnYWxsJyA6IGFnZW50LmFsbG93ZWRUb29scy5qb2luKCcsICcpfWApO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfSk7XG5cbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVXNhZ2U6ICRhZ2VudC10eXBlIFwieW91ciB0YXNrIGhlcmVcIicpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd1NhbmRib3hJbmZvKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5TYW5kYm94IFN0YXR1czonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgYmFja2VuZCA9IGF3YWl0IGNyZWF0ZVNhbmRib3hFeGVjdXRvcigpO1xuICAgIGNvbnNvbGUubG9nKGAgIEJhY2tlbmQ6ICR7Y2hhbGsuY3lhbihiYWNrZW5kID8gJ2F2YWlsYWJsZScgOiAndW5hdmFpbGFibGUnKX1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBNb2RlOiAke2NoYWxrLmN5YW4oYmFja2VuZCA/IGJhY2tlbmRbJ2NvbmZpZyddPy5iYWNrZW5kIHx8ICdub25lJyA6ICdub25lJyl9YCk7XG4gIH0gY2F0Y2gge1xuICAgIGNvbnNvbGUubG9nKCcgIEJhY2tlbmQ6ICcgKyBjaGFsay55ZWxsb3coJ25vdCBhdmFpbGFibGUnKSk7XG4gIH1cblxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0VuYWJsZSB3aXRoOiBvZmxvdyAtLXNhbmRib3gnKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNob3dTa2lsbHMoc3ViQ29tbWFuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcblNraWxscyBTeXN0ZW06JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBpZiAoc3ViQ29tbWFuZCA9PT0gJ2xpc3QnIHx8ICFzdWJDb21tYW5kKSB7XG4gICAgY29uc29sZS5sb2coJ1NraWxscyBhbGxvdyBleHRlbmRpbmcgb2Zsb3cgd2l0aCBzcGVjaWFsaXplZCBjYXBhYmlsaXRpZXMuJyk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ0F2YWlsYWJsZSBTa2lsbCBDYXRlZ29yaWVzOicpKTtcbiAgICBjb25zb2xlLmxvZygnICDigKIgRG9jdW1lbnQgUHJvY2Vzc2luZyAocGRmLCBkb2N4LCBwcHR4KScpO1xuICAgIGNvbnNvbGUubG9nKCcgIOKAoiBDcmVhdGl2ZSBUb29scyAoYWxnb3JpdGhtaWMtYXJ0LCBjYW52YXMtZGVzaWduKScpO1xuICAgIGNvbnNvbGUubG9nKCcgIOKAoiBEZXZlbG9wbWVudCBUb29scyAobWNwLWJ1aWxkZXIsIHNraWxsLWNyZWF0b3IpJyk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1NraWxscyBhcmUgc3RvcmVkIGluOicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIEdsb2JhbDogfi8ub2Zsb3cvc2tpbGxzLycpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFByb2plY3Q6IC4vLm9mbG93L3NraWxscy8nKSk7XG4gIH0gZWxzZSBpZiAoc3ViQ29tbWFuZCA9PT0gJ3JlZnJlc2gnKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBTa2lsbHMgcmVnaXN0cnkgcmVmcmVzaGVkLicpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYFVua25vd24gc3ViY29tbWFuZDogJHtzdWJDb21tYW5kfWApKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdVc2FnZTogL3NraWxscyBbbGlzdHxyZWZyZXNoXScpKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNob3dNQ1BJbmZvKCk6IGJvb2xlYW4ge1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5NQ1AgKE1vZGVsIENvbnRleHQgUHJvdG9jb2wpIFN0YXR1czonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIGNvbnNvbGUubG9nKCdNQ1AgYWxsb3dzIGV4dGVuZGluZyBvZmxvdyB3aXRoIGV4dGVybmFsIHRvb2wgc2VydmVycy4nKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdDb25maWd1cmF0aW9uOicpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnQWRkIHNlcnZlcnMgdG8gfi8ub2Zsb3cvc2V0dGluZ3MuanNvbjonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuY3lhbihge1xuICBcIm1jcFNlcnZlcnNcIjoge1xuICAgIFwibXlfc2VydmVyXCI6IHtcbiAgICAgIFwiY29tbWFuZFwiOiBcIm5weFwiLFxuICAgICAgXCJhcmdzXCI6IFtcIi15XCIsIFwibXktbWNwLXNlcnZlclwiXVxuICAgIH1cbiAgfVxufWApKTtcbiAgY29uc29sZS5sb2coJycpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2hvd01lbW9yeSgpOiBib29sZWFuIHtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuU2F2ZWQgTWVtb3JpZXM6JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBjb25zdCBob21lRGlyID0gcHJvY2Vzcy5lbnYuSE9NRSB8fCBwcm9jZXNzLmVudi5VU0VSUFJPRklMRSB8fCAnJztcbiAgY29uc3QgbWVtb3J5RmlsZSA9IHBhdGguam9pbihob21lRGlyLCAnLm9mbG93JywgJ21lbW9yeS5qc29uJyk7XG4gIFxuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKG1lbW9yeUZpbGUpKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKG1lbW9yeUZpbGUsICd1dGYtOCcpO1xuICAgICAgY29uc3QgbWVtb3JpZXMgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgXG4gICAgICBpZiAobWVtb3JpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ05vIG1lbW9yaWVzIHNhdmVkLicpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lbW9yaWVzLmZvckVhY2goKG06IHsgZmFjdDogc3RyaW5nOyBjcmVhdGVkQXQ6IHN0cmluZyB9LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgJHtpICsgMX0uICR7Y2hhbGsud2hpdGUobS5mYWN0KX1gKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAgJHtjaGFsay5ncmF5KG5ldyBEYXRlKG0uY3JlYXRlZEF0KS50b0xvY2FsZVN0cmluZygpKX1gKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdObyBtZW1vcmllcyBzYXZlZC4nKSk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ0NvdWxkIG5vdCByZWFkIG1lbW9yeSBmaWxlLicpKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQ29tbWl0KGNvbnRleHQ6IENvbW1hbmRDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ1xcbkdlbmVyYXRpbmcgY29tbWl0IG1lc3NhZ2UuLi4nKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIC8vIOajgOafpeaYr+WQpuaYr2dpdOS7k+W6k1xuICBjb25zdCBnaXREaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5naXQnKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGdpdERpcikpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ05vdCBhIGdpdCByZXBvc2l0b3J5LicpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1pdFByb21wdCA9IGBQbGVhc2UgYW5hbHl6ZSB0aGUgY3VycmVudCBnaXQgcmVwb3NpdG9yeSBzdGF0ZSBhbmQgZ2VuZXJhdGUgYW4gYXBwcm9wcmlhdGUgY29tbWl0IG1lc3NhZ2UuXG5cbldvcmtpbmcgZGlyZWN0b3J5OiAke3Byb2Nlc3MuY3dkKCl9XG5cblN0ZXBzOlxuMS4gUnVuICdnaXQgc3RhdHVzJyB0byBzZWUgY2hhbmdlZCBmaWxlc1xuMi4gUnVuICdnaXQgZGlmZiAtLXN0YWdlZCcgdG8gc2VlIHN0YWdlZCBjaGFuZ2VzIChpZiBhbnkpXG4zLiBSdW4gJ2dpdCBkaWZmJyB0byBzZWUgdW5zdGFnZWQgY2hhbmdlc1xuNC4gR2VuZXJhdGUgYSBjbGVhciwgY29uY2lzZSBjb21taXQgbWVzc2FnZSBmb2xsb3dpbmcgY29udmVudGlvbmFsIGNvbW1pdCBmb3JtYXRcblxuUHJvdmlkZSB0aGUgY29tbWl0IG1lc3NhZ2UgYXMgeW91ciByZXNwb25zZS5gO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29udGV4dC5jb252ZXJzYXRpb24uc2VuZE1lc3NhZ2UoY29tbWl0UHJvbXB0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ0Vycm9yIGdlbmVyYXRpbmcgY29tbWl0IG1lc3NhZ2UuJykpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldmlld0NvZGUoY29udGV4dDogQ29tbWFuZENvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc29sZS5sb2coY2hhbGsuY3lhbignXFxuUmV2aWV3aW5nIHJlY2VudCBjaGFuZ2VzLi4uJykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICAvLyDmo4Dmn6XmmK/lkKbmmK9naXTku5PlupNcbiAgY29uc3QgZ2l0RGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuZ2l0Jyk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhnaXREaXIpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdOb3QgYSBnaXQgcmVwb3NpdG9yeS4nKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCByZXZpZXdQcm9tcHQgPSBgUGxlYXNlIHJldmlldyB0aGUgcmVjZW50IGNvZGUgY2hhbmdlcyBpbiB0aGlzIHJlcG9zaXRvcnkuXG5cbldvcmtpbmcgZGlyZWN0b3J5OiAke3Byb2Nlc3MuY3dkKCl9XG5cblN0ZXBzOlxuMS4gUnVuICdnaXQgbG9nIC01IC0tb25lbGluZScgdG8gc2VlIHJlY2VudCBjb21taXRzXG4yLiBSdW4gJ2dpdCBkaWZmIEhFQUR+MSBIRUFEJyB0byBzZWUgdGhlIGxhdGVzdCBjaGFuZ2VzXG4zLiBSZXZpZXcgdGhlIGNvZGUgZm9yOlxuICAgLSBQb3RlbnRpYWwgYnVnc1xuICAgLSBTZWN1cml0eSB2dWxuZXJhYmlsaXRpZXNcbiAgIC0gQ29kZSBzdHlsZSBpc3N1ZXNcbiAgIC0gUGVyZm9ybWFuY2UgY29uY2VybnNcbiAgIC0gQmVzdCBwcmFjdGljZSB2aW9sYXRpb25zXG5cblByb3ZpZGUgYSBzdHJ1Y3R1cmVkIHJldmlldyB3aXRoIHNwZWNpZmljIGZpbmRpbmdzIGFuZCBzdWdnZXN0aW9ucy5gO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29udGV4dC5jb252ZXJzYXRpb24uc2VuZE1lc3NhZ2UocmV2aWV3UHJvbXB0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ0Vycm9yIGR1cmluZyBjb2RlIHJldmlldy4nKSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlVGhpbmtpbmcoY29udGV4dDogQ29tbWFuZENvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgbmV3VmFsdWUgPSBjb250ZXh0LmNvbmZpZ01hbmFnZXIudG9nZ2xlU2hvd1RoaW5raW5nKCk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBUaGlua2luZyBwcm9jZXNzIGRpc3BsYXk6ICR7bmV3VmFsdWUgPyBjaGFsay5jeWFuKCdPTicpIDogY2hhbGsuZ3JheSgnT0ZGJyl9YCkpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBpZiAobmV3VmFsdWUpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUaGUgQUkgd2lsbCBub3cgc2hvdyBpdHMgdGhpbmtpbmcvcmVhc29uaW5nIHByb2Nlc3MgKGZvciBzdXBwb3J0ZWQgbW9kZWxzIGxpa2UgRGVlcFNlZWsgUmVhc29uZXIpLicpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUaGUgQUkgdGhpbmtpbmcgcHJvY2VzcyBpcyBub3cgaGlkZGVuLicpKTtcbiAgfVxuICBcbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
|
package/dist/index.d.ts
ADDED