@lumenflow/cli 2.18.3 → 2.20.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.
Files changed (128) hide show
  1. package/README.md +44 -42
  2. package/dist/agent-session.js +1 -1
  3. package/dist/agent-session.js.map +1 -1
  4. package/dist/commands/integrate.js +1 -0
  5. package/dist/commands/integrate.js.map +1 -1
  6. package/dist/commands.js +1 -0
  7. package/dist/commands.js.map +1 -1
  8. package/dist/delegation-list.js +140 -0
  9. package/dist/delegation-list.js.map +1 -0
  10. package/dist/docs-sync.js +1 -0
  11. package/dist/docs-sync.js.map +1 -1
  12. package/dist/doctor.js +36 -99
  13. package/dist/doctor.js.map +1 -1
  14. package/dist/gates-plan-resolvers.js +150 -0
  15. package/dist/gates-plan-resolvers.js.map +1 -0
  16. package/dist/gates-runners.js +533 -0
  17. package/dist/gates-runners.js.map +1 -0
  18. package/dist/gates-types.js +3 -0
  19. package/dist/gates-types.js.map +1 -1
  20. package/dist/gates-utils.js +316 -0
  21. package/dist/gates-utils.js.map +1 -0
  22. package/dist/gates.js +44 -1016
  23. package/dist/gates.js.map +1 -1
  24. package/dist/hooks/enforcement-generator.js +16 -880
  25. package/dist/hooks/enforcement-generator.js.map +1 -1
  26. package/dist/hooks/enforcement-sync.js +6 -5
  27. package/dist/hooks/enforcement-sync.js.map +1 -1
  28. package/dist/hooks/generators/auto-checkpoint.js +123 -0
  29. package/dist/hooks/generators/auto-checkpoint.js.map +1 -0
  30. package/dist/hooks/generators/enforce-worktree.js +188 -0
  31. package/dist/hooks/generators/enforce-worktree.js.map +1 -0
  32. package/dist/hooks/generators/index.js +16 -0
  33. package/dist/hooks/generators/index.js.map +1 -0
  34. package/dist/hooks/generators/pre-compact-checkpoint.js +134 -0
  35. package/dist/hooks/generators/pre-compact-checkpoint.js.map +1 -0
  36. package/dist/hooks/generators/require-wu.js +115 -0
  37. package/dist/hooks/generators/require-wu.js.map +1 -0
  38. package/dist/hooks/generators/session-start-recovery.js +101 -0
  39. package/dist/hooks/generators/session-start-recovery.js.map +1 -0
  40. package/dist/hooks/generators/signal-utils.js +52 -0
  41. package/dist/hooks/generators/signal-utils.js.map +1 -0
  42. package/dist/hooks/generators/warn-incomplete.js +65 -0
  43. package/dist/hooks/generators/warn-incomplete.js.map +1 -0
  44. package/dist/init-detection.js +228 -0
  45. package/dist/init-detection.js.map +1 -0
  46. package/dist/init-scaffolding.js +146 -0
  47. package/dist/init-scaffolding.js.map +1 -0
  48. package/dist/init-templates.js +1928 -0
  49. package/dist/init-templates.js.map +1 -0
  50. package/dist/init.js +137 -2425
  51. package/dist/init.js.map +1 -1
  52. package/dist/initiative-edit.js +42 -11
  53. package/dist/initiative-edit.js.map +1 -1
  54. package/dist/initiative-remove-wu.js +0 -0
  55. package/dist/initiative-status.js +29 -2
  56. package/dist/initiative-status.js.map +1 -1
  57. package/dist/mem-context.js +22 -9
  58. package/dist/mem-context.js.map +1 -1
  59. package/dist/orchestrate-init-status.js +32 -1
  60. package/dist/orchestrate-init-status.js.map +1 -1
  61. package/dist/orchestrate-initiative.js +2 -2
  62. package/dist/orchestrate-initiative.js.map +1 -1
  63. package/dist/orchestrate-monitor.js +38 -38
  64. package/dist/orchestrate-monitor.js.map +1 -1
  65. package/dist/plan-link.js +7 -14
  66. package/dist/plan-link.js.map +1 -1
  67. package/dist/public-manifest.js +19 -5
  68. package/dist/public-manifest.js.map +1 -1
  69. package/dist/shared-validators.js +1 -0
  70. package/dist/shared-validators.js.map +1 -1
  71. package/dist/spawn-list.js +0 -0
  72. package/dist/sync-templates.js +2 -1
  73. package/dist/sync-templates.js.map +1 -1
  74. package/dist/wu-claim-branch.js +121 -0
  75. package/dist/wu-claim-branch.js.map +1 -0
  76. package/dist/wu-claim-output.js +83 -0
  77. package/dist/wu-claim-output.js.map +1 -0
  78. package/dist/wu-claim-resume-handler.js +85 -0
  79. package/dist/wu-claim-resume-handler.js.map +1 -0
  80. package/dist/wu-claim-state.js +572 -0
  81. package/dist/wu-claim-state.js.map +1 -0
  82. package/dist/wu-claim-validation.js +439 -0
  83. package/dist/wu-claim-validation.js.map +1 -0
  84. package/dist/wu-claim-worktree.js +221 -0
  85. package/dist/wu-claim-worktree.js.map +1 -0
  86. package/dist/wu-claim.js +96 -1394
  87. package/dist/wu-claim.js.map +1 -1
  88. package/dist/wu-code-path-coverage.js +81 -0
  89. package/dist/wu-code-path-coverage.js.map +1 -0
  90. package/dist/wu-create-content.js +256 -0
  91. package/dist/wu-create-content.js.map +1 -0
  92. package/dist/wu-create-readiness.js +57 -0
  93. package/dist/wu-create-readiness.js.map +1 -0
  94. package/dist/wu-create-validation.js +124 -0
  95. package/dist/wu-create-validation.js.map +1 -0
  96. package/dist/wu-create.js +45 -442
  97. package/dist/wu-create.js.map +1 -1
  98. package/dist/wu-done.js +151 -249
  99. package/dist/wu-done.js.map +1 -1
  100. package/dist/wu-edit-operations.js +401 -0
  101. package/dist/wu-edit-operations.js.map +1 -0
  102. package/dist/wu-edit-validators.js +280 -0
  103. package/dist/wu-edit-validators.js.map +1 -0
  104. package/dist/wu-edit.js +43 -759
  105. package/dist/wu-edit.js.map +1 -1
  106. package/dist/wu-prep.js +43 -127
  107. package/dist/wu-prep.js.map +1 -1
  108. package/dist/wu-repair.js +1 -1
  109. package/dist/wu-repair.js.map +1 -1
  110. package/dist/wu-sandbox.js +253 -0
  111. package/dist/wu-sandbox.js.map +1 -0
  112. package/dist/wu-spawn-prompt-builders.js +1124 -0
  113. package/dist/wu-spawn-prompt-builders.js.map +1 -0
  114. package/dist/wu-spawn-strategy-resolver.js +319 -0
  115. package/dist/wu-spawn-strategy-resolver.js.map +1 -0
  116. package/dist/wu-spawn.js +9 -1398
  117. package/dist/wu-spawn.js.map +1 -1
  118. package/dist/wu-status.js +4 -0
  119. package/dist/wu-status.js.map +1 -1
  120. package/dist/wu-validate.js +1 -1
  121. package/dist/wu-validate.js.map +1 -1
  122. package/package.json +15 -11
  123. package/templates/core/LUMENFLOW.md.template +29 -99
  124. package/templates/core/UPGRADING.md.template +2 -2
  125. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +1 -1
  126. package/templates/core/ai/onboarding/quick-ref-commands.md.template +29 -4
  127. package/templates/core/ai/onboarding/release-process.md.template +1 -1
  128. package/templates/vendors/claude/.claude/skills/orchestration/SKILL.md.template +8 -8
