@reumbra/forge 0.3.7 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/install.js +1 -1
- package/dist/lib/claude-integration.d.ts +7 -3
- package/dist/lib/claude-integration.js +13 -4
- package/dist/lib/claude-integration.js.map +1 -1
- package/dist/lib/config.js +28 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/machine-id.d.ts +2 -2
- package/dist/lib/machine-id.js +3 -3
- package/dist/lib/machine-id.js.map +1 -1
- package/dist/lib/paths.d.ts +6 -4
- package/dist/lib/paths.js +40 -6
- package/dist/lib/paths.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/install.js
CHANGED
|
@@ -80,7 +80,7 @@ export async function install(pluginName, version) {
|
|
|
80
80
|
if (err instanceof ApiError) {
|
|
81
81
|
if (err.code === "PLUGIN_NOT_IN_PLAN") {
|
|
82
82
|
log.error(`${fullName} is not available on your plan.`);
|
|
83
|
-
log.info("Upgrade at https://reumbra.
|
|
83
|
+
log.info("Upgrade at https://forge.reumbra.com/pricing");
|
|
84
84
|
}
|
|
85
85
|
else if (err.code === "VERSION_NOT_FOUND") {
|
|
86
86
|
log.error(`Version ${version} not found for ${fullName}.`);
|
|
@@ -4,13 +4,17 @@ export declare function enablePlugin(pluginName: string): void;
|
|
|
4
4
|
export declare function disablePlugin(pluginName: string): void;
|
|
5
5
|
export declare function isPluginEnabled(pluginName: string): boolean;
|
|
6
6
|
/**
|
|
7
|
-
* Remove stale plugin data from Claude Code's internal
|
|
7
|
+
* Remove stale plugin data from Claude Code's internal state.
|
|
8
8
|
*
|
|
9
9
|
* After `forge install/update`, the marketplace has the new version, but
|
|
10
|
-
* Claude Code may still load the old version
|
|
10
|
+
* Claude Code may still load the old version. This function clears all
|
|
11
|
+
* three layers of Claude Code's plugin state:
|
|
11
12
|
* 1. Removes the plugin entry from `installed_plugins.json` so Claude Code
|
|
12
13
|
* treats the plugin as newly enabled on next restart.
|
|
13
|
-
* 2. Deletes
|
|
14
|
+
* 2. Deletes cached version directories under `cache/reumbra/<plugin>/`
|
|
14
15
|
* so Claude Code re-copies from the updated marketplace.
|
|
16
|
+
* 3. Deletes the "active copy" at `~/.claude/plugins/<plugin>/` which
|
|
17
|
+
* takes priority over cache — without this, Claude Code loads the
|
|
18
|
+
* stale active copy and never checks cache for newer versions.
|
|
15
19
|
*/
|
|
16
20
|
export declare function invalidatePluginCache(pluginName: string): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
|
-
import { claudeInstalledPluginsPath, claudeKnownMarketplacesPath, claudePluginCacheDir, claudeSettingsPath, MARKETPLACE_DIR, } from "./paths.js";
|
|
3
|
+
import { claudeInstalledPluginsPath, claudeKnownMarketplacesPath, claudePluginCacheDir, claudePluginDir, claudeSettingsPath, MARKETPLACE_DIR, } from "./paths.js";
|
|
4
4
|
const MARKETPLACE_NAME = "reumbra";
|
|
5
5
|
// --- known_marketplaces.json ---
|
|
6
6
|
export function registerMarketplace() {
|
|
@@ -57,14 +57,18 @@ export function isPluginEnabled(pluginName) {
|
|
|
57
57
|
}
|
|
58
58
|
// --- cache invalidation ---
|
|
59
59
|
/**
|
|
60
|
-
* Remove stale plugin data from Claude Code's internal
|
|
60
|
+
* Remove stale plugin data from Claude Code's internal state.
|
|
61
61
|
*
|
|
62
62
|
* After `forge install/update`, the marketplace has the new version, but
|
|
63
|
-
* Claude Code may still load the old version
|
|
63
|
+
* Claude Code may still load the old version. This function clears all
|
|
64
|
+
* three layers of Claude Code's plugin state:
|
|
64
65
|
* 1. Removes the plugin entry from `installed_plugins.json` so Claude Code
|
|
65
66
|
* treats the plugin as newly enabled on next restart.
|
|
66
|
-
* 2. Deletes
|
|
67
|
+
* 2. Deletes cached version directories under `cache/reumbra/<plugin>/`
|
|
67
68
|
* so Claude Code re-copies from the updated marketplace.
|
|
69
|
+
* 3. Deletes the "active copy" at `~/.claude/plugins/<plugin>/` which
|
|
70
|
+
* takes priority over cache — without this, Claude Code loads the
|
|
71
|
+
* stale active copy and never checks cache for newer versions.
|
|
68
72
|
*/
|
|
69
73
|
export function invalidatePluginCache(pluginName) {
|
|
70
74
|
// 1. Remove entry from installed_plugins.json
|
|
@@ -82,6 +86,11 @@ export function invalidatePluginCache(pluginName) {
|
|
|
82
86
|
if (existsSync(cacheDir)) {
|
|
83
87
|
rmSync(cacheDir, { recursive: true, force: true });
|
|
84
88
|
}
|
|
89
|
+
// 3. Remove stale "active copy" (highest priority in Claude Code's loading)
|
|
90
|
+
const activeCopy = join(claudePluginDir(), pluginName);
|
|
91
|
+
if (existsSync(activeCopy)) {
|
|
92
|
+
rmSync(activeCopy, { recursive: true, force: true });
|
|
93
|
+
}
|
|
85
94
|
}
|
|
86
95
|
// --- JSON helpers ---
|
|
87
96
|
function readJsonSafe(filePath, fallback) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-integration.js","sourceRoot":"","sources":["../../src/lib/claude-integration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEnC,kCAAkC;AAElC,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,2BAA2B,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,YAAY,CAA0B,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEjE,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAAE,OAAO,CAAC,qBAAqB;IAEzD,IAAI,CAAC,gBAAgB,CAAC,GAAG;QACvB,MAAM,EAAE;YACN,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,eAAe;SACtB;QACD,eAAe,EAAE,eAAe;QAChC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IAEF,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,2BAA2B,EAAE,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO;IAElC,MAAM,IAAI,GAAG,YAAY,CAA0B,QAAQ,EAAE,EAAE,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9B,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,yCAAyC;AAEzC,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,YAAY,CAA0B,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEjE,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;QACpE,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;IAEA,IAAI,CAAC,cAA0C,CAAC,GAAG,UAAU,IAAI,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC;IAC7F,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO;IAElC,MAAM,IAAI,GAAG,YAAY,CAA0B,QAAQ,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAqD,CAAC;IAC3E,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,OAAO,OAAO,CAAC,GAAG,UAAU,IAAI,gBAAgB,EAAE,CAAC,CAAC;IACpD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,MAAM,IAAI,GAAG,YAAY,CAA0B,QAAQ,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAqD,CAAC;IAC3E,OAAO,OAAO,EAAE,CAAC,GAAG,UAAU,IAAI,gBAAgB,EAAE,CAAC,KAAK,IAAI,CAAC;AACjE,CAAC;AAED,6BAA6B;AAE7B
|
|
1
|
+
{"version":3,"file":"claude-integration.js","sourceRoot":"","sources":["../../src/lib/claude-integration.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { dirname } from "node:path";
|
|
1
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
3
|
import { getMachineId } from "./machine-id.js";
|
|
4
|
-
import { CONFIG_PATH, FORGE_DIR } from "./paths.js";
|
|
4
|
+
import { CONFIG_PATH, FORGE_DIR, LEGACY_FORGE_DIR, MARKETPLACE_DIR } from "./paths.js";
|
|
5
5
|
const DEFAULT_API_URL = "https://api.reumbra.com/velvet";
|
|
6
6
|
function defaultConfig() {
|
|
7
7
|
return {
|
|
@@ -11,7 +11,32 @@ function defaultConfig() {
|
|
|
11
11
|
installed_plugins: {},
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* One-time migration from legacy ~/.forge/ to OS-standard paths.
|
|
16
|
+
* Moves config.json and marketplace dir, then removes legacy dir.
|
|
17
|
+
*/
|
|
18
|
+
function migrateFromLegacy() {
|
|
19
|
+
if (!existsSync(LEGACY_FORGE_DIR) || existsSync(CONFIG_PATH))
|
|
20
|
+
return;
|
|
21
|
+
const legacyConfig = join(LEGACY_FORGE_DIR, "config.json");
|
|
22
|
+
const legacyMarketplace = join(LEGACY_FORGE_DIR, "marketplace");
|
|
23
|
+
mkdirSync(FORGE_DIR, { recursive: true });
|
|
24
|
+
if (existsSync(legacyConfig)) {
|
|
25
|
+
cpSync(legacyConfig, CONFIG_PATH);
|
|
26
|
+
}
|
|
27
|
+
if (existsSync(legacyMarketplace) && !existsSync(MARKETPLACE_DIR)) {
|
|
28
|
+
cpSync(legacyMarketplace, MARKETPLACE_DIR, { recursive: true });
|
|
29
|
+
}
|
|
30
|
+
// Clean up legacy dir
|
|
31
|
+
try {
|
|
32
|
+
rmSync(LEGACY_FORGE_DIR, { recursive: true });
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Best-effort cleanup — don't fail if dir is locked
|
|
36
|
+
}
|
|
37
|
+
}
|
|
14
38
|
export function loadConfig() {
|
|
39
|
+
migrateFromLegacy();
|
|
15
40
|
if (!existsSync(CONFIG_PATH)) {
|
|
16
41
|
return defaultConfig();
|
|
17
42
|
}
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/machine-id.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Deterministic machine ID: SHA256(hostname
|
|
3
|
-
*
|
|
2
|
+
* Deterministic machine ID: SHA256(hostname|platform|username).
|
|
3
|
+
* Full 64-char hex digest — must match Tauri app and API expectations.
|
|
4
4
|
*/
|
|
5
5
|
export declare function getMachineId(): string;
|
package/dist/lib/machine-id.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { hostname, platform, userInfo } from "node:os";
|
|
3
3
|
/**
|
|
4
|
-
* Deterministic machine ID: SHA256(hostname
|
|
5
|
-
*
|
|
4
|
+
* Deterministic machine ID: SHA256(hostname|platform|username).
|
|
5
|
+
* Full 64-char hex digest — must match Tauri app and API expectations.
|
|
6
6
|
*/
|
|
7
7
|
export function getMachineId() {
|
|
8
8
|
const raw = `${hostname()}|${platform()}|${userInfo().username}`;
|
|
9
|
-
return createHash("sha256").update(raw).digest("hex")
|
|
9
|
+
return createHash("sha256").update(raw).digest("hex");
|
|
10
10
|
}
|
|
11
11
|
//# sourceMappingURL=machine-id.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine-id.js","sourceRoot":"","sources":["../../src/lib/machine-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEvD;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,GAAG,QAAQ,EAAE,IAAI,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;IACjE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"machine-id.js","sourceRoot":"","sources":["../../src/lib/machine-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEvD;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,GAAG,QAAQ,EAAE,IAAI,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;IACjE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC"}
|
package/dist/lib/paths.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
/** Root
|
|
1
|
+
/** Root config dir (OS-standard) */
|
|
2
2
|
export declare const FORGE_DIR: string;
|
|
3
|
-
/** Config:
|
|
3
|
+
/** Config: {config_dir}/config.json */
|
|
4
4
|
export declare const CONFIG_PATH: string;
|
|
5
|
-
/** Cache dir
|
|
5
|
+
/** Cache dir (OS-standard) */
|
|
6
6
|
export declare const CACHE_DIR: string;
|
|
7
|
-
/** Marketplace dir:
|
|
7
|
+
/** Marketplace dir: {config_dir}/marketplace/ */
|
|
8
8
|
export declare const MARKETPLACE_DIR: string;
|
|
9
|
+
/** Legacy dir for migration detection */
|
|
10
|
+
export declare const LEGACY_FORGE_DIR: string;
|
|
9
11
|
/** Claude Code plugin directory */
|
|
10
12
|
export declare function claudePluginDir(): string;
|
|
11
13
|
/** Claude Code settings.json */
|
package/dist/lib/paths.js
CHANGED
|
@@ -1,13 +1,47 @@
|
|
|
1
1
|
import { homedir } from "node:os";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
/**
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
/**
|
|
4
|
+
* OS-standard config directory for Forge DevKit.
|
|
5
|
+
* - Windows: %APPDATA%/forge-devkit
|
|
6
|
+
* - macOS: ~/Library/Application Support/forge-devkit
|
|
7
|
+
* - Linux: ~/.config/forge-devkit
|
|
8
|
+
*/
|
|
9
|
+
function getConfigDir() {
|
|
10
|
+
switch (process.platform) {
|
|
11
|
+
case "win32":
|
|
12
|
+
return join(process.env.APPDATA || join(homedir(), "AppData", "Roaming"), "forge-devkit");
|
|
13
|
+
case "darwin":
|
|
14
|
+
return join(homedir(), "Library", "Application Support", "forge-devkit");
|
|
15
|
+
default:
|
|
16
|
+
return join(process.env.XDG_CONFIG_HOME || join(homedir(), ".config"), "forge-devkit");
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* OS-standard cache directory for Forge DevKit.
|
|
21
|
+
* - Windows: %LOCALAPPDATA%/forge-devkit/cache
|
|
22
|
+
* - macOS: ~/Library/Caches/forge-devkit
|
|
23
|
+
* - Linux: ~/.cache/forge-devkit
|
|
24
|
+
*/
|
|
25
|
+
function getCacheDir() {
|
|
26
|
+
switch (process.platform) {
|
|
27
|
+
case "win32":
|
|
28
|
+
return join(process.env.LOCALAPPDATA || join(homedir(), "AppData", "Local"), "forge-devkit", "cache");
|
|
29
|
+
case "darwin":
|
|
30
|
+
return join(homedir(), "Library", "Caches", "forge-devkit");
|
|
31
|
+
default:
|
|
32
|
+
return join(process.env.XDG_CACHE_HOME || join(homedir(), ".cache"), "forge-devkit");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Root config dir (OS-standard) */
|
|
36
|
+
export const FORGE_DIR = getConfigDir();
|
|
37
|
+
/** Config: {config_dir}/config.json */
|
|
6
38
|
export const CONFIG_PATH = join(FORGE_DIR, "config.json");
|
|
7
|
-
/** Cache dir
|
|
8
|
-
export const CACHE_DIR =
|
|
9
|
-
/** Marketplace dir:
|
|
39
|
+
/** Cache dir (OS-standard) */
|
|
40
|
+
export const CACHE_DIR = getCacheDir();
|
|
41
|
+
/** Marketplace dir: {config_dir}/marketplace/ */
|
|
10
42
|
export const MARKETPLACE_DIR = join(FORGE_DIR, "marketplace");
|
|
43
|
+
/** Legacy dir for migration detection */
|
|
44
|
+
export const LEGACY_FORGE_DIR = join(homedir(), ".forge");
|
|
11
45
|
/** Claude Code plugin directory */
|
|
12
46
|
export function claudePluginDir() {
|
|
13
47
|
return join(homedir(), ".claude", "plugins");
|
package/dist/lib/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;GAKG;AACH,SAAS,YAAY;IACnB,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;QAC5F,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,cAAc,CAAC,CAAC;QAC3E;YACE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW;IAClB,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,OAAO;YACV,OAAO,IAAI,CACT,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAC/D,cAAc,EACd,OAAO,CACR,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC9D;YACE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED,oCAAoC;AACpC,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;AAExC,uCAAuC;AACvC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAE1D,8BAA8B;AAC9B,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC;AAEvC,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAE9D,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAE1D,mCAAmC;AACnC,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AACrD,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,2BAA2B;IACzC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;AAC1E,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,0BAA0B;IACxC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;AACzE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC"}
|