@alan512/experienceengine 0.4.0 → 0.4.1

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.
Files changed (70) hide show
  1. package/README.md +8 -2
  2. package/README.zh-CN.md +8 -2
  3. package/dist/adapters/antigravity/artifact-analyzer.d.ts +27 -0
  4. package/dist/adapters/antigravity/artifact-analyzer.js +151 -0
  5. package/dist/adapters/antigravity/artifact-analyzer.js.map +1 -0
  6. package/dist/adapters/codex/behavior-loop.d.ts +15 -43
  7. package/dist/adapters/codex/behavior-loop.js +2 -215
  8. package/dist/adapters/codex/behavior-loop.js.map +1 -1
  9. package/dist/adapters/codex/mcp-server.d.ts +37 -44
  10. package/dist/adapters/codex/mcp-server.js +5 -427
  11. package/dist/adapters/codex/mcp-server.js.map +1 -1
  12. package/dist/adapters/shared-mcp/action-registry.d.ts +121 -0
  13. package/dist/adapters/shared-mcp/action-registry.js +435 -0
  14. package/dist/adapters/shared-mcp/action-registry.js.map +1 -0
  15. package/dist/adapters/shared-mcp/behavior-loop.d.ts +91 -0
  16. package/dist/adapters/shared-mcp/behavior-loop.js +218 -0
  17. package/dist/adapters/shared-mcp/behavior-loop.js.map +1 -0
  18. package/dist/adapters/shared-mcp/server.d.ts +113 -0
  19. package/dist/adapters/shared-mcp/server.js +423 -0
  20. package/dist/adapters/shared-mcp/server.js.map +1 -0
  21. package/dist/cli/commands/agy-exec.d.ts +23 -0
  22. package/dist/cli/commands/agy-exec.js +92 -0
  23. package/dist/cli/commands/agy-exec.js.map +1 -0
  24. package/dist/cli/commands/antigravity-hook.d.ts +58 -0
  25. package/dist/cli/commands/antigravity-hook.js +192 -0
  26. package/dist/cli/commands/antigravity-hook.js.map +1 -0
  27. package/dist/cli/commands/antigravity.d.ts +8 -0
  28. package/dist/cli/commands/antigravity.js +37 -0
  29. package/dist/cli/commands/antigravity.js.map +1 -0
  30. package/dist/cli/commands/doctor.d.ts +2 -0
  31. package/dist/cli/commands/doctor.js +104 -3
  32. package/dist/cli/commands/doctor.js.map +1 -1
  33. package/dist/cli/commands/install.d.ts +3 -1
  34. package/dist/cli/commands/install.js +32 -2
  35. package/dist/cli/commands/install.js.map +1 -1
  36. package/dist/cli/commands/mcp-server.js +10 -2
  37. package/dist/cli/commands/mcp-server.js.map +1 -1
  38. package/dist/cli/commands/repair.d.ts +1 -1
  39. package/dist/cli/commands/repair.js +21 -3
  40. package/dist/cli/commands/repair.js.map +1 -1
  41. package/dist/cli/commands/upgrade.d.ts +4 -1
  42. package/dist/cli/commands/upgrade.js +25 -2
  43. package/dist/cli/commands/upgrade.js.map +1 -1
  44. package/dist/cli/dispatch.js +22 -6
  45. package/dist/cli/dispatch.js.map +1 -1
  46. package/dist/install/antigravity-global-wiring.d.ts +25 -0
  47. package/dist/install/antigravity-global-wiring.js +165 -0
  48. package/dist/install/antigravity-global-wiring.js.map +1 -0
  49. package/dist/install/antigravity-project-wiring.d.ts +24 -0
  50. package/dist/install/antigravity-project-wiring.js +380 -0
  51. package/dist/install/antigravity-project-wiring.js.map +1 -0
  52. package/dist/install/antigravity.d.ts +78 -0
  53. package/dist/install/antigravity.js +169 -0
  54. package/dist/install/antigravity.js.map +1 -0
  55. package/dist/install/host-detection.d.ts +1 -1
  56. package/dist/install/host-detection.js +2 -1
  57. package/dist/install/host-detection.js.map +1 -1
  58. package/dist/install/public-install.d.ts +2 -0
  59. package/dist/install/public-install.js +8 -0
  60. package/dist/install/public-install.js.map +1 -1
  61. package/dist/interaction/operational-actions-service.d.ts +8 -5
  62. package/dist/interaction/operational-actions-service.js +36 -6
  63. package/dist/interaction/operational-actions-service.js.map +1 -1
  64. package/dist/interaction/operational-service.d.ts +3 -1
  65. package/dist/interaction/operational-service.js +9 -0
  66. package/dist/interaction/operational-service.js.map +1 -1
  67. package/dist/types/domain.d.ts +1 -1
  68. package/docs/releases/v0.4.1.md +22 -0
  69. package/docs/user-guide.md +78 -3
  70. package/package.json +68 -68
