@convext/cli 1.0.15 → 1.0.17

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.
@@ -2,11 +2,14 @@ import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import chalk from "chalk";
4
4
  import ora from "ora";
5
- import { getProjectContext, getProjectMarkdown, assignRuleSets, } from "../api.js";
5
+ import { getProjectContext, getProjectMarkdown, getProjectRulesWithEnforcement, assignRuleSets, uploadTelemetry, } from "../api.js";
6
6
  import { backupFile, ensureParentDir } from "../utils/fileManager.js";
7
7
  import { promptConfirm, promptCheckbox } from "../utils/prompts.js";
8
8
  import { scanRepository } from "../utils/scanner.js";
9
+ import { generateHooks, writeHooks, mergeClaudeCodeSettings } from "../utils/hooks.js";
10
+ import { readEvents, rotateLog } from "../utils/telemetry.js";
9
11
  import { initCommand } from "./init.js";
12
+ import { getApiUrl } from "../config.js";
10
13
  function loadLocalProjectConfig() {
11
14
  const configPath = join(process.cwd(), ".convext", "config.json");
12
15
  if (!existsSync(configPath)) {
@@ -15,7 +18,7 @@ function loadLocalProjectConfig() {
15
18
  try {
16
19
  const content = readFileSync(configPath, "utf-8");
17
20
  const config = JSON.parse(content);
18
- if (config.projectId && typeof config.projectId === "number") {
21
+ if (config.slug && typeof config.slug === "string") {
19
22
  return config;
20
23
  }
21
24
  return null;
@@ -44,7 +47,7 @@ const DOTFILE_CONFIGS = {
44
47
  function ensureDirectoryExists(filePath) {
45
48
  ensureParentDir(filePath);
46
49
  }
47
- async function maybeAssignRuleSets(projectId, context, insights) {
50
+ async function maybeAssignRuleSets(projectSlug, context, insights) {
48
51
  const available = dedupeRuleSets([
49
52
  ...(context.available_rule_sets?.organization ?? []),
50
53
  ...(context.available_rule_sets?.global ?? []),
@@ -75,7 +78,7 @@ async function maybeAssignRuleSets(projectId, context, insights) {
75
78
  console.log(chalk.red("No valid rule set slugs selected."));
76
79
  return false;
77
80
  }
78
- const assignment = await assignRuleSets(projectId, slugs);
81
+ const assignment = await assignRuleSets(projectSlug, slugs);
79
82
  if (assignment.assigned > 0) {
80
83
  console.log(chalk.green(`\n✓ Assigned ${assignment.assigned} rule set(s): ${assignment.rule_sets.map((rs) => rs.name).join(", ")}`));
81
84
  return true;
@@ -110,6 +113,13 @@ function dedupeRuleSets(ruleSets) {
110
113
  }
111
114
  return result;
112
115
  }
116
+ // Extract project slug from a potentially compound slug
117
+ function extractProjectSlug(slug) {
118
+ if (slug.includes("/")) {
119
+ return slug.split("/")[1];
120
+ }
121
+ return slug;
122
+ }
113
123
  function hasChanges(filePath, newContent) {
114
124
  if (!existsSync(filePath)) {
115
125
  return true;
@@ -122,22 +132,22 @@ export async function syncCommand(options) {
122
132
  const log = (msg) => verbose && console.log(chalk.gray(`[verbose] ${msg}`));
123
133
  // Check for local project config first
124
134
  const localConfig = loadLocalProjectConfig();
125
- let projectId = options.projectId;
126
- if (!projectId && localConfig) {
127
- projectId = localConfig.projectId;
128
- log(`Using project ID ${projectId} from .convext.json`);
135
+ let projectSlug = options.projectSlug;
136
+ if (!projectSlug && localConfig) {
137
+ projectSlug = localConfig.slug;
138
+ log(`Using project slug ${projectSlug} from .convext/config.json`);
129
139
  }
130
- // If no project ID, prompt to initialize
131
- if (!projectId) {
140
+ // If no project slug, prompt to initialize
141
+ if (!projectSlug) {
132
142
  console.log(chalk.yellow("\nNo project configured for this directory."));
133
- console.log(chalk.gray("A .convext.json file links this repo to your Convext project.\n"));
143
+ console.log(chalk.gray("A .convext/config.json file links this repo to your Convext project.\n"));
134
144
  const shouldInit = await promptConfirm("Would you like to initialize/connect this project now?", true);
135
145
  if (shouldInit) {
136
146
  await initCommand({});
137
147
  // Re-load the config after init
138
148
  const newConfig = loadLocalProjectConfig();
139
149
  if (newConfig) {
140
- projectId = newConfig.projectId;
150
+ projectSlug = newConfig.slug;
141
151
  console.log(""); // Add spacing
142
152
  }
143
153
  else {
@@ -148,7 +158,7 @@ export async function syncCommand(options) {
148
158
  }
149
159
  else {
150
160
  console.log(chalk.gray("\nTo initialize later, run: ") + chalk.cyan("convext init"));
151
- console.log(chalk.gray("Or specify a project ID: ") + chalk.cyan("convext sync --project <id>"));
161
+ console.log(chalk.gray("Or specify a project slug: ") + chalk.cyan("convext sync --project <slug>"));
152
162
  return;
153
163
  }
154
164
  }
@@ -160,14 +170,14 @@ export async function syncCommand(options) {
160
170
  log(`Found frameworks: ${Array.from(insights.frameworks).join(", ") || "none"}`);
161
171
  let projectMeta;
162
172
  spinner.text = "Fetching project context...";
163
- log(`Fetching context for project ID: ${projectId}`);
173
+ log(`Fetching context for project slug: ${projectSlug}`);
164
174
  try {
165
- projectMeta = await getProjectContext(projectId);
175
+ projectMeta = await getProjectContext(projectSlug);
166
176
  log(`Project context response: ${JSON.stringify(projectMeta, null, 2)}`);
167
177
  // Check if API returned an error (project not found)
168
178
  if (projectMeta.error) {
169
179
  spinner.fail("Project not found on server");
170
- console.log(chalk.yellow(`\nProject ID ${projectId} no longer exists on the server.`));
180
+ console.log(chalk.yellow(`\nProject "${projectSlug}" no longer exists on the server.`));
171
181
  console.log(chalk.gray("This can happen if the project was deleted or the database was reset.\n"));
172
182
  const shouldReinit = await promptConfirm("Would you like to re-register this project?", true);
173
183
  if (shouldReinit) {
@@ -182,9 +192,9 @@ export async function syncCommand(options) {
182
192
  // Re-load the config after init
183
193
  const newConfig = loadLocalProjectConfig();
184
194
  if (newConfig) {
185
- projectId = newConfig.projectId;
195
+ projectSlug = newConfig.slug;
186
196
  spinner.start("Fetching project context...");
187
- projectMeta = await getProjectContext(projectId);
197
+ projectMeta = await getProjectContext(projectSlug);
188
198
  }
189
199
  else {
190
200
  console.log(chalk.yellow("\nProject registration was cancelled."));
@@ -211,13 +221,13 @@ export async function syncCommand(options) {
211
221
  // Check if project has explicitly assigned rulesets (not just inheriting globals)
212
222
  const assignedRuleSets = projectMeta.assigned_rule_sets ?? [];
213
223
  const hasExplicitAssignments = assignedRuleSets.length > 0;
214
- if (!hasExplicitAssignments && projectId && projectMeta) {
224
+ if (!hasExplicitAssignments && projectSlug && projectMeta) {
215
225
  console.log(chalk.yellow("\nNo rule sets are explicitly assigned to this project."));
216
226
  console.log(chalk.gray("Select rule sets based on your tech stack:\n"));
217
- const assigned = await maybeAssignRuleSets(projectId, projectMeta, insights);
227
+ const assigned = await maybeAssignRuleSets(projectSlug, projectMeta, insights);
218
228
  if (assigned) {
219
229
  spinner.start("Reloading project context...");
220
- projectMeta = await getProjectContext(projectId);
230
+ projectMeta = await getProjectContext(projectSlug);
221
231
  spinner.succeed("Rule sets assigned and context refreshed");
222
232
  }
223
233
  else {
@@ -238,7 +248,9 @@ export async function syncCommand(options) {
238
248
  log("Fetching pre-rendered markdown from server...");
239
249
  let serverMarkdown;
240
250
  try {
241
- const contextResponse = await getProjectMarkdown(projectMeta.project?.slug || String(projectId));
251
+ // Use simple project slug (without org prefix) for the API endpoint
252
+ const simpleSlug = extractProjectSlug(projectSlug);
253
+ const contextResponse = await getProjectMarkdown(simpleSlug);
242
254
  serverMarkdown = contextResponse.markdown;
243
255
  log(`Got ${contextResponse.rules_count} rules, ${contextResponse.standards_count} standards`);
244
256
  }
@@ -304,6 +316,14 @@ export async function syncCommand(options) {
304
316
  else {
305
317
  console.log("\n" + chalk.gray("All files are up to date"));
306
318
  }
319
+ // Generate hooks if requested
320
+ if (options.hooks && projectSlug) {
321
+ await syncHooks(projectSlug, cwd, options.dryRun ?? false, verbose);
322
+ }
323
+ // Upload telemetry if requested
324
+ if (options.telemetry && projectSlug) {
325
+ await syncTelemetry(projectSlug, options.dryRun ?? false, verbose);
326
+ }
307
327
  }
308
328
  catch (error) {
309
329
  spinner.fail("Sync failed");
@@ -319,4 +339,90 @@ export async function syncCommand(options) {
319
339
  process.exit(1);
320
340
  }
321
341
  }
342
+ async function syncHooks(projectSlug, cwd, dryRun, verbose) {
343
+ const log = (msg) => verbose && console.log(chalk.gray(`[verbose] ${msg}`));
344
+ console.log("\n" + chalk.bold("Generating Hooks:"));
345
+ try {
346
+ log("Fetching rules with enforcement patterns...");
347
+ const { rules } = await getProjectRulesWithEnforcement(projectSlug);
348
+ const enforceableRules = rules.filter((r) => r.enforcement?.block_paths?.length ||
349
+ r.enforcement?.block_content?.length ||
350
+ r.enforcement?.block_dependencies?.length);
351
+ log(`Found ${enforceableRules.length} enforceable rules out of ${rules.length} total`);
352
+ if (enforceableRules.length === 0) {
353
+ console.log(chalk.yellow(" No enforceable rules found. Hooks not generated."));
354
+ console.log(chalk.gray(" Add enforcement patterns to your rules in the Convext UI."));
355
+ return;
356
+ }
357
+ const hookConfig = {
358
+ projectSlug,
359
+ apiUrl: getApiUrl(),
360
+ rules: enforceableRules,
361
+ };
362
+ const hooks = generateHooks(hookConfig, cwd);
363
+ if (dryRun) {
364
+ console.log(chalk.cyan(" [DRY RUN] Would generate:"));
365
+ for (const file of hooks.files) {
366
+ console.log(chalk.gray(` - ${file.path}`));
367
+ }
368
+ console.log(chalk.gray(" - .claude/settings.json (hooks config)"));
369
+ return;
370
+ }
371
+ const written = writeHooks(hooks, cwd);
372
+ for (const path of written) {
373
+ console.log(chalk.green(` ✓ ${path}`));
374
+ }
375
+ // Update Claude Code settings
376
+ const settingsPath = join(cwd, ".claude", "settings.json");
377
+ ensureParentDir(settingsPath);
378
+ let existingSettings = {};
379
+ if (existsSync(settingsPath)) {
380
+ try {
381
+ existingSettings = JSON.parse(readFileSync(settingsPath, "utf-8"));
382
+ }
383
+ catch {
384
+ existingSettings = {};
385
+ }
386
+ }
387
+ const mergedSettings = mergeClaudeCodeSettings(existingSettings, hooks.settings);
388
+ writeFileSync(settingsPath, JSON.stringify(mergedSettings, null, 2), "utf-8");
389
+ console.log(chalk.green(` ✓ .claude/settings.json (hooks config)`));
390
+ console.log(chalk.green(`\n✓ Generated ${written.length} hook(s) with ${enforceableRules.length} enforceable rules`));
391
+ }
392
+ catch (error) {
393
+ console.log(chalk.red(" ✗ Failed to generate hooks"));
394
+ if (error instanceof Error) {
395
+ console.log(chalk.gray(` Error: ${error.message}`));
396
+ }
397
+ }
398
+ }
399
+ async function syncTelemetry(projectSlug, dryRun, verbose) {
400
+ const log = (msg) => verbose && console.log(chalk.gray(`[verbose] ${msg}`));
401
+ console.log("\n" + chalk.bold("Syncing Telemetry:"));
402
+ try {
403
+ const events = readEvents();
404
+ if (events.length === 0) {
405
+ console.log(chalk.gray(" No local telemetry to upload."));
406
+ return;
407
+ }
408
+ log(`Found ${events.length} local events`);
409
+ if (dryRun) {
410
+ console.log(chalk.cyan(` [DRY RUN] Would upload ${events.length} event(s)`));
411
+ return;
412
+ }
413
+ const result = await uploadTelemetry(projectSlug, events);
414
+ console.log(chalk.green(` ✓ Uploaded ${result.uploaded} event(s)`));
415
+ // Archive uploaded events
416
+ const archivePath = rotateLog();
417
+ if (archivePath) {
418
+ console.log(chalk.gray(` ↻ Archived to ${archivePath}`));
419
+ }
420
+ }
421
+ catch (error) {
422
+ console.log(chalk.red(" ✗ Failed to upload telemetry"));
423
+ if (error instanceof Error) {
424
+ console.log(chalk.gray(` Error: ${error.message}`));
425
+ }
426
+ }
427
+ }
322
428
  //# sourceMappingURL=sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,8BAA8B,EAC9B,cAAc,EACd,eAAe,GAGhB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAe,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAqB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,uBAAuB,EAAwB,MAAM,mBAAmB,CAAC;AAC7G,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQzC,SAAS,sBAAsB;IAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAElE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnD,OAAO,MAA4B,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAkBD,MAAM,eAAe,GAAkC;IACrD,MAAM,EAAE;QACN,QAAQ,EAAE,WAAW;QACrB,2CAA2C;QAC3C,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;KACtB;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,cAAc;QACxB,qCAAqC;QACrC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,uEAAuE,EAAE,EAAE;KAC/F;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,iCAAiC;QAC3C,4BAA4B;QAC5B,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,2DAA2D,EAAE,EAAE;KACnF;CACF,CAAC;AAEF,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,WAAmB,EACnB,OAAuB,EACvB,QAAsB;IAEtB,MAAM,SAAS,GAAG,cAAc,CAAC;QAC/B,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,YAAY,IAAI,EAAE,CAAC;QACpD,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,IAAI,EAAE,CAAC;KAC/C,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8DAA8D,CAAC,CAAC,CAAC;QAC1F,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEzD,uDAAuD;IACvD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,SAAS;SAC9B,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAE3B,6DAA6D;IAC7D,MAAM,SAAS,GAAG,MAAM,cAAc,CACpC,wEAAwE,EACxE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnB,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;QAChE,KAAK,EAAE,EAAE;KACV,CAAC,CAAC,EACH,eAAe,CAChB,CAAC;IAEF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,SAAS;SACpB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;SACpB,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC5D,IAAI,UAAU,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,gBAAgB,UAAU,CAAC,QAAQ,iBAAiB,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3G,CACF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAID,SAAS,eAAe,CAAC,SAA0B,EAAE,QAAsB;IACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,IAAI,GAAG,CAAC;QACN,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACjC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAClC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;KACxC,CAAC,CACH,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;QACtC,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,cAAc,CAAC,QAAyB;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC;QAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wDAAwD;AACxD,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB,EAAE,UAAkB;IACtD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,OAAO,QAAQ,KAAK,UAAU,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IACzC,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC;IAEpF,uCAAuC;IACvC,MAAM,WAAW,GAAG,sBAAsB,EAAE,CAAC;IAC7C,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAEtC,IAAI,CAAC,WAAW,IAAI,WAAW,EAAE,CAAC;QAChC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC;QAC/B,GAAG,CAAC,sBAAsB,WAAW,4BAA4B,CAAC,CAAC;IACrE,CAAC;IAED,2CAA2C;IAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC,CAAC;QAElG,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,wDAAwD,EAAE,IAAI,CAAC,CAAC;QAEvG,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;YACtB,gCAAgC;YAChC,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAC;YAC3C,IAAI,SAAS,EAAE,CAAC;gBACd,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc;YACjC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mDAAmD,CAAC,CAAC,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,kCAAkC,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACrG,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,6CAA6C,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3E,IAAI,CAAC;QACH,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAC/E,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAEjF,IAAI,WAAuC,CAAC;QAE5C,OAAO,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC7C,GAAG,CAAC,sCAAsC,WAAW,EAAE,CAAC,CAAC;QAEzD,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACnD,GAAG,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAEzE,qDAAqD;YACrD,IAAK,WAA6C,CAAC,KAAK,EAAE,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,WAAW,mCAAmC,CAAC,CAAC,CAAC;gBACxF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC,CAAC;gBAEnG,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,6CAA6C,EAAE,IAAI,CAAC,CAAC;gBAC9F,IAAI,YAAY,EAAE,CAAC;oBACjB,qCAAqC;oBACrC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;oBAClE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC/C,IAAI,CAAC;wBAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;oBAEtD,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;oBAEtB,gCAAgC;oBAChC,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAC;oBAC3C,IAAI,SAAS,EAAE,CAAC;wBACd,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC;wBAC7B,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;wBAC7C,WAAW,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;oBACrD,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;wBACnE,OAAO;oBACT,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;oBAC/G,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAChD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACpD,MAAM,cAAc,GAAG,CAAC,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC9F,GAAG,CAAC,eAAe,UAAU,cAAc,cAAc,YAAY,CAAC,CAAC;QAEvE,OAAO,CAAC,OAAO,CAAC,4BAA4B,UAAU,WAAW,cAAc,aAAa,CAAC,CAAC;QAE9F,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,oCAAoC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAClF,CAAC;QACJ,CAAC;QAED,kFAAkF;QAClF,MAAM,gBAAgB,GAAG,WAAW,CAAC,kBAAkB,IAAI,EAAE,CAAC;QAC9D,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QAE3D,IAAI,CAAC,sBAAsB,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;YAExE,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC/E,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC9C,WAAW,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;gBACnD,OAAO,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,oDAAoD;gBACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAC;gBAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC,CAAC;gBAC3G,OAAO;YACT,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,MAAM,OAAO,GACX,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM;YACzC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEvB,2BAA2B;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAoE,EAAE,CAAC;QAEpF,+EAA+E;QAC/E,GAAG,CAAC,+CAA+C,CAAC,CAAC;QACrD,IAAI,cAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,oEAAoE;YACpE,MAAM,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAC7D,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC;YAC1C,GAAG,CAAC,OAAO,eAAe,CAAC,WAAW,WAAW,eAAe,CAAC,eAAe,YAAY,CAAC,CAAC;QAChG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yDAAyD;YACzD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;YACxE,MAAM,KAAK,CAAC;QACd,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YAEjD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC9C,IAAI,OAAO,EAAE,CAAC;oBACZ,qBAAqB,CAAC,QAAQ,CAAC,CAAC;oBAChC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACxC,IAAI,UAAU,EAAE,CAAC;wBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,QAAQ,OAAO,UAAU,EAAE,CAAC,CAAC,CAAC;oBACxF,CAAC;oBACD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC1C,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,MAAM,CAAC,QAAQ;wBACrB,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;qBACrD,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;QACH,CAAC;QAED,UAAU;QACV,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QAChD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GACR,MAAM,CAAC,MAAM,KAAK,SAAS;gBACzB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;gBAClB,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;oBAC3B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;oBACnB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,KAAK,SAAS;gBACzB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;gBACxB,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;oBAC3B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;oBACzB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,MAAM,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;QAC5E,IAAI,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CACT,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,YAAY,uBAAuB,CAAC,CACpE,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,8BAA8B;QAC9B,IAAI,OAAO,CAAC,KAAK,IAAI,WAAW,EAAE,CAAC;YACjC,MAAM,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC;QAED,gCAAgC;QAChC,IAAI,OAAO,CAAC,SAAS,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,WAAmB,EACnB,GAAW,EACX,MAAe,EACf,OAAgB;IAEhB,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC;IAEpF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,GAAG,CAAC,6CAA6C,CAAC,CAAC;QACnD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,8BAA8B,CAAC,WAAW,CAAC,CAAC;QAEpE,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM;YAClC,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM;YACpC,CAAC,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,CAC5C,CAAC;QAEF,GAAG,CAAC,SAAS,gBAAgB,CAAC,MAAM,6BAA6B,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;QAEvF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC;YACvF,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG;YACjB,WAAW;YACX,MAAM,EAAE,SAAS,EAAE;YACnB,KAAK,EAAE,gBAAqC;SAC7C,CAAC;QAEF,MAAM,KAAK,GAAG,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAE7C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACvD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,8BAA8B;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAC3D,eAAe,CAAC,YAAY,CAAC,CAAC;QAE9B,IAAI,gBAAgB,GAA4B,EAAE,CAAC;QACnD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YACrE,CAAC;YAAC,MAAM,CAAC;gBACP,gBAAgB,GAAG,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,uBAAuB,CAAC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjF,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC;QAErE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,MAAM,iBAAiB,gBAAgB,CAAC,MAAM,oBAAoB,CAAC,CAAC,CAAC;IACxH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACvD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,WAAmB,EACnB,MAAe,EACf,OAAgB;IAEhB,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC;IAEpF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAE5B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,GAAG,CAAC,SAAS,MAAM,CAAC,MAAM,eAAe,CAAC,CAAC;QAE3C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,QAAQ,WAAW,CAAC,CAAC,CAAC;QAErE,0BAA0B;QAC1B,MAAM,WAAW,GAAG,SAAS,EAAE,CAAC;QAChC,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACzD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,46 @@
1
+ export interface EnforcementRule {
2
+ slug: string;
3
+ title: string;
4
+ severity: string;
5
+ enforcement: {
6
+ block_paths?: Array<{
7
+ pattern: string;
8
+ message: string;
9
+ }>;
10
+ block_content?: Array<{
11
+ pattern: string;
12
+ message: string;
13
+ }>;
14
+ block_dependencies?: Array<{
15
+ gem?: string;
16
+ package?: string;
17
+ message: string;
18
+ }>;
19
+ };
20
+ }
21
+ export interface HookConfig {
22
+ projectSlug: string;
23
+ apiUrl: string;
24
+ rules: EnforcementRule[];
25
+ }
26
+ export interface GeneratedHooks {
27
+ files: Array<{
28
+ path: string;
29
+ content: string;
30
+ executable?: boolean;
31
+ }>;
32
+ settings: Record<string, unknown>;
33
+ }
34
+ /**
35
+ * Generate all hook files for a project
36
+ */
37
+ export declare function generateHooks(config: HookConfig, cwd?: string): GeneratedHooks;
38
+ /**
39
+ * Write generated hooks to disk
40
+ */
41
+ export declare function writeHooks(hooks: GeneratedHooks, cwd?: string): string[];
42
+ /**
43
+ * Merge hook settings into existing Claude Code settings
44
+ */
45
+ export declare function mergeClaudeCodeSettings(existing: Record<string, unknown>, hookSettings: Record<string, unknown>): Record<string, unknown>;
46
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/utils/hooks.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE;QACX,WAAW,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC1D,aAAa,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC5D,kBAAkB,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjF,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AA0ND,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,GAAE,MAAsB,GAAG,cAAc,CAuC7F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,EAAE,CAevF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB"}
@@ -0,0 +1,270 @@
1
+ import { existsSync, writeFileSync, chmodSync, mkdirSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ function ensureDir(dirPath) {
4
+ if (!existsSync(dirPath)) {
5
+ mkdirSync(dirPath, { recursive: true });
6
+ }
7
+ }
8
+ /**
9
+ * Generate the validate_write hook for Claude Code
10
+ * This hook runs before Write/Edit tool calls
11
+ */
12
+ function generateValidateWriteHook(config) {
13
+ const pathPatterns = config.rules
14
+ .filter((r) => r.enforcement?.block_paths?.length)
15
+ .flatMap((r) => r.enforcement.block_paths.map((p) => ({
16
+ ruleSlug: r.slug,
17
+ ruleTitle: r.title,
18
+ severity: r.severity,
19
+ pattern: p.pattern,
20
+ message: p.message,
21
+ })));
22
+ const contentPatterns = config.rules
23
+ .filter((r) => r.enforcement?.block_content?.length)
24
+ .flatMap((r) => r.enforcement.block_content.map((p) => ({
25
+ ruleSlug: r.slug,
26
+ ruleTitle: r.title,
27
+ severity: r.severity,
28
+ pattern: p.pattern,
29
+ message: p.message,
30
+ })));
31
+ return `#!/usr/bin/env ruby
32
+ # frozen_string_literal: true
33
+ # Generated by Convext - validates file writes against project rules
34
+ # Hook: PreToolUse for Write, Edit tools
35
+
36
+ require 'json'
37
+ require 'time'
38
+
39
+ TELEMETRY_FILE = '.convext/telemetry.jsonl'
40
+ PROJECT_SLUG = '${config.projectSlug}'
41
+
42
+ def log_telemetry(event)
43
+ event[:timestamp] = Time.now.utc.iso8601
44
+ event[:project_slug] = PROJECT_SLUG
45
+ event[:source] = 'hook'
46
+ event[:tool] = 'claude-code'
47
+
48
+ File.open(TELEMETRY_FILE, 'a') { |f| f.puts(event.to_json) }
49
+ rescue StandardError
50
+ # Silently fail - telemetry should never break the hook
51
+ end
52
+
53
+ # Parse input from Claude Code
54
+ input = JSON.parse(ARGV[0] || '{}')
55
+ tool_name = input['tool_name']
56
+ tool_input = input['tool_input'] || {}
57
+
58
+ # Only check Write and Edit tools
59
+ exit 0 unless %w[Write Edit].include?(tool_name)
60
+
61
+ file_path = tool_input['file_path'] || ''
62
+ content = tool_input['content'] || tool_input['new_string'] || ''
63
+
64
+ # Path pattern checks
65
+ PATH_PATTERNS = ${JSON.stringify(pathPatterns, null, 2)}
66
+
67
+ PATH_PATTERNS.each do |check|
68
+ if file_path.match?(Regexp.new(check['pattern']))
69
+ log_telemetry({
70
+ event_type: 'violation',
71
+ rule_slug: check['ruleSlug'],
72
+ rule_title: check['ruleTitle'],
73
+ action: 'blocked',
74
+ result: 'blocked',
75
+ file: file_path
76
+ })
77
+ warn "BLOCKED: #{check['message']}"
78
+ warn "Rule: #{check['ruleTitle']} (#{check['severity']})"
79
+ exit 2
80
+ end
81
+ end
82
+
83
+ # Content pattern checks
84
+ CONTENT_PATTERNS = ${JSON.stringify(contentPatterns, null, 2)}
85
+
86
+ CONTENT_PATTERNS.each do |check|
87
+ if content.match?(Regexp.new(check['pattern']))
88
+ log_telemetry({
89
+ event_type: 'violation',
90
+ rule_slug: check['ruleSlug'],
91
+ rule_title: check['ruleTitle'],
92
+ action: 'blocked',
93
+ result: 'blocked',
94
+ file: file_path
95
+ })
96
+ warn "BLOCKED: #{check['message']}"
97
+ warn "Rule: #{check['ruleTitle']} (#{check['severity']})"
98
+ exit 2
99
+ end
100
+ end
101
+
102
+ # Passed all checks
103
+ log_telemetry({
104
+ event_type: 'compliance_check',
105
+ action: 'file_write',
106
+ result: 'passed',
107
+ file: file_path
108
+ })
109
+
110
+ exit 0
111
+ `;
112
+ }
113
+ /**
114
+ * Generate the validate_bash hook for Claude Code
115
+ * This hook runs before Bash tool calls
116
+ */
117
+ function generateValidateBashHook(config) {
118
+ return `#!/usr/bin/env ruby
119
+ # frozen_string_literal: true
120
+ # Generated by Convext - validates bash commands against project rules
121
+ # Hook: PreToolUse for Bash tool
122
+
123
+ require 'json'
124
+ require 'time'
125
+
126
+ TELEMETRY_FILE = '.convext/telemetry.jsonl'
127
+ PROJECT_SLUG = '${config.projectSlug}'
128
+
129
+ def log_telemetry(event)
130
+ event[:timestamp] = Time.now.utc.iso8601
131
+ event[:project_slug] = PROJECT_SLUG
132
+ event[:source] = 'hook'
133
+ event[:tool] = 'claude-code'
134
+
135
+ File.open(TELEMETRY_FILE, 'a') { |f| f.puts(event.to_json) }
136
+ rescue StandardError
137
+ # Silently fail
138
+ end
139
+
140
+ # Parse input from Claude Code
141
+ input = JSON.parse(ARGV[0] || '{}')
142
+ tool_name = input['tool_name']
143
+ tool_input = input['tool_input'] || {}
144
+
145
+ exit 0 unless tool_name == 'Bash'
146
+
147
+ command = tool_input['command'] || ''
148
+
149
+ # Block dangerous git operations
150
+ BLOCKED_PATTERNS = [
151
+ { pattern: /git\\s+push\\s+.*--force(?!-with-lease)/, message: 'Force push without lease is not allowed' },
152
+ { pattern: /git\\s+push\\s+(-f|--force)\\s/, message: 'Force push is not allowed' },
153
+ { pattern: /git\\s+reset\\s+--hard\\s+origin/, message: 'Hard reset to origin is dangerous' },
154
+ { pattern: /rm\\s+-rf\\s+\\//, message: 'Recursive delete from root is not allowed' },
155
+ ]
156
+
157
+ BLOCKED_PATTERNS.each do |check|
158
+ if command.match?(check[:pattern])
159
+ log_telemetry({
160
+ event_type: 'violation',
161
+ rule_title: 'dangerous-command',
162
+ action: 'blocked',
163
+ result: 'blocked',
164
+ payload: { command: command[0..100] }
165
+ })
166
+ warn "BLOCKED: #{check[:message]}"
167
+ exit 2
168
+ end
169
+ end
170
+
171
+ exit 0
172
+ `;
173
+ }
174
+ /**
175
+ * Generate the session_start hook for Claude Code
176
+ */
177
+ function generateSessionStartHook(config) {
178
+ return `#!/bin/bash
179
+ # Generated by Convext - logs session start
180
+ # Hook: SessionStart
181
+
182
+ TELEMETRY_FILE=".convext/telemetry.jsonl"
183
+ mkdir -p .convext
184
+
185
+ echo '{"timestamp":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","event_type":"session_start","source":"hook","tool":"claude-code","project_slug":"${config.projectSlug}"}' >> "$TELEMETRY_FILE"
186
+ `;
187
+ }
188
+ /**
189
+ * Generate Claude Code settings.json with hooks configuration
190
+ */
191
+ function generateClaudeCodeSettings(hooksDir) {
192
+ return {
193
+ hooks: {
194
+ PreToolUse: [
195
+ {
196
+ matcher: 'Write|Edit',
197
+ hooks: [`${hooksDir}/validate_write.rb`],
198
+ },
199
+ {
200
+ matcher: 'Bash',
201
+ hooks: [`${hooksDir}/validate_bash.rb`],
202
+ },
203
+ ],
204
+ SessionStart: [`${hooksDir}/session_start.sh`],
205
+ },
206
+ };
207
+ }
208
+ /**
209
+ * Generate all hook files for a project
210
+ */
211
+ export function generateHooks(config, cwd = process.cwd()) {
212
+ const hooksDir = join(cwd, '.convext', 'hooks');
213
+ const relativeHooksDir = '.convext/hooks';
214
+ const files = [];
215
+ // Only generate hooks if there are enforceable rules
216
+ const hasEnforceableRules = config.rules.some((r) => r.enforcement?.block_paths?.length ||
217
+ r.enforcement?.block_content?.length ||
218
+ r.enforcement?.block_dependencies?.length);
219
+ if (hasEnforceableRules) {
220
+ files.push({
221
+ path: join(hooksDir, 'validate_write.rb'),
222
+ content: generateValidateWriteHook(config),
223
+ executable: true,
224
+ });
225
+ }
226
+ // Always generate bash validation (blocks dangerous commands)
227
+ files.push({
228
+ path: join(hooksDir, 'validate_bash.rb'),
229
+ content: generateValidateBashHook(config),
230
+ executable: true,
231
+ });
232
+ // Always generate session start hook
233
+ files.push({
234
+ path: join(hooksDir, 'session_start.sh'),
235
+ content: generateSessionStartHook(config),
236
+ executable: true,
237
+ });
238
+ const settings = generateClaudeCodeSettings(relativeHooksDir);
239
+ return { files, settings };
240
+ }
241
+ /**
242
+ * Write generated hooks to disk
243
+ */
244
+ export function writeHooks(hooks, cwd = process.cwd()) {
245
+ const written = [];
246
+ for (const file of hooks.files) {
247
+ ensureDir(dirname(file.path));
248
+ writeFileSync(file.path, file.content, 'utf-8');
249
+ if (file.executable) {
250
+ chmodSync(file.path, 0o755);
251
+ }
252
+ written.push(file.path);
253
+ }
254
+ return written;
255
+ }
256
+ /**
257
+ * Merge hook settings into existing Claude Code settings
258
+ */
259
+ export function mergeClaudeCodeSettings(existing, hookSettings) {
260
+ const existingHooks = existing.hooks || {};
261
+ const newHooks = hookSettings.hooks || {};
262
+ return {
263
+ ...existing,
264
+ hooks: {
265
+ ...existingHooks,
266
+ ...newHooks,
267
+ },
268
+ };
269
+ }
270
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/utils/hooks.ts"],"names":[],"mappings":"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"}