@convext/cli 0.3.2 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.js +30 -47
- package/dist/api.js.map +1 -1
- package/dist/cli.js +45 -50
- package/dist/cli.js.map +1 -1
- package/dist/commands/check.js +26 -32
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/init.js +72 -78
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +48 -56
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mcp.js +80 -87
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/sync.js +73 -79
- package/dist/commands/sync.js.map +1 -1
- package/dist/config.js +14 -20
- package/dist/config.js.map +1 -1
- package/dist/index.js +6 -25
- package/dist/index.js.map +1 -1
- package/dist/utils/fileManager.js +13 -17
- package/dist/utils/fileManager.js.map +1 -1
- package/dist/utils/prompts.js +10 -16
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/scanner.js +30 -33
- package/dist/utils/scanner.js.map +1 -1
- package/dist/utils/versionCheck.d.ts.map +1 -1
- package/dist/utils/versionCheck.js +32 -27
- package/dist/utils/versionCheck.js.map +1 -1
- package/package.json +2 -1
package/dist/api.js
CHANGED
|
@@ -1,23 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ApiError = void 0;
|
|
7
|
-
exports.getRules = getRules;
|
|
8
|
-
exports.getStandards = getStandards;
|
|
9
|
-
exports.getRuleSets = getRuleSets;
|
|
10
|
-
exports.getProjectContext = getProjectContext;
|
|
11
|
-
exports.getProjectMarkdown = getProjectMarkdown;
|
|
12
|
-
exports.registerProject = registerProject;
|
|
13
|
-
exports.getOrganizations = getOrganizations;
|
|
14
|
-
exports.getProjects = getProjects;
|
|
15
|
-
exports.getEngineeringContext = getEngineeringContext;
|
|
16
|
-
exports.assignRuleSets = assignRuleSets;
|
|
17
|
-
const config_js_1 = require("./config.js");
|
|
18
|
-
const versionCheck_js_1 = require("./utils/versionCheck.js");
|
|
19
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
20
|
-
class ApiError extends Error {
|
|
1
|
+
import { getApiToken, getApiUrl } from "./config.js";
|
|
2
|
+
import { checkMinimumVersion, getCurrentVersion } from "./utils/versionCheck.js";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
export class ApiError extends Error {
|
|
21
5
|
statusCode;
|
|
22
6
|
constructor(statusCode, message) {
|
|
23
7
|
super(message);
|
|
@@ -25,7 +9,6 @@ class ApiError extends Error {
|
|
|
25
9
|
this.name = "ApiError";
|
|
26
10
|
}
|
|
27
11
|
}
|
|
28
|
-
exports.ApiError = ApiError;
|
|
29
12
|
/**
|
|
30
13
|
* Check if the API response indicates a minimum CLI version requirement.
|
|
31
14
|
* Displays a warning if the current version is below the minimum.
|
|
@@ -33,19 +16,19 @@ exports.ApiError = ApiError;
|
|
|
33
16
|
function checkVersionHeader(response) {
|
|
34
17
|
const minVersion = response.headers.get("X-Min-CLI-Version");
|
|
35
18
|
if (minVersion) {
|
|
36
|
-
const check =
|
|
19
|
+
const check = checkMinimumVersion(minVersion);
|
|
37
20
|
if (!check.ok) {
|
|
38
21
|
console.log();
|
|
39
|
-
console.log(
|
|
40
|
-
console.log(
|
|
41
|
-
console.log(
|
|
22
|
+
console.log(chalk.red(` ⚠ CLI version ${getCurrentVersion()} is outdated`));
|
|
23
|
+
console.log(chalk.yellow(` Minimum required: ${minVersion}`));
|
|
24
|
+
console.log(chalk.gray(` Run: npm install -g @convext/cli@latest`));
|
|
42
25
|
console.log();
|
|
43
26
|
}
|
|
44
27
|
}
|
|
45
28
|
}
|
|
46
29
|
async function mcpCall(method, params = {}) {
|
|
47
|
-
const apiUrl =
|
|
48
|
-
const token =
|
|
30
|
+
const apiUrl = getApiUrl();
|
|
31
|
+
const token = getApiToken();
|
|
49
32
|
if (!token) {
|
|
50
33
|
throw new ApiError(401, "No API token configured. Run: convext config --token YOUR_TOKEN");
|
|
51
34
|
}
|
|
@@ -54,7 +37,7 @@ async function mcpCall(method, params = {}) {
|
|
|
54
37
|
headers: {
|
|
55
38
|
"Content-Type": "application/json",
|
|
56
39
|
Authorization: `Bearer ${token}`,
|
|
57
|
-
"X-CLI-Version":
|
|
40
|
+
"X-CLI-Version": getCurrentVersion(),
|
|
58
41
|
},
|
|
59
42
|
body: JSON.stringify({
|
|
60
43
|
jsonrpc: "2.0",
|
|
@@ -74,7 +57,7 @@ async function mcpCall(method, params = {}) {
|
|
|
74
57
|
}
|
|
75
58
|
return json.result;
|
|
76
59
|
}
|
|
77
|
-
async function getRules() {
|
|
60
|
+
export async function getRules() {
|
|
78
61
|
const result = await mcpCall("tools/call", {
|
|
79
62
|
name: "get_rules_tool",
|
|
80
63
|
arguments: {},
|
|
@@ -86,7 +69,7 @@ async function getRules() {
|
|
|
86
69
|
}
|
|
87
70
|
return { rules: [] };
|
|
88
71
|
}
|
|
89
|
-
async function getStandards(language) {
|
|
72
|
+
export async function getStandards(language) {
|
|
90
73
|
const result = await mcpCall("tools/call", {
|
|
91
74
|
name: "get_tech_standards_tool",
|
|
92
75
|
arguments: language ? { language } : {},
|
|
@@ -97,7 +80,7 @@ async function getStandards(language) {
|
|
|
97
80
|
}
|
|
98
81
|
return { standards: [] };
|
|
99
82
|
}
|
|
100
|
-
async function getRuleSets() {
|
|
83
|
+
export async function getRuleSets() {
|
|
101
84
|
const result = await mcpCall("resources/read", {
|
|
102
85
|
uri: "charter:///rulesets",
|
|
103
86
|
});
|
|
@@ -107,7 +90,7 @@ async function getRuleSets() {
|
|
|
107
90
|
}
|
|
108
91
|
return { rulesets: [] };
|
|
109
92
|
}
|
|
110
|
-
async function getProjectContext(projectId, repoUrl) {
|
|
93
|
+
export async function getProjectContext(projectId, repoUrl) {
|
|
111
94
|
const args = {};
|
|
112
95
|
if (projectId)
|
|
113
96
|
args.project_id = projectId;
|
|
@@ -129,9 +112,9 @@ async function getProjectContext(projectId, repoUrl) {
|
|
|
129
112
|
throw new ApiError(404, "Project not found");
|
|
130
113
|
}
|
|
131
114
|
// Fetch pre-rendered markdown from the server (matches server preview exactly)
|
|
132
|
-
async function getProjectMarkdown(projectSlug) {
|
|
133
|
-
const apiUrl =
|
|
134
|
-
const token =
|
|
115
|
+
export async function getProjectMarkdown(projectSlug) {
|
|
116
|
+
const apiUrl = getApiUrl();
|
|
117
|
+
const token = getApiToken();
|
|
135
118
|
if (!token) {
|
|
136
119
|
throw new ApiError(401, "No API token configured. Run: convext config --token YOUR_TOKEN");
|
|
137
120
|
}
|
|
@@ -140,7 +123,7 @@ async function getProjectMarkdown(projectSlug) {
|
|
|
140
123
|
headers: {
|
|
141
124
|
"Content-Type": "application/json",
|
|
142
125
|
Authorization: `Bearer ${token}`,
|
|
143
|
-
"X-CLI-Version":
|
|
126
|
+
"X-CLI-Version": getCurrentVersion(),
|
|
144
127
|
},
|
|
145
128
|
});
|
|
146
129
|
checkVersionHeader(response);
|
|
@@ -149,7 +132,7 @@ async function getProjectMarkdown(projectSlug) {
|
|
|
149
132
|
}
|
|
150
133
|
return response.json();
|
|
151
134
|
}
|
|
152
|
-
async function registerProject(name, repoUrl, description, organizationSlug) {
|
|
135
|
+
export async function registerProject(name, repoUrl, description, organizationSlug) {
|
|
153
136
|
const args = {
|
|
154
137
|
name,
|
|
155
138
|
};
|
|
@@ -182,9 +165,9 @@ async function registerProject(name, repoUrl, description, organizationSlug) {
|
|
|
182
165
|
}
|
|
183
166
|
throw new ApiError(500, "Failed to register project");
|
|
184
167
|
}
|
|
185
|
-
async function getOrganizations() {
|
|
186
|
-
const apiUrl =
|
|
187
|
-
const token =
|
|
168
|
+
export async function getOrganizations() {
|
|
169
|
+
const apiUrl = getApiUrl();
|
|
170
|
+
const token = getApiToken();
|
|
188
171
|
if (!token) {
|
|
189
172
|
throw new ApiError(401, "No API token configured. Run: convext config --token YOUR_TOKEN");
|
|
190
173
|
}
|
|
@@ -193,7 +176,7 @@ async function getOrganizations() {
|
|
|
193
176
|
headers: {
|
|
194
177
|
"Content-Type": "application/json",
|
|
195
178
|
Authorization: `Bearer ${token}`,
|
|
196
|
-
"X-CLI-Version":
|
|
179
|
+
"X-CLI-Version": getCurrentVersion(),
|
|
197
180
|
},
|
|
198
181
|
});
|
|
199
182
|
checkVersionHeader(response);
|
|
@@ -202,9 +185,9 @@ async function getOrganizations() {
|
|
|
202
185
|
}
|
|
203
186
|
return response.json();
|
|
204
187
|
}
|
|
205
|
-
async function getProjects() {
|
|
206
|
-
const apiUrl =
|
|
207
|
-
const token =
|
|
188
|
+
export async function getProjects() {
|
|
189
|
+
const apiUrl = getApiUrl();
|
|
190
|
+
const token = getApiToken();
|
|
208
191
|
if (!token) {
|
|
209
192
|
throw new ApiError(401, "No API token configured. Run: convext config --token YOUR_TOKEN");
|
|
210
193
|
}
|
|
@@ -213,7 +196,7 @@ async function getProjects() {
|
|
|
213
196
|
headers: {
|
|
214
197
|
"Content-Type": "application/json",
|
|
215
198
|
Authorization: `Bearer ${token}`,
|
|
216
|
-
"X-CLI-Version":
|
|
199
|
+
"X-CLI-Version": getCurrentVersion(),
|
|
217
200
|
},
|
|
218
201
|
});
|
|
219
202
|
checkVersionHeader(response);
|
|
@@ -222,7 +205,7 @@ async function getProjects() {
|
|
|
222
205
|
}
|
|
223
206
|
return response.json();
|
|
224
207
|
}
|
|
225
|
-
async function getEngineeringContext(projectId, languages) {
|
|
208
|
+
export async function getEngineeringContext(projectId, languages) {
|
|
226
209
|
const result = await mcpCall("prompts/get", {
|
|
227
210
|
name: "engineering-context",
|
|
228
211
|
arguments: {
|
|
@@ -232,7 +215,7 @@ async function getEngineeringContext(projectId, languages) {
|
|
|
232
215
|
});
|
|
233
216
|
return result.messages?.[0]?.content?.text || "";
|
|
234
217
|
}
|
|
235
|
-
async function assignRuleSets(projectId, ruleSetSlugs) {
|
|
218
|
+
export async function assignRuleSets(projectId, ruleSetSlugs) {
|
|
236
219
|
const result = await mcpCall("tools/call", {
|
|
237
220
|
name: "assign_project_rule_sets_tool",
|
|
238
221
|
arguments: {
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -1,26 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const check_js_1 = require("./commands/check.js");
|
|
12
|
-
const init_js_1 = require("./commands/init.js");
|
|
13
|
-
const mcp_js_1 = require("./commands/mcp.js");
|
|
14
|
-
const login_js_1 = require("./commands/login.js");
|
|
15
|
-
const versionCheck_js_1 = require("./utils/versionCheck.js");
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { loadConfig, saveConfig, getApiToken, getApiUrl } from "./config.js";
|
|
5
|
+
import { syncCommand } from "./commands/sync.js";
|
|
6
|
+
import { checkCommand } from "./commands/check.js";
|
|
7
|
+
import { initCommand } from "./commands/init.js";
|
|
8
|
+
import { mcpCommand, mcpStatusCommand } from "./commands/mcp.js";
|
|
9
|
+
import { loginCommand, logoutCommand } from "./commands/login.js";
|
|
10
|
+
import { checkForUpdates, getCurrentVersion } from "./utils/versionCheck.js";
|
|
16
11
|
// Show server URL first for every command
|
|
17
|
-
const apiUrl =
|
|
18
|
-
console.log(
|
|
19
|
-
const program = new
|
|
12
|
+
const apiUrl = getApiUrl();
|
|
13
|
+
console.log(chalk.gray(`Server: ${apiUrl}\n`));
|
|
14
|
+
const program = new Command();
|
|
20
15
|
program
|
|
21
16
|
.name("convext")
|
|
22
17
|
.description("CLI for Convext - sync engineering rules and standards to your project")
|
|
23
|
-
.version(
|
|
18
|
+
.version(getCurrentVersion())
|
|
24
19
|
.addHelpText("after", `
|
|
25
20
|
Environment Variables:
|
|
26
21
|
CONVEXT_TOKEN API token for authentication (overrides config file)
|
|
@@ -42,7 +37,7 @@ program
|
|
|
42
37
|
.option("-n, --dry-run", "Show what would be written without making changes")
|
|
43
38
|
.option("-v, --verbose", "Show detailed debug output")
|
|
44
39
|
.action(async (options) => {
|
|
45
|
-
await
|
|
40
|
+
await syncCommand({
|
|
46
41
|
projectId: options.project,
|
|
47
42
|
languages: options.languages,
|
|
48
43
|
format: options.format,
|
|
@@ -58,7 +53,7 @@ program
|
|
|
58
53
|
.option("-l, --languages <langs>", "Comma-separated languages to check")
|
|
59
54
|
.option("-s, --strict", "Fail if any file is missing or out of sync")
|
|
60
55
|
.action(async (options) => {
|
|
61
|
-
await
|
|
56
|
+
await checkCommand({
|
|
62
57
|
projectId: options.project,
|
|
63
58
|
languages: options.languages,
|
|
64
59
|
strict: options.strict,
|
|
@@ -73,7 +68,7 @@ program
|
|
|
73
68
|
.option("-r, --repo-url <url>", "Repository URL")
|
|
74
69
|
.option("-o, --organization <slug>", "Organization slug to assign the project to")
|
|
75
70
|
.action(async (options) => {
|
|
76
|
-
await
|
|
71
|
+
await initCommand({
|
|
77
72
|
name: options.name,
|
|
78
73
|
description: options.description,
|
|
79
74
|
repoUrl: options.repoUrl,
|
|
@@ -89,28 +84,28 @@ program
|
|
|
89
84
|
.option("--show", "Show current configuration")
|
|
90
85
|
.action((options) => {
|
|
91
86
|
if (options.show) {
|
|
92
|
-
const config =
|
|
93
|
-
console.log(
|
|
94
|
-
console.log(` API URL: ${
|
|
95
|
-
console.log(` Token: ${config.apiToken ?
|
|
87
|
+
const config = loadConfig();
|
|
88
|
+
console.log(chalk.bold("Convext Configuration:"));
|
|
89
|
+
console.log(` API URL: ${chalk.cyan(config.apiUrl)}`);
|
|
90
|
+
console.log(` Token: ${config.apiToken ? chalk.green("[set]") : chalk.yellow("[not set]")}`);
|
|
96
91
|
const envToken = process.env.CONVEXT_TOKEN;
|
|
97
92
|
const envUrl = process.env.CONVEXT_URL;
|
|
98
93
|
if (envToken || envUrl) {
|
|
99
|
-
console.log("\n" +
|
|
94
|
+
console.log("\n" + chalk.bold("Environment Overrides:"));
|
|
100
95
|
if (envToken)
|
|
101
|
-
console.log(` CONVEXT_TOKEN: ${
|
|
96
|
+
console.log(` CONVEXT_TOKEN: ${chalk.green("[set]")}`);
|
|
102
97
|
if (envUrl)
|
|
103
|
-
console.log(` CONVEXT_URL: ${
|
|
98
|
+
console.log(` CONVEXT_URL: ${chalk.cyan(envUrl)}`);
|
|
104
99
|
}
|
|
105
100
|
return;
|
|
106
101
|
}
|
|
107
102
|
if (options.token) {
|
|
108
|
-
|
|
109
|
-
console.log(
|
|
103
|
+
saveConfig({ apiToken: options.token });
|
|
104
|
+
console.log(chalk.green("✓ API token saved"));
|
|
110
105
|
}
|
|
111
106
|
if (options.url) {
|
|
112
|
-
|
|
113
|
-
console.log(
|
|
107
|
+
saveConfig({ apiUrl: options.url });
|
|
108
|
+
console.log(chalk.green(`✓ API URL set to ${options.url}`));
|
|
114
109
|
}
|
|
115
110
|
if (!options.token && !options.url) {
|
|
116
111
|
console.log("Usage: convext config --token YOUR_TOKEN");
|
|
@@ -127,10 +122,10 @@ program
|
|
|
127
122
|
.option("-s, --status", "Show MCP configuration status for all editors")
|
|
128
123
|
.action(async (options) => {
|
|
129
124
|
if (options.status) {
|
|
130
|
-
|
|
125
|
+
mcpStatusCommand();
|
|
131
126
|
}
|
|
132
127
|
else {
|
|
133
|
-
await
|
|
128
|
+
await mcpCommand({
|
|
134
129
|
editor: options.editor,
|
|
135
130
|
fix: options.fix,
|
|
136
131
|
});
|
|
@@ -142,52 +137,52 @@ program
|
|
|
142
137
|
.description("Log in to Convext using OAuth")
|
|
143
138
|
.option("-d, --device", "Force device authorization flow (for headless environments)")
|
|
144
139
|
.action(async (options) => {
|
|
145
|
-
await
|
|
140
|
+
await loginCommand({ device: options.device });
|
|
146
141
|
});
|
|
147
142
|
// Logout command - clear credentials
|
|
148
143
|
program
|
|
149
144
|
.command("logout")
|
|
150
145
|
.description("Log out and clear stored credentials")
|
|
151
146
|
.action(async () => {
|
|
152
|
-
await
|
|
147
|
+
await logoutCommand();
|
|
153
148
|
});
|
|
154
149
|
// Auth status command
|
|
155
150
|
program
|
|
156
151
|
.command("whoami")
|
|
157
152
|
.description("Check authentication status and show current user")
|
|
158
153
|
.action(async () => {
|
|
159
|
-
const token =
|
|
154
|
+
const token = getApiToken();
|
|
160
155
|
if (!token) {
|
|
161
|
-
console.log(
|
|
156
|
+
console.log(chalk.yellow("Not authenticated"));
|
|
162
157
|
console.log("\nTo authenticate:");
|
|
163
158
|
console.log(` 1. Get an API token from Convext web interface`);
|
|
164
|
-
console.log(` 2. Run: ${
|
|
165
|
-
console.log(` Or set: ${
|
|
159
|
+
console.log(` 2. Run: ${chalk.cyan("convext config --token YOUR_TOKEN")}`);
|
|
160
|
+
console.log(` Or set: ${chalk.cyan("export CONVEXT_TOKEN=YOUR_TOKEN")}`);
|
|
166
161
|
process.exit(1);
|
|
167
162
|
}
|
|
168
163
|
// Verify token and get user info
|
|
169
164
|
try {
|
|
170
|
-
const response = await fetch(`${
|
|
165
|
+
const response = await fetch(`${getApiUrl()}/api/me`, {
|
|
171
166
|
headers: { Authorization: `Bearer ${token}` },
|
|
172
167
|
});
|
|
173
168
|
if (!response.ok) {
|
|
174
|
-
console.log(
|
|
175
|
-
console.log(
|
|
169
|
+
console.log(chalk.red("✗ Authentication failed"));
|
|
170
|
+
console.log(chalk.gray(" Token may be invalid or expired"));
|
|
176
171
|
process.exit(1);
|
|
177
172
|
}
|
|
178
173
|
const data = await response.json();
|
|
179
174
|
const user = data.user;
|
|
180
|
-
console.log(
|
|
181
|
-
console.log(` Name: ${
|
|
182
|
-
console.log(` Email: ${
|
|
175
|
+
console.log(chalk.green("✓ Authenticated"));
|
|
176
|
+
console.log(` Name: ${chalk.cyan(user.name)}`);
|
|
177
|
+
console.log(` Email: ${chalk.cyan(user.email)}`);
|
|
183
178
|
if (user.organizations.length > 0) {
|
|
184
|
-
console.log(` Orgs: ${
|
|
179
|
+
console.log(` Orgs: ${chalk.cyan(user.organizations.map(o => o.name).join(", "))}`);
|
|
185
180
|
}
|
|
186
181
|
}
|
|
187
182
|
catch (error) {
|
|
188
|
-
console.log(
|
|
183
|
+
console.log(chalk.red("✗ Could not verify token"));
|
|
189
184
|
if (error instanceof Error) {
|
|
190
|
-
console.log(
|
|
185
|
+
console.log(chalk.gray(` Error: ${error.message}`));
|
|
191
186
|
}
|
|
192
187
|
process.exit(1);
|
|
193
188
|
}
|
|
@@ -200,7 +195,7 @@ if (process.argv.length <= 2) {
|
|
|
200
195
|
program.parse();
|
|
201
196
|
// Check for updates after command completes (non-blocking)
|
|
202
197
|
// This runs in the background and caches results for 24 hours
|
|
203
|
-
|
|
198
|
+
checkForUpdates().catch(() => {
|
|
204
199
|
// Silently ignore errors - don't disrupt user workflow
|
|
205
200
|
});
|
|
206
201
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/check.js
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.checkCommand = checkCommand;
|
|
7
|
-
const node_fs_1 = require("node:fs");
|
|
8
|
-
const node_path_1 = require("node:path");
|
|
9
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
-
const ora_1 = __importDefault(require("ora"));
|
|
11
|
-
const api_js_1 = require("../api.js");
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import ora from "ora";
|
|
5
|
+
import { getRules, getStandards } from "../api.js";
|
|
12
6
|
const EXPECTED_FILES = [
|
|
13
7
|
{ name: "CLAUDE.md", format: "claude" },
|
|
14
8
|
{ name: ".cursorrules", format: "cursor" },
|
|
@@ -33,7 +27,7 @@ function extractRulesFromFile(content) {
|
|
|
33
27
|
function checkFileCompliance(filePath, rules, _standards) {
|
|
34
28
|
const result = {
|
|
35
29
|
file: filePath,
|
|
36
|
-
exists:
|
|
30
|
+
exists: existsSync(filePath),
|
|
37
31
|
synced: false,
|
|
38
32
|
issues: [],
|
|
39
33
|
};
|
|
@@ -41,7 +35,7 @@ function checkFileCompliance(filePath, rules, _standards) {
|
|
|
41
35
|
result.issues.push("File does not exist - run 'convext sync' to create it");
|
|
42
36
|
return result;
|
|
43
37
|
}
|
|
44
|
-
const content =
|
|
38
|
+
const content = readFileSync(filePath, "utf-8");
|
|
45
39
|
// Check if file was generated by Code Charter
|
|
46
40
|
if (!content.includes("Convext") && !content.includes("convext")) {
|
|
47
41
|
result.issues.push("File was not generated by Code Charter");
|
|
@@ -86,14 +80,14 @@ function detectProjectLanguages() {
|
|
|
86
80
|
"composer.json": "php",
|
|
87
81
|
};
|
|
88
82
|
for (const [file, lang] of Object.entries(indicators)) {
|
|
89
|
-
if (
|
|
83
|
+
if (existsSync(join(cwd, file))) {
|
|
90
84
|
languages.push(lang);
|
|
91
85
|
}
|
|
92
86
|
}
|
|
93
87
|
return [...new Set(languages)];
|
|
94
88
|
}
|
|
95
|
-
async function checkCommand(options) {
|
|
96
|
-
const spinner = (
|
|
89
|
+
export async function checkCommand(options) {
|
|
90
|
+
const spinner = ora("Checking compliance with Code Charter...").start();
|
|
97
91
|
try {
|
|
98
92
|
// Auto-detect languages if not specified
|
|
99
93
|
const languages = options.languages || detectProjectLanguages().join(",");
|
|
@@ -102,8 +96,8 @@ async function checkCommand(options) {
|
|
|
102
96
|
}
|
|
103
97
|
// Fetch current rules and standards
|
|
104
98
|
const [rulesResult, standardsResult] = await Promise.all([
|
|
105
|
-
|
|
106
|
-
|
|
99
|
+
getRules(),
|
|
100
|
+
getStandards(languages || undefined),
|
|
107
101
|
]);
|
|
108
102
|
const rules = rulesResult.rules;
|
|
109
103
|
const standards = standardsResult.standards;
|
|
@@ -111,22 +105,22 @@ async function checkCommand(options) {
|
|
|
111
105
|
// Check each expected file
|
|
112
106
|
const cwd = process.cwd();
|
|
113
107
|
const results = [];
|
|
114
|
-
console.log("\n" +
|
|
108
|
+
console.log("\n" + chalk.bold("Compliance Check:"));
|
|
115
109
|
for (const { name } of EXPECTED_FILES) {
|
|
116
|
-
const filePath =
|
|
110
|
+
const filePath = join(cwd, name);
|
|
117
111
|
const result = checkFileCompliance(filePath, rules, standards);
|
|
118
112
|
results.push(result);
|
|
119
113
|
// Display result
|
|
120
114
|
if (result.synced) {
|
|
121
|
-
console.log(` ${
|
|
115
|
+
console.log(` ${chalk.green("✓")} ${name} - ${chalk.green("compliant")}`);
|
|
122
116
|
}
|
|
123
117
|
else if (!result.exists) {
|
|
124
|
-
console.log(` ${
|
|
118
|
+
console.log(` ${chalk.red("✗")} ${name} - ${chalk.red("missing")}`);
|
|
125
119
|
}
|
|
126
120
|
else {
|
|
127
|
-
console.log(` ${
|
|
121
|
+
console.log(` ${chalk.yellow("⚠")} ${name} - ${chalk.yellow("issues found")}`);
|
|
128
122
|
for (const issue of result.issues) {
|
|
129
|
-
console.log(` ${
|
|
123
|
+
console.log(` ${chalk.gray("→")} ${issue}`);
|
|
130
124
|
}
|
|
131
125
|
}
|
|
132
126
|
}
|
|
@@ -134,29 +128,29 @@ async function checkCommand(options) {
|
|
|
134
128
|
const compliant = results.filter((r) => r.synced).length;
|
|
135
129
|
const missing = results.filter((r) => !r.exists).length;
|
|
136
130
|
const withIssues = results.filter((r) => r.exists && !r.synced).length;
|
|
137
|
-
console.log("\n" +
|
|
138
|
-
console.log(` Compliant: ${
|
|
139
|
-
console.log(` Missing: ${
|
|
140
|
-
console.log(` Issues: ${
|
|
131
|
+
console.log("\n" + chalk.bold("Summary:"));
|
|
132
|
+
console.log(` Compliant: ${chalk.green(compliant)}`);
|
|
133
|
+
console.log(` Missing: ${chalk.red(missing)}`);
|
|
134
|
+
console.log(` Issues: ${chalk.yellow(withIssues)}`);
|
|
141
135
|
// Exit code for CI
|
|
142
136
|
const hasFailures = options.strict
|
|
143
137
|
? compliant < results.length
|
|
144
138
|
: missing > 0 || results.some((r) => r.issues.some((i) => i.includes("critical")));
|
|
145
139
|
if (hasFailures) {
|
|
146
|
-
console.log("\n" +
|
|
140
|
+
console.log("\n" + chalk.red("✗ Compliance check failed"));
|
|
147
141
|
if (missing > 0) {
|
|
148
|
-
console.log(
|
|
142
|
+
console.log(chalk.gray(" Run 'convext sync' to generate missing files"));
|
|
149
143
|
}
|
|
150
144
|
process.exit(1);
|
|
151
145
|
}
|
|
152
146
|
else {
|
|
153
|
-
console.log("\n" +
|
|
147
|
+
console.log("\n" + chalk.green("✓ All compliance checks passed"));
|
|
154
148
|
}
|
|
155
149
|
}
|
|
156
150
|
catch (error) {
|
|
157
151
|
spinner.fail("Check failed");
|
|
158
152
|
if (error instanceof Error) {
|
|
159
|
-
console.error(
|
|
153
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
160
154
|
}
|
|
161
155
|
process.exit(1);
|
|
162
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|