@@ -0,0 +1,380 @@
1
+ import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync, unlinkSync } from "node:fs";
2
+ import { randomUUID } from "node:crypto";
3
+ import { tmpdir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { resolveExperienceEnginePaths } from "../config/path-resolver.js";
6
+ import { handleAntigravityHookPayload } from "../cli/commands/antigravity-hook.js";
7
+ import { resolveExperienceEnginePackageRoot } from "./openclaw-cli.js";
8
+ const getMcpConfigPath = (cwd) => join(cwd, ".mcp.json");
9
+ const getHooksConfigPath = (cwd) => join(cwd, ".agents", "hooks.json");
10
+ const getHookLauncherPath = (cwd) => join(cwd, ".agents", "experienceengine-antigravity-hook.mjs");
11
+ export const buildAntigravityHooksConfig = (commandPrefix) => ({
12
+ experienceengine: {
13
+ PreInvocation: [
14
+ {
15
+ type: "command",
16
+ command: `${commandPrefix} PreInvocation`,
17
+ timeout: 10
18
+ }
19
+ ],
20
+ PreToolUse: [
21
+ {
22
+ matcher: "*",
23
+ hooks: [
24
+ {
25
+ type: "command",
26
+ command: `${commandPrefix} PreToolUse`,
27
+ timeout: 10
28
+ }
29
+ ]
30
+ }
31
+ ],
32
+ PostToolUse: [
33
+ {
34
+ matcher: "*",
35
+ hooks: [
36
+ {
37
+ type: "command",
38
+ command: `${commandPrefix} PostToolUse`,
39
+ timeout: 10
40
+ }
41
+ ]
42
+ }
43
+ ],
44
+ Stop: [
45
+ {
46
+ type: "command",
47
+ command: `${commandPrefix} Stop`,
48
+ timeout: 10
49
+ }
50
+ ]
51
+ }
52
+ });
53
+ export const buildAntigravityHookLauncher = (cliScript, productHome) => [
54
+ 'import { spawnSync } from "node:child_process";',
55
+ "",
56
+ "const eventName = process.argv[2] || \"unknown\";",
57
+ "const chunks = [];",
58
+ "for await (const chunk of process.stdin) {",
59
+ " chunks.push(Buffer.from(chunk));",
60
+ "}",
61
+ "const stdinText = Buffer.concat(chunks).toString(\"utf8\");",
62
+ `const result = spawnSync(process.execPath, [${JSON.stringify(cliScript)}, "antigravity-hook", eventName], {`,
63
+ " input: stdinText,",
64
+ " encoding: \"utf8\",",
65
+ " env: {",
66
+ " ...process.env,",
67
+ ` EXPERIENCE_ENGINE_HOME: process.env.EXPERIENCE_ENGINE_HOME || ${JSON.stringify(productHome)}`,
68
+ " }",
69
+ "});",
70
+ "if (result.stderr) {",
71
+ " process.stderr.write(result.stderr);",
72
+ "}",
73
+ "process.stdout.write(result.stdout || \"{}\\n\");",
74
+ "process.exit(result.status ?? 0);",
75
+ ""
76
+ ].join("\n");
77
+ export const runAntigravityHookSpikeVerification = async () => {
78
+ const errors = [];
79
+ const packageRoot = resolveExperienceEnginePackageRoot();
80
+ const fixturesDir = join(packageRoot, "tests/fixtures/antigravity");
81
+ const previousHome = process.env.EXPERIENCE_ENGINE_HOME;
82
+ const spikeHome = mkdtempSync(join(tmpdir(), "experienceengine-antigravity-spike-home-"));
83
+ const mockBehaviorLoop = {
84
+ lookupHints: async (args) => {
85
+ if (!args.cwd || !args.prompt || !args.sessionId) {
86
+ errors.push("lookupHints argument validation failed: missing cwd, prompt, or sessionId");
87
+ }
88
+ return { text: "Spike constraint injected.", mode: "inject" };
89
+ },
90
+ recordToolResult: async (args) => {
91
+ if (!args.sessionId || !args.toolName || args.status === undefined) {
92
+ errors.push("recordToolResult argument validation failed: missing sessionId, toolName, or status");
93
+ }
94
+ return { status: "recorded" };
95
+ },
96
+ finalizeTask: async (args) => {
97
+ if (!args.sessionId || !args.cwd || !args.prompt) {
98
+ errors.push("finalizeTask argument validation failed: missing sessionId, cwd, or prompt");
99
+ }
100
+ return { status: "finalized" };
101
+ }
102
+ };
103
+ let preInvocationPayload = {
104
+ conversationId: "spike-test-session",
105
+ workspacePaths: ["/tmp/spike-test-workspace"],
106
+ artifactDirectoryPath: "/tmp/spike-test-workspace/brain/spike-test-session",
107
+ prompt: "Verify hook contract spike compatibility."
108
+ };
109
+ let preToolUsePayload = {
110
+ conversationId: "spike-test-session",
111
+ workspacePaths: ["/tmp/spike-test-workspace"],
112
+ artifactDirectoryPath: "/tmp/spike-test-workspace/brain/spike-test-session",
113
+ toolName: "run_command",
114
+ toolInput: { CommandLine: "pnpm test" }
115
+ };
116
+ let postToolUsePayload = {
117
+ conversationId: "spike-test-session",
118
+ workspacePaths: ["/tmp/spike-test-workspace"],
119
+ artifactDirectoryPath: "/tmp/spike-test-workspace/brain/spike-test-session",
120
+ toolName: "run_command",
121
+ toolInput: { CommandLine: "pnpm test" },
122
+ exitCode: 0,
123
+ status: "success",
124
+ outputSummary: "All tests green"
125
+ };
126
+ let stopPayload = {
127
+ conversationId: "spike-test-session",
128
+ workspacePaths: ["/tmp/spike-test-workspace"],
129
+ artifactDirectoryPath: "/tmp/spike-test-workspace/brain/spike-test-session",
130
+ lastMessage: "Finished spike task verification"
131
+ };
132
+ try {
133
+ const preInvPath = join(fixturesDir, "payload-pre-invocation.json");
134
+ if (existsSync(preInvPath)) {
135
+ preInvocationPayload = JSON.parse(readFileSync(preInvPath, "utf8"));
136
+ }
137
+ const preToolPath = join(fixturesDir, "payload-pre-tool-use.json");
138
+ if (existsSync(preToolPath)) {
139
+ preToolUsePayload = JSON.parse(readFileSync(preToolPath, "utf8"));
140
+ }
141
+ const postToolPath = join(fixturesDir, "payload-post-tool-use.json");
142
+ if (existsSync(postToolPath)) {
143
+ postToolUsePayload = JSON.parse(readFileSync(postToolPath, "utf8"));
144
+ }
145
+ const stopPath = join(fixturesDir, "payload-stop.json");
146
+ if (existsSync(stopPath)) {
147
+ stopPayload = JSON.parse(readFileSync(stopPath, "utf8"));
148
+ }
149
+ }
150
+ catch (err) {
151
+ errors.push(`Failed to read/parse committed fixtures: ${err?.message || err}`);
152
+ }
153
+ const tempTranscriptPath = join(packageRoot, ".agents", `temp-spike-transcript-${randomUUID()}.jsonl`);
154
+ try {
155
+ process.env.EXPERIENCE_ENGINE_HOME = spikeHome;
156
+ mkdirSync(dirname(tempTranscriptPath), { recursive: true });
157
+ writeFileSync(tempTranscriptPath, JSON.stringify({
158
+ type: "USER_INPUT",
159
+ content: "<USER_REQUEST>Verify hook contract spike compatibility via transcript.</USER_REQUEST>"
160
+ }) + "\n", "utf8");
161
+ }
162
+ catch (err) {
163
+ errors.push(`Failed to write temp transcript for spike: ${err?.message || err}`);
164
+ }
165
+ try {
166
+ const preInvocationResult = await handleAntigravityHookPayload("PreInvocation", preInvocationPayload, mockBehaviorLoop);
167
+ if (!preInvocationResult?.injectSteps?.[0]?.ephemeralMessage?.includes("Spike constraint injected.")) {
168
+ errors.push("PreInvocation hook did not return the expected context mutation injection steps.");
169
+ }
170
+ let recordCalled = false;
171
+ const preToolUseResult = await handleAntigravityHookPayload("PreToolUse", preToolUsePayload, {
172
+ ...mockBehaviorLoop,
173
+ recordToolResult: async () => {
174
+ recordCalled = true;
175
+ return { status: "recorded" };
176
+ }
177
+ });
178
+ if (preToolUseResult?.decision !== "allow") {
179
+ errors.push(`PreToolUse hook did not return an explicit allow decision: ${JSON.stringify(preToolUseResult)}`);
180
+ }
181
+ if (recordCalled) {
182
+ errors.push("PreToolUse hook incorrectly recorded tool result, causing telemetry pollution.");
183
+ }
184
+ let postToolUseRecordCalled = false;
185
+ const postToolUseResult = await handleAntigravityHookPayload("PostToolUse", postToolUsePayload, {
186
+ ...mockBehaviorLoop,
187
+ recordToolResult: async (args) => {
188
+ postToolUseRecordCalled = true;
189
+ const expectedSession = postToolUsePayload.conversationId || "0b03efea-7f1d-4aff-84a4-ce954372619b";
190
+ if (args.sessionId !== expectedSession || args.toolName !== "run_command" || args.status !== "success") {
191
+ errors.push(`PostToolUse passed incorrect arguments to recordToolResult: ${JSON.stringify(args)}`);
192
+ }
193
+ return { status: "recorded" };
194
+ }
195
+ });
196
+ if (JSON.stringify(postToolUseResult) !== "{}") {
197
+ errors.push("PostToolUse hook did not return an empty JSON object.");
198
+ }
199
+ if (!postToolUseRecordCalled) {
200
+ errors.push("PostToolUse hook failed to record tool result.");
201
+ }
202
+ let stopFinalizeCalled = false;
203
+ const stopResult = await handleAntigravityHookPayload("Stop", {
204
+ ...stopPayload,
205
+ transcriptPath: tempTranscriptPath,
206
+ prompt: undefined
207
+ }, {
208
+ ...mockBehaviorLoop,
209
+ finalizeTask: async (args) => {
210
+ stopFinalizeCalled = true;
211
+ const expectedSession = stopPayload.conversationId || "0b03efea-7f1d-4aff-84a4-ce954372619b";
212
+ if (args.sessionId !== expectedSession) {
213
+ errors.push(`Stop passed incorrect sessionId: expected ${expectedSession}, got ${args.sessionId}`);
214
+ }
215
+ if (args.prompt !== "Verify hook contract spike compatibility via transcript.") {
216
+ errors.push(`Stop failed to resolve prompt from transcriptPath: got "${args.prompt}"`);
217
+ }
218
+ return { status: "finalized" };
219
+ }
220
+ });
221
+ if (JSON.stringify(stopResult) !== "{}") {
222
+ errors.push("Stop hook did not return an empty JSON object.");
223
+ }
224
+ if (!stopFinalizeCalled) {
225
+ errors.push("Stop hook failed to finalize task.");
226
+ }
227
+ }
228
+ catch (err) {
229
+ errors.push(`Spike verification threw an unexpected exception: ${err?.message || err}`);
230
+ }
231
+ finally {
232
+ if (previousHome === undefined) {
233
+ delete process.env.EXPERIENCE_ENGINE_HOME;
234
+ }
235
+ else {
236
+ process.env.EXPERIENCE_ENGINE_HOME = previousHome;
237
+ }
238
+ try {
239
+ if (existsSync(tempTranscriptPath)) {
240
+ unlinkSync(tempTranscriptPath);
241
+ }
242
+ }
243
+ catch {
244
+ // Ignore cleanup error.
245
+ }
246
+ rmSync(spikeHome, { recursive: true, force: true });
247
+ }
248
+ return {
249
+ success: errors.length === 0,
250
+ errors
251
+ };
252
+ };
253
+ export const inspectAntigravityProjectWiring = (options = {}) => {
254
+ const cwd = options.cwd ?? process.cwd();
255
+ const packageRoot = resolveExperienceEnginePackageRoot();
256
+ const defaultServerCommand = `node ${join(packageRoot, "dist/cli/index.js").replace(/\\/g, "/")} mcp-server`;
257
+ let serverCommand = defaultServerCommand;
258
+ let mcpRegistered = false;
259
+ const mcpPath = getMcpConfigPath(cwd);
260
+ if (existsSync(mcpPath)) {
261
+ try {
262
+ const mcpConfig = JSON.parse(readFileSync(mcpPath, "utf8"));
263
+ const server = mcpConfig?.mcpServers?.experienceengine;
264
+ if (server && server.type === "stdio" && server.env?.EXPERIENCE_ENGINE_ADAPTER === "antigravity") {
265
+ mcpRegistered = true;
266
+ serverCommand = `${server.command || ""} ${(server.args || []).join(" ")}`.trim();
267
+ }
268
+ }
269
+ catch {
270
+ // Ignore malformed project config.
271
+ }
272
+ }
273
+ let hooksRegistered = false;
274
+ const hooksPath = getHooksConfigPath(cwd);
275
+ if (existsSync(hooksPath)) {
276
+ try {
277
+ const hooksConfig = JSON.parse(readFileSync(hooksPath, "utf8"));
278
+ const eeHooks = hooksConfig?.experienceengine;
279
+ hooksRegistered = Boolean(eeHooks?.PreInvocation?.length > 0
280
+ && eeHooks?.PreToolUse?.length > 0
281
+ && eeHooks?.PostToolUse?.length > 0
282
+ && eeHooks?.Stop?.length > 0);
283
+ }
284
+ catch {
285
+ // Ignore malformed project hooks.
286
+ }
287
+ }
288
+ const mcpOnly = options.mcpOnly !== undefined ? options.mcpOnly : !(mcpRegistered && hooksRegistered);
289
+ const lifecycleMode = mcpRegistered && hooksRegistered && !mcpOnly
290
+ ? "host_native_hooks_validated"
291
+ : "mcp_only";
292
+ return {
293
+ cwd,
294
+ lifecycleMode,
295
+ mcpRegistered,
296
+ hooksRegistered,
297
+ hookContractSpikePassed: hooksRegistered,
298
+ serverName: "experienceengine",
299
+ serverCommand
300
+ };
301
+ };
302
+ export const ensureAntigravityProjectWiring = async (options = {}) => {
303
+ const cwd = options.cwd ?? process.cwd();
304
+ const env = options.env ?? process.env;
305
+ const paths = resolveExperienceEnginePaths({
306
+ adapter: "antigravity",
307
+ env,
308
+ homeDir: options.homeDir
309
+ });
310
+ const packageRoot = resolveExperienceEnginePackageRoot();
311
+ let mcpOnly = options.mcpOnly !== undefined ? options.mcpOnly : false;
312
+ let hookContractSpikePassed = false;
313
+ if (!mcpOnly) {
314
+ const spike = await runAntigravityHookSpikeVerification();
315
+ if (spike.success) {
316
+ hookContractSpikePassed = true;
317
+ }
318
+ else {
319
+ mcpOnly = true;
320
+ console.warn("[ExperienceEngine] Antigravity native hook spike verification failed. Falling back to mcp_only mode.");
321
+ for (const err of spike.errors) {
322
+ console.warn(` - ${err}`);
323
+ }
324
+ }
325
+ }
326
+ const portableCliScript = join(packageRoot, "dist/cli/index.js").replace(/\\/g, "/");
327
+ const serverCommand = "node";
328
+ const serverArgs = [portableCliScript, "mcp-server"];
329
+ const mcpPath = getMcpConfigPath(cwd);
330
+ let mcpConfig = {};
331
+ if (existsSync(mcpPath)) {
332
+ try {
333
+ mcpConfig = JSON.parse(readFileSync(mcpPath, "utf8"));
334
+ }
335
+ catch {
336
+ // Ignore malformed config and recreate the ExperienceEngine entry.
337
+ }
338
+ }
339
+ if (!mcpConfig.mcpServers) {
340
+ mcpConfig.mcpServers = {};
341
+ }
342
+ mcpConfig.mcpServers.experienceengine = {
343
+ type: "stdio",
344
+ command: serverCommand,
345
+ args: serverArgs,
346
+ env: {
347
+ EXPERIENCE_ENGINE_ADAPTER: "antigravity"
348
+ }
349
+ };
350
+ writeFileSync(mcpPath, `${JSON.stringify(mcpConfig, null, 2)}\n`, "utf8");
351
+ let hooksRegistered = false;
352
+ if (!mcpOnly) {
353
+ const hooksPath = getHooksConfigPath(cwd);
354
+ mkdirSync(dirname(hooksPath), { recursive: true });
355
+ const hookLauncherPath = getHookLauncherPath(cwd);
356
+ writeFileSync(hookLauncherPath, buildAntigravityHookLauncher(portableCliScript, paths.productHome.replace(/\\/g, "/")), "utf8");
357
+ let hooksConfig = {};
358
+ if (existsSync(hooksPath)) {
359
+ try {
360
+ hooksConfig = JSON.parse(readFileSync(hooksPath, "utf8"));
361
+ }
362
+ catch {
363
+ // Ignore malformed config and recreate the ExperienceEngine hook block.
364
+ }
365
+ }
366
+ hooksConfig.experienceengine = buildAntigravityHooksConfig("node experienceengine-antigravity-hook.mjs").experienceengine;
367
+ writeFileSync(hooksPath, `${JSON.stringify(hooksConfig, null, 2)}\n`, "utf8");
368
+ hooksRegistered = true;
369
+ }
370
+ return {
371
+ cwd,
372
+ lifecycleMode: mcpOnly ? "mcp_only" : "host_native_hooks_validated",
373
+ mcpRegistered: true,
374
+ hooksRegistered,
375
+ hookContractSpikePassed,
376
+ serverName: "experienceengine",
377
+ serverCommand: `${serverCommand} ${serverArgs.join(" ")}`
378
+ };
379
+ };
380
+ //# sourceMappingURL=antigravity-project-wiring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity-project-wiring.js","sourceRoot":"","sources":["../../src/install/antigravity-project-wiring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { buildVersionStatus } from "../version/package-version.js";
2
+ import { ensureAntigravityProjectWiring, inspectAntigravityProjectWiring, runAntigravityHookSpikeVerification, type AntigravityLifecycleMode, type AntigravityOptions, type AntigravityProjectWiringReport } from "./antigravity-project-wiring.js";
3
+ import { type AntigravityGlobalActivationState, type AntigravityGlobalWiringReport } from "./antigravity-global-wiring.js";
4
+ export { ensureAntigravityProjectWiring, inspectAntigravityProjectWiring, runAntigravityHookSpikeVerification, type AntigravityLifecycleMode, type AntigravityOptions, type AntigravityProjectWiringReport };
5
+ export type AntigravityInstallState = {
6
+ adapter: "antigravity";
7
+ installScope: "user";
8
+ installedAt: string;
9
+ installedVersion: string;
10
+ packageRoot: string;
11
+ captureDir: string;
12
+ lifecycleMode: AntigravityLifecycleMode;
13
+ mcpRegistered: boolean;
14
+ hooksRegistered: boolean;
15
+ hookContractSpikePassed: boolean;
16
+ agentDesktopGlobalActivation: AntigravityGlobalActivationState;
17
+ serverName: string;
18
+ serverCommand: string;
19
+ globalWiring: AntigravityGlobalWiringReport;
20
+ projectWiring: AntigravityProjectWiringReport;
21
+ };
22
+ export type AntigravityInstallReport = {
23
+ adapter: "antigravity";
24
+ installScope: "user";
25
+ installed: boolean;
26
+ packageRoot: string;
27
+ installedVersion: string;
28
+ captureDir: string;
29
+ lifecycleMode: AntigravityLifecycleMode;
30
+ mcpRegistered: boolean;
31
+ hooksRegistered: boolean;
32
+ hookContractSpikePassed: boolean;
33
+ agentDesktopGlobalActivation: AntigravityGlobalActivationState;
34
+ serverName: string;
35
+ serverCommand: string;
36
+ globalWiring: AntigravityGlobalWiringReport;
37
+ projectWiring: AntigravityProjectWiringReport;
38
+ hostWiring: {
39
+ wired: boolean;
40
+ command?: string;
41
+ transport?: string;
42
+ enabled?: boolean;
43
+ };
44
+ };
45
+ export type AntigravityInspection = {
46
+ adapter: "antigravity";
47
+ installScope: "user";
48
+ installed: boolean;
49
+ versionStatus: ReturnType<typeof buildVersionStatus>;
50
+ packageRoot: string;
51
+ captureDir: string;
52
+ lifecycleMode: AntigravityLifecycleMode;
53
+ mcpRegistered: boolean;
54
+ hooksRegistered: boolean;
55
+ hookContractSpikePassed: boolean;
56
+ cliAvailable: boolean;
57
+ agyCliAvailable: boolean;
58
+ agyCliPath?: string;
59
+ ideCliAvailable: boolean;
60
+ ideCliPath?: string;
61
+ cliValidatedInvocation: string;
62
+ cliProjectDiscoveryNote?: string;
63
+ agentDesktopGlobalActivation: AntigravityGlobalActivationState;
64
+ globalWiring: AntigravityGlobalWiringReport;
65
+ projectWiring: AntigravityProjectWiringReport;
66
+ recommendedNextStep?: string;
67
+ serverName: string;
68
+ serverCommand: string;
69
+ hostWiring: {
70
+ wired: boolean;
71
+ command?: string;
72
+ transport?: string;
73
+ enabled?: boolean;
74
+ };
75
+ };
76
+ export declare const installAntigravityAdapter: (options?: AntigravityOptions) => Promise<AntigravityInstallReport>;
77
+ export declare const inspectAntigravityInstall: (options?: AntigravityOptions) => AntigravityInspection;
78
+ export declare const repairAntigravityAdapter: (options?: AntigravityOptions) => Promise<AntigravityInstallReport>;
@@ -0,0 +1,169 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { spawnSync } from "node:child_process";
3
+ import { resolveExperienceEnginePaths, resolveProductStateDir } from "../config/path-resolver.js";
4
+ import { resolveExperienceEnginePackageRoot } from "./openclaw-cli.js";
5
+ import { readCurrentPackageVersion, buildVersionStatus } from "../version/package-version.js";
6
+ import { ensureAntigravityProjectWiring, inspectAntigravityProjectWiring, runAntigravityHookSpikeVerification } from "./antigravity-project-wiring.js";
7
+ import { ensureAntigravityGlobalWiring, inspectAntigravityGlobalWiring } from "./antigravity-global-wiring.js";
8
+ export { ensureAntigravityProjectWiring, inspectAntigravityProjectWiring, runAntigravityHookSpikeVerification };
9
+ const findCommandPath = (command, env) => {
10
+ const lookupCommand = process.platform === "win32" ? "where" : "which";
11
+ const result = spawnSync(lookupCommand, [command], {
12
+ encoding: "utf8",
13
+ env: env ?? process.env
14
+ });
15
+ if (result.status !== 0) {
16
+ return undefined;
17
+ }
18
+ return result.stdout.split(/\r?\n/).map((line) => line.trim()).find(Boolean);
19
+ };
20
+ const resolveAntigravityRecommendedNextStep = (globalWiring, projectWiring, agyCliAvailable) => {
21
+ if (globalWiring.hooksRegistered && globalWiring.mcpRegistered) {
22
+ return agyCliAvailable
23
+ ? "Start Agent Desktop in any project, or use `ee agy exec -C <project> \"<prompt>\"` for headless CLI runs."
24
+ : "Start Agent Desktop in any project. Install or repair Antigravity CLI (`agy`) before using headless CLI validation.";
25
+ }
26
+ if (!projectWiring.mcpRegistered || !projectWiring.hooksRegistered) {
27
+ return agyCliAvailable
28
+ ? "Run `ee agy exec -C <project> \"<prompt>\"` to auto-activate this project for CLI runs, or `ee antigravity activate-project -C <project>` before using Agent Desktop."
29
+ : "Run `ee antigravity activate-project -C <project>` before using Agent Desktop.";
30
+ }
31
+ if (!agyCliAvailable) {
32
+ return "Install or repair Antigravity CLI (`agy`) before using headless CLI validation.";
33
+ }
34
+ return undefined;
35
+ };
36
+ export const installAntigravityAdapter = async (options = {}) => {
37
+ const env = options.env ?? process.env;
38
+ const paths = resolveExperienceEnginePaths({
39
+ adapter: "antigravity",
40
+ env,
41
+ homeDir: options.homeDir
42
+ });
43
+ const packageRoot = resolveExperienceEnginePackageRoot();
44
+ const installedVersion = readCurrentPackageVersion(packageRoot);
45
+ mkdirSync(paths.dataDir, { recursive: true });
46
+ mkdirSync(resolveProductStateDir(paths), { recursive: true });
47
+ mkdirSync(paths.captureDir, { recursive: true });
48
+ const globalWiring = await ensureAntigravityGlobalWiring(options);
49
+ const projectWiring = inspectAntigravityProjectWiring(options);
50
+ const state = {
51
+ adapter: "antigravity",
52
+ installScope: "user",
53
+ installedAt: new Date().toISOString(),
54
+ installedVersion,
55
+ packageRoot,
56
+ captureDir: paths.captureDir,
57
+ lifecycleMode: globalWiring.lifecycleMode,
58
+ mcpRegistered: globalWiring.mcpRegistered,
59
+ hooksRegistered: globalWiring.hooksRegistered,
60
+ hookContractSpikePassed: globalWiring.hookContractSpikePassed,
61
+ agentDesktopGlobalActivation: globalWiring.agentDesktopGlobalActivation,
62
+ serverName: globalWiring.serverName,
63
+ serverCommand: globalWiring.serverCommand,
64
+ globalWiring,
65
+ projectWiring
66
+ };
67
+ writeFileSync(paths.installStatePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
68
+ return {
69
+ adapter: "antigravity",
70
+ installScope: "user",
71
+ installed: true,
72
+ packageRoot,
73
+ installedVersion,
74
+ captureDir: paths.captureDir,
75
+ lifecycleMode: state.lifecycleMode,
76
+ mcpRegistered: state.mcpRegistered,
77
+ hooksRegistered: state.hooksRegistered,
78
+ hookContractSpikePassed: state.hookContractSpikePassed,
79
+ agentDesktopGlobalActivation: state.agentDesktopGlobalActivation,
80
+ serverName: state.serverName,
81
+ serverCommand: state.serverCommand,
82
+ globalWiring,
83
+ projectWiring,
84
+ hostWiring: {
85
+ wired: globalWiring.mcpRegistered,
86
+ command: globalWiring.serverCommand,
87
+ transport: "stdio",
88
+ enabled: globalWiring.mcpRegistered
89
+ }
90
+ };
91
+ };
92
+ export const inspectAntigravityInstall = (options = {}) => {
93
+ const env = options.env ?? process.env;
94
+ const paths = resolveExperienceEnginePaths({
95
+ adapter: "antigravity",
96
+ env,
97
+ homeDir: options.homeDir
98
+ });
99
+ const packageRoot = resolveExperienceEnginePackageRoot();
100
+ let installState = null;
101
+ if (existsSync(paths.installStatePath)) {
102
+ try {
103
+ const parsed = JSON.parse(readFileSync(paths.installStatePath, "utf8"));
104
+ installState = {
105
+ adapter: "antigravity",
106
+ installScope: "user",
107
+ installedAt: parsed.installedAt ?? "",
108
+ installedVersion: parsed.installedVersion ?? "",
109
+ packageRoot: parsed.packageRoot ?? packageRoot,
110
+ captureDir: parsed.captureDir ?? paths.captureDir,
111
+ lifecycleMode: parsed.lifecycleMode ?? "mcp_only",
112
+ mcpRegistered: parsed.mcpRegistered ?? false,
113
+ hooksRegistered: parsed.hooksRegistered ?? false,
114
+ hookContractSpikePassed: parsed.hookContractSpikePassed ?? parsed.simulatedHookSpikePassed ?? false,
115
+ agentDesktopGlobalActivation: parsed.agentDesktopGlobalActivation ?? "unsupported",
116
+ serverName: parsed.serverName ?? "experienceengine",
117
+ serverCommand: parsed.serverCommand ?? "",
118
+ globalWiring: parsed.globalWiring,
119
+ projectWiring: parsed.projectWiring
120
+ };
121
+ }
122
+ catch {
123
+ // Ignore malformed install state.
124
+ }
125
+ }
126
+ const projectWiring = inspectAntigravityProjectWiring(options);
127
+ const globalWiring = inspectAntigravityGlobalWiring(options);
128
+ const agyCliPath = findCommandPath("agy", env);
129
+ const ideCliPath = findCommandPath("antigravity", env);
130
+ const agyCliAvailable = Boolean(agyCliPath);
131
+ const installed = Boolean(installState || globalWiring.mcpRegistered || projectWiring.mcpRegistered);
132
+ const lifecycleMode = globalWiring.mcpRegistered ? globalWiring.lifecycleMode : projectWiring.lifecycleMode;
133
+ const agentDesktopGlobalActivation = globalWiring.agentDesktopGlobalActivation;
134
+ return {
135
+ adapter: "antigravity",
136
+ installScope: "user",
137
+ installed,
138
+ versionStatus: buildVersionStatus(installed, installState?.installedVersion),
139
+ packageRoot,
140
+ captureDir: paths.captureDir,
141
+ lifecycleMode,
142
+ mcpRegistered: globalWiring.mcpRegistered || projectWiring.mcpRegistered,
143
+ hooksRegistered: globalWiring.hooksRegistered || projectWiring.hooksRegistered,
144
+ hookContractSpikePassed: installState?.hookContractSpikePassed ?? globalWiring.hookContractSpikePassed ?? projectWiring.hookContractSpikePassed,
145
+ cliAvailable: agyCliAvailable,
146
+ agyCliAvailable,
147
+ agyCliPath,
148
+ ideCliAvailable: Boolean(ideCliPath),
149
+ ideCliPath,
150
+ cliValidatedInvocation: "ee agy exec -C <project-path> \"<prompt>\"",
151
+ cliProjectDiscoveryNote: "The wrapper auto-adds `agy --add-dir <project-path>` for reliable workspace discovery on Windows.",
152
+ agentDesktopGlobalActivation,
153
+ globalWiring,
154
+ projectWiring,
155
+ recommendedNextStep: resolveAntigravityRecommendedNextStep(globalWiring, projectWiring, agyCliAvailable),
156
+ serverName: globalWiring.serverName,
157
+ serverCommand: globalWiring.serverCommand,
158
+ hostWiring: {
159
+ wired: globalWiring.mcpRegistered || projectWiring.mcpRegistered,
160
+ command: globalWiring.mcpRegistered ? globalWiring.serverCommand : projectWiring.serverCommand,
161
+ transport: "stdio",
162
+ enabled: globalWiring.mcpRegistered || projectWiring.mcpRegistered
163
+ }
164
+ };
165
+ };
166
+ export const repairAntigravityAdapter = async (options = {}) => {
167
+ return await installAntigravityAdapter(options);
168
+ };
169
+ //# sourceMappingURL=antigravity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/install/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,kCAAkC,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAC9F,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,EAC/B,mCAAmC,EAIpC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAG/B,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,EAC/B,mCAAmC,EAIpC,CAAC;AA4EF,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,GAAuB,EAAsB,EAAE;IACvF,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE;QACjD,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;KACxB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,qCAAqC,GAAG,CAC5C,YAA2C,EAC3C,aAA6C,EAC7C,eAAwB,EACJ,EAAE;IACtB,IAAI,YAAY,CAAC,eAAe,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC;QAC/D,OAAO,eAAe;YACpB,CAAC,CAAC,2GAA2G;YAC7G,CAAC,CAAC,qHAAqH,CAAC;IAC5H,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;QACnE,OAAO,eAAe;YACpB,CAAC,CAAC,uKAAuK;YACzK,CAAC,CAAC,gFAAgF,CAAC;IACvF,CAAC;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,iFAAiF,CAAC;IAC3F,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAAE,UAA8B,EAAE,EAAqC,EAAE;IACrH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,KAAK,GAAG,4BAA4B,CAAC;QACzC,OAAO,EAAE,aAAa;QACtB,GAAG;QACH,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,kCAAkC,EAAE,CAAC;IACzD,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAEhE,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,SAAS,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,MAAM,YAAY,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,KAAK,GAA4B;QACrC,OAAO,EAAE,aAAa;QACtB,YAAY,EAAE,MAAM;QACpB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,gBAAgB;QAChB,WAAW;QACX,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa,EAAE,YAAY,CAAC,aAAa;QACzC,aAAa,EAAE,YAAY,CAAC,aAAa;QACzC,eAAe,EAAE,YAAY,CAAC,eAAe;QAC7C,uBAAuB,EAAE,YAAY,CAAC,uBAAuB;QAC7D,4BAA4B,EAAE,YAAY,CAAC,4BAA4B;QACvE,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,aAAa,EAAE,YAAY,CAAC,aAAa;QACzC,YAAY;QACZ,aAAa;KACd,CAAC;IAEF,aAAa,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAErF,OAAO;QACL,OAAO,EAAE,aAAa;QACtB,YAAY,EAAE,MAAM;QACpB,SAAS,EAAE,IAAI;QACf,WAAW;QACX,gBAAgB;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;QACtD,4BAA4B,EAAE,KAAK,CAAC,4BAA4B;QAChE,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,YAAY;QACZ,aAAa;QACb,UAAU,EAAE;YACV,KAAK,EAAE,YAAY,CAAC,aAAa;YACjC,OAAO,EAAE,YAAY,CAAC,aAAa;YACnC,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,YAAY,CAAC,aAAa;SACpC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,UAA8B,EAAE,EAAyB,EAAE;IACnG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,KAAK,GAAG,4BAA4B,CAAC;QACzC,OAAO,EAAE,aAAa;QACtB,GAAG;QACH,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,kCAAkC,EAAE,CAAC;IAEzD,IAAI,YAAY,GAAmC,IAAI,CAAC;IACxD,IAAI,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAqC,CAAC;YAC5G,YAAY,GAAG;gBACb,OAAO,EAAE,aAAa;gBACtB,YAAY,EAAE,MAAM;gBACpB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;gBACrC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE;gBAC/C,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,WAAW;gBAC9C,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU;gBACjD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,UAAU;gBACjD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK;gBAC5C,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,KAAK;gBAChD,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,IAAK,MAAc,CAAC,wBAAwB,IAAI,KAAK;gBAC5G,4BAA4B,EAAE,MAAM,CAAC,4BAA4B,IAAI,aAAa;gBAClF,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,kBAAkB;gBACnD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;gBACzC,YAAY,EAAE,MAAM,CAAC,YAA6C;gBAClE,aAAa,EAAE,MAAM,CAAC,aAA+C;aACtE,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,eAAe,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,IAAI,YAAY,CAAC,aAAa,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;IACrG,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC;IAC5G,MAAM,4BAA4B,GAAG,YAAY,CAAC,4BAA4B,CAAC;IAE/E,OAAO;QACL,OAAO,EAAE,aAAa;QACtB,YAAY,EAAE,MAAM;QACpB,SAAS;QACT,aAAa,EAAE,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,CAAC;QAC5E,WAAW;QACX,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa;QACb,aAAa,EAAE,YAAY,CAAC,aAAa,IAAI,aAAa,CAAC,aAAa;QACxE,eAAe,EAAE,YAAY,CAAC,eAAe,IAAI,aAAa,CAAC,eAAe;QAC9E,uBAAuB,EACrB,YAAY,EAAE,uBAAuB,IAAI,YAAY,CAAC,uBAAuB,IAAI,aAAa,CAAC,uBAAuB;QACxH,YAAY,EAAE,eAAe;QAC7B,eAAe;QACf,UAAU;QACV,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC;QACpC,UAAU;QACV,sBAAsB,EAAE,4CAA4C;QACpE,uBAAuB,EACrB,mGAAmG;QACrG,4BAA4B;QAC5B,YAAY;QACZ,aAAa;QACb,mBAAmB,EAAE,qCAAqC,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC;QACxG,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,aAAa,EAAE,YAAY,CAAC,aAAa;QACzC,UAAU,EAAE;YACV,KAAK,EAAE,YAAY,CAAC,aAAa,IAAI,aAAa,CAAC,aAAa;YAChE,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa;YAC9F,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,YAAY,CAAC,aAAa,IAAI,aAAa,CAAC,aAAa;SACnE;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,UAA8B,EAAE,EAAqC,EAAE;IACpH,OAAO,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC,CAAC"}