liang-opencode-suite 1.0.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/PROMPT.md +368 -0
- package/README.md +106 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +82 -0
- package/dist/cli.js.map +1 -0
- package/dist/steps/check-opencode.d.ts +10 -0
- package/dist/steps/check-opencode.d.ts.map +1 -0
- package/dist/steps/check-opencode.js +52 -0
- package/dist/steps/check-opencode.js.map +1 -0
- package/dist/steps/configure-api-keys.d.ts +12 -0
- package/dist/steps/configure-api-keys.d.ts.map +1 -0
- package/dist/steps/configure-api-keys.js +45 -0
- package/dist/steps/configure-api-keys.js.map +1 -0
- package/dist/steps/install-agents.d.ts +6 -0
- package/dist/steps/install-agents.d.ts.map +1 -0
- package/dist/steps/install-agents.js +56 -0
- package/dist/steps/install-agents.js.map +1 -0
- package/dist/steps/install-commands.d.ts +6 -0
- package/dist/steps/install-commands.d.ts.map +1 -0
- package/dist/steps/install-commands.js +48 -0
- package/dist/steps/install-commands.js.map +1 -0
- package/dist/steps/install-skills.d.ts +7 -0
- package/dist/steps/install-skills.d.ts.map +1 -0
- package/dist/steps/install-skills.js +104 -0
- package/dist/steps/install-skills.js.map +1 -0
- package/dist/steps/install-superpowers.d.ts +7 -0
- package/dist/steps/install-superpowers.d.ts.map +1 -0
- package/dist/steps/install-superpowers.js +74 -0
- package/dist/steps/install-superpowers.js.map +1 -0
- package/dist/steps/select-providers.d.ts +11 -0
- package/dist/steps/select-providers.d.ts.map +1 -0
- package/dist/steps/select-providers.js +47 -0
- package/dist/steps/select-providers.js.map +1 -0
- package/dist/steps/setup-minimax-mcp.d.ts +8 -0
- package/dist/steps/setup-minimax-mcp.d.ts.map +1 -0
- package/dist/steps/setup-minimax-mcp.js +162 -0
- package/dist/steps/setup-minimax-mcp.js.map +1 -0
- package/dist/steps/verify-installation.d.ts +11 -0
- package/dist/steps/verify-installation.d.ts.map +1 -0
- package/dist/steps/verify-installation.js +108 -0
- package/dist/steps/verify-installation.js.map +1 -0
- package/dist/types.d.ts +64 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/file-writer.d.ts +9 -0
- package/dist/utils/file-writer.d.ts.map +1 -0
- package/dist/utils/file-writer.js +58 -0
- package/dist/utils/file-writer.js.map +1 -0
- package/dist/utils/git-clone.d.ts +7 -0
- package/dist/utils/git-clone.d.ts.map +1 -0
- package/dist/utils/git-clone.js +44 -0
- package/dist/utils/git-clone.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +23 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/os-utils.d.ts +20 -0
- package/dist/utils/os-utils.d.ts.map +1 -0
- package/dist/utils/os-utils.js +127 -0
- package/dist/utils/os-utils.js.map +1 -0
- package/dist/utils/paths.d.ts +14 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +38 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/validators.d.ts +23 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +63 -0
- package/dist/utils/validators.js.map +1 -0
- package/dist/wizard.d.ts +10 -0
- package/dist/wizard.d.ts.map +1 -0
- package/dist/wizard.js +347 -0
- package/dist/wizard.js.map +1 -0
- package/package.json +62 -0
- package/templates/AGENTS.md +199 -0
- package/templates/commands/commit.md +6 -0
- package/templates/commands/component.md +9 -0
- package/templates/commands/explain.md +7 -0
- package/templates/commands/review.md +7 -0
- package/templates/commands/test.md +8 -0
- package/templates/commands/vibe-select.md +147 -0
- package/templates/oh-my-openagent.json +129 -0
- package/templates/opencode.template.json +39 -0
- package/templates/skills/agent-browser/SKILL.md +25 -0
- package/templates/skills/find-skills/SKILL.md +22 -0
- package/templates/skills/frontend-design/SKILL.md +18 -0
- package/templates/skills/skill-creator/SKILL.md +18 -0
- package/templates/skills/superpowers/SKILL.md +45 -0
- package/templates/skills/vibe-stack-guardian/SKILL.md +22 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { getOpencodeConfigDir, commandExists, getPlatform, getUvInstallCommand, isWindows } from '../utils/os-utils';
|
|
5
|
+
import inquirer from 'inquirer';
|
|
6
|
+
async function promptForUvInstall() {
|
|
7
|
+
const { shouldInstall } = await inquirer.prompt([
|
|
8
|
+
{
|
|
9
|
+
type: 'confirm',
|
|
10
|
+
name: 'shouldInstall',
|
|
11
|
+
message: 'uv/uvx is required for MiniMax MCP. Would you like to install it now?',
|
|
12
|
+
default: true,
|
|
13
|
+
},
|
|
14
|
+
]);
|
|
15
|
+
return shouldInstall;
|
|
16
|
+
}
|
|
17
|
+
async function installUv() {
|
|
18
|
+
const platform = getPlatform();
|
|
19
|
+
const { command, shell, description } = getUvInstallCommand();
|
|
20
|
+
console.log(`\n📦 Installing uv for ${platform}...`);
|
|
21
|
+
console.log(`Shell: ${description}`);
|
|
22
|
+
console.log(`Command: ${command}\n`);
|
|
23
|
+
try {
|
|
24
|
+
if (isWindows()) {
|
|
25
|
+
console.log('⚠️ On Windows, you may need to run PowerShell as Administrator');
|
|
26
|
+
console.log('Opening PowerShell installation command...\n');
|
|
27
|
+
console.log('Please run this command manually in PowerShell:');
|
|
28
|
+
console.log(command);
|
|
29
|
+
console.log('\nThen restart your terminal and re-run this installer.\n');
|
|
30
|
+
const { installed } = await inquirer.prompt([
|
|
31
|
+
{
|
|
32
|
+
type: 'confirm',
|
|
33
|
+
name: 'installed',
|
|
34
|
+
message: 'Have you installed uv and restarted your terminal?',
|
|
35
|
+
default: false,
|
|
36
|
+
},
|
|
37
|
+
]);
|
|
38
|
+
return installed;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
execSync(command, { stdio: 'inherit', timeout: 120000 });
|
|
42
|
+
console.log('✅ uv installed successfully');
|
|
43
|
+
console.log('⚠️ Please restart your terminal to use uv commands');
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.error('❌ Failed to install uv:', error);
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export async function setupMinimaxMcp() {
|
|
53
|
+
console.log('\n🔧 Setting up MiniMax MCP...\n');
|
|
54
|
+
let uvInstalled = commandExists('uvx') || commandExists('uv');
|
|
55
|
+
let alreadyInstalled = false;
|
|
56
|
+
if (uvInstalled) {
|
|
57
|
+
console.log('✅ uv/uvx is already installed');
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.log('⚠️ uv/uvx not found on system');
|
|
61
|
+
const shouldInstall = await promptForUvInstall();
|
|
62
|
+
if (shouldInstall) {
|
|
63
|
+
uvInstalled = await installUv();
|
|
64
|
+
if (!uvInstalled) {
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
installed: false,
|
|
68
|
+
uvInstalled: false,
|
|
69
|
+
message: 'uv installation was cancelled or failed. MiniMax MCP requires uv.',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
return {
|
|
75
|
+
success: false,
|
|
76
|
+
installed: false,
|
|
77
|
+
uvInstalled: false,
|
|
78
|
+
message: 'User chose not to install uv. Skipping MiniMax MCP setup.',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const configDir = getOpencodeConfigDir();
|
|
83
|
+
const configFile = join(configDir, 'opencode.json');
|
|
84
|
+
if (existsSync(configFile)) {
|
|
85
|
+
try {
|
|
86
|
+
const config = JSON.parse(readFileSync(configFile, 'utf-8'));
|
|
87
|
+
if (config.mcp?.MiniMax) {
|
|
88
|
+
alreadyInstalled = true;
|
|
89
|
+
console.log('✅ MiniMax MCP is already configured');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch { }
|
|
93
|
+
}
|
|
94
|
+
if (alreadyInstalled) {
|
|
95
|
+
return {
|
|
96
|
+
success: true,
|
|
97
|
+
installed: false,
|
|
98
|
+
uvInstalled: true,
|
|
99
|
+
message: 'MiniMax MCP was already configured',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
console.log('\n📝 MiniMax MCP Configuration:');
|
|
103
|
+
console.log('You need a MiniMax API key from https://platform.minimax.com/subscribe/token-plan\n');
|
|
104
|
+
const { apiKey } = await inquirer.prompt([
|
|
105
|
+
{
|
|
106
|
+
type: 'input',
|
|
107
|
+
name: 'apiKey',
|
|
108
|
+
message: 'Enter your MiniMax API Key:',
|
|
109
|
+
validate: (input) => {
|
|
110
|
+
if (!input || input.trim().length < 10) {
|
|
111
|
+
return 'Please enter a valid API key (at least 10 characters)';
|
|
112
|
+
}
|
|
113
|
+
return true;
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
]);
|
|
117
|
+
try {
|
|
118
|
+
if (!existsSync(configDir)) {
|
|
119
|
+
mkdirSync(configDir, { recursive: true });
|
|
120
|
+
}
|
|
121
|
+
let config = {};
|
|
122
|
+
if (existsSync(configFile)) {
|
|
123
|
+
try {
|
|
124
|
+
config = JSON.parse(readFileSync(configFile, 'utf-8'));
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
config = {};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (!config.mcp) {
|
|
131
|
+
config.mcp = {};
|
|
132
|
+
}
|
|
133
|
+
config.mcp['MiniMax'] = {
|
|
134
|
+
type: 'local',
|
|
135
|
+
command: isWindows()
|
|
136
|
+
? ['uvx', 'minimax-coding-plan-mcp', '-y']
|
|
137
|
+
: ['uvx', 'minimax-coding-plan-mcp', '-y'],
|
|
138
|
+
environment: {
|
|
139
|
+
MINIMAX_API_KEY: apiKey.trim(),
|
|
140
|
+
MINIMAX_API_HOST: 'https://api.minimaxi.com',
|
|
141
|
+
},
|
|
142
|
+
enabled: true,
|
|
143
|
+
};
|
|
144
|
+
writeFileSync(configFile, JSON.stringify(config, null, 2));
|
|
145
|
+
console.log('✅ MiniMax MCP configured in opencode.json');
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
installed: false,
|
|
151
|
+
uvInstalled: true,
|
|
152
|
+
message: `Failed to update config: ${error instanceof Error ? error.message : String(error)}`,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
success: true,
|
|
157
|
+
installed: true,
|
|
158
|
+
uvInstalled: true,
|
|
159
|
+
message: 'MiniMax MCP installed and configured successfully',
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=setup-minimax-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-minimax-mcp.js","sourceRoot":"","sources":["../../src/steps/setup-minimax-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface VerifyInstallationResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
issues: string[];
|
|
4
|
+
configValid: boolean;
|
|
5
|
+
skillsPresent: string[];
|
|
6
|
+
skillsMissing: string[];
|
|
7
|
+
commandsPresent: string[];
|
|
8
|
+
commandsMissing: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function verifyInstallation(): Promise<VerifyInstallationResult>;
|
|
11
|
+
//# sourceMappingURL=verify-installation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-installation.d.ts","sourceRoot":"","sources":["../../src/steps/verify-installation.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAyF5E"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from 'fs';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
const REQUIRED_SKILLS = [
|
|
5
|
+
'superpowers',
|
|
6
|
+
'lingjing-ux-core',
|
|
7
|
+
'frontend-design',
|
|
8
|
+
'skill-creator',
|
|
9
|
+
'agent-browser',
|
|
10
|
+
'find-skills',
|
|
11
|
+
'vibe-stack-guardian',
|
|
12
|
+
];
|
|
13
|
+
const REQUIRED_COMMANDS = [
|
|
14
|
+
'commit.md',
|
|
15
|
+
'component.md',
|
|
16
|
+
'explain.md',
|
|
17
|
+
'review.md',
|
|
18
|
+
'test.md',
|
|
19
|
+
'vibe-select.md',
|
|
20
|
+
];
|
|
21
|
+
export async function verifyInstallation() {
|
|
22
|
+
console.log('\n🔬 Verifying Installation...\n');
|
|
23
|
+
const issues = [];
|
|
24
|
+
const configDir = join(homedir(), '.config', 'opencode');
|
|
25
|
+
const skillsDir = join(configDir, 'skills');
|
|
26
|
+
const commandsDir = join(configDir, 'commands');
|
|
27
|
+
const configFile = join(configDir, 'opencode.json');
|
|
28
|
+
let configValid = false;
|
|
29
|
+
if (existsSync(configFile)) {
|
|
30
|
+
try {
|
|
31
|
+
JSON.parse(readFileSync(configFile, 'utf-8'));
|
|
32
|
+
configValid = true;
|
|
33
|
+
console.log('✅ opencode.json is valid JSON');
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
issues.push('opencode.json exists but is not valid JSON');
|
|
37
|
+
console.log('❌ opencode.json is not valid JSON');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
issues.push('opencode.json not found');
|
|
42
|
+
console.log('❌ opencode.json not found');
|
|
43
|
+
}
|
|
44
|
+
const skillsPresent = [];
|
|
45
|
+
const skillsMissing = [];
|
|
46
|
+
if (existsSync(skillsDir)) {
|
|
47
|
+
const installedSkills = readdirSync(skillsDir);
|
|
48
|
+
for (const skill of REQUIRED_SKILLS) {
|
|
49
|
+
if (installedSkills.includes(skill)) {
|
|
50
|
+
skillsPresent.push(skill);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
skillsMissing.push(skill);
|
|
54
|
+
issues.push(`Skill missing: ${skill}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
console.log(`✅ Skills: ${skillsPresent.length}/${REQUIRED_SKILLS.length} present`);
|
|
58
|
+
if (skillsMissing.length > 0) {
|
|
59
|
+
console.log(`❌ Missing skills: ${skillsMissing.join(', ')}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
for (const skill of REQUIRED_SKILLS) {
|
|
64
|
+
skillsMissing.push(skill);
|
|
65
|
+
issues.push(`Skills directory not found, missing: ${skill}`);
|
|
66
|
+
}
|
|
67
|
+
console.log('❌ Skills directory not found');
|
|
68
|
+
}
|
|
69
|
+
const commandsPresent = [];
|
|
70
|
+
const commandsMissing = [];
|
|
71
|
+
if (existsSync(commandsDir)) {
|
|
72
|
+
const installedCommands = readdirSync(commandsDir);
|
|
73
|
+
for (const command of REQUIRED_COMMANDS) {
|
|
74
|
+
if (installedCommands.includes(command)) {
|
|
75
|
+
commandsPresent.push(command);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
commandsMissing.push(command);
|
|
79
|
+
issues.push(`Command missing: ${command}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
console.log(`✅ Commands: ${commandsPresent.length}/${REQUIRED_COMMANDS.length} present`);
|
|
83
|
+
if (commandsMissing.length > 0) {
|
|
84
|
+
console.log(`❌ Missing commands: ${commandsMissing.join(', ')}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
for (const command of REQUIRED_COMMANDS) {
|
|
89
|
+
commandsMissing.push(command);
|
|
90
|
+
issues.push(`Commands directory not found, missing: ${command}`);
|
|
91
|
+
}
|
|
92
|
+
console.log('❌ Commands directory not found');
|
|
93
|
+
}
|
|
94
|
+
const success = issues.length === 0 && configValid;
|
|
95
|
+
console.log('\n📊 Verification Summary:');
|
|
96
|
+
console.log(` Status: ${success ? '✅ SUCCESS' : '❌ ISSUES FOUND'}`);
|
|
97
|
+
console.log(` Issues: ${issues.length}`);
|
|
98
|
+
return {
|
|
99
|
+
success,
|
|
100
|
+
issues,
|
|
101
|
+
configValid,
|
|
102
|
+
skillsPresent,
|
|
103
|
+
skillsMissing,
|
|
104
|
+
commandsPresent,
|
|
105
|
+
commandsMissing,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=verify-installation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-installation.js","sourceRoot":"","sources":["../../src/steps/verify-installation.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript interfaces for liang-opencode-suite
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Installation options passed to the wizard
|
|
6
|
+
*/
|
|
7
|
+
export interface InstallOptions {
|
|
8
|
+
/** Skip the welcome banner */
|
|
9
|
+
skipWelcome: boolean;
|
|
10
|
+
/** Skip all confirmation prompts */
|
|
11
|
+
autoConfirm: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* AI Provider configuration
|
|
15
|
+
*/
|
|
16
|
+
export interface ProviderConfig {
|
|
17
|
+
/** Provider name (eimi/MiniMax/Claude) */
|
|
18
|
+
name: 'kimi' | 'minimax' | 'claude';
|
|
19
|
+
/** Whether this provider is enabled */
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
/** API key for the provider */
|
|
22
|
+
apiKey?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Wizard state tracking all selections and inputs
|
|
26
|
+
*/
|
|
27
|
+
export interface WizardState {
|
|
28
|
+
/** Selected AI providers */
|
|
29
|
+
providers: ProviderConfig[];
|
|
30
|
+
/** Whether to install MiniMax MCP */
|
|
31
|
+
installMcp: boolean;
|
|
32
|
+
/** Path to oh-my-openagent config */
|
|
33
|
+
configPath: string;
|
|
34
|
+
/** Whether installation was successful */
|
|
35
|
+
success: boolean;
|
|
36
|
+
/** List of completed steps */
|
|
37
|
+
completedSteps: string[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Result of a single wizard step
|
|
41
|
+
*/
|
|
42
|
+
export interface StepResult {
|
|
43
|
+
/** Whether the step succeeded */
|
|
44
|
+
success: boolean;
|
|
45
|
+
/** Description of what was done */
|
|
46
|
+
message: string;
|
|
47
|
+
/** Error message if failed */
|
|
48
|
+
error?: string;
|
|
49
|
+
/** Any data returned by the step */
|
|
50
|
+
data?: unknown;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Step execution function signature
|
|
54
|
+
*/
|
|
55
|
+
export type WizardStep = (state: WizardState) => Promise<StepResult>;
|
|
56
|
+
/**
|
|
57
|
+
* API key configuration per provider
|
|
58
|
+
*/
|
|
59
|
+
export interface ApiKeyConfig {
|
|
60
|
+
kimi?: string;
|
|
61
|
+
minimax?: string;
|
|
62
|
+
claude?: string;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,qCAAqC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function writeJson(filePath: string, data: unknown): Promise<void>;
|
|
2
|
+
export declare function readJson<T = unknown>(filePath: string): Promise<T | null>;
|
|
3
|
+
export declare function copyTemplate(templateName: string, destPath: string): Promise<void>;
|
|
4
|
+
export declare function backupFile(filePath: string): Promise<string | null>;
|
|
5
|
+
export declare function mergeOpencodeConfig(newConfig: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
6
|
+
export declare function fileExists(filePath: string): Promise<boolean>;
|
|
7
|
+
export declare function readFile(filePath: string): Promise<string | null>;
|
|
8
|
+
export declare function writeFile(filePath: string, content: string): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=file-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-writer.d.ts","sourceRoot":"","sources":["../../src/utils/file-writer.ts"],"names":[],"mappings":"AAIA,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9E;AAED,wBAAsB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAO/E;AAED,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxF;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYzE;AAED,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAK9G;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnE;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMvE;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { OPENCODE_JSON, ensureDir, pathExists } from './paths';
|
|
4
|
+
export async function writeJson(filePath, data) {
|
|
5
|
+
const content = JSON.stringify(data, null, 2);
|
|
6
|
+
await ensureDir(path.dirname(filePath));
|
|
7
|
+
await fs.promises.writeFile(filePath, content, 'utf-8');
|
|
8
|
+
}
|
|
9
|
+
export async function readJson(filePath) {
|
|
10
|
+
try {
|
|
11
|
+
const content = await fs.promises.readFile(filePath, 'utf-8');
|
|
12
|
+
return JSON.parse(content);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function copyTemplate(templateName, destPath) {
|
|
19
|
+
const templatePath = path.join(__dirname, '..', 'templates', templateName);
|
|
20
|
+
await ensureDir(path.dirname(destPath));
|
|
21
|
+
await fs.promises.copyFile(templatePath, destPath);
|
|
22
|
+
}
|
|
23
|
+
export async function backupFile(filePath) {
|
|
24
|
+
try {
|
|
25
|
+
const exists = await pathExists(filePath);
|
|
26
|
+
if (!exists) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const backupPath = `${filePath}.bak`;
|
|
30
|
+
await fs.promises.copyFile(filePath, backupPath);
|
|
31
|
+
return backupPath;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function mergeOpencodeConfig(newConfig) {
|
|
38
|
+
const existingConfig = await readJson(OPENCODE_JSON);
|
|
39
|
+
const merged = { ...existingConfig, ...newConfig };
|
|
40
|
+
await writeJson(OPENCODE_JSON, merged);
|
|
41
|
+
return merged;
|
|
42
|
+
}
|
|
43
|
+
export async function fileExists(filePath) {
|
|
44
|
+
return pathExists(filePath);
|
|
45
|
+
}
|
|
46
|
+
export async function readFile(filePath) {
|
|
47
|
+
try {
|
|
48
|
+
return await fs.promises.readFile(filePath, 'utf-8');
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export async function writeFile(filePath, content) {
|
|
55
|
+
await ensureDir(path.dirname(filePath));
|
|
56
|
+
await fs.promises.writeFile(filePath, content, 'utf-8');
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=file-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-writer.js","sourceRoot":"","sources":["../../src/utils/file-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function isGitInstalled(): Promise<boolean>;
|
|
2
|
+
export declare function cloneSuperpowers(repoUrl: string, destDir: string): Promise<void>;
|
|
3
|
+
export declare function initSubmodules(dir: string): Promise<void>;
|
|
4
|
+
export declare function isGitRepo(dir: string): Promise<boolean>;
|
|
5
|
+
export declare function gitPull(dir: string): Promise<void>;
|
|
6
|
+
export declare function gitClone(url: string, destDir: string, options?: string[]): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=git-clone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-clone.d.ts","sourceRoot":"","sources":["../../src/utils/git-clone.ts"],"names":[],"mappings":"AAQA,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAOvD;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItF;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/D;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ7D;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxD;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9F"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import simpleGit from 'simple-git';
|
|
4
|
+
import { ensureDir } from './paths';
|
|
5
|
+
const execAsync = promisify(exec);
|
|
6
|
+
export async function isGitInstalled() {
|
|
7
|
+
try {
|
|
8
|
+
await execAsync('git --version');
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function cloneSuperpowers(repoUrl, destDir) {
|
|
16
|
+
const git = simpleGit();
|
|
17
|
+
await ensureDir(destDir);
|
|
18
|
+
await git.clone(repoUrl, destDir);
|
|
19
|
+
}
|
|
20
|
+
export async function initSubmodules(dir) {
|
|
21
|
+
const git = simpleGit(dir);
|
|
22
|
+
await git.submoduleUpdate(['--init']);
|
|
23
|
+
}
|
|
24
|
+
export async function isGitRepo(dir) {
|
|
25
|
+
try {
|
|
26
|
+
const git = simpleGit(dir);
|
|
27
|
+
await git.status();
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export async function gitPull(dir) {
|
|
35
|
+
const git = simpleGit(dir);
|
|
36
|
+
await git.pull();
|
|
37
|
+
}
|
|
38
|
+
export async function gitClone(url, destDir, options) {
|
|
39
|
+
const args = options ?? [];
|
|
40
|
+
const git = simpleGit();
|
|
41
|
+
await ensureDir(destDir);
|
|
42
|
+
await git.clone(url, destDir, args);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=git-clone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-clone.js","sourceRoot":"","sources":["../../src/utils/git-clone.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,SAAwB,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAe,EAAE,OAAe;IACrE,MAAM,GAAG,GAAc,SAAS,EAAE,CAAC;IACnC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,MAAM,GAAG,GAAc,SAAS,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,GAAG,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAc,SAAS,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW;IACvC,MAAM,GAAG,GAAc,SAAS,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,OAAe,EAAE,OAAkB;IAC7E,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAc,SAAS,EAAE,CAAC;IACnC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function success(message: string): void;
|
|
2
|
+
export declare function error(message: string): void;
|
|
3
|
+
export declare function warning(message: string): void;
|
|
4
|
+
export declare function info(message: string): void;
|
|
5
|
+
export declare function section(title: string): void;
|
|
6
|
+
export declare function dim(message: string): void;
|
|
7
|
+
export declare function bold(message: string): void;
|
|
8
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export function success(message) {
|
|
3
|
+
console.log(chalk.green('✓ ') + message);
|
|
4
|
+
}
|
|
5
|
+
export function error(message) {
|
|
6
|
+
console.log(chalk.red('✗ ') + message);
|
|
7
|
+
}
|
|
8
|
+
export function warning(message) {
|
|
9
|
+
console.log(chalk.yellow('⚠ ') + message);
|
|
10
|
+
}
|
|
11
|
+
export function info(message) {
|
|
12
|
+
console.log(chalk.blue('ℹ ') + message);
|
|
13
|
+
}
|
|
14
|
+
export function section(title) {
|
|
15
|
+
console.log('\n' + chalk.bold.cyan('━━━ ' + title + ' ━━━') + '\n');
|
|
16
|
+
}
|
|
17
|
+
export function dim(message) {
|
|
18
|
+
console.log(chalk.gray(message));
|
|
19
|
+
}
|
|
20
|
+
export function bold(message) {
|
|
21
|
+
console.log(chalk.bold(message));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,OAAe;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type Platform = 'win32' | 'darwin' | 'linux' | 'unknown';
|
|
2
|
+
export declare function getPlatform(): Platform;
|
|
3
|
+
export declare function isWindows(): boolean;
|
|
4
|
+
export declare function isMacOS(): boolean;
|
|
5
|
+
export declare function isLinux(): boolean;
|
|
6
|
+
export declare function getHomeDir(): string;
|
|
7
|
+
export declare function getConfigDir(): string;
|
|
8
|
+
export declare function getOpencodeConfigDir(): string;
|
|
9
|
+
export declare function findCommand(command: string): string | null;
|
|
10
|
+
export declare function commandExists(command: string): boolean;
|
|
11
|
+
export declare function getShell(): string;
|
|
12
|
+
export declare function isVirtualMachine(): boolean;
|
|
13
|
+
export declare function getUvInstallCommand(): {
|
|
14
|
+
command: string;
|
|
15
|
+
shell: string;
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function getOpenCodeInstallUrl(): string;
|
|
19
|
+
export declare function normalizePath(inputPath: string): string;
|
|
20
|
+
//# sourceMappingURL=os-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"os-utils.d.ts","sourceRoot":"","sources":["../../src/utils/os-utils.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhE,wBAAgB,WAAW,IAAI,QAAQ,CAMtC;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAED,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAiBrC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAK7C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc1D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAKjC;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAyB1C;AAED,wBAAgB,mBAAmB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAgB7F;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKvD"}
|