foundry-design 0.2.0-beta.12 → 0.2.0-beta.14.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.
package/README.md CHANGED
@@ -6,11 +6,19 @@ Foundry is a local-first precision design workbench for Codex, Cursor, and Claud
6
6
 
7
7
  Foundry is distributed through npm, so testers do not need GitHub access.
8
8
 
9
- > **Current public beta:** `0.2.0-beta.12`. Both npm `latest` and `beta` point to the same tested release. Use the unqualified command below for normal installation.
9
+ > **Release candidate:** `0.2.0-beta.14`. The commands below are prepared for this release and must not be promoted to npm `latest` until the full installation matrix passes.
10
10
 
11
11
  Full documentation is available at [withfoundry.ai](https://withfoundry.ai).
12
12
 
13
- ### Recommended: one command
13
+ ### Recommended: install once, use in every project
14
+
15
+ Install Foundry's shared connection for Codex, Cursor, and Claude once:
16
+
17
+ ```bash
18
+ npx foundry-design install
19
+ ```
20
+
21
+ Restart the selected coding agents once. Then open any project and run:
14
22
 
15
23
  Open a terminal in the project, or ask Codex, Cursor, or Claude Code to run:
16
24
 
@@ -18,7 +26,7 @@ Open a terminal in the project, or ask Codex, Cursor, or Claude Code to run:
18
26
  npx foundry-design
19
27
  ```
20
28
 
21
- That command detects the project and active coding agent, installs or safely updates Foundry, repairs the shared agent connection, validates its integration, starts the project when needed, and opens the visual session. Before changing local configuration, Foundry prints the exact CLI and MCP bridge versions it will use. On the first installation only, restart the coding agent once so it can load the shared MCP connection. A reviewed batch can be queued before the restart and will be claimed when the agent reconnects.
29
+ That command finds the nearest real project, detects its framework, installs or safely updates only the development adapter and lightweight project connection, validates it, starts the project when needed, and opens the visual session. The agent bridge and skill remain installed once at machine level. Foundry refuses to treat a home folder as a project and prints the exact CLI and MCP bridge versions before changing configuration.
22
30
 
23
31
  After the restart, reopen the same project folder and ask:
24
32
 
@@ -30,16 +38,16 @@ That is the normal workflow. Foundry resumes the most recent session for the cur
30
38
 
31
39
  ### Manual installation
32
40
 
33
- From the first project you want to inspect, run:
41
+ Install the shared connection for selected agents:
34
42
 
35
43
  ```bash
36
- npx foundry-design setup --global
44
+ npx foundry-design install --agent codex,cursor,claude
37
45
  ```
38
46
 
39
- For later projects, keep the shared agent connection and install only the development adapter:
47
+ Connect any project with only its development adapter and local project metadata:
40
48
 
41
49
  ```bash
42
- npx foundry-design setup --agent none
50
+ npx foundry-design connect
43
51
  ```
44
52
 
45
53
  Then restart the coding agent, reopen the same project folder, and ask:
@@ -58,13 +66,27 @@ npx foundry-design status
58
66
 
59
67
  Foundry reports project integration, the exact MCP package version, runtime health, and the live agent listener separately. Run `npx foundry-design doctor --repair` if configuration or generated integration needs repair.
60
68
 
69
+ If an older project has stale or conflicting project-scoped agent configuration, run:
70
+
71
+ ```bash
72
+ npx foundry-design reset
73
+ ```
74
+
75
+ Reset migrates Foundry-owned project MCP files and skills to the shared connection, preserves customized files, and reports anything it could not replace safely.
76
+
61
77
  Update an existing installation with:
62
78
 
63
79
  ```bash
64
80
  npx foundry-design update
65
81
  ```
66
82
 
67
- The updater refreshes checksum-matched Foundry files, agent connections, and skill bundles. It preserves and reports files changed since setup, validates the project, and rolls back the update if Foundry introduces a TypeScript or lint failure. Restart the coding agent after updating.
83
+ The updater refreshes checksum-matched project files and the shared machine connection. It removes only Foundry-owned legacy project agent files, preserves customized files, validates the project, and rolls back if Foundry introduces a TypeScript or lint failure. Restart the coding agent only when its shared bridge version changes.
84
+
85
+ Remove a project from Foundry's recent-project list without removing its adapter:
86
+
87
+ ```bash
88
+ npx foundry-design disconnect
89
+ ```
68
90
 
69
91
  Remove only Foundry-managed integration with:
70
92
 
@@ -72,6 +94,18 @@ Remove only Foundry-managed integration with:
72
94
  npx foundry-design uninstall
73
95
  ```
74
96
 
97
+ Remove the shared machine connection separately:
98
+
99
+ ```bash
100
+ npx foundry-design uninstall --global
101
+ ```
102
+
103
+ Project-scoped MCP configuration remains available only as an explicit compatibility mode:
104
+
105
+ ```bash
106
+ npx foundry-design setup --project-agent --agent codex
107
+ ```
108
+
75
109
  Supported automatic web integration currently includes Next.js App Router, Vite, and plain HTML. Generic web, SwiftUI, and React Native projects receive explicit setup guidance when a safe automatic edit is not available.
76
110
 
77
111
  The npm setup above is the public beta installation path and includes the same portable skill and MCP connection used by the agent plugin bundle.
@@ -84,7 +118,7 @@ If an npm mirror or existing `npx` cache reports an old tag, bypass it with a te
84
118
 
85
119
  ```bash
86
120
  FOUNDRY_NPX_CACHE="$(mktemp -d)"
87
- npx --yes --prefer-online --registry=https://registry.npmjs.org --cache "$FOUNDRY_NPX_CACHE" --package=foundry-design@0.2.0-beta.12 foundry-design
121
+ npx --yes --prefer-online --registry=https://registry.npmjs.org --cache "$FOUNDRY_NPX_CACHE" --package=foundry-design@0.2.0-beta.14 foundry-design
88
122
  ```
89
123
 
90
124
  The beta supports Node.js 20 or newer. Read the [local-first safety model](https://withfoundry.ai/#safety) before using it with sensitive work.
@@ -99,6 +133,10 @@ Start Foundry for this project.
99
133
 
100
134
  Foundry remains local-first. Installing the plugin does not create an account, enable telemetry, or send project data to a Foundry service.
101
135
 
136
+ ### Cursor one-click connection
137
+
138
+ [Add the Foundry MCP bridge to Cursor](https://cursor.com/link/mcp/install?name=foundry-design-control&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIi0tcHJlZmVyLW9ubGluZSIsImZvdW5kcnktZGVzaWduLW1jcC1zZXJ2ZXJAMC4yLjAtYmV0YS4xNCJdfQ%3D%3D), then run `npx foundry-design` inside the project. The repository's Cursor plugin additionally bundles the Foundry skill and session-start hook for marketplace distribution.
139
+
102
140
  ## Current capabilities
103
141
 
104
142
  - A dedicated local design workspace with a live product canvas, equal Layers and Inspector docks, and a direct-overlay fallback when a product blocks framing
@@ -0,0 +1,24 @@
1
+ import type { Agent } from './installer.js';
2
+ export interface CompanionProject {
3
+ root: string;
4
+ targetUrl?: string;
5
+ lastOpenedAt: string;
6
+ }
7
+ export interface CompanionState {
8
+ version: 1 | 2;
9
+ foundryVersion: string;
10
+ agents: Agent[];
11
+ projects: CompanionProject[];
12
+ updatedAt: string;
13
+ }
14
+ export declare class CompanionStore {
15
+ readonly path: string;
16
+ constructor(home: string);
17
+ read(): Promise<CompanionState>;
18
+ recordInstallation(agents: Agent[]): Promise<CompanionState>;
19
+ registerProject(root: string, targetUrl?: string): Promise<CompanionState>;
20
+ unregisterProject(root: string): Promise<CompanionState>;
21
+ removeInstallation(agents: Agent[]): Promise<CompanionState>;
22
+ private write;
23
+ }
24
+ //# sourceMappingURL=companion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companion.d.ts","sourceRoot":"","sources":["../src/companion.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM;IAIlB,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;IAiC/B,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAW5D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgB1E,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAWxD,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;YAWpD,KAAK;CAOpB"}
@@ -0,0 +1,89 @@
1
+ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
2
+ import { dirname, join, resolve } from 'node:path';
3
+ import { FOUNDRY_VERSION } from './release.js';
4
+ export class CompanionStore {
5
+ path;
6
+ constructor(home) {
7
+ this.path = join(home, '.foundry', 'companion.json');
8
+ }
9
+ async read() {
10
+ return readFile(this.path, 'utf8')
11
+ .then((content) => {
12
+ const value = JSON.parse(content);
13
+ const agents = Array.isArray(value.agents)
14
+ ? value.agents.filter((agent) => ['codex', 'cursor', 'claude'].includes(agent))
15
+ : [];
16
+ const projects = Array.isArray(value.projects)
17
+ ? value.projects.filter((project) => Boolean(project?.root) && typeof project.lastOpenedAt === 'string')
18
+ : [];
19
+ const normalized = {
20
+ version: 2,
21
+ foundryVersion: value.foundryVersion ?? FOUNDRY_VERSION,
22
+ agents,
23
+ projects,
24
+ updatedAt: value.updatedAt ?? new Date(0).toISOString(),
25
+ };
26
+ return normalized;
27
+ })
28
+ .catch(() => ({
29
+ version: 2,
30
+ foundryVersion: FOUNDRY_VERSION,
31
+ agents: [],
32
+ projects: [],
33
+ updatedAt: new Date(0).toISOString(),
34
+ }));
35
+ }
36
+ async recordInstallation(agents) {
37
+ const state = await this.read();
38
+ return this.write({
39
+ ...state,
40
+ version: 2,
41
+ foundryVersion: FOUNDRY_VERSION,
42
+ agents: [...new Set([...state.agents, ...agents])],
43
+ updatedAt: new Date().toISOString(),
44
+ });
45
+ }
46
+ async registerProject(root, targetUrl) {
47
+ const state = await this.read();
48
+ const project = {
49
+ root: resolve(root),
50
+ ...(targetUrl ? { targetUrl } : {}),
51
+ lastOpenedAt: new Date().toISOString(),
52
+ };
53
+ return this.write({
54
+ ...state,
55
+ version: 2,
56
+ foundryVersion: FOUNDRY_VERSION,
57
+ projects: [project, ...state.projects.filter((candidate) => candidate.root !== project.root)],
58
+ updatedAt: new Date().toISOString(),
59
+ });
60
+ }
61
+ async unregisterProject(root) {
62
+ const state = await this.read();
63
+ const resolvedRoot = resolve(root);
64
+ return this.write({
65
+ ...state,
66
+ version: 2,
67
+ projects: state.projects.filter((candidate) => candidate.root !== resolvedRoot),
68
+ updatedAt: new Date().toISOString(),
69
+ });
70
+ }
71
+ async removeInstallation(agents) {
72
+ const state = await this.read();
73
+ const removed = new Set(agents);
74
+ return this.write({
75
+ ...state,
76
+ version: 2,
77
+ agents: state.agents.filter((agent) => !removed.has(agent)),
78
+ updatedAt: new Date().toISOString(),
79
+ });
80
+ }
81
+ async write(state) {
82
+ await mkdir(dirname(this.path), { recursive: true });
83
+ const temporary = `${this.path}.${process.pid}.tmp`;
84
+ await writeFile(temporary, `${JSON.stringify(state, null, 2)}\n`, { mode: 0o600 });
85
+ await rename(temporary, this.path);
86
+ return state;
87
+ }
88
+ }
89
+ //# sourceMappingURL=companion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companion.js","sourceRoot":"","sources":["../src/companion.ts"],"names":[],"mappings":"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"}
package/dist/doctor.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { SessionStore } from 'foundry-design-runtime';
2
2
  export type DoctorStatus = 'passed' | 'warning' | 'failed';
3
3
  export interface DoctorCheck {
4
- id: 'project' | 'platform' | 'config' | 'integration' | 'instrumentation' | 'agent-configured' | 'agent-config-valid' | 'agent-version' | 'preview' | 'runtime' | 'agent-listening';
4
+ id: 'project' | 'platform' | 'config' | 'project-connection' | 'integration' | 'instrumentation' | 'agent-configured' | 'agent-config-valid' | 'agent-version' | 'legacy-project-agent' | 'preview' | 'runtime' | 'agent-listening';
5
5
  label: string;
6
6
  status: DoctorStatus;
7
7
  detail: string;
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,WAAW;IAC1B,EAAE,EACE,SAAS,GACT,UAAU,GACV,QAAQ,GACR,aAAa,GACb,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,eAAe,GACf,SAAS,GACT,SAAS,GACT,iBAAiB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAaD,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAiLvB"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,WAAW;IAC1B,EAAE,EACE,SAAS,GACT,UAAU,GACV,QAAQ,GACR,oBAAoB,GACpB,aAAa,GACb,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,eAAe,GACf,sBAAsB,GACtB,SAAS,GACT,SAAS,GACT,iBAAiB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAaD,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAyNvB"}
package/dist/doctor.js CHANGED
@@ -37,20 +37,25 @@ export async function collectDoctorReport(projectRoot, options = {}) {
37
37
  return undefined;
38
38
  }
39
39
  });
40
- const candidateAgentFiles = [
40
+ const hostAgentFiles = [
41
+ ...new Set([
42
+ join(home, '.codex', 'config.toml'),
43
+ join(home, '.cursor', 'mcp.json'),
44
+ join(home, '.claude.json'),
45
+ ]),
46
+ ];
47
+ const projectAgentFiles = [
41
48
  join(root, '.codex', 'config.toml'),
42
49
  join(root, '.cursor', 'mcp.json'),
43
50
  join(root, '.mcp.json'),
44
- join(home, '.codex', 'config.toml'),
45
- join(home, '.cursor', 'mcp.json'),
46
- join(home, '.claude.json'),
47
- join(home, '.mcp.json'),
48
- ];
51
+ ].filter((path) => !hostAgentFiles.includes(path));
49
52
  const schemaCheckedAgentFiles = [
50
- join(root, '.cursor', 'mcp.json'),
51
- join(root, '.mcp.json'),
52
- join(home, '.cursor', 'mcp.json'),
53
- join(home, '.mcp.json'),
53
+ ...new Set([
54
+ join(root, '.cursor', 'mcp.json'),
55
+ join(root, '.mcp.json'),
56
+ join(home, '.cursor', 'mcp.json'),
57
+ join(home, '.mcp.json'),
58
+ ]),
54
59
  ];
55
60
  const invalidAgentFiles = (await Promise.all(schemaCheckedAgentFiles.map(async (path) => {
56
61
  const content = await text(path);
@@ -64,8 +69,10 @@ export async function collectDoctorReport(projectRoot, options = {}) {
64
69
  return path;
65
70
  }
66
71
  }))).filter((path) => Boolean(path));
67
- const agentFiles = (await Promise.all(candidateAgentFiles.map(async (path) => ({ path, content: await text(path) })))).filter(({ content }) => content.includes('foundry-design-control'));
72
+ const agentFiles = (await Promise.all(hostAgentFiles.map(async (path) => ({ path, content: await text(path) })))).filter(({ content }) => content.includes('foundry-design-control'));
73
+ const legacyAgentFiles = (await Promise.all(projectAgentFiles.map(async (path) => ({ path, content: await text(path) })))).filter(({ content }) => content.includes('foundry-design-control'));
68
74
  const exactAgentFiles = agentFiles.filter(({ content }) => content.includes(FOUNDRY_MCP_PACKAGE_SPEC));
75
+ const staleAgentFiles = agentFiles.filter(({ content }) => !content.includes(FOUNDRY_MCP_PACKAGE_SPEC));
69
76
  const runtimeHealthy = await available(fetcher, 'http://127.0.0.1:4387/v1/health');
70
77
  const sessions = await store.list().catch(() => []);
71
78
  const activeSession = [...sessions]
@@ -95,6 +102,20 @@ export async function collectDoctorReport(projectRoot, options = {}) {
95
102
  status: config ? 'passed' : 'failed',
96
103
  detail: config ? configPath : 'Not configured.',
97
104
  },
105
+ {
106
+ id: 'project-connection',
107
+ label: 'Project connection',
108
+ status: config && (config.connection?.mode === 'global' || manifest?.connectionMode === 'global')
109
+ ? 'passed'
110
+ : config
111
+ ? 'warning'
112
+ : 'failed',
113
+ detail: config?.connection?.mode === 'global' || manifest?.connectionMode === 'global'
114
+ ? 'Lightweight project connection using the shared agent bridge.'
115
+ : config
116
+ ? 'Legacy project connection. Run doctor --repair to migrate it.'
117
+ : 'Not connected.',
118
+ },
98
119
  {
99
120
  id: 'integration',
100
121
  label: 'Managed integration',
@@ -135,9 +156,19 @@ export async function collectDoctorReport(projectRoot, options = {}) {
135
156
  : agentFiles.length
136
157
  ? 'warning'
137
158
  : 'failed',
138
- detail: exactAgentFiles.length
139
- ? FOUNDRY_MCP_PACKAGE_SPEC
140
- : `Expected ${FOUNDRY_MCP_PACKAGE_SPEC}.`,
159
+ detail: staleAgentFiles.length
160
+ ? `Expected ${FOUNDRY_MCP_PACKAGE_SPEC}. Update: ${staleAgentFiles.map(({ path }) => path).join(', ')}`
161
+ : exactAgentFiles.length
162
+ ? FOUNDRY_MCP_PACKAGE_SPEC
163
+ : `Expected ${FOUNDRY_MCP_PACKAGE_SPEC}.`,
164
+ },
165
+ {
166
+ id: 'legacy-project-agent',
167
+ label: 'Project-scoped agent configuration',
168
+ status: legacyAgentFiles.length ? 'warning' : 'passed',
169
+ detail: legacyAgentFiles.length
170
+ ? `Foundry can migrate these legacy paths: ${legacyAgentFiles.map(({ path }) => path).join(', ')}`
171
+ : 'None. Agent integration is owned at machine level.',
141
172
  },
142
173
  {
143
174
  id: 'preview',
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAwCzE,KAAK,UAAU,IAAI,CAAC,IAAY;IAC9B,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAqB,EAAE,GAAY;IAC1D,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC;SAChB,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;SAC/B,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,UAAyB,EAAE;IAE3B,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,YAAY,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAMxB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QAC5F,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAIxB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,cAAc,GAAG;QACrB,GAAG,IAAI,GAAG,CAAC;YACT,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;SAC3B,CAAC;KACH,CAAC;IACF,MAAM,iBAAiB,GAAG;QACxB,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;KACxB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,MAAM,uBAAuB,GAAG;QAC9B,GAAG,IAAI,GAAG,CAAC;YACT,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;SACxB,CAAC;KACH,CAAC;IACF,MAAM,iBAAiB,GAAG,CACxB,MAAM,OAAO,CAAC,GAAG,CACf,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA6B,CAAC;YAC/D,OAAO,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CACH,CACF,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,CACjB,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAC7F,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACtE,MAAM,gBAAgB,GAAG,CACvB,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAChG,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACxD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAC3C,CAAC;IACF,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CACvC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAC7D,CAAC;IACF,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,CAAC,GAAG,QAAQ,CAAC;SAChC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC;SACnE,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,cAAc,GAAG,kDAAkD,CAAC;IACxE,IAAI,cAAc,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1F,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,qCAAqC,aAAa,CAAC,SAAS,CAAC,SAAS,iBAAiB,EACvF,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CACjD,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACzB,MAAM,QAAQ,GAAG,QAAQ,EAAE,EAAE;gBAC3B,CAAC,CAAE,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGrB;gBACJ,CAAC,CAAC,SAAS,CAAC;YACd,SAAS,GAAG,QAAQ,EAAE,SAAS,KAAK,IAAI,CAAC;YACzC,IAAI,SAAS,EAAE,CAAC;gBACd,cAAc,GAAG,GAAG,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,IAAI,OAAO,uBAAuB,QAAQ,EAAE,QAAQ,EAAE,SAAS,IAAI,2BAA2B,GAAG,CAAC;YACvJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAkB;QAC5B,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;QACnE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;QAClF;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,uBAAuB;YAC9B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YACpC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB;SAChD;QACD;YACE,EAAE,EAAE,oBAAoB;YACxB,KAAK,EAAE,oBAAoB;YAC3B,MAAM,EACJ,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,KAAK,QAAQ,IAAI,QAAQ,EAAE,cAAc,KAAK,QAAQ,CAAC;gBACvF,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,MAAM;oBACN,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ;YAChB,MAAM,EACJ,MAAM,EAAE,UAAU,EAAE,IAAI,KAAK,QAAQ,IAAI,QAAQ,EAAE,cAAc,KAAK,QAAQ;gBAC5E,CAAC,CAAC,+DAA+D;gBACjE,CAAC,CAAC,MAAM;oBACN,CAAC,CAAC,+DAA+D;oBACjE,CAAC,CAAC,gBAAgB;SACzB;QACD;YACE,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,qBAAqB;YAC5B,MAAM,EACJ,QAAQ,EAAE,gBAAgB,KAAK,eAAe;gBAC5C,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,QAAQ,EAAE,gBAAgB;oBAC1B,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ;YAChB,MAAM,EAAE,QAAQ,EAAE,gBAAgB,IAAI,gBAAgB;SACvD;QACD;YACE,EAAE,EAAE,iBAAiB;YACrB,KAAK,EAAE,iBAAiB;YACxB,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACnD,MAAM,EAAE,MAAM,EAAE,YAAY;gBAC1B,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE;gBAC1C,CAAC,CAAC,sBAAsB;SAC3B;QACD;YACE,EAAE,EAAE,kBAAkB;YACtB,KAAK,EAAE,kBAAkB;YACzB,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YAC/C,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB;SAC9F;QACD;YACE,EAAE,EAAE,oBAAoB;YACxB,KAAK,EAAE,4BAA4B;YACnC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YACtD,MAAM,EAAE,iBAAiB,CAAC,MAAM;gBAC9B,CAAC,CAAC,8BAA8B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBAC/D,CAAC,CAAC,iEAAiE;SACtE;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,uBAAuB;YAC9B,MAAM,EACJ,eAAe,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM;gBAC/D,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,UAAU,CAAC,MAAM;oBACjB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ;YAChB,MAAM,EAAE,eAAe,CAAC,MAAM;gBAC5B,CAAC,CAAC,YAAY,wBAAwB,aAAa,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACvG,CAAC,CAAC,eAAe,CAAC,MAAM;oBACtB,CAAC,CAAC,wBAAwB;oBAC1B,CAAC,CAAC,YAAY,wBAAwB,GAAG;SAC9C;QACD;YACE,EAAE,EAAE,sBAAsB;YAC1B,KAAK,EAAE,oCAAoC;YAC3C,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACtD,MAAM,EAAE,gBAAgB,CAAC,MAAM;gBAC7B,CAAC,CAAC,2CAA2C,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClG,CAAC,CAAC,oDAAoD;SACzD;QACD;YACE,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,iBAAiB;YACxB,MAAM,EACJ,QAAQ,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBACvF,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,MAAM,EAAE,SAAS;oBACjB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ;YAChB,MAAM,EAAE,MAAM,EAAE,SAAS,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC;SACxF;QACD;YACE,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC7C,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,cAAc;SACvE;QACD;YACE,EAAE,EAAE,iBAAiB;YACrB,KAAK,EAAE,uBAAuB;YAC9B,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACxC,MAAM,EAAE,cAAc;SACvB;KACF,CAAC;IACF,OAAO;QACL,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,SAAS;QACtE,MAAM;QACN,oBAAoB,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;QACxD,eAAe,EAAE,aAAa,EAAE,SAAS,CAAC,SAAS;KACpD,CAAC;AACJ,CAAC"}