@convext/cli 1.0.14 → 1.0.16

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.
@@ -13,8 +13,6 @@ const EDITORS = [
13
13
  join(homedir(), ".claude", "mcp.json"),
14
14
  ],
15
15
  projectConfigName: ".mcp.json",
16
- supportsHttp: true,
17
- supportsStdio: true,
18
16
  docs: "https://docs.anthropic.com/claude-code",
19
17
  },
20
18
  {
@@ -25,8 +23,6 @@ const EDITORS = [
25
23
  join(homedir(), "Library", "Application Support", "Cursor", "User", "globalStorage", "mcp.json"),
26
24
  ],
27
25
  projectConfigName: ".mcp.json",
28
- supportsHttp: true,
29
- supportsStdio: true,
30
26
  docs: "https://docs.cursor.com",
31
27
  },
32
28
  {
@@ -37,8 +33,6 @@ const EDITORS = [
37
33
  join(homedir(), ".codeium", "windsurf", "mcp.json"),
38
34
  ],
39
35
  projectConfigName: ".mcp.json",
40
- supportsHttp: true,
41
- supportsStdio: true,
42
36
  docs: "https://windsurf.run/mcp",
43
37
  },
44
38
  {
@@ -48,8 +42,6 @@ const EDITORS = [
48
42
  join(homedir(), ".vscode", "mcp.json"),
49
43
  ],
50
44
  projectConfigName: ".vscode/mcp.json",
51
- supportsHttp: true,
52
- supportsStdio: true,
53
45
  docs: "https://code.visualstudio.com",
54
46
  },
55
47
  ];
@@ -68,7 +60,6 @@ function detectCurrentEditor() {
68
60
  return EDITORS.find(e => e.id === "vscode");
69
61
  }
70
62
  // Check for Claude Code - check multiple indicators
71
- // Claude Code sets CLAUDE_CODE_ENTRY or runs as 'claude' command
72
63
  if (process.env.CLAUDE_CODE ||
73
64
  process.env.CLAUDE_CODE_ENTRY ||
74
65
  process.env.MCP_SERVER_NAME === "claude-code" ||
@@ -80,14 +71,12 @@ function detectCurrentEditor() {
80
71
  return EDITORS.find(e => e.id === "windsurf");
81
72
  }
82
73
  // Fallback: Check which editors have existing config files
83
- // This helps when running from a plain terminal
84
74
  const editorsWithConfig = EDITORS.filter(e => {
85
75
  for (const configPath of e.configPaths) {
86
76
  if (existsSync(configPath)) {
87
77
  return true;
88
78
  }
89
79
  }
90
- // Also check project-level config
91
80
  const projectConfig = join(process.cwd(), e.projectConfigName);
92
81
  return existsSync(projectConfig);
93
82
  });
@@ -123,44 +112,33 @@ function findExistingConfig(editor) {
123
112
  }
124
113
  return undefined;
125
114
  }
