cxgrd 0.1.21 → 0.1.22
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/commands/check.d.ts +1 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +90 -17
- package/dist/commands/check.js.map +1 -1
- package/dist/index.js +52 -118
- package/dist/index.js.map +1 -1
- package/dist/team/cloud-client.d.ts +8 -0
- package/dist/team/cloud-client.d.ts.map +1 -1
- package/dist/team/cloud-client.js +19 -2
- package/dist/team/cloud-client.js.map +1 -1
- package/dist/telemetry.d.ts +6 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +105 -0
- package/dist/telemetry.js.map +1 -0
- package/package.json +1 -1
package/dist/commands/check.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export interface CheckCommandOptions {
|
|
|
4
4
|
skipStructural?: boolean;
|
|
5
5
|
skipCompiler?: boolean;
|
|
6
6
|
strict?: boolean;
|
|
7
|
+
ci?: boolean;
|
|
7
8
|
}
|
|
8
9
|
export declare function checkCommand(projectPath?: string, options?: CheckCommandOptions): Promise<void>;
|
|
9
10
|
//# sourceMappingURL=check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAYjD,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IAGjB,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,wBAAsB,YAAY,CAChC,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAoKf"}
|
package/dist/commands/check.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
@@ -12,19 +45,36 @@ const scope_1 = require("../check/scope");
|
|
|
12
45
|
const auth_session_1 = require("../auth/auth-session");
|
|
13
46
|
const audit_1 = require("../team/audit");
|
|
14
47
|
const audit_usage_1 = require("../auth/audit-usage");
|
|
48
|
+
const cloud_client_1 = require("../team/cloud-client");
|
|
49
|
+
const telemetry_1 = require("../telemetry");
|
|
15
50
|
async function checkCommand(projectPath, options = {}) {
|
|
16
51
|
const rootPath = (0, path_1.resolve)(projectPath || process.cwd());
|
|
17
52
|
const scope = options.scope ?? 'all';
|
|
53
|
+
const isCi = options.ci ?? false;
|
|
18
54
|
console.log(chalk_1.default.blue('✓ Running cxgrd check...'));
|
|
19
|
-
if (scope !== 'all')
|
|
55
|
+
if (scope !== 'all')
|
|
20
56
|
console.log(chalk_1.default.gray(` Scope: ${scope} files only`));
|
|
21
|
-
|
|
22
|
-
if (options.strict) {
|
|
57
|
+
if (options.strict)
|
|
23
58
|
console.log(chalk_1.default.gray(' Mode: strict (skipped compilers fail the check)'));
|
|
24
|
-
|
|
59
|
+
if (isCi)
|
|
60
|
+
console.log(chalk_1.default.gray(' Mode: CI (results posted to server for PR status)'));
|
|
25
61
|
try {
|
|
26
|
-
// Check free tier audit limit before running
|
|
27
62
|
const session = await (0, auth_session_1.resolveActiveSession)();
|
|
63
|
+
// --ci requires team plan so we can post the result back
|
|
64
|
+
if (isCi) {
|
|
65
|
+
if (!session) {
|
|
66
|
+
console.error(chalk_1.default.red('\n✗ --ci requires authentication. Run: cxgrd auth login'));
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
if (session.plan !== 'team') {
|
|
70
|
+
console.error(chalk_1.default.red('\n✗ --ci requires a Team plan. Upgrade at https://cxgrd.com/pricing'));
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
if (!session.orgId) {
|
|
74
|
+
console.error(chalk_1.default.red('\n✗ --ci: no team found on your account. Ask your team owner to invite you.'));
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
28
78
|
if (!session || session.plan === 'free') {
|
|
29
79
|
try {
|
|
30
80
|
await (0, audit_usage_1.checkFreeAuditLimit)();
|
|
@@ -73,11 +123,8 @@ async function checkCommand(projectPath, options = {}) {
|
|
|
73
123
|
else {
|
|
74
124
|
console.log(chalk_1.default.red('✗ Issues found:'));
|
|
75
125
|
for (const issue of result.issues) {
|
|
76
|
-
const color = issue.severity === 'error'
|
|
77
|
-
? chalk_1.default.
|
|
78
|
-
: issue.severity === 'warning'
|
|
79
|
-
? chalk_1.default.yellow
|
|
80
|
-
: chalk_1.default.blue;
|
|
126
|
+
const color = issue.severity === 'error' ? chalk_1.default.red :
|
|
127
|
+
issue.severity === 'warning' ? chalk_1.default.yellow : chalk_1.default.blue;
|
|
81
128
|
const tag = issue.source === 'compiler' ? 'compiler' : 'structural';
|
|
82
129
|
console.log(color(` [${issue.severity.toUpperCase()}][${tag}] ${issue.message}`));
|
|
83
130
|
if (issue.file) {
|
|
@@ -88,7 +135,6 @@ async function checkCommand(projectPath, options = {}) {
|
|
|
88
135
|
}
|
|
89
136
|
console.log(chalk_1.default.gray(` ${result.summary}`));
|
|
90
137
|
}
|
|
91
|
-
// Increment audit count after successful run (for free tier tracking)
|
|
92
138
|
if (!session || session.plan === 'free') {
|
|
93
139
|
await (0, audit_usage_1.incrementAuditCount)();
|
|
94
140
|
await (0, audit_usage_1.printAuditUsageStatus)();
|
|
@@ -100,7 +146,7 @@ async function checkCommand(projectPath, options = {}) {
|
|
|
100
146
|
strict: options.strict ?? false,
|
|
101
147
|
passed: result.passed,
|
|
102
148
|
issueCount: result.issues.length,
|
|
103
|
-
errorCount: result.issues.filter(
|
|
149
|
+
errorCount: result.issues.filter(i => i.severity === 'error').length,
|
|
104
150
|
compiler: result.compilerSummary,
|
|
105
151
|
};
|
|
106
152
|
history.push(historyEntry);
|
|
@@ -117,13 +163,31 @@ async function checkCommand(projectPath, options = {}) {
|
|
|
117
163
|
eventType: 'check',
|
|
118
164
|
passed: result.passed,
|
|
119
165
|
summary: result.summary,
|
|
120
|
-
metadata: {
|
|
121
|
-
issueCount: result.issues.length,
|
|
122
|
-
scope,
|
|
123
|
-
strict: options.strict ?? false,
|
|
124
|
-
},
|
|
166
|
+
metadata: { issueCount: result.issues.length, scope, strict: options.strict ?? false, ci: isCi },
|
|
125
167
|
});
|
|
168
|
+
// ── CI mode: post result to server so GitHub commit status is updated ─────
|
|
169
|
+
if (isCi && session?.orgId) {
|
|
170
|
+
const gitRef = await resolveGitSha(rootPath);
|
|
171
|
+
const repoId = rootPath.split(/[/\\]/).pop() ?? 'unknown';
|
|
172
|
+
// fire-and-forget — never block CI on network issues
|
|
173
|
+
(0, cloud_client_1.postCiCheckResult)(session, {
|
|
174
|
+
repoId,
|
|
175
|
+
gitRef,
|
|
176
|
+
passed: result.passed,
|
|
177
|
+
issueCount: result.issues.length,
|
|
178
|
+
errorCount: result.issues.filter(i => i.severity === 'error').length,
|
|
179
|
+
summary: result.summary,
|
|
180
|
+
}).catch(err => {
|
|
181
|
+
// Non-fatal in CI — print warning but don't fail the build
|
|
182
|
+
console.warn(chalk_1.default.yellow(` ⚠ Could not post CI result to server: ${err.message}`));
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
(0, telemetry_1.trackEvent)('cli_check', { scope, strict: !!options.strict, ci: isCi, passed: result.passed });
|
|
186
|
+
// In CI mode, exit 1 on any failure — no exceptions
|
|
126
187
|
if (!result.passed) {
|
|
188
|
+
if (isCi) {
|
|
189
|
+
console.error(chalk_1.default.red('\n✗ CI check failed — blocking merge.'));
|
|
190
|
+
}
|
|
127
191
|
process.exit(1);
|
|
128
192
|
}
|
|
129
193
|
}
|
|
@@ -133,6 +197,15 @@ async function checkCommand(projectPath, options = {}) {
|
|
|
133
197
|
process.exit(1);
|
|
134
198
|
}
|
|
135
199
|
}
|
|
200
|
+
async function resolveGitSha(rootPath) {
|
|
201
|
+
try {
|
|
202
|
+
const { execSync } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
203
|
+
return execSync('git rev-parse HEAD', { cwd: rootPath, stdio: 'pipe' }).toString().trim();
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
return `local-${Date.now()}`;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
136
209
|
function printCompilerSummary(summaries) {
|
|
137
210
|
if (summaries.length === 0)
|
|
138
211
|
return;
|
|
@@ -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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"}
|
package/dist/index.js
CHANGED
|
@@ -16,137 +16,82 @@ const watch_1 = require("./commands/watch");
|
|
|
16
16
|
const doctor_1 = require("./commands/doctor");
|
|
17
17
|
const auth_1 = require("./commands/auth");
|
|
18
18
|
const env_1 = require("./config/env");
|
|
19
|
+
const telemetry_1 = require("./telemetry");
|
|
19
20
|
async function main() {
|
|
20
21
|
await (0, env_1.loadCxgrdEnv)();
|
|
22
|
+
(0, telemetry_1.printFirstRunNotice)();
|
|
21
23
|
try {
|
|
22
24
|
await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
|
|
23
25
|
.command('scan [path]', 'Scan project and build dependency graph', (y) => y
|
|
24
|
-
.positional('path', {
|
|
25
|
-
describe: '
|
|
26
|
-
type: '
|
|
27
|
-
|
|
28
|
-
.option('sync', {
|
|
29
|
-
describe: 'Push graph to cloud after scan',
|
|
30
|
-
type: 'boolean',
|
|
31
|
-
default: false,
|
|
32
|
-
})
|
|
33
|
-
.option('team', {
|
|
34
|
-
describe: 'Require team session and push to shared team graph (Team plan)',
|
|
35
|
-
type: 'boolean',
|
|
36
|
-
default: false,
|
|
37
|
-
}), async (argv) => {
|
|
26
|
+
.positional('path', { describe: 'Project path (default: current directory)', type: 'string' })
|
|
27
|
+
.option('sync', { describe: 'Push graph to cloud after scan', type: 'boolean', default: false })
|
|
28
|
+
.option('team', { describe: 'Require team session and push to shared team graph (Team plan)', type: 'boolean', default: false }), async (argv) => {
|
|
29
|
+
(0, telemetry_1.trackEvent)('cli_scan', { team: !!argv.team, sync: !!argv.sync });
|
|
38
30
|
await (0, scan_1.scanCommand)(argv.path, { sync: argv.sync, team: argv.team });
|
|
39
31
|
})
|
|
40
32
|
.command('input <description>', 'Analyze blast radius of a change', (y) => y
|
|
41
|
-
.positional('description', {
|
|
42
|
-
describe: '
|
|
43
|
-
|
|
44
|
-
})
|
|
45
|
-
.option('path', {
|
|
46
|
-
describe: 'Project path (default: current directory)',
|
|
47
|
-
type: 'string',
|
|
48
|
-
alias: 'p',
|
|
49
|
-
}), async (argv) => {
|
|
33
|
+
.positional('description', { describe: 'Description of the change', type: 'string' })
|
|
34
|
+
.option('path', { describe: 'Project path (default: current directory)', type: 'string', alias: 'p' }), async (argv) => {
|
|
35
|
+
(0, telemetry_1.trackEvent)('cli_input');
|
|
50
36
|
await (0, input_1.inputCommand)(argv.description, argv.path);
|
|
51
37
|
})
|
|
52
38
|
.command('prompt <description>', 'Generate LLM-enriched AI prompt (Pro / Team)', (y) => y
|
|
53
|
-
.positional('description', {
|
|
54
|
-
describe: '
|
|
55
|
-
|
|
56
|
-
})
|
|
57
|
-
.option('path', {
|
|
58
|
-
describe: 'Project path (default: current directory)',
|
|
59
|
-
type: 'string',
|
|
60
|
-
alias: 'p',
|
|
61
|
-
}), async (argv) => {
|
|
39
|
+
.positional('description', { describe: 'Description of the change', type: 'string' })
|
|
40
|
+
.option('path', { describe: 'Project path (default: current directory)', type: 'string', alias: 'p' }), async (argv) => {
|
|
41
|
+
(0, telemetry_1.trackEvent)('cli_prompt');
|
|
62
42
|
await (0, prompt_1.promptCommand)(argv.description, argv.path);
|
|
63
43
|
})
|
|
64
44
|
.command('check [path]', 'Validate architecture and run compiler-backed verification', (y) => y
|
|
65
|
-
.positional('path', {
|
|
66
|
-
describe: '
|
|
67
|
-
type: '
|
|
68
|
-
|
|
69
|
-
.option('
|
|
70
|
-
describe: '
|
|
71
|
-
type: 'boolean',
|
|
72
|
-
default: false,
|
|
73
|
-
})
|
|
74
|
-
.option('changed', {
|
|
75
|
-
describe: 'Only check staged and unstaged changed files',
|
|
76
|
-
type: 'boolean',
|
|
77
|
-
default: false,
|
|
78
|
-
})
|
|
79
|
-
.option('skip-compiler', {
|
|
80
|
-
describe: 'Skip compiler-backed verification (structural only)',
|
|
81
|
-
type: 'boolean',
|
|
82
|
-
default: false,
|
|
83
|
-
})
|
|
84
|
-
.option('skip-structural', {
|
|
85
|
-
describe: 'Skip structural graph checks (compiler only)',
|
|
86
|
-
type: 'boolean',
|
|
87
|
-
default: false,
|
|
88
|
-
})
|
|
89
|
-
.option('strict', {
|
|
90
|
-
describe: 'Fail if a detected language compiler was skipped (e.g. Pyright missing on a Python project)',
|
|
91
|
-
type: 'boolean',
|
|
92
|
-
default: false,
|
|
93
|
-
}), async (argv) => {
|
|
45
|
+
.positional('path', { describe: 'Project path (default: current directory)', type: 'string' })
|
|
46
|
+
.option('staged', { describe: 'Only check git staged files', type: 'boolean', default: false })
|
|
47
|
+
.option('changed', { describe: 'Only check staged and unstaged changed files', type: 'boolean', default: false })
|
|
48
|
+
.option('skip-compiler', { describe: 'Skip compiler-backed verification', type: 'boolean', default: false })
|
|
49
|
+
.option('skip-structural', { describe: 'Skip structural graph checks', type: 'boolean', default: false })
|
|
50
|
+
.option('strict', { describe: 'Fail if a detected language compiler was skipped', type: 'boolean', default: false })
|
|
51
|
+
.option('ci', { describe: 'CI mode: post result to server for GitHub PR status (Team plan)', type: 'boolean', default: false }), async (argv) => {
|
|
94
52
|
const scope = argv.staged ? 'staged' : argv.changed ? 'changed' : 'all';
|
|
53
|
+
(0, telemetry_1.trackEvent)('cli_check', { scope, strict: !!argv.strict, ci: !!argv.ci });
|
|
95
54
|
await (0, check_1.checkCommand)(argv.path, {
|
|
96
55
|
scope,
|
|
97
56
|
skipCompiler: argv.skipCompiler,
|
|
98
57
|
skipStructural: argv.skipStructural,
|
|
99
58
|
strict: argv.strict,
|
|
59
|
+
ci: argv.ci,
|
|
100
60
|
});
|
|
101
61
|
})
|
|
102
62
|
.command('auth', 'Sign in for Pro features (prompt, repo memory)', (y) => y
|
|
103
|
-
.command('login', 'Open browser to sign in with GitHub', {}, async () => {
|
|
104
|
-
await (0, auth_1.
|
|
105
|
-
|
|
106
|
-
.command('logout', 'Remove stored credentials', {}, async () => {
|
|
107
|
-
await (0, auth_1.authLogoutCommand)();
|
|
108
|
-
})
|
|
109
|
-
.command('status', 'Show current plan and auth state', {}, async () => {
|
|
110
|
-
await (0, auth_1.authStatusCommand)();
|
|
111
|
-
})
|
|
63
|
+
.command('login', 'Open browser to sign in with GitHub', {}, async () => { (0, telemetry_1.trackEvent)('cli_auth_login'); await (0, auth_1.authLoginCommand)(); })
|
|
64
|
+
.command('logout', 'Remove stored credentials', {}, async () => { (0, telemetry_1.trackEvent)('cli_auth_logout'); await (0, auth_1.authLogoutCommand)(); })
|
|
65
|
+
.command('status', 'Show current plan and auth state', {}, async () => { await (0, auth_1.authStatusCommand)(); })
|
|
112
66
|
.demandCommand(1, 'Specify auth login, logout, or status')
|
|
113
67
|
.help())
|
|
114
|
-
.command('
|
|
115
|
-
describe: '
|
|
116
|
-
type: '
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
68
|
+
.command('config', 'Manage cxgrd settings', (y) => y
|
|
69
|
+
.option('no-telemetry', { describe: 'Opt out of anonymous usage stats', type: 'boolean' })
|
|
70
|
+
.option('telemetry', { describe: 'Re-enable anonymous usage stats', type: 'boolean' }), (argv) => {
|
|
71
|
+
if (argv.noTelemetry) {
|
|
72
|
+
(0, telemetry_1.optOut)();
|
|
73
|
+
console.log(chalk_1.default.green('✓ Telemetry disabled. No usage data will be sent.'));
|
|
74
|
+
}
|
|
75
|
+
else if (argv.telemetry) {
|
|
76
|
+
(0, telemetry_1.optIn)();
|
|
77
|
+
console.log(chalk_1.default.green('✓ Telemetry enabled. Thanks for helping improve cxgrd!'));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
const status = (0, telemetry_1.isOptedOut)() ? chalk_1.default.yellow('disabled') : chalk_1.default.green('enabled');
|
|
81
|
+
console.log(`Telemetry: ${status}`);
|
|
82
|
+
console.log(chalk_1.default.gray(' cxgrd config --no-telemetry disable'));
|
|
83
|
+
console.log(chalk_1.default.gray(' cxgrd config --telemetry enable'));
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
.command('doctor [path]', 'Check runtime, compiler tools, and project readiness', (y) => y.positional('path', { describe: 'Project path (optional)', type: 'string' }), async (argv) => { (0, telemetry_1.trackEvent)('cli_doctor'); await (0, doctor_1.doctorCommand)(argv.path); })
|
|
120
87
|
.command('init-hooks [path]', 'Set up pre-commit hooks for architecture checks', (y) => y
|
|
121
|
-
.positional('path', {
|
|
122
|
-
|
|
123
|
-
type: '
|
|
124
|
-
|
|
125
|
-
.option('
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
default: true,
|
|
129
|
-
})
|
|
130
|
-
.option('block-high', {
|
|
131
|
-
describe: 'Block commits on high risk',
|
|
132
|
-
type: 'boolean',
|
|
133
|
-
default: false,
|
|
134
|
-
})
|
|
135
|
-
.option('warn-medium', {
|
|
136
|
-
describe: 'Warn on medium risk',
|
|
137
|
-
type: 'boolean',
|
|
138
|
-
default: true,
|
|
139
|
-
})
|
|
140
|
-
.option('threshold', {
|
|
141
|
-
describe: 'Risk threshold (0-100)',
|
|
142
|
-
type: 'number',
|
|
143
|
-
default: 70,
|
|
144
|
-
})
|
|
145
|
-
.option('uninstall', {
|
|
146
|
-
describe: 'Uninstall hooks',
|
|
147
|
-
type: 'boolean',
|
|
148
|
-
default: false,
|
|
149
|
-
}), async (argv) => {
|
|
88
|
+
.positional('path', { describe: 'Project path (default: current directory)', type: 'string' })
|
|
89
|
+
.option('block-critical', { type: 'boolean', default: true })
|
|
90
|
+
.option('block-high', { type: 'boolean', default: false })
|
|
91
|
+
.option('warn-medium', { type: 'boolean', default: true })
|
|
92
|
+
.option('threshold', { type: 'number', default: 70 })
|
|
93
|
+
.option('uninstall', { type: 'boolean', default: false }), async (argv) => {
|
|
94
|
+
(0, telemetry_1.trackEvent)('cli_init_hooks', { uninstall: !!argv.uninstall });
|
|
150
95
|
await (0, init_hooks_1.initHooksCommand)(argv.path, {
|
|
151
96
|
blockCritical: argv.blockCritical,
|
|
152
97
|
blockHigh: argv.blockHigh,
|
|
@@ -156,19 +101,8 @@ async function main() {
|
|
|
156
101
|
});
|
|
157
102
|
})
|
|
158
103
|
.command('watch [path]', 'Monitor project for real-time architecture analysis', (y) => y
|
|
159
|
-
.positional('path', {
|
|
160
|
-
|
|
161
|
-
type: 'string',
|
|
162
|
-
})
|
|
163
|
-
.option('debounce', {
|
|
164
|
-
describe: 'Debounce time in ms',
|
|
165
|
-
type: 'number',
|
|
166
|
-
default: 500,
|
|
167
|
-
}), async (argv) => {
|
|
168
|
-
await (0, watch_1.watchCommand)(argv.path, {
|
|
169
|
-
debounce: argv.debounce,
|
|
170
|
-
});
|
|
171
|
-
})
|
|
104
|
+
.positional('path', { describe: 'Project path (default: current directory)', type: 'string' })
|
|
105
|
+
.option('debounce', { type: 'number', default: 500 }), async (argv) => { (0, telemetry_1.trackEvent)('cli_watch'); await (0, watch_1.watchCommand)(argv.path, { debounce: argv.debounce }); })
|
|
172
106
|
.version('0.1.0')
|
|
173
107
|
.help()
|
|
174
108
|
.alias('h', 'help')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,5 +14,13 @@ export declare function postHealthSnapshot(session: ActiveSession, payload: {
|
|
|
14
14
|
hubCount: number;
|
|
15
15
|
hotspots: string[];
|
|
16
16
|
}): Promise<void>;
|
|
17
|
+
export declare function postCiCheckResult(session: ActiveSession, payload: {
|
|
18
|
+
repoId: string;
|
|
19
|
+
gitRef: string;
|
|
20
|
+
passed: boolean;
|
|
21
|
+
issueCount: number;
|
|
22
|
+
errorCount: number;
|
|
23
|
+
summary: string;
|
|
24
|
+
}): Promise<void>;
|
|
17
25
|
export declare function fetchOrgPolicy(session: ActiveSession): Promise<OrgPolicyDocument>;
|
|
18
26
|
//# sourceMappingURL=cloud-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-client.d.ts","sourceRoot":"","sources":["../../src/team/cloud-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAiCjF,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"cloud-client.d.ts","sourceRoot":"","sources":["../../src/team/cloud-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAiCjF,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1F;AAGD,wBAAsB,SAAS,CAC7B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAgB7B;AAGD,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAWf;AAGD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,GACA,OAAO,CAAC,IAAI,CAAC,CAYf;AAID,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAWvF"}
|
|
@@ -4,6 +4,7 @@ exports.pushGraph = pushGraph;
|
|
|
4
4
|
exports.pullGraph = pullGraph;
|
|
5
5
|
exports.postAuditEvent = postAuditEvent;
|
|
6
6
|
exports.postHealthSnapshot = postHealthSnapshot;
|
|
7
|
+
exports.postCiCheckResult = postCiCheckResult;
|
|
7
8
|
exports.fetchOrgPolicy = fetchOrgPolicy;
|
|
8
9
|
const env_1 = require("../config/env");
|
|
9
10
|
const dev_store_1 = require("./dev-store");
|
|
@@ -88,17 +89,33 @@ async function postHealthSnapshot(session, payload) {
|
|
|
88
89
|
if (!teamId)
|
|
89
90
|
return;
|
|
90
91
|
if (useDevStore(session))
|
|
91
|
-
return;
|
|
92
|
+
return;
|
|
92
93
|
const res = await apiFetch(`/api/teams/${teamId}/health`, session.token, {
|
|
93
94
|
method: 'POST',
|
|
94
95
|
body: JSON.stringify(payload),
|
|
95
96
|
}).catch(() => null);
|
|
96
|
-
// Non-fatal — health snapshots are best-effort telemetry
|
|
97
97
|
if (res && !res.ok && res.status !== 404 && res.status !== 501) {
|
|
98
98
|
const body = await res.text().catch(() => '');
|
|
99
99
|
console.debug(`Health snapshot skipped (${res.status}): ${body}`);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
+
// POST /api/teams/:teamId/ci-check
|
|
103
|
+
// Called by `cxgrd check --ci` — server updates the GitHub commit status
|
|
104
|
+
async function postCiCheckResult(session, payload) {
|
|
105
|
+
const teamId = session.orgId;
|
|
106
|
+
if (!teamId)
|
|
107
|
+
return;
|
|
108
|
+
if (useDevStore(session))
|
|
109
|
+
return;
|
|
110
|
+
const res = await apiFetch(`/api/teams/${teamId}/ci-check`, session.token, {
|
|
111
|
+
method: 'POST',
|
|
112
|
+
body: JSON.stringify(payload),
|
|
113
|
+
}).catch(() => null);
|
|
114
|
+
if (res && !res.ok && res.status !== 404 && res.status !== 501) {
|
|
115
|
+
const body = await res.text().catch(() => '');
|
|
116
|
+
throw new Error(`CI check post failed (${res.status}): ${body}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
102
119
|
async function fetchOrgPolicy(session) {
|
|
103
120
|
const teamId = session.orgId;
|
|
104
121
|
if (!teamId)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-client.js","sourceRoot":"","sources":["../../src/team/cloud-client.ts"],"names":[],"mappings":";;AAmCA,
|
|
1
|
+
{"version":3,"file":"cloud-client.js","sourceRoot":"","sources":["../../src/team/cloud-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function isOptedOut(): boolean;
|
|
2
|
+
export declare function optOut(): void;
|
|
3
|
+
export declare function optIn(): void;
|
|
4
|
+
export declare function printFirstRunNotice(): void;
|
|
5
|
+
export declare function trackEvent(event: string, props?: Record<string, unknown>): void;
|
|
6
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AA8CA,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAgB,MAAM,IAAI,IAAI,CAG7B;AAED,wBAAgB,KAAK,IAAI,IAAI,CAG5B;AAGD,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI,CAoCnF"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isOptedOut = isOptedOut;
|
|
7
|
+
exports.optOut = optOut;
|
|
8
|
+
exports.optIn = optIn;
|
|
9
|
+
exports.printFirstRunNotice = printFirstRunNotice;
|
|
10
|
+
exports.trackEvent = trackEvent;
|
|
11
|
+
const https_1 = __importDefault(require("https"));
|
|
12
|
+
const fs_1 = __importDefault(require("fs"));
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
const os_1 = __importDefault(require("os"));
|
|
15
|
+
const crypto_1 = require("crypto");
|
|
16
|
+
// PostHog public write-only key — safe to ship in CLI source
|
|
17
|
+
const POSTHOG_KEY = 'phc_PvPYwxDBSkjfgTX3506gCplb8TL1FSnKUkdFZDlNEFu';
|
|
18
|
+
const POSTHOG_HOST = 'https://us.i.posthog.com';
|
|
19
|
+
const CLI_VERSION = '0.1.0';
|
|
20
|
+
const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.cg');
|
|
21
|
+
const TELEMETRY_PATH = path_1.default.join(CONFIG_DIR, 'telemetry.json');
|
|
22
|
+
function readConfig() {
|
|
23
|
+
try {
|
|
24
|
+
if (!fs_1.default.existsSync(TELEMETRY_PATH))
|
|
25
|
+
return null;
|
|
26
|
+
return JSON.parse(fs_1.default.readFileSync(TELEMETRY_PATH, 'utf8'));
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function writeConfig(config) {
|
|
33
|
+
try {
|
|
34
|
+
fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
35
|
+
fs_1.default.writeFileSync(TELEMETRY_PATH, JSON.stringify(config, null, 2));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// non-fatal
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function getOrCreateDeviceId() {
|
|
42
|
+
const existing = readConfig();
|
|
43
|
+
if (existing?.deviceId)
|
|
44
|
+
return existing.deviceId;
|
|
45
|
+
const deviceId = (0, crypto_1.randomUUID)();
|
|
46
|
+
writeConfig({ deviceId, optOut: false, firstRunAt: Date.now() });
|
|
47
|
+
return deviceId;
|
|
48
|
+
}
|
|
49
|
+
function isOptedOut() {
|
|
50
|
+
return readConfig()?.optOut === true;
|
|
51
|
+
}
|
|
52
|
+
function optOut() {
|
|
53
|
+
const config = readConfig();
|
|
54
|
+
writeConfig({ deviceId: config?.deviceId ?? (0, crypto_1.randomUUID)(), optOut: true });
|
|
55
|
+
}
|
|
56
|
+
function optIn() {
|
|
57
|
+
const config = readConfig();
|
|
58
|
+
writeConfig({ deviceId: config?.deviceId ?? (0, crypto_1.randomUUID)(), optOut: false });
|
|
59
|
+
}
|
|
60
|
+
// Print one-line notice on very first run (no config file yet)
|
|
61
|
+
function printFirstRunNotice() {
|
|
62
|
+
if (fs_1.default.existsSync(TELEMETRY_PATH))
|
|
63
|
+
return;
|
|
64
|
+
console.log('\x1b[90mℹ Anonymous usage stats help improve cxgrd. Disable: cxgrd config --no-telemetry\x1b[0m');
|
|
65
|
+
}
|
|
66
|
+
// Fire-and-forget — never blocks the CLI, never throws
|
|
67
|
+
function trackEvent(event, props = {}) {
|
|
68
|
+
if (isOptedOut())
|
|
69
|
+
return;
|
|
70
|
+
if (POSTHOG_KEY.includes('REPLACE'))
|
|
71
|
+
return; // dev environment guard
|
|
72
|
+
const deviceId = getOrCreateDeviceId();
|
|
73
|
+
const body = JSON.stringify({
|
|
74
|
+
api_key: POSTHOG_KEY,
|
|
75
|
+
event,
|
|
76
|
+
distinct_id: deviceId,
|
|
77
|
+
properties: {
|
|
78
|
+
...props,
|
|
79
|
+
cli_version: CLI_VERSION,
|
|
80
|
+
platform: process.platform,
|
|
81
|
+
node_version: process.version,
|
|
82
|
+
$lib: 'cxgrd-cli',
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
try {
|
|
86
|
+
const req = https_1.default.request({
|
|
87
|
+
hostname: POSTHOG_HOST,
|
|
88
|
+
path: '/capture/',
|
|
89
|
+
method: 'POST',
|
|
90
|
+
headers: {
|
|
91
|
+
'Content-Type': 'application/json',
|
|
92
|
+
'Content-Length': Buffer.byteLength(body),
|
|
93
|
+
},
|
|
94
|
+
timeout: 3000,
|
|
95
|
+
});
|
|
96
|
+
req.on('error', () => { });
|
|
97
|
+
req.on('timeout', () => req.destroy());
|
|
98
|
+
req.write(body);
|
|
99
|
+
req.end();
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// never propagate
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|