@convext/cli 0.1.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 (42) hide show
  1. package/README.md +180 -0
  2. package/dist/api.d.ts +121 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +218 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +165 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/check.d.ts +8 -0
  11. package/dist/commands/check.d.ts.map +1 -0
  12. package/dist/commands/check.js +164 -0
  13. package/dist/commands/check.js.map +1 -0
  14. package/dist/commands/init.d.ts +10 -0
  15. package/dist/commands/init.d.ts.map +1 -0
  16. package/dist/commands/init.js +294 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/sync.d.ts +10 -0
  19. package/dist/commands/sync.d.ts.map +1 -0
  20. package/dist/commands/sync.js +328 -0
  21. package/dist/commands/sync.js.map +1 -0
  22. package/dist/config.d.ts +9 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +52 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/index.d.ts +6 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +24 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/utils/fileManager.d.ts +3 -0
  31. package/dist/utils/fileManager.d.ts.map +1 -0
  32. package/dist/utils/fileManager.js +35 -0
  33. package/dist/utils/fileManager.js.map +1 -0
  34. package/dist/utils/prompts.d.ts +9 -0
  35. package/dist/utils/prompts.d.ts.map +1 -0
  36. package/dist/utils/prompts.js +78 -0
  37. package/dist/utils/prompts.js.map +1 -0
  38. package/dist/utils/scanner.d.ts +10 -0
  39. package/dist/utils/scanner.d.ts.map +1 -0
  40. package/dist/utils/scanner.js +196 -0
  41. package/dist/utils/scanner.js.map +1 -0
  42. package/package.json +42 -0
