@dp-pcs/ogp 0.3.3 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +275 -49
- package/dist/cli/completion.d.ts +5 -0
- package/dist/cli/completion.d.ts.map +1 -0
- package/dist/cli/completion.js +148 -0
- package/dist/cli/completion.js.map +1 -0
- package/dist/cli/config.d.ts +3 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +207 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/expose.d.ts.map +1 -1
- package/dist/cli/expose.js +20 -13
- package/dist/cli/expose.js.map +1 -1
- package/dist/cli/federation.d.ts.map +1 -1
- package/dist/cli/federation.js +182 -6
- package/dist/cli/federation.js.map +1 -1
- package/dist/cli/setup.d.ts +19 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +507 -32
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli.js +348 -32
- package/dist/cli.js.map +1 -1
- package/dist/daemon/agent-comms.d.ts.map +1 -1
- package/dist/daemon/agent-comms.js +14 -9
- package/dist/daemon/agent-comms.js.map +1 -1
- package/dist/daemon/intent-registry.d.ts.map +1 -1
- package/dist/daemon/intent-registry.js +7 -4
- package/dist/daemon/intent-registry.js.map +1 -1
- package/dist/daemon/keypair.d.ts.map +1 -1
- package/dist/daemon/keypair.js +34 -13
- package/dist/daemon/keypair.js.map +1 -1
- package/dist/daemon/message-handler.d.ts.map +1 -1
- package/dist/daemon/message-handler.js +7 -0
- package/dist/daemon/message-handler.js.map +1 -1
- package/dist/daemon/notify.d.ts +19 -0
- package/dist/daemon/notify.d.ts.map +1 -1
- package/dist/daemon/notify.js +329 -73
- package/dist/daemon/notify.js.map +1 -1
- package/dist/daemon/openclaw-bridge.d.ts +34 -0
- package/dist/daemon/openclaw-bridge.d.ts.map +1 -0
- package/dist/daemon/openclaw-bridge.js +261 -0
- package/dist/daemon/openclaw-bridge.js.map +1 -0
- package/dist/daemon/peers.d.ts +8 -0
- package/dist/daemon/peers.d.ts.map +1 -1
- package/dist/daemon/peers.js +48 -14
- package/dist/daemon/peers.js.map +1 -1
- package/dist/daemon/projects.d.ts.map +1 -1
- package/dist/daemon/projects.js +7 -4
- package/dist/daemon/projects.js.map +1 -1
- package/dist/daemon/server.d.ts +16 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +147 -46
- package/dist/daemon/server.js.map +1 -1
- package/dist/shared/config.d.ts +52 -1
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +18 -11
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/framework-detection.d.ts +31 -0
- package/dist/shared/framework-detection.d.ts.map +1 -0
- package/dist/shared/framework-detection.js +91 -0
- package/dist/shared/framework-detection.js.map +1 -0
- package/dist/shared/help.d.ts +5 -0
- package/dist/shared/help.d.ts.map +1 -0
- package/dist/shared/help.js +280 -0
- package/dist/shared/help.js.map +1 -0
- package/dist/shared/meta-config.d.ts +44 -0
- package/dist/shared/meta-config.d.ts.map +1 -0
- package/dist/shared/meta-config.js +89 -0
- package/dist/shared/meta-config.js.map +1 -0
- package/dist/shared/migration.d.ts +57 -0
- package/dist/shared/migration.d.ts.map +1 -0
- package/dist/shared/migration.js +255 -0
- package/dist/shared/migration.js.map +1 -0
- package/docs/CLI-REFERENCE.md +1360 -0
- package/docs/GETTING-STARTED.md +942 -0
- package/docs/MIGRATION.md +202 -0
- package/docs/MULTI-FRAMEWORK-DEMO.md +352 -0
- package/docs/MULTI-FRAMEWORK-DESIGN.md +378 -0
- package/docs/MULTI-FRAMEWORK-IMPL.md +197 -0
- package/docs/case-studies/CRASH_RESOLUTION_20260407.md +190 -0
- package/docs/case-studies/OpenClaw_Hermes_Status_Report_20260407.md +142 -0
- package/docs/case-studies/OpenClaw_Stability_Fix_Summary.md +209 -0
- package/docs/case-studies/README.md +40 -0
- package/docs/case-studies/crash_observations.md +250 -0
- package/docs/federation-flow.md +21 -31
- package/docs/hermes-implementation-checklist.md +4 -0
- package/docs/rendezvous.md +13 -14
- package/package.json +9 -3
- package/scripts/completion.bash +123 -0
- package/scripts/completion.zsh +372 -0
- package/scripts/test-migration-execute.js +74 -0
- package/scripts/test-migration.js +42 -0
- package/skills/ogp/SKILL.md +197 -64
- package/skills/ogp-agent-comms/SKILL.md +107 -41
- package/skills/ogp-expose/SKILL.md +84 -21
- package/skills/ogp-project/SKILL.md +66 -58
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import { saveMetaConfig } from './meta-config.js';
|
|
5
|
+
/**
|
|
6
|
+
* Determine framework type from OGP config
|
|
7
|
+
*/
|
|
8
|
+
function determineFrameworkType(config) {
|
|
9
|
+
// Explicit platform field takes precedence
|
|
10
|
+
if (config.platform === 'hermes') {
|
|
11
|
+
return 'hermes';
|
|
12
|
+
}
|
|
13
|
+
if (config.platform === 'openclaw') {
|
|
14
|
+
return 'openclaw';
|
|
15
|
+
}
|
|
16
|
+
// Heuristics: check for framework-specific fields
|
|
17
|
+
if (config.hermesWebhookUrl || config.hermesWebhookSecret) {
|
|
18
|
+
return 'hermes';
|
|
19
|
+
}
|
|
20
|
+
if (config.openclawUrl && config.openclawToken) {
|
|
21
|
+
return 'openclaw';
|
|
22
|
+
}
|
|
23
|
+
// Default to standalone if we can't determine
|
|
24
|
+
return 'standalone';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Check if a directory exists and contains a valid OGP config
|
|
28
|
+
*/
|
|
29
|
+
function checkInstallation(dirPath) {
|
|
30
|
+
const expandedPath = dirPath.replace(/^~/, os.homedir());
|
|
31
|
+
const configPath = path.join(expandedPath, 'config.json');
|
|
32
|
+
if (!fs.existsSync(expandedPath) || !fs.existsSync(configPath)) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const data = fs.readFileSync(configPath, 'utf-8');
|
|
37
|
+
const config = JSON.parse(data);
|
|
38
|
+
const framework = determineFrameworkType(config);
|
|
39
|
+
return {
|
|
40
|
+
path: expandedPath,
|
|
41
|
+
framework,
|
|
42
|
+
config,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
// Invalid or corrupted config
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Detect all existing OGP installations
|
|
52
|
+
* Returns a migration plan describing what needs to be done
|
|
53
|
+
*/
|
|
54
|
+
export function detectExistingInstallations() {
|
|
55
|
+
const plan = {
|
|
56
|
+
needed: false,
|
|
57
|
+
existingInstalls: [],
|
|
58
|
+
actions: [],
|
|
59
|
+
};
|
|
60
|
+
// Check for meta config - if it exists, no migration needed
|
|
61
|
+
const metaConfigPath = path.join(os.homedir(), '.ogp-meta', 'config.json');
|
|
62
|
+
if (fs.existsSync(metaConfigPath)) {
|
|
63
|
+
return plan; // Already migrated
|
|
64
|
+
}
|
|
65
|
+
// Check for legacy installations
|
|
66
|
+
const ogpInstall = checkInstallation('~/.ogp');
|
|
67
|
+
const hermesInstall = checkInstallation('~/.ogp-hermes');
|
|
68
|
+
if (ogpInstall) {
|
|
69
|
+
plan.existingInstalls.push(ogpInstall);
|
|
70
|
+
}
|
|
71
|
+
if (hermesInstall) {
|
|
72
|
+
plan.existingInstalls.push(hermesInstall);
|
|
73
|
+
}
|
|
74
|
+
// No existing installations found
|
|
75
|
+
if (plan.existingInstalls.length === 0) {
|
|
76
|
+
return plan;
|
|
77
|
+
}
|
|
78
|
+
// Migration is needed
|
|
79
|
+
plan.needed = true;
|
|
80
|
+
// Build migration actions based on what we found
|
|
81
|
+
if (ogpInstall && hermesInstall) {
|
|
82
|
+
// Both exist - rename .ogp to .ogp-openclaw if it's an OpenClaw install
|
|
83
|
+
if (ogpInstall.framework === 'openclaw') {
|
|
84
|
+
plan.actions.push({
|
|
85
|
+
type: 'rename',
|
|
86
|
+
from: ogpInstall.path,
|
|
87
|
+
to: path.join(os.homedir(), '.ogp-openclaw'),
|
|
88
|
+
framework: 'openclaw',
|
|
89
|
+
description: 'Rename ~/.ogp to ~/.ogp-openclaw',
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// .ogp-hermes stays as-is
|
|
93
|
+
plan.actions.push({
|
|
94
|
+
type: 'register',
|
|
95
|
+
framework: 'hermes',
|
|
96
|
+
description: 'Register Hermes installation at ~/.ogp-hermes',
|
|
97
|
+
});
|
|
98
|
+
plan.actions.push({
|
|
99
|
+
type: 'create-meta',
|
|
100
|
+
description: 'Create meta config with both frameworks',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
else if (ogpInstall && !hermesInstall) {
|
|
104
|
+
// Only .ogp exists
|
|
105
|
+
if (ogpInstall.framework === 'openclaw') {
|
|
106
|
+
plan.actions.push({
|
|
107
|
+
type: 'rename',
|
|
108
|
+
from: ogpInstall.path,
|
|
109
|
+
to: path.join(os.homedir(), '.ogp-openclaw'),
|
|
110
|
+
framework: 'openclaw',
|
|
111
|
+
description: 'Rename ~/.ogp to ~/.ogp-openclaw',
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
else if (ogpInstall.framework === 'standalone') {
|
|
115
|
+
// Keep as ~/.ogp for standalone
|
|
116
|
+
plan.actions.push({
|
|
117
|
+
type: 'register',
|
|
118
|
+
framework: 'standalone',
|
|
119
|
+
description: 'Register standalone installation at ~/.ogp',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
plan.actions.push({
|
|
123
|
+
type: 'create-meta',
|
|
124
|
+
description: 'Create meta config',
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
else if (!ogpInstall && hermesInstall) {
|
|
128
|
+
// Only .ogp-hermes exists
|
|
129
|
+
plan.actions.push({
|
|
130
|
+
type: 'register',
|
|
131
|
+
framework: 'hermes',
|
|
132
|
+
description: 'Register Hermes installation at ~/.ogp-hermes',
|
|
133
|
+
});
|
|
134
|
+
plan.actions.push({
|
|
135
|
+
type: 'create-meta',
|
|
136
|
+
description: 'Create meta config with Hermes framework',
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return plan;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Execute the migration plan
|
|
143
|
+
* This will:
|
|
144
|
+
* - Rename directories as needed
|
|
145
|
+
* - Create the meta config
|
|
146
|
+
* - Register all frameworks
|
|
147
|
+
*/
|
|
148
|
+
export async function executeMigration(plan) {
|
|
149
|
+
if (!plan.needed) {
|
|
150
|
+
return; // Nothing to do
|
|
151
|
+
}
|
|
152
|
+
const metaConfig = {
|
|
153
|
+
version: '1.0.0',
|
|
154
|
+
frameworks: [],
|
|
155
|
+
};
|
|
156
|
+
// Track renamed installations
|
|
157
|
+
const renamedPaths = new Map();
|
|
158
|
+
// Step 1: Execute rename actions
|
|
159
|
+
for (const action of plan.actions) {
|
|
160
|
+
if (action.type === 'rename' && action.from && action.to) {
|
|
161
|
+
if (fs.existsSync(action.to)) {
|
|
162
|
+
throw new Error(`Cannot rename ${action.from} to ${action.to}: target already exists`);
|
|
163
|
+
}
|
|
164
|
+
// Create backup of original location
|
|
165
|
+
const backupPath = `${action.from}.backup-${Date.now()}`;
|
|
166
|
+
fs.cpSync(action.from, backupPath, { recursive: true });
|
|
167
|
+
try {
|
|
168
|
+
fs.renameSync(action.from, action.to);
|
|
169
|
+
renamedPaths.set(action.from, action.to);
|
|
170
|
+
console.log(`✓ Renamed ${action.from} to ${action.to}`);
|
|
171
|
+
console.log(` Backup created at ${backupPath}`);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
// Restore from backup on error
|
|
175
|
+
if (fs.existsSync(backupPath)) {
|
|
176
|
+
fs.cpSync(backupPath, action.from, { recursive: true });
|
|
177
|
+
}
|
|
178
|
+
throw new Error(`Failed to rename ${action.from} to ${action.to}: ${error}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Step 2: Register frameworks
|
|
183
|
+
for (const install of plan.existingInstalls) {
|
|
184
|
+
let configDir = install.path;
|
|
185
|
+
// If this path was renamed, use the new path
|
|
186
|
+
if (renamedPaths.has(install.path)) {
|
|
187
|
+
configDir = renamedPaths.get(install.path);
|
|
188
|
+
}
|
|
189
|
+
// Determine framework ID based on type and path
|
|
190
|
+
let frameworkId;
|
|
191
|
+
let frameworkName;
|
|
192
|
+
if (install.framework === 'openclaw') {
|
|
193
|
+
frameworkId = 'openclaw';
|
|
194
|
+
frameworkName = 'OpenClaw';
|
|
195
|
+
}
|
|
196
|
+
else if (install.framework === 'hermes') {
|
|
197
|
+
frameworkId = 'hermes';
|
|
198
|
+
frameworkName = 'Hermes';
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
frameworkId = 'standalone';
|
|
202
|
+
frameworkName = 'Standalone OGP';
|
|
203
|
+
}
|
|
204
|
+
const framework = {
|
|
205
|
+
id: frameworkId,
|
|
206
|
+
name: frameworkName,
|
|
207
|
+
enabled: true,
|
|
208
|
+
configDir,
|
|
209
|
+
daemonPort: install.config.daemonPort,
|
|
210
|
+
gatewayUrl: install.config.gatewayUrl,
|
|
211
|
+
displayName: install.config.displayName,
|
|
212
|
+
platform: install.config.platform,
|
|
213
|
+
};
|
|
214
|
+
metaConfig.frameworks.push(framework);
|
|
215
|
+
console.log(`✓ Registered ${frameworkName} at ${configDir}`);
|
|
216
|
+
}
|
|
217
|
+
// Step 3: Set default framework
|
|
218
|
+
// Prefer openclaw, then hermes, then first available
|
|
219
|
+
const openclawFramework = metaConfig.frameworks.find(f => f.id === 'openclaw');
|
|
220
|
+
const hermesFramework = metaConfig.frameworks.find(f => f.id === 'hermes');
|
|
221
|
+
if (openclawFramework) {
|
|
222
|
+
metaConfig.default = 'openclaw';
|
|
223
|
+
}
|
|
224
|
+
else if (hermesFramework) {
|
|
225
|
+
metaConfig.default = 'hermes';
|
|
226
|
+
}
|
|
227
|
+
else if (metaConfig.frameworks.length > 0) {
|
|
228
|
+
metaConfig.default = metaConfig.frameworks[0].id;
|
|
229
|
+
}
|
|
230
|
+
// Step 4: Save meta config
|
|
231
|
+
saveMetaConfig(metaConfig);
|
|
232
|
+
console.log('✓ Created meta configuration');
|
|
233
|
+
console.log(` Default framework: ${metaConfig.default}`);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Check if migration is needed and return a summary
|
|
237
|
+
*/
|
|
238
|
+
export function checkMigrationStatus() {
|
|
239
|
+
const plan = detectExistingInstallations();
|
|
240
|
+
if (!plan.needed) {
|
|
241
|
+
return {
|
|
242
|
+
migrationNeeded: false,
|
|
243
|
+
summary: 'No migration needed',
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
const installCount = plan.existingInstalls.length;
|
|
247
|
+
const installTypes = plan.existingInstalls.map(i => i.framework).join(', ');
|
|
248
|
+
const summary = `Found ${installCount} existing installation(s): ${installTypes}`;
|
|
249
|
+
return {
|
|
250
|
+
migrationNeeded: true,
|
|
251
|
+
summary,
|
|
252
|
+
plan,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/shared/migration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAyClD;;GAEG;AACH,SAAS,sBAAsB,CAAC,MAAiB;IAC/C,2CAA2C;IAC3C,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,kDAAkD;IAClD,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC1D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QAC/C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,8CAA8C;IAC9C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAE1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;QAC7C,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAEjD,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,SAAS;YACT,MAAM;SACP,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,8BAA8B;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B;IACzC,MAAM,IAAI,GAAkB;QAC1B,MAAM,EAAE,KAAK;QACb,gBAAgB,EAAE,EAAE;QACpB,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,4DAA4D;IAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC3E,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,CAAC,mBAAmB;IAClC,CAAC;IAED,iCAAiC;IACjC,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAEzD,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAED,kCAAkC;IAClC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IAEnB,iDAAiD;IACjD,IAAI,UAAU,IAAI,aAAa,EAAE,CAAC;QAChC,wEAAwE;QACxE,IAAI,UAAU,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC;gBAC5C,SAAS,EAAE,UAAU;gBACrB,WAAW,EAAE,kCAAkC;aAChD,CAAC,CAAC;QACL,CAAC;QACD,0BAA0B;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,+CAA+C;SAC7D,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,yCAAyC;SACvD,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,mBAAmB;QACnB,IAAI,UAAU,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC;gBAC5C,SAAS,EAAE,UAAU;gBACrB,WAAW,EAAE,kCAAkC;aAChD,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,UAAU,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;YACjD,gCAAgC;YAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,UAAU;gBAChB,SAAS,EAAE,YAAY;gBACvB,WAAW,EAAE,4CAA4C;aAC1D,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,oBAAoB;SAClC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE,CAAC;QACxC,0BAA0B;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,+CAA+C;SAC7D,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,0CAA0C;SACxD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAmB;IACxD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,gBAAgB;IAC1B,CAAC;IAED,MAAM,UAAU,GAAe;QAC7B,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,8BAA8B;IAC9B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE/C,iCAAiC;IACjC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACzD,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CACb,iBAAiB,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,yBAAyB,CACtE,CAAC;YACJ,CAAC;YAED,qCAAqC;YACrC,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,IAAI,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACzD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAExD,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,+BAA+B;gBAC/B,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC9B,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,oBAAoB,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE,CAC5D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5C,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;QAE7B,6CAA6C;QAC7C,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC;QAC9C,CAAC;QAED,gDAAgD;QAChD,IAAI,WAAmB,CAAC;QACxB,IAAI,aAAqB,CAAC;QAE1B,IAAI,OAAO,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACrC,WAAW,GAAG,UAAU,CAAC;YACzB,aAAa,GAAG,UAAU,CAAC;QAC7B,CAAC;aAAM,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC1C,WAAW,GAAG,QAAQ,CAAC;YACvB,aAAa,GAAG,QAAQ,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,YAAY,CAAC;YAC3B,aAAa,GAAG,gBAAgB,CAAC;QACnC,CAAC;QAED,MAAM,SAAS,GAAc;YAC3B,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,IAAI;YACb,SAAS;YACT,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;YACrC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;YACrC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;YACvC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;SAClC,CAAC;QAEF,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,gBAAgB,aAAa,OAAO,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,gCAAgC;IAChC,qDAAqD;IACrD,MAAM,iBAAiB,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAC/E,MAAM,eAAe,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IAE3E,IAAI,iBAAiB,EAAE,CAAC;QACtB,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC;IAClC,CAAC;SAAM,IAAI,eAAe,EAAE,CAAC;QAC3B,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC;IAChC,CAAC;SAAM,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,CAAC;IAED,2BAA2B;IAC3B,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,wBAAwB,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAKlC,MAAM,IAAI,GAAG,2BAA2B,EAAE,CAAC;IAE3C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO;YACL,eAAe,EAAE,KAAK;YACtB,OAAO,EAAE,qBAAqB;SAC/B,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,SAAS,YAAY,8BAA8B,YAAY,EAAE,CAAC;IAElF,OAAO;QACL,eAAe,EAAE,IAAI;QACrB,OAAO;QACP,IAAI;KACL,CAAC;AACJ,CAAC"}
|