126
- function hasConvextServer(config) {
127
- return config.mcpServers !== undefined && "convext" in config.mcpServers;
128
- }
129
115
  function isConvextConfigured(config) {
130
116
  if (!config.mcpServers?.convext) {
131
117
  return { configured: false };
132
118
  }
133
119
  const server = config.mcpServers.convext;
134
- // Check for npx method
135
- if (server.command === "npx" && server.args?.includes("@convext/mcp-server")) {
136
- return { configured: true, method: "npx" };
120
+ // Check for modern OAuth HTTP config
121
+ if (server.transport === "http" && server.url?.includes("convext")) {
122
+ return { configured: true };
123
+ }
124
+ // Legacy npx config - needs update
125
+ if (server.command === "npx") {
126
+ return { configured: false, needsUpdate: true, isLegacy: true };
137
127
  }
138
- // Check for HTTP method
139
- if (server.type === "http" && server.url) {
140
- return { configured: true, method: "http" };
128
+ // Legacy HTTP with token header - needs update
129
+ if (server.type === "http" && server.headers?.Authorization) {
130
+ return { configured: false, needsUpdate: true, isLegacy: true };
141
131
  }
142
- // Has convext but needs update
132
+ // Has convext but unknown format
143
133
  return { configured: false, needsUpdate: true };
144
134
  }
145
- function generateNpxConfig() {
146
- return {
147
- command: "npx",
148
- args: ["-y", "@convext/mcp-server"],
149
- };
150
- }
151
135
  function generateHttpConfig() {
152
136
  const apiUrl = getApiUrl();
153
137
  return {
154
- type: "http",
155
138
  url: `${apiUrl}/mcp`,
156
- headers: {
157
- Authorization: "Bearer ${CONVEXT_TOKEN}",
158
- },
139
+ transport: "http",
159
140
  };
160
141
  }
161
- function checkEnvironmentToken() {
162
- return Boolean(process.env.CONVEXT_TOKEN);
163
- }
164
142
  export async function mcpCommand(options) {
165
143
  const spinner = ora();
166
144
  console.log(chalk.bold("\nConvext MCP Configuration\n"));
@@ -195,17 +173,8 @@ export async function mcpCommand(options) {
195
173
  if (existing) {
196
174
  const status = isConvextConfigured(existing.config);
197
175
  if (status.configured) {
198
- console.log(chalk.green(`✓ Convext MCP already configured (${status.method})`));
176
+ console.log(chalk.green("✓ Convext MCP already configured (OAuth HTTP)"));
199
177
  console.log(chalk.gray(` Config: ${existing.path}`));
200
- // Check environment token
201
- if (!checkEnvironmentToken()) {
202
- console.log(chalk.yellow("\n⚠ CONVEXT_TOKEN environment variable not set"));
203
- console.log(chalk.gray(" The MCP server needs this to authenticate.\n"));
204
- showTokenInstructions();
205
- }
206
- else {
207
- console.log(chalk.green("✓ CONVEXT_TOKEN is set"));
208
- }
209
178
  if (!options.fix) {
210
179
  const update = await promptConfirm("Update configuration anyway?", false);
211
180
  if (!update) {
@@ -213,6 +182,11 @@ export async function mcpCommand(options) {
213
182
  }
214
183
  }
215
184
  }
185
+ else if (status.isLegacy) {
186
+ console.log(chalk.yellow("⚠ Legacy Convext MCP config detected - needs migration"));
187
+ console.log(chalk.gray(` Config: ${existing.path}`));
188
+ console.log(chalk.gray(" The new OAuth-based approach is simpler: no tokens or npm packages needed!\n"));
189
+ }
216
190
  else if (status.needsUpdate) {
217
191
  console.log(chalk.yellow("⚠ Convext MCP configured but needs update"));
218
192
  console.log(chalk.gray(` Config: ${existing.path}`));
@@ -225,21 +199,18 @@ export async function mcpCommand(options) {
225
199
  else {
226
200
  console.log(chalk.yellow("⚠ No MCP configuration found"));
227
201
  }
228
- // Step 3: Select configuration method
229
- console.log("\n" + chalk.bold("Configuration Options:"));
230
- console.log(chalk.gray(" npx: Uses @convext/mcp-server package (recommended)"));
231
- console.log(chalk.gray(" http: Direct HTTP connection to Convext API\n"));
232
- const method = await promptSelect("Which method do you want to use?", [
233
- { label: "npx @convext/mcp-server (recommended)", value: "npx" },
234
- { label: "Direct HTTP connection", value: "http" },
235
- ], 0);
202
+ // Step 3: Show info about OAuth
203
+ console.log("\n" + chalk.bold("About OAuth Authentication:"));
204
+ console.log(chalk.gray(" Convext uses OAuth 2.1 for secure authentication."));
205
+ console.log(chalk.gray(" On first connection, your browser will open for authorization."));
206
+ console.log(chalk.gray(" No tokens or environment variables needed!\n"));
236
207
  // Step 4: Select scope (project or global)
237
208
  const scope = await promptSelect("Where should the config be saved?", [
238
209
  { label: `Project (${editor.projectConfigName})`, value: "project" },
239
210
  { label: `Global (${editor.configPaths[0]})`, value: "global" },
240
211
  ], 0);
241
212
  // Step 5: Generate and write config
242
- const serverConfig = method === "npx" ? generateNpxConfig() : generateHttpConfig();
213
+ const serverConfig = generateHttpConfig();
243
214
  const configPath = scope === "project"
244
215
  ? join(process.cwd(), editor.projectConfigName)
245
216
  : editor.configPaths[0];
@@ -253,7 +224,6 @@ export async function mcpCommand(options) {
253
224
  }
254
225
  }
255
226
  catch {
256
- // Invalid JSON, start fresh but preserve file
257
227
  console.log(chalk.yellow(` Warning: ${configPath} had invalid JSON, creating new config`));
258
228
  }
259
229
  }
@@ -267,44 +237,18 @@ export async function mcpCommand(options) {
267
237
  // Write config
268
238
  writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
269
239
  console.log(chalk.green(`\n✓ MCP configuration saved to ${configPath}`));
270
- // Step 6: Check/remind about CONVEXT_TOKEN
271
- if (!checkEnvironmentToken()) {
272
- console.log(chalk.yellow("\n⚠ Important: Set CONVEXT_TOKEN environment variable\n"));
273
- showTokenInstructions();
274
- }
275
- else {
276
- console.log(chalk.green("✓ CONVEXT_TOKEN is already set"));
277
- }
278
- // Step 7: Show next steps
240
+ // Step 6: Show next steps
279
241
  console.log("\n" + chalk.bold("Next Steps:"));
280
242
  console.log(` 1. ${chalk.cyan("Restart " + editor.name)} for changes to take effect`);
281
- console.log(` 2. Ask the AI: ${chalk.gray('"What Convext rules apply to this project?"')}`);
282
- console.log(` 3. The AI will use the MCP server to fetch your rules\n`);
243
+ console.log(` 2. On first connection, ${chalk.cyan("authorize in your browser")} when prompted`);
244
+ console.log(` 3. Ask the AI: ${chalk.gray('"What Convext rules apply to this project?"')}`);
245
+ console.log(` 4. The AI will use the MCP server to fetch your rules\n`);
283
246
  if (scope === "project") {
284
247
  console.log(chalk.gray(` Tip: Commit ${editor.projectConfigName} to share with your team\n`));
285
248
  }
286
249
  }
287
- function showTokenInstructions() {
288
- console.log(chalk.bold(" Set CONVEXT_TOKEN:"));
289
- console.log(chalk.gray(" macOS/Linux (add to ~/.zshrc or ~/.bashrc):"));
290
- console.log(chalk.cyan(' export CONVEXT_TOKEN="your_token_here"'));
291
- console.log();
292
- console.log(chalk.gray(" Or for system-wide (macOS):"));
293
- console.log(chalk.cyan(" launchctl setenv CONVEXT_TOKEN your_token_here"));
294
- console.log();
295
- console.log(chalk.gray(" Get your token from: ") + chalk.cyan(getApiUrl() + "/settings/api_tokens"));
296
- }
297
250
  export function mcpStatusCommand() {
298
251
  console.log(chalk.bold("\nMCP Configuration Status\n"));
299
- // Check environment token
300
- const hasToken = checkEnvironmentToken();
301
- if (hasToken) {
302
- console.log(chalk.green("✓ CONVEXT_TOKEN is set"));
303
- }
304
- else {
305
- console.log(chalk.red("✗ CONVEXT_TOKEN not set"));
306
- }
307
- console.log();
308
252
  // Check each editor
309
253
  for (const editor of EDITORS) {
310
254
  const existing = findExistingConfig(editor);
@@ -314,8 +258,13 @@ export function mcpStatusCommand() {
314
258
  }
315
259
  const status = isConvextConfigured(existing.config);
316
260
  if (status.configured) {
317
- console.log(chalk.green(`✓ ${editor.name}: configured (${status.method})`));
261
+ console.log(chalk.green(`✓ ${editor.name}: configured (OAuth HTTP)`));
262
+ console.log(chalk.gray(` ${existing.path}`));
263
+ }
264
+ else if (status.isLegacy) {
265
+ console.log(chalk.yellow(`⚠ ${editor.name}: legacy config (needs migration)`));
318
266
  console.log(chalk.gray(` ${existing.path}`));
267
+ console.log(chalk.gray(` Run 'convext mcp' to update to OAuth`));
319
268
  }
320
269
  else if (status.needsUpdate) {
321
270
  console.log(chalk.yellow(`⚠ ${editor.name}: needs update`));
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface StatsOptions {
2
+ days?: number;
3
+ json?: boolean;
4
+ verbose?: boolean;
5
+ }
6
+ export declare function statsCommand(options: StatsOptions): Promise<void>;
7
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmJD,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDvE"}
@@ -0,0 +1,159 @@
1
+ import chalk from 'chalk';
2
+ import { readEvents, readEventsInRange, summarizeEvents, getEventCount, } from '../utils/telemetry.js';
3
+ function formatDate(dateStr) {
4
+ const date = new Date(dateStr);
5
+ return date.toLocaleDateString('en-US', {
6
+ month: 'short',
7
+ day: 'numeric',
8
+ year: 'numeric',
9
+ });
10
+ }
11
+ function renderTable(headers, rows, columnWidths) {
12
+ const widths = columnWidths || headers.map((h, i) => Math.max(h.length, ...rows.map((r) => (r[i] || '').length)));
13
+ // Header
14
+ console.log(headers.map((h, i) => h.padEnd(widths[i])).join(' '));
15
+ console.log(widths.map((w) => '─'.repeat(w)).join(' '));
16
+ // Rows
17
+ for (const row of rows) {
18
+ console.log(row.map((cell, i) => (cell || '').padEnd(widths[i])).join(' '));
19
+ }
20
+ }
21
+ function renderComplianceBar(blocked, total) {
22
+ if (total === 0)
23
+ return chalk.gray('No data');
24
+ const percentage = Math.round((blocked / total) * 100);
25
+ const barWidth = 20;
26
+ const filledWidth = Math.round((blocked / total) * barWidth);
27
+ const bar = chalk.green('█'.repeat(filledWidth)) +
28
+ chalk.gray('░'.repeat(barWidth - filledWidth));
29
+ return `${bar} ${percentage}% blocked`;
30
+ }
31
+ function renderSummary(summary) {
32
+ console.log(chalk.bold('\nCompliance Statistics\n'));
33
+ // Period
34
+ if (summary.period_start && summary.period_end) {
35
+ console.log(chalk.gray(`Period: ${formatDate(summary.period_start)} - ${formatDate(summary.period_end)}`));
36
+ console.log();
37
+ }
38
+ // Overview
39
+ console.log(chalk.bold('Overview'));
40
+ console.log(chalk.gray('─'.repeat(40)));
41
+ console.log(` Total Events: ${chalk.cyan(summary.total_events)}`);
42
+ console.log(` Violations Blocked: ${chalk.green(summary.violations_blocked)}`);
43
+ console.log(` Violations Warned: ${chalk.yellow(summary.violations_warned)}`);
44
+ console.log(` Compliance Checks: ${chalk.cyan(summary.compliance_checks)}`);
45
+ console.log(` Tasks Completed: ${chalk.cyan(summary.tasks_completed)}`);
46
+ console.log();
47
+ // By Rule
48
+ const ruleEntries = Object.entries(summary.by_rule);
49
+ if (ruleEntries.length > 0) {
50
+ console.log(chalk.bold('Violations by Rule'));
51
+ console.log(chalk.gray('─'.repeat(60)));
52
+ const rows = ruleEntries
53
+ .sort((a, b) => (b[1].blocked + b[1].warned) - (a[1].blocked + a[1].warned))
54
+ .slice(0, 10)
55
+ .map(([rule, counts]) => [
56
+ rule.length > 30 ? rule.slice(0, 27) + '...' : rule,
57
+ String(counts.blocked),
58
+ String(counts.warned),
59
+ renderComplianceBar(counts.blocked, counts.blocked + counts.warned + counts.passed),
60
+ ]);
61
+ renderTable(['Rule', 'Blocked', 'Warned', 'Enforcement'], rows, [32, 8, 8, 30]);
62
+ console.log();
63
+ }
64
+ // By Source
65
+ const sourceEntries = Object.entries(summary.by_source);
66
+ if (sourceEntries.length > 0) {
67
+ console.log(chalk.bold('Events by Source'));
68
+ console.log(chalk.gray('─'.repeat(40)));
69
+ const total = Object.values(summary.by_source).reduce((a, b) => a + b, 0);
70
+ for (const [source, count] of sourceEntries.sort((a, b) => b[1] - a[1])) {
71
+ const pct = Math.round((count / total) * 100);
72
+ const sourceIcon = source === 'hook' ? '⚡' :
73
+ source === 'mcp' ? '🔧' :
74
+ source === 'pre-commit' ? '📝' :
75
+ source === 'ci' ? '🏗️' : '○';
76
+ console.log(` ${sourceIcon} ${source.padEnd(12)} ${String(count).padStart(5)} (${pct}%)`);
77
+ }
78
+ console.log();
79
+ }
80
+ // Activity by Day (last 7 days)
81
+ const dayEntries = Object.entries(summary.by_day);
82
+ if (dayEntries.length > 0) {
83
+ console.log(chalk.bold('Recent Activity'));
84
+ console.log(chalk.gray('─'.repeat(40)));
85
+ const last7Days = dayEntries
86
+ .sort((a, b) => b[0].localeCompare(a[0]))
87
+ .slice(0, 7)
88
+ .reverse();
89
+ const maxCount = Math.max(...last7Days.map(([, count]) => count));
90
+ const barMaxWidth = 20;
91
+ for (const [day, count] of last7Days) {
92
+ const barWidth = Math.max(1, Math.round((count / maxCount) * barMaxWidth));
93
+ const bar = chalk.cyan('▓'.repeat(barWidth));
94
+ const dayLabel = new Date(day).toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric' });
95
+ console.log(` ${dayLabel.padEnd(12)} ${bar} ${count}`);
96
+ }
97
+ console.log();
98
+ }
99
+ // Summary line
100
+ const totalViolations = summary.violations_blocked + summary.violations_warned;
101
+ if (totalViolations > 0) {
102
+ const blockRate = Math.round((summary.violations_blocked / totalViolations) * 100);
103
+ console.log(chalk.bold(`Enforcement Rate: `) +
104
+ (blockRate >= 90 ? chalk.green(`${blockRate}%`) :
105
+ blockRate >= 70 ? chalk.yellow(`${blockRate}%`) :
106
+ chalk.red(`${blockRate}%`)) +
107
+ chalk.gray(` (${summary.violations_blocked} blocked / ${totalViolations} total violations)`));
108
+ }
109
+ else {
110
+ console.log(chalk.green('✓ No violations recorded'));
111
+ }
112
+ }
113
+ export async function statsCommand(options) {
114
+ const days = options.days ?? 7;
115
+ const verbose = options.verbose ?? false;
116
+ // Check if any telemetry exists
117
+ const totalCount = getEventCount();
118
+ if (totalCount === 0) {
119
+ console.log(chalk.yellow('\nNo telemetry data found.'));
120
+ console.log(chalk.gray('\nTelemetry is collected when:'));
121
+ console.log(chalk.gray(' - Hooks block or warn on violations'));
122
+ console.log(chalk.gray(' - MCP compliance checks are run'));
123
+ console.log(chalk.gray(' - Tasks are completed via MCP'));
124
+ console.log(chalk.gray('\nRun `convext sync --hooks` to generate enforcement hooks.'));
125
+ return;
126
+ }
127
+ // Get events for the specified period
128
+ const endDate = new Date();
129
+ const startDate = new Date();
130
+ startDate.setDate(startDate.getDate() - days);
131
+ const events = days === 0
132
+ ? readEvents()
133
+ : readEventsInRange(startDate, endDate);
134
+ if (events.length === 0) {
135
+ console.log(chalk.yellow(`\nNo events in the last ${days} days.`));
136
+ console.log(chalk.gray(`Total events recorded: ${totalCount}`));
137
+ console.log(chalk.gray('\nUse --days 0 to see all-time statistics.'));
138
+ return;
139
+ }
140
+ // Generate summary
141
+ const summary = summarizeEvents(events);
142
+ if (options.json) {
143
+ console.log(JSON.stringify(summary, null, 2));
144
+ return;
145
+ }
146
+ renderSummary(summary);
147
+ if (verbose) {
148
+ console.log(chalk.gray('\nRecent events:'));
149
+ const recentEvents = events.slice(-10).reverse();
150
+ for (const event of recentEvents) {
151
+ const time = new Date(event.timestamp).toLocaleTimeString();
152
+ const icon = event.result === 'blocked' ? chalk.red('✗') :
153
+ event.result === 'warned' ? chalk.yellow('⚠') :
154
+ event.result === 'passed' ? chalk.green('✓') : '○';
155
+ console.log(` ${icon} ${chalk.gray(time)} ${event.event_type} ${event.rule_title || ''}`);
156
+ }
157
+ }
158
+ }
159
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ interface SyncOptions {
4
4
  format?: "all" | "claude" | "cursor" | "copilot";
5
5
  dryRun?: boolean;
6
6
  verbose?: boolean;
7
+ hooks?: boolean;
8
+ telemetry?: boolean;
7
9
  }
8
10
  export declare function syncCommand(options: SyncOptions): Promise<void>;
9
11
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAuCA,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAwID,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2NrE"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AA6CA,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAwID,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqOrE"}
@@ -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)) {
@@ -304,6 +307,14 @@ export async function syncCommand(options) {
304
307
  else {
305
308
  console.log("\n" + chalk.gray("All files are up to date"));
306
309
  }
310
+ // Generate hooks if requested
311
+ if (options.hooks && projectId) {
312
+ await syncHooks(projectId, cwd, options.dryRun ?? false, verbose);
313
+ }
314
+ // Upload telemetry if requested
315
+ if (options.telemetry && projectId) {
316
+ await syncTelemetry(projectId, options.dryRun ?? false, verbose);
317
+ }
307
318
  }
308
319
  catch (error) {
309
320
  spinner.fail("Sync failed");
@@ -319,4 +330,90 @@ export async function syncCommand(options) {
319
330
  process.exit(1);
320
331
  }
321
332
  }
333
+ async function syncHooks(projectId, cwd, dryRun, verbose) {
334
+ const log = (msg) => verbose && console.log(chalk.gray(`[verbose] ${msg}`));
335
+ console.log("\n" + chalk.bold("Generating Hooks:"));
336
+ try {
337
+ log("Fetching rules with enforcement patterns...");
338
+ const { rules } = await getProjectRulesWithEnforcement(projectId);
339
+ const enforceableRules = rules.filter((r) => r.enforcement?.block_paths?.length ||
340
+ r.enforcement?.block_content?.length ||
341
+ r.enforcement?.block_dependencies?.length);
342
+ log(`Found ${enforceableRules.length} enforceable rules out of ${rules.length} total`);
343
+ if (enforceableRules.length === 0) {
344
+ console.log(chalk.yellow(" No enforceable rules found. Hooks not generated."));
345
+ console.log(chalk.gray(" Add enforcement patterns to your rules in the Convext UI."));
346
+ return;
347
+ }
348
+ const hookConfig = {
349
+ projectId,
350
+ apiUrl: getApiUrl(),
351
+ rules: enforceableRules,
352
+ };
353
+ const hooks = generateHooks(hookConfig, cwd);
354
+ if (dryRun) {
355
+ console.log(chalk.cyan(" [DRY RUN] Would generate:"));
356
+ for (const file of hooks.files) {
357
+ console.log(chalk.gray(` - ${file.path}`));
358
+ }
359
+ console.log(chalk.gray(" - .claude/settings.json (hooks config)"));
360
+ return;
361
+ }
362
+ const written = writeHooks(hooks, cwd);
363
+ for (const path of written) {
364
+ console.log(chalk.green(` ✓ ${path}`));
365
+ }
366
+ // Update Claude Code settings
367
+ const settingsPath = join(cwd, ".claude", "settings.json");
368
+ ensureParentDir(settingsPath);
369
+ let existingSettings = {};
370
+ if (existsSync(settingsPath)) {
371
+ try {
372
+ existingSettings = JSON.parse(readFileSync(settingsPath, "utf-8"));
373
+ }
374
+ catch {
375
+ existingSettings = {};
376
+ }
377
+ }
378
+ const mergedSettings = mergeClaudeCodeSettings(existingSettings, hooks.settings);
379
+ writeFileSync(settingsPath, JSON.stringify(mergedSettings, null, 2), "utf-8");
380
+ console.log(chalk.green(` ✓ .claude/settings.json (hooks config)`));
381
+ console.log(chalk.green(`\n✓ Generated ${written.length} hook(s) with ${enforceableRules.length} enforceable rules`));
382
+ }
383
+ catch (error) {
384
+ console.log(chalk.red(" ✗ Failed to generate hooks"));
385
+ if (error instanceof Error) {
386
+ console.log(chalk.gray(` Error: ${error.message}`));
387
+ }
388
+ }
389
+ }
390
+ async function syncTelemetry(projectId, dryRun, verbose) {
391
+ const log = (msg) => verbose && console.log(chalk.gray(`[verbose] ${msg}`));
392
+ console.log("\n" + chalk.bold("Syncing Telemetry:"));
393
+ try {
394
+ const events = readEvents();
395
+ if (events.length === 0) {
396
+ console.log(chalk.gray(" No local telemetry to upload."));
397
+ return;
398
+ }
399
+ log(`Found ${events.length} local events`);
400
+ if (dryRun) {
401
+ console.log(chalk.cyan(` [DRY RUN] Would upload ${events.length} event(s)`));
402
+ return;
403
+ }
404
+ const result = await uploadTelemetry(projectId, events);
405
+ console.log(chalk.green(` ✓ Uploaded ${result.uploaded} event(s)`));
406
+ // Archive uploaded events
407
+ const archivePath = rotateLog();
408
+ if (archivePath) {
409
+ console.log(chalk.gray(` ↻ Archived to ${archivePath}`));
410
+ }
411
+ }
412
+ catch (error) {
413
+ console.log(chalk.red(" ✗ Failed to upload telemetry"));
414
+ if (error instanceof Error) {
415
+ console.log(chalk.gray(` Error: ${error.message}`));
416
+ }
417
+ }
418
+ }
322
419
  //# sourceMappingURL=sync.js.map