@c0sc0s/orbit 0.5.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/README.md +38 -0
- package/assets/README.md +9 -0
- package/assets/app-icon.png +0 -0
- package/assets/icon.icns +0 -0
- package/assets/logo.png +0 -0
- package/dist/cdp/client.d.ts +33 -0
- package/dist/cdp/client.d.ts.map +1 -0
- package/dist/cdp/client.js +159 -0
- package/dist/cdp/client.js.map +1 -0
- package/dist/cdp/expressions.d.ts +8 -0
- package/dist/cdp/expressions.d.ts.map +1 -0
- package/dist/cdp/expressions.js +27 -0
- package/dist/cdp/expressions.js.map +1 -0
- package/dist/cdp/target-registry.d.ts +33 -0
- package/dist/cdp/target-registry.d.ts.map +1 -0
- package/dist/cdp/target-registry.js +139 -0
- package/dist/cdp/target-registry.js.map +1 -0
- package/dist/cli/arguments.d.ts +13 -0
- package/dist/cli/arguments.d.ts.map +1 -0
- package/dist/cli/arguments.js +29 -0
- package/dist/cli/arguments.js.map +1 -0
- package/dist/cli/platform.d.ts +2 -0
- package/dist/cli/platform.d.ts.map +1 -0
- package/dist/cli/platform.js +68 -0
- package/dist/cli/platform.js.map +1 -0
- package/dist/cli/run.d.ts +2 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +148 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +13 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/manifest.d.ts +12 -0
- package/dist/config/manifest.d.ts.map +1 -0
- package/dist/config/manifest.js +71 -0
- package/dist/config/manifest.js.map +1 -0
- package/dist/host/daemon.d.ts +54 -0
- package/dist/host/daemon.d.ts.map +1 -0
- package/dist/host/daemon.js +185 -0
- package/dist/host/daemon.js.map +1 -0
- package/dist/host/plugin-host.d.ts +50 -0
- package/dist/host/plugin-host.d.ts.map +1 -0
- package/dist/host/plugin-host.js +230 -0
- package/dist/host/plugin-host.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/installation/entry.d.ts +2 -0
- package/dist/installation/entry.d.ts.map +1 -0
- package/dist/installation/entry.js +14 -0
- package/dist/installation/entry.js.map +1 -0
- package/dist/installation/files.d.ts +5 -0
- package/dist/installation/files.d.ts.map +1 -0
- package/dist/installation/files.js +101 -0
- package/dist/installation/files.js.map +1 -0
- package/dist/installation/legacy.d.ts +19 -0
- package/dist/installation/legacy.d.ts.map +1 -0
- package/dist/installation/legacy.js +52 -0
- package/dist/installation/legacy.js.map +1 -0
- package/dist/installation/lock.d.ts +2 -0
- package/dist/installation/lock.d.ts.map +1 -0
- package/dist/installation/lock.js +18 -0
- package/dist/installation/lock.js.map +1 -0
- package/dist/installation/manager.d.ts +180 -0
- package/dist/installation/manager.d.ts.map +1 -0
- package/dist/installation/manager.js +469 -0
- package/dist/installation/manager.js.map +1 -0
- package/dist/lifecycle/resource-scope.d.ts +11 -0
- package/dist/lifecycle/resource-scope.d.ts.map +1 -0
- package/dist/lifecycle/resource-scope.js +40 -0
- package/dist/lifecycle/resource-scope.js.map +1 -0
- package/dist/platform/codex-process.d.ts +33 -0
- package/dist/platform/codex-process.d.ts.map +1 -0
- package/dist/platform/codex-process.js +122 -0
- package/dist/platform/codex-process.js.map +1 -0
- package/dist/platform/launcher.d.ts +12 -0
- package/dist/platform/launcher.d.ts.map +1 -0
- package/dist/platform/launcher.js +46 -0
- package/dist/platform/launcher.js.map +1 -0
- package/dist/plugins/codex-extension.d.ts +12 -0
- package/dist/plugins/codex-extension.d.ts.map +1 -0
- package/dist/plugins/codex-extension.js +100 -0
- package/dist/plugins/codex-extension.js.map +1 -0
- package/dist/plugins/manifest.d.ts +20 -0
- package/dist/plugins/manifest.d.ts.map +1 -0
- package/dist/plugins/manifest.js +51 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/registry.d.ts +3 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +26 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/protocol/ipc.d.ts +38 -0
- package/dist/protocol/ipc.d.ts.map +1 -0
- package/dist/protocol/ipc.js +5 -0
- package/dist/protocol/ipc.js.map +1 -0
- package/dist/protocol/types.d.ts +55 -0
- package/dist/protocol/types.d.ts.map +1 -0
- package/dist/protocol/types.js +2 -0
- package/dist/protocol/types.js.map +1 -0
- package/dist/renderer/loader.d.ts +32 -0
- package/dist/renderer/loader.d.ts.map +1 -0
- package/dist/renderer/loader.js +130 -0
- package/dist/renderer/loader.js.map +1 -0
- package/dist/renderer/transport.d.ts +28 -0
- package/dist/renderer/transport.d.ts.map +1 -0
- package/dist/renderer/transport.js +89 -0
- package/dist/renderer/transport.js.map +1 -0
- package/dist/sdk/contracts.d.ts +50 -0
- package/dist/sdk/contracts.d.ts.map +1 -0
- package/dist/sdk/contracts.js +2 -0
- package/dist/sdk/contracts.js.map +1 -0
- package/dist/service/module.d.ts +24 -0
- package/dist/service/module.d.ts.map +1 -0
- package/dist/service/module.js +97 -0
- package/dist/service/module.js.map +1 -0
- package/dist/service/process.d.ts +32 -0
- package/dist/service/process.d.ts.map +1 -0
- package/dist/service/process.js +95 -0
- package/dist/service/process.js.map +1 -0
- package/dist/service/worker.d.ts +2 -0
- package/dist/service/worker.d.ts.map +1 -0
- package/dist/service/worker.js +116 -0
- package/dist/service/worker.js.map +1 -0
- package/examples/hello.js +10 -0
- package/examples/loader.json +4 -0
- package/examples/service-loader.json +4 -0
- package/examples/service.js +10 -0
- package/examples/service.mjs +3 -0
- package/package.json +40 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createServiceModule } from "../service/module.js";
|
|
2
|
+
import type { PluginTargetRegistry } from "../cdp/target-registry.js";
|
|
3
|
+
import type { CdpClient } from "../cdp/client.js";
|
|
4
|
+
import type { PluginEntry } from "../sdk/contracts.js";
|
|
5
|
+
import type { LoaderManifest, PluginResult, CleanupFailure } from "../protocol/types.js";
|
|
6
|
+
import type { ResourceScope } from "../lifecycle/resource-scope.js";
|
|
7
|
+
import type { HostModule } from "../service/module.js";
|
|
8
|
+
interface HostClient {
|
|
9
|
+
client: CdpClient;
|
|
10
|
+
generation: number;
|
|
11
|
+
ready: boolean;
|
|
12
|
+
bound: boolean;
|
|
13
|
+
bindings: string[];
|
|
14
|
+
}
|
|
15
|
+
interface ModuleRecord {
|
|
16
|
+
id: string;
|
|
17
|
+
scope: ResourceScope;
|
|
18
|
+
module: HostModule | null;
|
|
19
|
+
clients: Map<string, HostClient>;
|
|
20
|
+
pending: Set<Promise<unknown>>;
|
|
21
|
+
error: string | null;
|
|
22
|
+
signature: string;
|
|
23
|
+
retiring?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** Runs configured host modules and their renderer plugins without product-specific branches. */
|
|
26
|
+
export declare class PluginHost {
|
|
27
|
+
registry: PluginTargetRegistry;
|
|
28
|
+
manifest: LoaderManifest;
|
|
29
|
+
createModule: typeof createServiceModule;
|
|
30
|
+
modules: ModuleRecord[];
|
|
31
|
+
syncing: Promise<PluginResult[]> | null;
|
|
32
|
+
closing: Promise<CleanupFailure[]> | null;
|
|
33
|
+
constructor({ registry, manifest, createModule }: {
|
|
34
|
+
registry: PluginTargetRegistry;
|
|
35
|
+
manifest: LoaderManifest;
|
|
36
|
+
createModule?: typeof createServiceModule;
|
|
37
|
+
});
|
|
38
|
+
start(): Promise<void>;
|
|
39
|
+
add(entry: PluginEntry): Promise<void>;
|
|
40
|
+
sync(): Promise<PluginResult[]>;
|
|
41
|
+
synchronize(): Promise<PluginResult[]>;
|
|
42
|
+
removeRecord(record: ModuleRecord): Promise<CleanupFailure[]>;
|
|
43
|
+
status(): {
|
|
44
|
+
id: string;
|
|
45
|
+
state: string;
|
|
46
|
+
}[];
|
|
47
|
+
close(): Promise<CleanupFailure[]>;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=plugin-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-host.d.ts","sourceRoot":"","sources":["../../src/host/plugin-host.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,UAAU,UAAU;IAAG,MAAM,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE;AAClH,UAAU,YAAY;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE;AACrN,iGAAiG;AACjG,qBAAa,UAAU;IACrB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,YAAY,EAAE,OAAO,mBAAmB,CAAC;IACzC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1C,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAkC,EAAE,EAAE;QAAE,QAAQ,EAAE,oBAAoB,CAAC;QAAC,QAAQ,EAAE,cAAc,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,mBAAmB,CAAA;KAAE,EAO9K;IAEK,KAAK,kBAGV;IAEK,GAAG,CAAC,KAAK,EAAE,WAAW,iBAmB3B;IAED,IAAI,4BAIH;IAEK,WAAW,4BA2EhB;IAEK,YAAY,CAAC,MAAM,EAAE,YAAY,6BAetC;IAED,MAAM;;;QAIL;IAED,KAAK,8BAWJ;CACF"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { mkdir } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { createServiceModule } from "../service/module.js";
|
|
4
|
+
import { createResourceScope } from "../lifecycle/resource-scope.js";
|
|
5
|
+
import { readManifest } from "../config/manifest.js";
|
|
6
|
+
/** Runs configured host modules and their renderer plugins without product-specific branches. */
|
|
7
|
+
export class PluginHost {
|
|
8
|
+
registry;
|
|
9
|
+
manifest;
|
|
10
|
+
createModule;
|
|
11
|
+
modules;
|
|
12
|
+
syncing;
|
|
13
|
+
closing;
|
|
14
|
+
constructor({ registry, manifest, createModule = createServiceModule }) {
|
|
15
|
+
this.registry = registry;
|
|
16
|
+
this.manifest = manifest;
|
|
17
|
+
this.createModule = createModule;
|
|
18
|
+
this.modules = [];
|
|
19
|
+
this.syncing = null;
|
|
20
|
+
this.closing = null;
|
|
21
|
+
}
|
|
22
|
+
async start() {
|
|
23
|
+
if (this.modules.length || this.closing)
|
|
24
|
+
throw new Error("Plugin host has already started");
|
|
25
|
+
for (const entry of this.manifest.plugins.filter((item) => item.enabled !== false))
|
|
26
|
+
await this.add(entry);
|
|
27
|
+
}
|
|
28
|
+
async add(entry) {
|
|
29
|
+
const scope = createResourceScope();
|
|
30
|
+
const record = { id: entry.id, scope, module: null, clients: new Map(), pending: new Set(), error: null, signature: JSON.stringify(entry) };
|
|
31
|
+
this.modules.push(record);
|
|
32
|
+
try {
|
|
33
|
+
const stateDirectory = join(this.manifest.root, "module-data", entry.id);
|
|
34
|
+
await mkdir(stateDirectory, { recursive: true, mode: 0o700 });
|
|
35
|
+
const activation = this.createModule(entry, { root: this.manifest.root, stateDirectory, owner: this.registry.owner, onDispose: scope.onDispose })
|
|
36
|
+
.then((module) => { if (typeof module?.dispose === "function")
|
|
37
|
+
scope.onDispose(() => module.dispose?.()); return module; });
|
|
38
|
+
record.module = await scope.bounded(() => activation, "Service activation");
|
|
39
|
+
if (typeof record.module?.renderer !== "function")
|
|
40
|
+
throw new Error("Expected renderer descriptor provider");
|
|
41
|
+
for (const binding of record.module.bindings ?? []) {
|
|
42
|
+
if (typeof binding.name !== "string" || !/^__[A-Za-z][A-Za-z0-9_]*$/.test(binding.name) || typeof binding.handle !== "function")
|
|
43
|
+
throw new Error("Invalid module binding");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
record.error = "host-activation";
|
|
48
|
+
try {
|
|
49
|
+
await scope.close();
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
record.error = "host-cleanup";
|
|
53
|
+
}
|
|
54
|
+
record.module = null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
sync() {
|
|
58
|
+
if (this.closing)
|
|
59
|
+
return Promise.reject(new Error("Plugin host is closing"));
|
|
60
|
+
this.syncing ??= this.synchronize().finally(() => { this.syncing = null; });
|
|
61
|
+
return this.syncing;
|
|
62
|
+
}
|
|
63
|
+
async synchronize() {
|
|
64
|
+
const latest = await readManifest(this.manifest.path);
|
|
65
|
+
const entries = latest.plugins.filter((item) => item.enabled !== false);
|
|
66
|
+
for (const record of [...this.modules]) {
|
|
67
|
+
if (!record.retiring && !entries.some((entry) => entry.id === record.id && JSON.stringify(entry) === record.signature)) {
|
|
68
|
+
const failures = await this.removeRecord(record);
|
|
69
|
+
if (failures.length) {
|
|
70
|
+
record.retiring = true;
|
|
71
|
+
record.error = "module-cleanup";
|
|
72
|
+
record.module = null;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
this.modules = this.modules.filter((item) => item !== record);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
for (const entry of entries)
|
|
79
|
+
if (!this.modules.some((record) => record.id === entry.id))
|
|
80
|
+
await this.add(entry);
|
|
81
|
+
const targets = await this.registry.discover();
|
|
82
|
+
this.registry.prune(targets);
|
|
83
|
+
if (!targets.length)
|
|
84
|
+
throw new Error("No Codex renderer found");
|
|
85
|
+
const targetIds = new Set(targets.map(({ id }) => id));
|
|
86
|
+
const results = [];
|
|
87
|
+
for (const record of this.modules) {
|
|
88
|
+
if (!record.module || record.scope.signal.aborted) {
|
|
89
|
+
results.push({ pluginId: record.id, stage: record.error ?? undefined, error: "Host module unavailable" });
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
for (const [id] of record.clients) {
|
|
93
|
+
if (!targetIds.has(id)) {
|
|
94
|
+
record.clients.delete(id);
|
|
95
|
+
try {
|
|
96
|
+
await record.scope.bounded(() => record.module?.onTargetRemoved?.(id), "Target cleanup");
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
record.error = "target-cleanup";
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
await record.scope.bounded(() => record.module?.tick?.(), "Host tick");
|
|
105
|
+
for (const target of targets) {
|
|
106
|
+
if (record.scope.signal.aborted)
|
|
107
|
+
break;
|
|
108
|
+
let stage = "connect";
|
|
109
|
+
try {
|
|
110
|
+
await this.registry.claimPlugin(target, record.id);
|
|
111
|
+
const client = await this.registry.client(target);
|
|
112
|
+
const previous = record.clients.get(target.id);
|
|
113
|
+
const changed = !previous?.bound || previous.client !== client || previous.generation !== client.generation;
|
|
114
|
+
if (changed) {
|
|
115
|
+
await record.scope.bounded(() => record.module?.onTargetRemoved?.(target.id), "Target cleanup");
|
|
116
|
+
if (previous?.client === client)
|
|
117
|
+
for (const name of previous.bindings)
|
|
118
|
+
await client.removeBinding(name);
|
|
119
|
+
const state = { client, generation: client.generation, ready: false, bound: false, bindings: [] };
|
|
120
|
+
record.clients.set(target.id, state);
|
|
121
|
+
for (const binding of record.module.bindings ?? []) {
|
|
122
|
+
if (client.bindingHandlers.has(binding.name))
|
|
123
|
+
throw new Error("Duplicate module binding");
|
|
124
|
+
await client.addBinding(binding.name, (params) => {
|
|
125
|
+
if (record.scope.signal.aborted)
|
|
126
|
+
return;
|
|
127
|
+
const pending = Promise.resolve().then(() => binding.handle(client, params));
|
|
128
|
+
record.pending.add(pending);
|
|
129
|
+
return pending.catch(() => { record.error = "binding"; }).finally(() => record.pending.delete(pending));
|
|
130
|
+
});
|
|
131
|
+
state.bindings.push(binding.name);
|
|
132
|
+
}
|
|
133
|
+
state.bound = true;
|
|
134
|
+
}
|
|
135
|
+
stage = "renderer";
|
|
136
|
+
const descriptor = await record.scope.bounded(() => record.module.renderer(client), "Renderer descriptor");
|
|
137
|
+
if (descriptor?.id !== record.id || typeof descriptor.version !== "string" || typeof descriptor.expression !== "string")
|
|
138
|
+
throw new Error("Invalid module renderer descriptor");
|
|
139
|
+
const result = await this.registry.ensurePlugins([descriptor], [target]);
|
|
140
|
+
results.push(...result.results);
|
|
141
|
+
if (result.results.some((item) => item.error))
|
|
142
|
+
continue;
|
|
143
|
+
const state = record.clients.get(target.id);
|
|
144
|
+
if (!state.ready || result.injectedTargetIds.has(target.id)) {
|
|
145
|
+
stage = "ready";
|
|
146
|
+
await record.scope.bounded(() => record.module?.onReady?.(client), "Module ready");
|
|
147
|
+
state.ready = true;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
if (error instanceof Error && (error.message === "Module ready timed out" || error.message === "Target cleanup timed out")) {
|
|
152
|
+
record.scope.abort();
|
|
153
|
+
record.error = stage;
|
|
154
|
+
}
|
|
155
|
+
results.push({ targetId: target.id, pluginId: record.id, stage, error: `Module ${stage} failed` });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
record.scope.abort();
|
|
161
|
+
record.error = "host-tick";
|
|
162
|
+
results.push({ pluginId: record.id, stage: "host-tick", error: "Host module synchronization failed" });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (!this.modules.length && targets.length)
|
|
166
|
+
await this.registry.ensurePlugins([], targets);
|
|
167
|
+
return results;
|
|
168
|
+
}
|
|
169
|
+
async removeRecord(record) {
|
|
170
|
+
record.scope.abort();
|
|
171
|
+
const failures = [];
|
|
172
|
+
try {
|
|
173
|
+
record.module?.cancelPending?.();
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
failures.push({ pluginId: record.id, stage: "request-cancellation" });
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
await this.registry.removePlugins([record.id]);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
failures.push({ pluginId: record.id, stage: "renderer-cleanup" });
|
|
183
|
+
}
|
|
184
|
+
for (const { client, bindings } of record.clients.values()) {
|
|
185
|
+
for (const name of bindings) {
|
|
186
|
+
try {
|
|
187
|
+
await client.removeBinding(name);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
failures.push({ pluginId: record.id, stage: "binding-cleanup" });
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
record.clients.clear();
|
|
195
|
+
try {
|
|
196
|
+
await record.scope.bounded(() => Promise.allSettled([...record.pending]), "Pending messages");
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
failures.push({ pluginId: record.id, stage: "pending-messages" });
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
await record.scope.close();
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
failures.push({ pluginId: record.id, stage: "host-cleanup" });
|
|
206
|
+
}
|
|
207
|
+
return failures;
|
|
208
|
+
}
|
|
209
|
+
status() {
|
|
210
|
+
return this.modules.map((record) => ({ id: record.id,
|
|
211
|
+
state: record.retiring ? "cleanup-failed" : record.module && !record.scope.signal.aborted ? "active" : "failed",
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
close() {
|
|
215
|
+
if (this.closing)
|
|
216
|
+
return this.closing;
|
|
217
|
+
for (const record of this.modules)
|
|
218
|
+
record.scope.abort();
|
|
219
|
+
this.closing = (async () => {
|
|
220
|
+
await this.syncing?.catch(() => { });
|
|
221
|
+
const failures = [];
|
|
222
|
+
for (const record of [...this.modules].reverse())
|
|
223
|
+
failures.push(...await this.removeRecord(record));
|
|
224
|
+
this.registry.close();
|
|
225
|
+
return failures;
|
|
226
|
+
})();
|
|
227
|
+
return this.closing;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=plugin-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-host.js","sourceRoot":"","sources":["../../src/host/plugin-host.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { CodexProcess, findCodexApp } from "./platform/codex-process.js";
|
|
2
|
+
export { CdpClient } from "./cdp/client.js";
|
|
3
|
+
export { PluginTargetRegistry, isCodexRendererTarget } from "./cdp/target-registry.js";
|
|
4
|
+
export { LOADER_VERSION, buildLoaderExpression, buildPluginExpression, buildPluginRemovalExpression, buildPluginMessageExpression } from "./cdp/expressions.js";
|
|
5
|
+
export { PluginHost } from "./host/plugin-host.js";
|
|
6
|
+
export { createLauncher } from "./platform/launcher.js";
|
|
7
|
+
export type * from "./sdk/contracts.js";
|
|
8
|
+
export type * from "./protocol/types.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAChK,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,mBAAmB,oBAAoB,CAAC;AACxC,mBAAmB,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { CodexProcess, findCodexApp } from "./platform/codex-process.js";
|
|
2
|
+
export { CdpClient } from "./cdp/client.js";
|
|
3
|
+
export { PluginTargetRegistry, isCodexRendererTarget } from "./cdp/target-registry.js";
|
|
4
|
+
export { LOADER_VERSION, buildLoaderExpression, buildPluginExpression, buildPluginRemovalExpression, buildPluginMessageExpression } from "./cdp/expressions.js";
|
|
5
|
+
export { PluginHost } from "./host/plugin-host.js";
|
|
6
|
+
export { createLauncher } from "./platform/launcher.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAChK,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/installation/entry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, resolve, relative } from "node:path";
|
|
3
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
4
|
+
const root = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
process.env.ORBIT_HOME = root;
|
|
6
|
+
const portIndex = process.argv.indexOf("--port");
|
|
7
|
+
if (portIndex >= 0)
|
|
8
|
+
process.env.ORBIT_CDP_PORT = process.argv[portIndex + 1];
|
|
9
|
+
const config = JSON.parse(await readFile(resolve(root, "loader.json"), "utf8"));
|
|
10
|
+
const cli = resolve(root, config.orbit.runtime.path, "dist/cli.js");
|
|
11
|
+
if (relative(root, cli).startsWith(".."))
|
|
12
|
+
throw new Error("Invalid active runtime path");
|
|
13
|
+
await import(pathToFileURL(cli).href);
|
|
14
|
+
//# sourceMappingURL=entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/installation/entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;AAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjD,IAAI,SAAS,IAAI,CAAC;IAAE,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAChF,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACpE,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;IAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACzF,MAAM,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function exists(path: string): Promise<boolean>;
|
|
2
|
+
export declare function inside(root: string, path: string): string;
|
|
3
|
+
export declare function atomicJson(path: string, value: unknown): Promise<void>;
|
|
4
|
+
export declare function snapshotPackage(source: string, destination: string, ancestry?: Set<string>, installedDependency?: boolean): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/installation/files.ts"],"names":[],"mappings":"AAgBA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,oBAQxC;AACD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAehD;AACD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,iBAQ5D;AACD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,cAAoB,EAC5B,mBAAmB,UAAQ,iBA2D5B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { cp, lstat, mkdir, readFile, readdir, realpath, rename, rm, writeFile, } from "node:fs/promises";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import { lstatSync } from "node:fs";
|
|
6
|
+
export async function exists(path) {
|
|
7
|
+
try {
|
|
8
|
+
await lstat(path);
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
if (error.code === "ENOENT")
|
|
13
|
+
return false;
|
|
14
|
+
throw error;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function inside(root, path) {
|
|
18
|
+
const result = resolve(root, path), local = relative(root, result);
|
|
19
|
+
if (!local || local.startsWith("..") || isAbsolute(local))
|
|
20
|
+
throw new Error("Path must stay within its owned directory");
|
|
21
|
+
for (let current = result;; current = dirname(current)) {
|
|
22
|
+
try {
|
|
23
|
+
if (lstatSync(current).isSymbolicLink())
|
|
24
|
+
throw new Error("Owned package paths must not traverse symlinks");
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (error.code !== "ENOENT")
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
if (current === resolve(root))
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
export async function atomicJson(path, value) {
|
|
36
|
+
const next = `${path}.${randomUUID()}.tmp`;
|
|
37
|
+
try {
|
|
38
|
+
await writeFile(next, JSON.stringify(value, null, 2) + "\n", { mode: 0o600 });
|
|
39
|
+
await rename(next, path);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
await rm(next, { force: true });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function snapshotPackage(source, destination, ancestry = new Set(), installedDependency = false) {
|
|
46
|
+
source = await realpath(source);
|
|
47
|
+
if (ancestry.has(source))
|
|
48
|
+
throw new Error("Circular package dependency cannot be snapshotted");
|
|
49
|
+
const manifest = JSON.parse(await readFile(join(source, "package.json"), "utf8"));
|
|
50
|
+
const declared = manifest.files;
|
|
51
|
+
const concrete = Array.isArray(declared) &&
|
|
52
|
+
declared.length > 0 &&
|
|
53
|
+
declared.every((file) => typeof file === "string" && !/[*?]/u.test(file));
|
|
54
|
+
if (!concrete && !installedDependency)
|
|
55
|
+
throw new Error("Local packages need an explicit files allowlist without globs");
|
|
56
|
+
const contents = await readdir(source);
|
|
57
|
+
const files = concrete
|
|
58
|
+
? declared
|
|
59
|
+
: contents.filter((file) => !["node_modules", ".git"].includes(file));
|
|
60
|
+
await mkdir(destination, { recursive: true, mode: 0o700 });
|
|
61
|
+
const legalFiles = contents.filter((file) => /^licen[cs]e(?:\..*)?$/iu.test(file));
|
|
62
|
+
for (const file of new Set(["package.json", "README.md", ...legalFiles, ...files])) {
|
|
63
|
+
const entry = inside(source, file);
|
|
64
|
+
if (!(await exists(entry)))
|
|
65
|
+
continue;
|
|
66
|
+
await cp(entry, inside(destination, file), {
|
|
67
|
+
recursive: true,
|
|
68
|
+
filter: (path) => {
|
|
69
|
+
const local = relative(source, path);
|
|
70
|
+
if (local.split(/[\\/]/u).some((part) => ["node_modules", ".git"].includes(part)))
|
|
71
|
+
return false;
|
|
72
|
+
if (lstatSync(path).isSymbolicLink())
|
|
73
|
+
throw new Error("Package snapshots cannot contain symlinks");
|
|
74
|
+
return true;
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const resolver = createRequire(join(source, "package.json"));
|
|
79
|
+
for (const dependency of Object.keys(manifest.dependencies ?? {})) {
|
|
80
|
+
let dependencyRoot;
|
|
81
|
+
try {
|
|
82
|
+
dependencyRoot = dirname(resolver.resolve(`${dependency}/package.json`));
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
dependencyRoot = dirname(resolver.resolve(dependency));
|
|
86
|
+
while (true) {
|
|
87
|
+
if (await exists(join(dependencyRoot, "package.json"))) {
|
|
88
|
+
const candidate = JSON.parse(await readFile(join(dependencyRoot, "package.json"), "utf8"));
|
|
89
|
+
if (candidate.name === dependency)
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
const parent = dirname(dependencyRoot);
|
|
93
|
+
if (parent === dependencyRoot)
|
|
94
|
+
throw new Error(`Missing dependency ${dependency}`);
|
|
95
|
+
dependencyRoot = parent;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
await snapshotPackage(dependencyRoot, inside(destination, `node_modules/${dependency}`), new Set([...ancestry, source]), true);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/installation/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { InstallationOptions } from "./manager.js";
|
|
2
|
+
export declare function retireLegacyTags(options: {
|
|
3
|
+
directory: string;
|
|
4
|
+
platformRoot: string;
|
|
5
|
+
home: string;
|
|
6
|
+
applicationsRoot?: string;
|
|
7
|
+
port: number;
|
|
8
|
+
run: NonNullable<InstallationOptions["run"]>;
|
|
9
|
+
codexBinary?: string;
|
|
10
|
+
manageExtensions?: boolean;
|
|
11
|
+
platform: string;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
migrated: boolean;
|
|
14
|
+
dataPreserved?: undefined;
|
|
15
|
+
} | {
|
|
16
|
+
migrated: boolean;
|
|
17
|
+
dataPreserved: string;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=legacy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../src/installation/legacy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;;;;;;GAwDA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { exists } from "./files.js";
|
|
4
|
+
import { createLauncher } from "../platform/launcher.js";
|
|
5
|
+
import { createCodexExtensionManager } from "../plugins/codex-extension.js";
|
|
6
|
+
export async function retireLegacyTags(options) {
|
|
7
|
+
const { directory, platformRoot, run, port } = options;
|
|
8
|
+
if (!(await exists(join(directory, "install.json"))))
|
|
9
|
+
return { migrated: false };
|
|
10
|
+
if (resolve(directory) === resolve(platformRoot))
|
|
11
|
+
throw new Error("Legacy data and Orbit platform directories must be distinct");
|
|
12
|
+
const metadata = JSON.parse(await readFile(join(directory, "install.json"), "utf8"));
|
|
13
|
+
if (metadata.platformRoot === platformRoot)
|
|
14
|
+
return { migrated: true };
|
|
15
|
+
if (!Array.isArray(metadata.runtimeFiles) || !metadata.pluginVersion)
|
|
16
|
+
throw new Error("Unrecognized legacy installation");
|
|
17
|
+
const configPath = join(directory, "loader.json");
|
|
18
|
+
const config = JSON.parse(await readFile(configPath, "utf8"));
|
|
19
|
+
if (config.plugins?.some((plugin) => plugin.id !== "codex-tags"))
|
|
20
|
+
throw new Error("Legacy installation contains other modules; migrate their ownership explicitly before proceeding");
|
|
21
|
+
const candidates = [
|
|
22
|
+
"node_modules/@c0sc0s/orbit/dist/cli.js",
|
|
23
|
+
"node_modules/@c0sc0s/orbit/src/cli.mjs",
|
|
24
|
+
"plugin-loader/cli.mjs",
|
|
25
|
+
];
|
|
26
|
+
for (const candidate of candidates)
|
|
27
|
+
if (await exists(join(directory, candidate))) {
|
|
28
|
+
await run(process.execPath, [join(directory, candidate), "stop", "--config", configPath, "--port", String(port)], { timeout: 90_000 });
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
if (options.manageExtensions !== false) {
|
|
32
|
+
const extensions = createCodexExtensionManager(platformRoot, run, options.codexBinary);
|
|
33
|
+
const state = JSON.parse((await extensions.command(["plugin", "marketplace", "list", "--json"])).stdout);
|
|
34
|
+
const old = state.marketplaces?.find((entry) => entry.name === "codex-tags-cli");
|
|
35
|
+
if (old && resolve(old.root) === resolve(directory, "plugin-marketplace"))
|
|
36
|
+
await extensions.remove("codex-tags", "codex-tags-cli", true, old.root);
|
|
37
|
+
}
|
|
38
|
+
const launcherPath = join(options.applicationsRoot ?? join(options.home, "Applications"), "Codex Tags.app");
|
|
39
|
+
if (options.platform === "darwin" && (await exists(launcherPath)))
|
|
40
|
+
await createLauncher({
|
|
41
|
+
launcherPath,
|
|
42
|
+
nodePath: process.execPath,
|
|
43
|
+
cliPath: join(platformRoot, "orbit.mjs"),
|
|
44
|
+
configPath: join(platformRoot, "loader.json"),
|
|
45
|
+
port,
|
|
46
|
+
logPath: join(platformRoot, "launcher.log"),
|
|
47
|
+
bundleId: "io.github.c0sc0s.codex-tags",
|
|
48
|
+
iconPath: join(options.applicationsRoot ?? join(options.home, "Applications"), "Orbit.app/Contents/Resources/icon.icns"),
|
|
49
|
+
});
|
|
50
|
+
return { migrated: true, dataPreserved: directory };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../src/installation/legacy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/installation/lock.ts"],"names":[],"mappings":"AAEA,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,cAgB5F"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { open, rm } from "node:fs/promises";
|
|
2
|
+
export async function withInstallationLock(configPath, operation) {
|
|
3
|
+
const path = `${configPath}.lock`;
|
|
4
|
+
const handle = await open(path, "wx", 0o600).catch((error) => {
|
|
5
|
+
if (error.code === "EEXIST")
|
|
6
|
+
throw new Error("Another Orbit configuration operation is running; stale locks require explicit inspection");
|
|
7
|
+
throw error;
|
|
8
|
+
});
|
|
9
|
+
try {
|
|
10
|
+
await handle.writeFile(JSON.stringify({ pid: process.pid, startedAt: Date.now() }));
|
|
11
|
+
return await operation();
|
|
12
|
+
}
|
|
13
|
+
finally {
|
|
14
|
+
await handle.close();
|
|
15
|
+
await rm(path, { force: true });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/installation/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAI,UAAkB,EAAE,SAA2B;IAC3F,MAAM,IAAI,GAAG,GAAG,UAAU,OAAO,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YACzB,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;QACJ,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACpF,OAAO,MAAM,SAAS,EAAE,CAAC;IAC3B,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
|