package/README.md ADDED
@@ -0,0 +1,180 @@
1
+ # Convext CLI
2
+
3
+ Sync engineering rules and standards to your project from Convext.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ # Install globally
9
+ npm install -g @convext/cli
10
+
11
+ # Or use via npx (no install needed)
12
+ npx @convext/cli <command>
13
+ ```
14
+
15
+ ## Quick Start
16
+
17
+ ```bash
18
+ # 1. Configure your API token
19
+ convext config --token YOUR_TOKEN
20
+
21
+ # 2. Initialize your project
22
+ convext init
23
+
24
+ # 3. Sync rules and generate dotfiles
25
+ convext sync
26
+ ```
27
+
28
+ ## Commands
29
+
30
+ ### `sync` - Sync engineering rules and generate IDE dotfiles
31
+
32
+ ```bash
33
+ convext sync [options]
34
+
35
+ Options:
36
+ -p, --project <id> Project ID to sync context for
37
+ -l, --languages <langs> Comma-separated languages (e.g., 'ruby,typescript')
38
+ -f, --format <format> Output format: all, claude, cursor, copilot (default: all)
39
+ -n, --dry-run Preview changes without writing files
40
+ ```
41
+
42
+ Generated files:
43
+ - `CLAUDE.md` - Claude Code instructions
44
+ - `.cursorrules` - Cursor IDE rules
45
+ - `.github/copilot-instructions.md` - GitHub Copilot instructions
46
+
47
+ ### `check` - Validate compliance with Convext rules
48
+
49
+ ```bash
50
+ convext check [options]
51
+
52
+ Options:
53
+ -s, --strict Fail (exit code 1) if files are out of sync
54
+ -q, --quiet Suppress output, only return exit code
55
+ ```
56
+
57
+ ### `init` - Initialize and register project with Convext
58
+
59
+ ```bash
60
+ convext init [options]
61
+
62
+ Options:
63
+ -n, --name <name> Project name (default: current directory name)
64
+ -o, --org <name> Organization name or ID
65
+ ```
66
+
67
+ Creates `.convext.json` with project configuration.
68
+
69
+ ### `config` - Manage CLI configuration
70
+
71
+ ```bash
72
+ convext config --token YOUR_TOKEN # Set API token
73
+ convext config --url https://... # Set custom API URL
74
+ convext config --show # Show current config
75
+ ```
76
+
77
+ ### `whoami` - Show configured user and organization
78
+
79
+ ```bash
80
+ convext whoami
81
+ ```
82
+
83
+ ## Configuration
84
+
85
+ ### Authentication
86
+
87
+ ```bash
88
+ # Config file (~/.convext/config.json)
89
+ convext config --token YOUR_TOKEN
90
+
91
+ # Or via environment variable
92
+ export CONVEXT_TOKEN="cc_live_..."
93
+ ```
94
+
95
+ ### Custom API URL
96
+
97
+ ```bash
98
+ convext config --url https://your-server.com
99
+ ```
100
+
101
+ ## Workflows
102
+
103
+ ### Pre-commit Hook
104
+
105
+ Automatically check compliance before committing:
106
+
107
+ ```bash
108
+ #!/bin/sh
109
+ # .git/hooks/pre-commit
110
+
111
+ # Ensure rules are in sync (don't fail build)
112
+ npx @convext/cli check || echo "Warning: Rules may be out of date"
113
+ ```
114
+
115
+ Or stricter version:
116
+
117
+ ```bash
118
+ #!/bin/sh
119
+ # .git/hooks/pre-commit
120
+
121
+ npx @convext/cli sync 2>/dev/null || true
122
+ ```
123
+
124
+ ### CI/CD Integration
125
+
126
+ #### GitHub Actions
127
+
128
+ ```yaml
129
+ name: Convext Compliance
130
+
131
+ on: [push, pull_request]
132
+
133
+ jobs:
134
+ check:
135
+ runs-on: ubuntu-latest
136
+ steps:
137
+ - uses: actions/checkout@v4
138
+ - uses: actions/setup-node@v4
139
+ - run: npx @convext/cli check --strict
140
+ env:
141
+ CONVEXT_TOKEN: ${{ secrets.CONVEXT_TOKEN }}
142
+ ```
143
+
144
+ #### Pre-push Hook
145
+
146
+ ```bash
147
+ npx @convext/cli check || exit 1
148
+ ```
149
+
150
+ ## Project Configuration
151
+
152
+ After running `init`, a `.convext.json` file is created:
153
+
154
+ ```json
155
+ {
156
+ "projectId": 123,
157
+ "name": "my-project",
158
+ "repoUrl": "https://github.com/myorg/my-project"
159
+ }
160
+ ```
161
+
162
+ This file should be committed to version control so team members share the same project context.
163
+
164
+ ## File Structure
165
+
166
+ ```
167
+ ~/.convext/ # Global config directory
168
+ config.json # API token and URL
169
+
170
+ .convext.json # Project-specific config (commit to repo)
171
+
172
+ CLAUDE.md # Generated file for Claude Code
173
+ .cursorrules # Generated file for Cursor
174
+ .github/
175
+ copilot-instructions.md # Generated file for GitHub Copilot
176
+ ```
177
+
178
+ ## License
179
+
180
+ MIT
package/dist/api.d.ts ADDED
@@ -0,0 +1,121 @@
1
+ export interface Rule {
2
+ id: number;
3
+ title: string;
4
+ severity: string;
5
+ category: string;
6
+ text: string;
7
+ }
8
+ export interface Standard {
9
+ identifier: string;
10
+ language: string;
11
+ framework?: string;
12
+ min_version?: string;
13
+ package_manager?: string;
14
+ linter?: string;
15
+ formatter?: string;
16
+ test_framework?: string;
17
+ libraries?: string[];
18
+ policy?: string[];
19
+ commands?: Record<string, string>;
20
+ }
21
+ export interface ProjectContextResponse {
22
+ project_id: number;
23
+ project_name: string;
24
+ markdown: string;
25
+ rules_count: number;
26
+ standards_count: number;
27
+ }
28
+ export interface RuleSet {
29
+ id: number;
30
+ name: string;
31
+ description: string;
32
+ language?: string;
33
+ rules_count: number;
34
+ standards_count: number;
35
+ }
36
+ export interface ProjectContext {
37
+ project?: {
38
+ id: number;
39
+ name: string;
40
+ slug?: string;
41
+ description?: string;
42
+ tech_stack?: Record<string, unknown>;
43
+ };
44
+ assigned_rule_sets?: Array<{
45
+ id: number;
46
+ name: string;
47
+ slug?: string;
48
+ scope: string;
49
+ }>;
50
+ available_rule_sets?: {
51
+ organization: Array<{
52
+ id: number;
53
+ name: string;
54
+ slug?: string;
55
+ }>;
56
+ global: Array<{
57
+ id: number;
58
+ name: string;
59
+ slug?: string;
60
+ }>;
61
+ };
62
+ rules: Rule[];
63
+ standards?: Standard[];
64
+ language_standards?: Standard[];
65
+ }
66
+ export declare class ApiError extends Error {
67
+ statusCode: number;
68
+ constructor(statusCode: number, message: string);
69
+ }
70
+ export declare function getRules(): Promise<{
71
+ rules: Rule[];
72
+ }>;
73
+ export declare function getStandards(language?: string): Promise<{
74
+ standards: Standard[];
75
+ }>;
76
+ export declare function getRuleSets(): Promise<{
77
+ rulesets: RuleSet[];
78
+ }>;
79
+ export declare function getProjectContext(projectId?: number, repoUrl?: string): Promise<ProjectContext>;
80
+ export declare function getProjectMarkdown(projectSlug: string): Promise<ProjectContextResponse>;
81
+ type RegisteredProjectResponse = {
82
+ project_id: number;
83
+ message: string;
84
+ project?: {
85
+ id: number;
86
+ name: string;
87
+ repo_url?: string;
88
+ source?: string;
89
+ };
90
+ };
91
+ export declare function registerProject(name: string, repoUrl?: string, description?: string, organizationSlug?: string): Promise<RegisteredProjectResponse>;
92
+ export interface Organization {
93
+ id: number;
94
+ name: string;
95
+ slug: string;
96
+ projects_count: number;
97
+ }
98
+ export interface ProjectSummary {
99
+ id: number;
100
+ name: string;
101
+ slug: string;
102
+ repo_url?: string;
103
+ organization_name?: string;
104
+ }
105
+ export declare function getOrganizations(): Promise<{
106
+ organizations: Organization[];
107
+ }>;
108
+ export declare function getProjects(): Promise<{
109
+ projects: ProjectSummary[];
110
+ }>;
111
+ export declare function getEngineeringContext(projectId?: number, languages?: string): Promise<string>;
112
+ export declare function assignRuleSets(projectId: number, ruleSetSlugs: string[]): Promise<{
113
+ assigned: number;
114
+ rule_sets: Array<{
115
+ id: number;
116
+ name: string;
117
+ slug: string;
118
+ }>;
119
+ }>;
120
+ export {};
121
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/api.js ADDED
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiError = void 0;
4
+ exports.getRules = getRules;
5
+ exports.getStandards = getStandards;
6
+ exports.getRuleSets = getRuleSets;
7
+ exports.getProjectContext = getProjectContext;
8
+ exports.getProjectMarkdown = getProjectMarkdown;
9
+ exports.registerProject = registerProject;
10
+ exports.getOrganizations = getOrganizations;
11
+ exports.getProjects = getProjects;
12
+ exports.getEngineeringContext = getEngineeringContext;
13
+ exports.assignRuleSets = assignRuleSets;
14
+ const config_js_1 = require("./config.js");
15
+ class ApiError extends Error {
16
+ statusCode;
17
+ constructor(statusCode, message) {
18
+ super(message);
19
+ this.statusCode = statusCode;
20
+ this.name = "ApiError";
21
+ }
22
+ }
23
+ exports.ApiError = ApiError;
24
+ async function mcpCall(method, params = {}) {
25
+ const apiUrl = (0, config_js_1.getApiUrl)();
26
+ const token = (0, config_js_1.getApiToken)();
27
+ if (!token) {
28
+ throw new ApiError(401, "No API token configured. Run: convext config --token YOUR_TOKEN");
29
+ }
30
+ const response = await fetch(`${apiUrl}/mcp`, {
31
+ method: "POST",
32
+ headers: {
33
+ "Content-Type": "application/json",
34
+ Authorization: `Bearer ${token}`,
35
+ },
36
+ body: JSON.stringify({
37
+ jsonrpc: "2.0",
38
+ method,
39
+ params,
40
+ id: Date.now(),
41
+ }),
42
+ });
43
+ if (!response.ok) {
44
+ throw new ApiError(response.status, `API request failed: ${response.statusText}`);
45
+ }
46
+ const json = (await response.json());
47
+ if (json.error) {
48
+ throw new ApiError(json.error.code || 500, json.error.message);
49
+ }
50
+ return json.result;
51
+ }
52
+ async function getRules() {
53
+ const result = await mcpCall("tools/call", {
54
+ name: "get_rules_tool",
55
+ arguments: {},
56
+ });
57
+ // Parse the JSON text from the tool response
58
+ const text = result.content?.[0]?.text;
59
+ if (text) {
60
+ return JSON.parse(text);
61
+ }
62
+ return { rules: [] };
63
+ }
64
+ async function getStandards(language) {
65
+ const result = await mcpCall("tools/call", {
66
+ name: "get_tech_standards_tool",
67
+ arguments: language ? { language } : {},
68
+ });
69
+ const text = result.content?.[0]?.text;
70
+ if (text) {
71
+ return JSON.parse(text);
72
+ }
73
+ return { standards: [] };
74
+ }
75
+ async function getRuleSets() {
76
+ const result = await mcpCall("resources/read", {
77
+ uri: "charter:///rulesets",
78
+ });
79
+ const text = result.contents?.[0]?.text;
80
+ if (text) {
81
+ return JSON.parse(text);
82
+ }
83
+ return { rulesets: [] };
84
+ }
85
+ async function getProjectContext(projectId, repoUrl) {
86
+ const args = {};
87
+ if (projectId)
88
+ args.project_id = projectId;
89
+ if (repoUrl)
90
+ args.repo_url = repoUrl;
91
+ const result = await mcpCall("tools/call", {
92
+ name: "get_project_context_tool",
93
+ arguments: args,
94
+ });
95
+ const text = result.content?.[0]?.text;
96
+ if (text) {
97
+ const parsed = JSON.parse(text);
98
+ return {
99
+ ...parsed,
100
+ rules: parsed.rules ?? [],
101
+ standards: parsed.standards ?? parsed.language_standards ?? [],
102
+ };
103
+ }
104
+ throw new ApiError(404, "Project not found");
105
+ }
106
+ // Fetch pre-rendered markdown from the server (matches server preview exactly)
107
+ async function getProjectMarkdown(projectSlug) {
108
+ const apiUrl = (0, config_js_1.getApiUrl)();
109
+ const token = (0, config_js_1.getApiToken)();
110
+ if (!token) {
111
+ throw new ApiError(401, "No API token configured. Run: convext config --token YOUR_TOKEN");
112
+ }
113
+ const response = await fetch(`${apiUrl}/api/projects/${projectSlug}/context`, {
114
+ method: "GET",
115
+ headers: {
116
+ "Content-Type": "application/json",
117
+ Authorization: `Bearer ${token}`,
118
+ },
119
+ });
120
+ if (!response.ok) {
121
+ throw new ApiError(response.status, `API request failed: ${response.statusText}`);
122
+ }
123
+ return response.json();
124
+ }
125
+ async function registerProject(name, repoUrl, description, organizationSlug) {
126
+ const args = {
127
+ name,
128
+ };
129
+ if (repoUrl) {
130
+ args.repo_url = repoUrl;
131
+ }
132
+ if (description) {
133
+ args.description = description;
134
+ }
135
+ if (organizationSlug) {
136
+ args.organization_slug = organizationSlug;
137
+ }
138
+ const result = await mcpCall("tools/call", {
139
+ name: "register_project_tool",
140
+ arguments: args,
141
+ });
142
+ const text = result.content?.[0]?.text;
143
+ if (text) {
144
+ const parsed = JSON.parse(text);
145
+ if (parsed.project_id) {
146
+ return parsed;
147
+ }
148
+ if (parsed.project?.id) {
149
+ return {
150
+ project_id: parsed.project.id,
151
+ message: parsed.message || "Project registered successfully",
152
+ project: parsed.project,
153
+ };
154
+ }
155
+ }
156
+ throw new ApiError(500, "Failed to register project");
157
+ }
158
+ async function getOrganizations() {
159
+ const apiUrl = (0, config_js_1.getApiUrl)();
160
+ const token = (0, config_js_1.getApiToken)();
161
+ if (!token) {
162
+ throw new ApiError(401, "No API token configured. Run: convext config --token YOUR_TOKEN");
163
+ }
164
+ const response = await fetch(`${apiUrl}/api/organizations`, {
165
+ method: "GET",
166
+ headers: {
167
+ "Content-Type": "application/json",
168
+ Authorization: `Bearer ${token}`,
169
+ },
170
+ });
171
+ if (!response.ok) {
172
+ throw new ApiError(response.status, `API request failed: ${response.statusText}`);
173
+ }
174
+ return response.json();
175
+ }
176
+ async function getProjects() {
177
+ const apiUrl = (0, config_js_1.getApiUrl)();
178
+ const token = (0, config_js_1.getApiToken)();
179
+ if (!token) {
180
+ throw new ApiError(401, "No API token configured. Run: convext config --token YOUR_TOKEN");
181
+ }
182
+ const response = await fetch(`${apiUrl}/api/projects`, {
183
+ method: "GET",
184
+ headers: {
185
+ "Content-Type": "application/json",
186
+ Authorization: `Bearer ${token}`,
187
+ },
188
+ });
189
+ if (!response.ok) {
190
+ throw new ApiError(response.status, `API request failed: ${response.statusText}`);
191
+ }
192
+ return response.json();
193
+ }
194
+ async function getEngineeringContext(projectId, languages) {
195
+ const result = await mcpCall("prompts/get", {
196
+ name: "engineering-context",
197
+ arguments: {
198
+ ...(projectId && { project_id: String(projectId) }),
199
+ ...(languages && { languages }),
200
+ },
201
+ });
202
+ return result.messages?.[0]?.content?.text || "";
203
+ }
204
+ async function assignRuleSets(projectId, ruleSetSlugs) {
205
+ const result = await mcpCall("tools/call", {
206
+ name: "assign_project_rule_sets_tool",
207
+ arguments: {
208
+ project_id: projectId,
209
+ rule_set_slugs: ruleSetSlugs,
210
+ },
211
+ });
212
+ const text = result.content?.[0]?.text;
213
+ if (text) {
214
+ return JSON.parse(text);
215
+ }
216
+ throw new ApiError(500, "Failed to assign rule sets");
217
+ }
218
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}