@@ -0,0 +1,253 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * WU Sandbox - Execute a command using the core sandbox engine.
4
+ *
5
+ * Usage:
6
+ * pnpm wu:sandbox --id WU-123 -- <command> [args...]
7
+ */
8
+ import { existsSync, readFileSync } from 'node:fs';
9
+ import path from 'node:path';
10
+ import { spawn } from 'node:child_process';
11
+ import { parse as parseYaml } from 'yaml';
12
+ import { createWUParser, WU_OPTIONS, resolveLocation, readWURaw, buildSandboxProfile, resolveSandboxBackendForPlatform, SANDBOX_BACKEND_IDS, createLinuxSandboxBackend, createMacosSandboxBackend, createWindowsSandboxBackend, } from '@lumenflow/core';
13
+ import { WU_PATHS, defaultWorktreeFrom } from '@lumenflow/core/wu-paths';
14
+ import { die } from '@lumenflow/core/error-handler';
15
+ import { LOG_PREFIX, EXIT_CODES } from '@lumenflow/core/wu-constants';
16
+ import { runCLI } from './cli-entry-point.js';
17
+ const PREFIX = LOG_PREFIX.CLAIM.replace('wu-claim', 'wu:sandbox');
18
+ const CONFIG_FILE = '.lumenflow.config.yaml';
19
+ const DEFAULT_ALLOW_UNSANDBOXED_ENV_VAR = 'LUMENFLOW_SANDBOX_ALLOW_UNSANDBOXED';
20
+ function toNormalizedAbsolute(targetPath) {
21
+ const normalized = path.resolve(targetPath);
22
+ return normalized.length > 1 && normalized.endsWith(path.sep)
23
+ ? normalized.slice(0, -1)
24
+ : normalized;
25
+ }
26
+ function isWithinRoot(candidatePath, rootPath) {
27
+ const candidateKey = process.platform === 'win32' ? candidatePath.toLowerCase() : candidatePath;
28
+ const rootKey = process.platform === 'win32' ? rootPath.toLowerCase() : rootPath;
29
+ return candidateKey === rootKey || candidateKey.startsWith(`${rootKey}${path.sep}`);
30
+ }
31
+ function parsePolicyConfig(value) {
32
+ if (!value || typeof value !== 'object') {
33
+ return {};
34
+ }
35
+ return value;
36
+ }
37
+ export function readSandboxPolicy(projectRoot) {
38
+ const configPath = path.join(projectRoot, CONFIG_FILE);
39
+ if (!existsSync(configPath)) {
40
+ return {
41
+ allowUnsandboxedEnvVar: DEFAULT_ALLOW_UNSANDBOXED_ENV_VAR,
42
+ extraWritableRoots: [],
43
+ denyWritableRoots: [],
44
+ };
45
+ }
46
+ try {
47
+ const raw = parseYaml(readFileSync(configPath, 'utf8'));
48
+ const sandbox = parsePolicyConfig(raw?.sandbox);
49
+ const allowUnsandboxedEnvVar = typeof sandbox.allow_unsandboxed_fallback_env === 'string' &&
50
+ sandbox.allow_unsandboxed_fallback_env.trim() !== ''
51
+ ? sandbox.allow_unsandboxed_fallback_env.trim()
52
+ : DEFAULT_ALLOW_UNSANDBOXED_ENV_VAR;
53
+ const extraWritableRoots = Array.isArray(sandbox.extra_writable_roots)
54
+ ? sandbox.extra_writable_roots.filter((value) => typeof value === 'string')
55
+ : [];
56
+ const denyWritableRoots = Array.isArray(sandbox.deny_writable_roots)
57
+ ? sandbox.deny_writable_roots.filter((value) => typeof value === 'string')
58
+ : [];
59
+ return {
60
+ allowUnsandboxedEnvVar,
61
+ extraWritableRoots,
62
+ denyWritableRoots,
63
+ };
64
+ }
65
+ catch {
66
+ return {
67
+ allowUnsandboxedEnvVar: DEFAULT_ALLOW_UNSANDBOXED_ENV_VAR,
68
+ extraWritableRoots: [],
69
+ denyWritableRoots: [],
70
+ };
71
+ }
72
+ }
73
+ export function extractSandboxCommandFromArgv(argv) {
74
+ const separator = argv.indexOf('--');
75
+ if (separator === -1 || separator === argv.length - 1) {
76
+ return [];
77
+ }
78
+ return argv.slice(separator + 1);
79
+ }
80
+ function parseWuSandboxOptions(argv = process.argv) {
81
+ const opts = createWUParser({
82
+ name: 'wu-sandbox',
83
+ description: 'Execute a command through the sandbox backend for this platform',
84
+ options: [WU_OPTIONS.id, WU_OPTIONS.worktree],
85
+ required: ['id'],
86
+ allowPositionalId: true,
87
+ });
88
+ const command = extractSandboxCommandFromArgv(argv);
89
+ return {
90
+ id: String(opts.id).toUpperCase(),
91
+ worktree: opts.worktree,
92
+ command,
93
+ };
94
+ }
95
+ function resolveCandidateRoots(projectRoot, policy) {
96
+ const deniedRoots = policy.denyWritableRoots.map((entry) => path.isAbsolute(entry)
97
+ ? toNormalizedAbsolute(entry)
98
+ : toNormalizedAbsolute(path.join(projectRoot, entry)));
99
+ const extras = policy.extraWritableRoots.map((entry) => path.isAbsolute(entry)
100
+ ? toNormalizedAbsolute(entry)
101
+ : toNormalizedAbsolute(path.join(projectRoot, entry)));
102
+ return extras.filter((extra) => !deniedRoots.some((denied) => isWithinRoot(extra, denied)));
103
+ }
104
+ function resolveWorktreeFromWu(projectRoot, wuId) {
105
+ const wuPath = path.join(projectRoot, WU_PATHS.WU(wuId));
106
+ if (!existsSync(wuPath)) {
107
+ return null;
108
+ }
109
+ try {
110
+ const doc = readWURaw(wuPath);
111
+ const defaultWorktree = defaultWorktreeFrom(doc);
112
+ return defaultWorktree ? path.resolve(projectRoot, defaultWorktree) : null;
113
+ }
114
+ catch {
115
+ return null;
116
+ }
117
+ }
118
+ async function resolveWorktreePath(projectRoot, wuId, explicitWorktree, cwd) {
119
+ if (explicitWorktree) {
120
+ return path.isAbsolute(explicitWorktree)
121
+ ? path.resolve(explicitWorktree)
122
+ : path.resolve(projectRoot, explicitWorktree);
123
+ }
124
+ const location = await resolveLocation(cwd);
125
+ if (location.type === 'worktree') {
126
+ return path.resolve(location.gitRoot);
127
+ }
128
+ const fromWu = resolveWorktreeFromWu(projectRoot, wuId);
129
+ if (fromWu) {
130
+ return fromWu;
131
+ }
132
+ die(`Unable to determine worktree path for ${wuId}.\n` +
133
+ `Run from the claimed worktree or provide --worktree <path>.`);
134
+ }
135
+ function createBackendForCurrentPlatform() {
136
+ const resolution = resolveSandboxBackendForPlatform();
137
+ if (!resolution.supported) {
138
+ return null;
139
+ }
140
+ if (resolution.id === SANDBOX_BACKEND_IDS.LINUX) {
141
+ return createLinuxSandboxBackend();
142
+ }
143
+ if (resolution.id === SANDBOX_BACKEND_IDS.MACOS) {
144
+ return createMacosSandboxBackend();
145
+ }
146
+ if (resolution.id === SANDBOX_BACKEND_IDS.WINDOWS) {
147
+ return createWindowsSandboxBackend();
148
+ }
149
+ return null;
150
+ }
151
+ export function resolveAllowUnsandboxedFallback(env, envVarName) {
152
+ return env[envVarName] === '1';
153
+ }
154
+ async function buildSandboxExecution(input) {
155
+ const cwd = input.cwd || process.cwd();
156
+ const location = await resolveLocation(cwd);
157
+ const projectRoot = path.resolve(location.mainCheckout || cwd);
158
+ const policy = readSandboxPolicy(projectRoot);
159
+ const extraWritableRoots = resolveCandidateRoots(projectRoot, policy);
160
+ const worktreePath = await resolveWorktreePath(projectRoot, input.id, input.worktree, cwd);
161
+ const allowUnsandboxedFallback = resolveAllowUnsandboxedFallback(process.env, policy.allowUnsandboxedEnvVar);
162
+ const profile = buildSandboxProfile({
163
+ projectRoot,
164
+ worktreePath,
165
+ wuId: input.id,
166
+ extraWritableRoots,
167
+ });
168
+ const backend = createBackendForCurrentPlatform();
169
+ if (!backend) {
170
+ const unsupportedPlan = allowUnsandboxedFallback
171
+ ? {
172
+ backendId: SANDBOX_BACKEND_IDS.UNSUPPORTED,
173
+ enforced: false,
174
+ failClosed: false,
175
+ warning: 'Running unsandboxed because this platform does not have a hardened sandbox backend.',
176
+ }
177
+ : {
178
+ backendId: SANDBOX_BACKEND_IDS.UNSUPPORTED,
179
+ enforced: false,
180
+ failClosed: true,
181
+ reason: 'No hardened sandbox backend is available for this platform. ' +
182
+ `Set ${policy.allowUnsandboxedEnvVar}=1 to allow explicit unsandboxed fallback.`,
183
+ };
184
+ return {
185
+ profile,
186
+ plan: unsupportedPlan,
187
+ worktreePath,
188
+ policy,
189
+ allowUnsandboxedFallback,
190
+ };
191
+ }
192
+ const plan = backend.resolveExecution({
193
+ profile,
194
+ command: input.command,
195
+ allowUnsandboxedFallback,
196
+ });
197
+ return {
198
+ profile,
199
+ plan,
200
+ worktreePath,
201
+ policy,
202
+ allowUnsandboxedFallback,
203
+ };
204
+ }
205
+ async function runCommand(command, args, cwd) {
206
+ return new Promise((resolve, reject) => {
207
+ const child = spawn(command, args, {
208
+ cwd,
209
+ stdio: 'inherit',
210
+ env: process.env,
211
+ });
212
+ child.on('error', reject);
213
+ child.on('exit', (code, signal) => {
214
+ if (signal) {
215
+ resolve(EXIT_CODES.ERROR);
216
+ }
217
+ else {
218
+ resolve(code ?? EXIT_CODES.ERROR);
219
+ }
220
+ });
221
+ });
222
+ }
223
+ export async function runWuSandbox(input) {
224
+ if (!input.command || input.command.length === 0) {
225
+ die('No command provided. Usage: pnpm wu:sandbox --id WU-XXXX -- <command> [args...]');
226
+ }
227
+ const { plan, worktreePath, policy } = await buildSandboxExecution(input);
228
+ if (plan.failClosed) {
229
+ die(`${plan.reason || 'Sandbox backend failed closed.'}\n` +
230
+ `To allow explicit unsandboxed fallback for this command, set ${policy.allowUnsandboxedEnvVar}=1.`);
231
+ }
232
+ if (plan.warning) {
233
+ console.warn(`${PREFIX} Warning: ${plan.warning}`);
234
+ }
235
+ const commandToRun = plan.enforced && plan.invocation ? plan.invocation.command : input.command[0];
236
+ const commandArgs = plan.enforced && plan.invocation ? plan.invocation.args : input.command.slice(1);
237
+ if (plan.enforced) {
238
+ console.log(`${PREFIX} Running command with ${plan.backendId} sandbox backend.`);
239
+ }
240
+ else {
241
+ console.log(`${PREFIX} Running command unsandboxed (explicit fallback).`);
242
+ }
243
+ return runCommand(commandToRun, commandArgs, worktreePath);
244
+ }
245
+ async function main() {
246
+ const options = parseWuSandboxOptions(process.argv);
247
+ const exitCode = await runWuSandbox(options);
248
+ process.exit(exitCode);
249
+ }
250
+ if (import.meta.main) {
251
+ void runCLI(main);
252
+ }
253
+ //# sourceMappingURL=wu-sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wu-sandbox.js","sourceRoot":"","sources":["../src/wu-sandbox.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,UAAU,EACV,eAAe,EACf,SAAS,EACT,mBAAmB,EACnB,gCAAgC,EAChC,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,GAI5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAC7C,MAAM,iCAAiC,GAAG,qCAAqC,CAAC;AAgChF,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3D,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC,UAAU,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,aAAqB,EAAE,QAAgB;IAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;IAChG,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjF,OAAO,YAAY,KAAK,OAAO,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAA4B,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,sBAAsB,EAAE,iCAAiC;YACzD,kBAAkB,EAAE,EAAE;YACtB,iBAAiB,EAAE,EAAE;SACtB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAErD,CAAC;QACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,sBAAsB,GAC1B,OAAO,OAAO,CAAC,8BAA8B,KAAK,QAAQ;YAC1D,OAAO,CAAC,8BAA8B,CAAC,IAAI,EAAE,KAAK,EAAE;YAClD,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,IAAI,EAAE;YAC/C,CAAC,CAAC,iCAAiC,CAAC;QAExC,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC;YACpE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;YAC5F,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC;YAClE,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;YAC3F,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO;YACL,sBAAsB;YACtB,kBAAkB;YAClB,iBAAiB;SAClB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,sBAAsB,EAAE,iCAAiC;YACzD,kBAAkB,EAAE,EAAE;YACtB,iBAAiB,EAAE,EAAE;SACtB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAAc;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAiB,OAAO,CAAC,IAAI;IAC1D,MAAM,IAAI,GAAG,cAAc,CAAC;QAC1B,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,iEAAiE;QAC9E,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;QAC7C,QAAQ,EAAE,CAAC,IAAI,CAAC;QAChB,iBAAiB,EAAE,IAAI;KACxB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;QACjC,QAAQ,EAAE,IAAI,CAAC,QAA8B;QAC7C,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAmB,EAAE,MAA6B;IAC/E,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACzD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAC7B,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CACxD,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACrD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAC7B,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CACxD,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAmB,EAAE,IAAY;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,eAAe,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACjD,OAAO,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,WAAmB,EACnB,IAAY,EACZ,gBAAoC,EACpC,GAAW;IAEX,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACxD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,GAAG,CACD,yCAAyC,IAAI,KAAK;QAChD,6DAA6D,CAChE,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B;IACtC,MAAM,UAAU,GAAG,gCAAgC,EAAE,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,UAAU,CAAC,EAAE,KAAK,mBAAmB,CAAC,KAAK,EAAE,CAAC;QAChD,OAAO,yBAAyB,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,UAAU,CAAC,EAAE,KAAK,mBAAmB,CAAC,KAAK,EAAE,CAAC;QAChD,OAAO,yBAAyB,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,UAAU,CAAC,EAAE,KAAK,mBAAmB,CAAC,OAAO,EAAE,CAAC;QAClD,OAAO,2BAA2B,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,GAAsB,EACtB,UAAkB;IAElB,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,KAA8B;IAE9B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC3F,MAAM,wBAAwB,GAAG,+BAA+B,CAC9D,OAAO,CAAC,GAAG,EACX,MAAM,CAAC,sBAAsB,CAC9B,CAAC;IAEF,MAAM,OAAO,GAAG,mBAAmB,CAAC;QAClC,WAAW;QACX,YAAY;QACZ,IAAI,EAAE,KAAK,CAAC,EAAE;QACd,kBAAkB;KACnB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,+BAA+B,EAAE,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,eAAe,GAAyB,wBAAwB;YACpE,CAAC,CAAC;gBACE,SAAS,EAAE,mBAAmB,CAAC,WAAW;gBAC1C,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,KAAK;gBACjB,OAAO,EACL,qFAAqF;aACxF;YACH,CAAC,CAAC;gBACE,SAAS,EAAE,mBAAmB,CAAC,WAAW;gBAC1C,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,IAAI;gBAChB,MAAM,EACJ,8DAA8D;oBAC9D,OAAO,MAAM,CAAC,sBAAsB,4CAA4C;aACnF,CAAC;QAEN,OAAO;YACL,OAAO;YACP,IAAI,EAAE,eAAe;YACrB,YAAY;YACZ,MAAM;YACN,wBAAwB;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACpC,OAAO;QACP,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,wBAAwB;KACzB,CAAC,CAAC;IACH,OAAO;QACL,OAAO;QACP,IAAI;QACJ,YAAY;QACZ,MAAM;QACN,wBAAwB;KACzB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,IAAc,EAAE,GAAW;IACpE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAA8B;IAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,iFAAiF,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAE1E,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,GAAG,CACD,GAAG,IAAI,CAAC,MAAM,IAAI,gCAAgC,IAAI;YACpD,gEAAgE,MAAM,CAAC,sBAAsB,KAAK,CACrG,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,aAAa,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,YAAY,GAChB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,WAAW,GACf,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,yBAAyB,IAAI,CAAC,SAAS,mBAAmB,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,mDAAmD,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,UAAU,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}