cxgrd 0.1.1 → 0.1.2
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/auth/audit-usage.js +34 -21
- package/dist/auth/audit-usage.js.map +1 -1
- package/dist/auth/auth-session.js +26 -20
- package/dist/auth/auth-session.js.map +1 -1
- package/dist/auth/auth-store.js +22 -16
- package/dist/auth/auth-store.js.map +1 -1
- package/dist/auth/entitlements.js +35 -22
- package/dist/auth/entitlements.js.map +1 -1
- package/dist/auth/open-browser.js +6 -3
- package/dist/auth/open-browser.js.map +1 -1
- package/dist/auth/plans.js +13 -6
- package/dist/auth/plans.js.map +1 -1
- package/dist/auth/plans.test.js +23 -18
- package/dist/auth/plans.test.js.map +1 -1
- package/dist/cg-directory.js +40 -35
- package/dist/cg-directory.js.map +1 -1
- package/dist/check/check-runner.js +16 -13
- package/dist/check/check-runner.js.map +1 -1
- package/dist/check/compiler-service.js +22 -19
- package/dist/check/compiler-service.js.map +1 -1
- package/dist/check/parsers/cargo.js +4 -1
- package/dist/check/parsers/cargo.js.map +1 -1
- package/dist/check/parsers/parsers.test.js +30 -25
- package/dist/check/parsers/parsers.test.js.map +1 -1
- package/dist/check/parsers/pyright.js +4 -1
- package/dist/check/parsers/pyright.js.map +1 -1
- package/dist/check/parsers/tsc-cli.js +4 -1
- package/dist/check/parsers/tsc-cli.js.map +1 -1
- package/dist/check/project-tooling.js +23 -16
- package/dist/check/project-tooling.js.map +1 -1
- package/dist/check/run-command.js +9 -5
- package/dist/check/run-command.js.map +1 -1
- package/dist/check/scope.js +14 -8
- package/dist/check/scope.js.map +1 -1
- package/dist/check/scope.test.js +15 -10
- package/dist/check/scope.test.js.map +1 -1
- package/dist/check/strict-mode.js +6 -2
- package/dist/check/strict-mode.js.map +1 -1
- package/dist/check/strict-mode.test.js +19 -14
- package/dist/check/strict-mode.test.js.map +1 -1
- package/dist/check/structural-checks.js +4 -1
- package/dist/check/structural-checks.js.map +1 -1
- package/dist/check/types.js +2 -1
- package/dist/check/verifiers/python.js +11 -8
- package/dist/check/verifiers/python.js.map +1 -1
- package/dist/check/verifiers/rust.js +11 -8
- package/dist/check/verifiers/rust.js.map +1 -1
- package/dist/check/verifiers/typescript.js +24 -18
- package/dist/check/verifiers/typescript.js.map +1 -1
- package/dist/commands/auth.js +42 -34
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/check.js +49 -43
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/doctor.js +33 -27
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init-hooks.js +34 -31
- package/dist/commands/init-hooks.js.map +1 -1
- package/dist/commands/input.js +46 -43
- package/dist/commands/input.js.map +1 -1
- package/dist/commands/prompt.js +40 -34
- package/dist/commands/prompt.js.map +1 -1
- package/dist/commands/scan.js +49 -43
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/watch.js +20 -17
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/env.js +21 -16
- package/dist/config/env.js.map +1 -1
- package/dist/graph.js +38 -36
- package/dist/graph.js.map +1 -1
- package/dist/index.js +32 -27
- package/dist/index.js.map +1 -1
- package/dist/memory/pattern-analyzer.js +6 -2
- package/dist/memory/pattern-analyzer.js.map +1 -1
- package/dist/memory/repo-memory.js +10 -4
- package/dist/memory/repo-memory.js.map +1 -1
- package/dist/memory/types.js +2 -1
- package/dist/prompt/llm-client.js +10 -7
- package/dist/prompt/llm-client.js.map +1 -1
- package/dist/prompt/subgraph.js +10 -6
- package/dist/prompt/subgraph.js.map +1 -1
- package/dist/scanner.js +51 -49
- package/dist/scanner.js.map +1 -1
- package/dist/team/audit.js +10 -7
- package/dist/team/audit.js.map +1 -1
- package/dist/team/cloud-client.js +23 -17
- package/dist/team/cloud-client.js.map +1 -1
- package/dist/team/dev-store.js +34 -25
- package/dist/team/dev-store.js.map +1 -1
- package/dist/team/graph-sync.js +28 -20
- package/dist/team/graph-sync.js.map +1 -1
- package/dist/team/policy-cache.js +19 -14
- package/dist/team/policy-cache.js.map +1 -1
- package/dist/team/policy-engine.js +4 -1
- package/dist/team/policy-engine.js.map +1 -1
- package/dist/team/policy-engine.test.js +18 -13
- package/dist/team/policy-engine.test.js.map +1 -1
- package/dist/team/repo-identity.js +9 -6
- package/dist/team/repo-identity.js.map +1 -1
- package/dist/team/types.js +2 -1
- package/dist/toolchain/probe.js +23 -14
- package/dist/toolchain/probe.js.map +1 -1
- package/dist/toolchain/project-languages.js +20 -16
- package/dist/toolchain/project-languages.js.map +1 -1
- package/dist/toolchain/types.js +2 -1
- package/dist/utils/blast-radius-analyzer.js +7 -2
- package/dist/utils/blast-radius-analyzer.js.map +1 -1
- package/dist/utils/change-detector.js +8 -3
- package/dist/utils/change-detector.js.map +1 -1
- package/dist/utils/cli-formatter.js +34 -26
- package/dist/utils/cli-formatter.js.map +1 -1
- package/dist/utils/git-hook-manager.js +42 -34
- package/dist/utils/git-hook-manager.js.map +1 -1
- package/dist/utils/project-watcher.js +17 -12
- package/dist/utils/project-watcher.js.map +1 -1
- package/package.json +1 -2
package/dist/commands/input.js
CHANGED
|
@@ -1,38 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inputCommand = inputCommand;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const cg_directory_1 = require("../cg-directory");
|
|
6
|
+
const blast_radius_analyzer_1 = require("../utils/blast-radius-analyzer");
|
|
7
|
+
const change_detector_1 = require("../utils/change-detector");
|
|
8
|
+
const cli_formatter_1 = require("../utils/cli-formatter");
|
|
9
|
+
const repo_memory_1 = require("../memory/repo-memory");
|
|
10
|
+
const auth_session_1 = require("../auth/auth-session");
|
|
11
|
+
const audit_1 = require("../team/audit");
|
|
12
|
+
const audit_usage_1 = require("../auth/audit-usage");
|
|
13
|
+
async function inputCommand(description, projectPath) {
|
|
14
|
+
const rootPath = (0, path_1.resolve)(projectPath || process.cwd());
|
|
15
|
+
cli_formatter_1.RichOutput.header('Blast Radius Analysis');
|
|
16
|
+
cli_formatter_1.RichOutput.info(`Analyzing change: "${description}"`);
|
|
14
17
|
try {
|
|
15
|
-
const session = await resolveActiveSession();
|
|
18
|
+
const session = await (0, auth_session_1.resolveActiveSession)();
|
|
16
19
|
if (!session || session.plan === 'free') {
|
|
17
20
|
try {
|
|
18
|
-
await checkFreeAuditLimit();
|
|
21
|
+
await (0, audit_usage_1.checkFreeAuditLimit)();
|
|
19
22
|
}
|
|
20
23
|
catch (err) {
|
|
21
|
-
if (err instanceof AuditUsageExceededError) {
|
|
22
|
-
RichOutput.error(err.message);
|
|
24
|
+
if (err instanceof audit_usage_1.AuditUsageExceededError) {
|
|
25
|
+
cli_formatter_1.RichOutput.error(err.message);
|
|
23
26
|
process.exit(1);
|
|
24
27
|
}
|
|
25
28
|
throw err;
|
|
26
29
|
}
|
|
27
30
|
}
|
|
28
|
-
const cgDir = new CgDirectory(rootPath);
|
|
31
|
+
const cgDir = new cg_directory_1.CgDirectory(rootPath);
|
|
29
32
|
const graph = await cgDir.readGraph();
|
|
30
33
|
if (!graph) {
|
|
31
|
-
RichOutput.error('No dependency graph found. Run "cxgrd scan" first.');
|
|
34
|
+
cli_formatter_1.RichOutput.error('No dependency graph found. Run "cxgrd scan" first.');
|
|
32
35
|
process.exit(1);
|
|
33
36
|
}
|
|
34
37
|
// Detect changed files from description and git
|
|
35
|
-
const changeDetector = new ChangeDetector(rootPath);
|
|
38
|
+
const changeDetector = new change_detector_1.ChangeDetector(rootPath);
|
|
36
39
|
const gitChanges = changeDetector.getChangedFiles();
|
|
37
40
|
const descriptionMatch = changeDetector.parseDescription(description, Object.keys(graph.files || {}));
|
|
38
41
|
// Combine both sources of information
|
|
@@ -42,13 +45,13 @@ export async function inputCommand(description, projectPath) {
|
|
|
42
45
|
];
|
|
43
46
|
const uniqueFiles = [...new Set(changedFiles)];
|
|
44
47
|
if (uniqueFiles.length === 0) {
|
|
45
|
-
RichOutput.warning('Could not identify changed files. Using heuristics based on description.');
|
|
48
|
+
cli_formatter_1.RichOutput.warning('Could not identify changed files. Using heuristics based on description.');
|
|
46
49
|
}
|
|
47
50
|
else {
|
|
48
|
-
RichOutput.info(`Detected ${uniqueFiles.length} changed file(s)`);
|
|
51
|
+
cli_formatter_1.RichOutput.info(`Detected ${uniqueFiles.length} changed file(s)`);
|
|
49
52
|
}
|
|
50
53
|
// Run enhanced blast radius analysis
|
|
51
|
-
const analyzer = new BlastRadiusAnalyzer(graph);
|
|
54
|
+
const analyzer = new blast_radius_analyzer_1.BlastRadiusAnalyzer(graph);
|
|
52
55
|
const result = analyzer.analyze(uniqueFiles.length > 0 ? uniqueFiles : []);
|
|
53
56
|
// Display results
|
|
54
57
|
displayBlastRadiusResults(result);
|
|
@@ -63,7 +66,7 @@ export async function inputCommand(description, projectPath) {
|
|
|
63
66
|
confidence: descriptionMatch.confidence,
|
|
64
67
|
});
|
|
65
68
|
await cgDir.writeHistory(history);
|
|
66
|
-
await appendMemorySession(cgDir, {
|
|
69
|
+
await (0, repo_memory_1.appendMemorySession)(cgDir, {
|
|
67
70
|
type: 'input',
|
|
68
71
|
summary: description.slice(0, 120),
|
|
69
72
|
metadata: {
|
|
@@ -71,12 +74,12 @@ export async function inputCommand(description, projectPath) {
|
|
|
71
74
|
affected: result.affectedFiles.length,
|
|
72
75
|
},
|
|
73
76
|
});
|
|
74
|
-
RichOutput.success('Blast radius analysis saved to history');
|
|
77
|
+
cli_formatter_1.RichOutput.success('Blast radius analysis saved to history');
|
|
75
78
|
if (!session || session.plan === 'free') {
|
|
76
|
-
await incrementAuditCount();
|
|
77
|
-
await printAuditUsageStatus();
|
|
79
|
+
await (0, audit_usage_1.incrementAuditCount)();
|
|
80
|
+
await (0, audit_usage_1.printAuditUsageStatus)();
|
|
78
81
|
}
|
|
79
|
-
await recordAuditEventIfTeam(session, rootPath, {
|
|
82
|
+
await (0, audit_1.recordAuditEventIfTeam)(session, rootPath, {
|
|
80
83
|
eventType: 'input',
|
|
81
84
|
riskScore: result.totalRisk,
|
|
82
85
|
riskLevel: result.riskLevel,
|
|
@@ -85,42 +88,42 @@ export async function inputCommand(description, projectPath) {
|
|
|
85
88
|
});
|
|
86
89
|
}
|
|
87
90
|
catch (err) {
|
|
88
|
-
RichOutput.error(err.message);
|
|
91
|
+
cli_formatter_1.RichOutput.error(err.message);
|
|
89
92
|
process.exit(1);
|
|
90
93
|
}
|
|
91
94
|
}
|
|
92
95
|
function displayBlastRadiusResults(result) {
|
|
93
|
-
RichOutput.blank();
|
|
94
|
-
RichOutput.section('Impact Summary');
|
|
96
|
+
cli_formatter_1.RichOutput.blank();
|
|
97
|
+
cli_formatter_1.RichOutput.section('Impact Summary');
|
|
95
98
|
// Overall risk display
|
|
96
|
-
const riskBadge = CLIFormatter.severity(result.riskLevel);
|
|
99
|
+
const riskBadge = cli_formatter_1.CLIFormatter.severity(result.riskLevel);
|
|
97
100
|
console.log(` Overall Risk: ${riskBadge}`);
|
|
98
101
|
console.log(` Risk Score: ${result.totalRisk}/100`);
|
|
99
|
-
console.log(` ${CLIFormatter.progressBar(result.totalRisk, 100)}`);
|
|
100
|
-
RichOutput.blank();
|
|
101
|
-
RichOutput.section('Affected Files');
|
|
102
|
+
console.log(` ${cli_formatter_1.CLIFormatter.progressBar(result.totalRisk, 100)}`);
|
|
103
|
+
cli_formatter_1.RichOutput.blank();
|
|
104
|
+
cli_formatter_1.RichOutput.section('Affected Files');
|
|
102
105
|
console.log(` Direct impact: ${result.directlyAffected} file(s)`);
|
|
103
106
|
console.log(` Transitive impact: ${result.transitivelyAffected} file(s)`);
|
|
104
107
|
console.log(` Total affected: ${result.affectedFiles.length} file(s)`);
|
|
105
108
|
if (result.affectedFiles.length > 0) {
|
|
106
|
-
RichOutput.blank();
|
|
109
|
+
cli_formatter_1.RichOutput.blank();
|
|
107
110
|
console.log(' Top affected files:\n');
|
|
108
111
|
const displayFiles = result.affectedFiles.slice(0, 15);
|
|
109
112
|
for (const file of displayFiles) {
|
|
110
|
-
const severity = CLIFormatter.severity(file.severity);
|
|
113
|
+
const severity = cli_formatter_1.CLIFormatter.severity(file.severity);
|
|
111
114
|
const distanceLabel = file.distance === 1 ? '(direct)' : `(transitive, depth: ${file.distance})`;
|
|
112
115
|
console.log(` ${severity} ${file.path}`);
|
|
113
116
|
console.log(` └─ ${file.reason} ${distanceLabel}`);
|
|
114
117
|
}
|
|
115
118
|
if (result.affectedFiles.length > 15) {
|
|
116
|
-
RichOutput.blank();
|
|
119
|
+
cli_formatter_1.RichOutput.blank();
|
|
117
120
|
console.log(` ... and ${result.affectedFiles.length - 15} more files`);
|
|
118
121
|
}
|
|
119
122
|
}
|
|
120
123
|
// Change types
|
|
121
124
|
if (result.changeTypes.length > 0) {
|
|
122
|
-
RichOutput.blank();
|
|
123
|
-
RichOutput.section('Change Classification');
|
|
125
|
+
cli_formatter_1.RichOutput.blank();
|
|
126
|
+
cli_formatter_1.RichOutput.section('Change Classification');
|
|
124
127
|
for (const change of result.changeTypes) {
|
|
125
128
|
const confidence = Math.round(change.confidence * 100);
|
|
126
129
|
console.log(` • ${change.type}: ${change.description} (${confidence}% confident)`);
|
|
@@ -128,12 +131,12 @@ function displayBlastRadiusResults(result) {
|
|
|
128
131
|
}
|
|
129
132
|
// Recommendations
|
|
130
133
|
if (result.recommendations.length > 0) {
|
|
131
|
-
RichOutput.blank();
|
|
132
|
-
RichOutput.section('Recommendations');
|
|
134
|
+
cli_formatter_1.RichOutput.blank();
|
|
135
|
+
cli_formatter_1.RichOutput.section('Recommendations');
|
|
133
136
|
for (const rec of result.recommendations) {
|
|
134
137
|
console.log(` ${rec}`);
|
|
135
138
|
}
|
|
136
139
|
}
|
|
137
|
-
RichOutput.blank();
|
|
140
|
+
cli_formatter_1.RichOutput.blank();
|
|
138
141
|
}
|
|
139
142
|
//# sourceMappingURL=input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/commands/input.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/commands/input.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/prompt.js
CHANGED
|
@@ -1,43 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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.promptCommand = promptCommand;
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const promises_1 = require("fs/promises");
|
|
9
|
+
const path_2 = require("path");
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const cg_directory_1 = require("../cg-directory");
|
|
12
|
+
const env_1 = require("../config/env");
|
|
13
|
+
const entitlements_1 = require("../auth/entitlements");
|
|
14
|
+
const repo_memory_1 = require("../memory/repo-memory");
|
|
15
|
+
const subgraph_1 = require("../prompt/subgraph");
|
|
16
|
+
const llm_client_1 = require("../prompt/llm-client");
|
|
17
|
+
async function promptCommand(changeDescription, projectPath) {
|
|
18
|
+
await (0, env_1.loadCxgrdEnv)();
|
|
19
|
+
const rootPath = (0, path_1.resolve)(projectPath || process.cwd());
|
|
20
|
+
console.log(chalk_1.default.blue('🔄 Generating AI prompt (Pro)...'));
|
|
21
|
+
console.log(chalk_1.default.gray(` Input: ${changeDescription}`));
|
|
16
22
|
try {
|
|
17
|
-
const session = await requireProFeature('prompt');
|
|
18
|
-
const cgDir = new CgDirectory(rootPath);
|
|
23
|
+
const session = await (0, entitlements_1.requireProFeature)('prompt');
|
|
24
|
+
const cgDir = new cg_directory_1.CgDirectory(rootPath);
|
|
19
25
|
const graph = await cgDir.readGraph();
|
|
20
26
|
const arch = await cgDir.readArch();
|
|
21
27
|
const meta = await cgDir.readMeta();
|
|
22
28
|
const symbols = await cgDir.readSymbols();
|
|
23
29
|
const patterns = await cgDir.readPatterns();
|
|
24
30
|
if (!graph) {
|
|
25
|
-
console.error(
|
|
31
|
+
console.error(chalk_1.default.red('✗ No dependency graph found. Run "cxgrd scan" first.'));
|
|
26
32
|
process.exit(1);
|
|
27
33
|
}
|
|
28
|
-
const memory = await readRepoMemory(cgDir);
|
|
29
|
-
const repoMemoryBlock = formatMemoryForPrompt(memory, patterns);
|
|
30
|
-
const subgraph = buildPromptSubgraph(changeDescription, graph, symbols, arch, rootPath);
|
|
31
|
-
const contextPayload = serializeSubgraphForLlm(subgraph, repoMemoryBlock);
|
|
32
|
-
console.log(
|
|
33
|
-
const { prompt, provider, model } = await generatePromptWithLlm(contextPayload, session);
|
|
34
|
-
console.log(
|
|
35
|
-
console.log(
|
|
36
|
-
console.log(
|
|
37
|
-
const outPath = join(cgDir.getPath(), 'last-prompt.md');
|
|
38
|
-
await writeFile(outPath, prompt, 'utf-8');
|
|
39
|
-
console.log(
|
|
40
|
-
await appendMemorySession(cgDir, {
|
|
34
|
+
const memory = await (0, repo_memory_1.readRepoMemory)(cgDir);
|
|
35
|
+
const repoMemoryBlock = (0, repo_memory_1.formatMemoryForPrompt)(memory, patterns);
|
|
36
|
+
const subgraph = (0, subgraph_1.buildPromptSubgraph)(changeDescription, graph, symbols, arch, rootPath);
|
|
37
|
+
const contextPayload = (0, subgraph_1.serializeSubgraphForLlm)(subgraph, repoMemoryBlock);
|
|
38
|
+
console.log(chalk_1.default.gray(' Calling LLM with architectural subgraph + repo memory...'));
|
|
39
|
+
const { prompt, provider, model } = await (0, llm_client_1.generatePromptWithLlm)(contextPayload, session);
|
|
40
|
+
console.log(chalk_1.default.green('\n✓ Enriched prompt\n'));
|
|
41
|
+
console.log(chalk_1.default.yellow(prompt));
|
|
42
|
+
console.log(chalk_1.default.gray(`\n via ${provider} (${model}) · plan: ${session.plan}`));
|
|
43
|
+
const outPath = (0, path_2.join)(cgDir.getPath(), 'last-prompt.md');
|
|
44
|
+
await (0, promises_1.writeFile)(outPath, prompt, 'utf-8');
|
|
45
|
+
console.log(chalk_1.default.gray(` Saved to ${outPath}`));
|
|
46
|
+
await (0, repo_memory_1.appendMemorySession)(cgDir, {
|
|
41
47
|
type: 'prompt',
|
|
42
48
|
summary: changeDescription.slice(0, 120),
|
|
43
49
|
metadata: {
|
|
@@ -58,12 +64,12 @@ export async function promptCommand(changeDescription, projectPath) {
|
|
|
58
64
|
await cgDir.writeHistory(history);
|
|
59
65
|
}
|
|
60
66
|
catch (err) {
|
|
61
|
-
if (err instanceof ProRequiredError) {
|
|
62
|
-
console.error(
|
|
67
|
+
if (err instanceof entitlements_1.ProRequiredError) {
|
|
68
|
+
console.error(chalk_1.default.red(`\n✗ ${err.message}`));
|
|
63
69
|
process.exit(1);
|
|
64
70
|
}
|
|
65
71
|
const message = err instanceof Error ? err.message : String(err);
|
|
66
|
-
console.error(
|
|
72
|
+
console.error(chalk_1.default.red(`✗ Error: ${message}`));
|
|
67
73
|
process.exit(1);
|
|
68
74
|
}
|
|
69
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/scan.js
CHANGED
|
@@ -1,49 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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.scanCommand = scanCommand;
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const scanner_1 = require("../scanner");
|
|
9
|
+
const graph_1 = require("../graph");
|
|
10
|
+
const cg_directory_1 = require("../cg-directory");
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const pattern_analyzer_1 = require("../memory/pattern-analyzer");
|
|
13
|
+
const repo_memory_1 = require("../memory/repo-memory");
|
|
14
|
+
const auth_session_1 = require("../auth/auth-session");
|
|
15
|
+
const plans_1 = require("../auth/plans");
|
|
16
|
+
const graph_sync_1 = require("../team/graph-sync");
|
|
17
|
+
const audit_usage_1 = require("../auth/audit-usage");
|
|
18
|
+
async function scanCommand(projectPath, options = {}) {
|
|
19
|
+
const rootPath = (0, path_1.resolve)(projectPath || process.cwd());
|
|
20
|
+
console.log(chalk_1.default.blue('🔍 Scanning project...'));
|
|
21
|
+
console.log(chalk_1.default.gray(` Path: ${rootPath}`));
|
|
16
22
|
try {
|
|
17
23
|
// Check free tier audit limit before running
|
|
18
|
-
const session = await resolveActiveSession();
|
|
24
|
+
const session = await (0, auth_session_1.resolveActiveSession)();
|
|
19
25
|
if (!session || session.plan === 'free') {
|
|
20
26
|
try {
|
|
21
|
-
await checkFreeAuditLimit();
|
|
27
|
+
await (0, audit_usage_1.checkFreeAuditLimit)();
|
|
22
28
|
}
|
|
23
29
|
catch (err) {
|
|
24
|
-
if (err instanceof AuditUsageExceededError) {
|
|
25
|
-
console.error(
|
|
30
|
+
if (err instanceof audit_usage_1.AuditUsageExceededError) {
|
|
31
|
+
console.error(chalk_1.default.red(`\n✗ ${err.message}`));
|
|
26
32
|
process.exit(1);
|
|
27
33
|
}
|
|
28
34
|
throw err;
|
|
29
35
|
}
|
|
30
36
|
}
|
|
31
|
-
const cgDir = new CgDirectory(rootPath);
|
|
37
|
+
const cgDir = new cg_directory_1.CgDirectory(rootPath);
|
|
32
38
|
const previousGraph = await cgDir.readGraph();
|
|
33
39
|
const previousPatterns = await cgDir.readPatterns();
|
|
34
|
-
const scanner = new FileScanner();
|
|
40
|
+
const scanner = new scanner_1.FileScanner();
|
|
35
41
|
const files = await scanner.scanDirectory(rootPath);
|
|
36
|
-
console.log(
|
|
37
|
-
const builder = new DependencyGraphBuilder();
|
|
42
|
+
console.log(chalk_1.default.green(`✓ Found ${files.length} source files`));
|
|
43
|
+
const builder = new graph_1.DependencyGraphBuilder();
|
|
38
44
|
const graph = builder.buildGraph(files);
|
|
39
|
-
console.log(
|
|
40
|
-
console.log(
|
|
41
|
-
console.log(
|
|
45
|
+
console.log(chalk_1.default.blue('📊 Building dependency graph...'));
|
|
46
|
+
console.log(chalk_1.default.gray(` Total dependencies: ${graph.stats.totalDependencies}`));
|
|
47
|
+
console.log(chalk_1.default.gray(` Languages: ${Object.entries(graph.stats.languages)
|
|
42
48
|
.map(([lang, count]) => `${lang}(${count})`)
|
|
43
49
|
.join(', ')}`));
|
|
44
|
-
const graphDiff = diffGraphs(previousGraph, graph);
|
|
50
|
+
const graphDiff = (0, pattern_analyzer_1.diffGraphs)(previousGraph, graph);
|
|
45
51
|
const archData = inferArchitecture(graph);
|
|
46
|
-
const patterns = analyzePatterns(graph, previousPatterns, graphDiff);
|
|
52
|
+
const patterns = (0, pattern_analyzer_1.analyzePatterns)(graph, previousPatterns, graphDiff);
|
|
47
53
|
patterns.layerCounts = Object.fromEntries(Object.entries(archData.layers).map(([layer, files]) => [layer, files.length]));
|
|
48
54
|
const symbolsData = {};
|
|
49
55
|
for (const [filePath, node] of Object.entries(graph.files)) {
|
|
@@ -62,46 +68,46 @@ export async function scanCommand(projectPath, options = {}) {
|
|
|
62
68
|
};
|
|
63
69
|
await cgDir.writeMeta(meta);
|
|
64
70
|
if (graphDiff.filesAdded.length || graphDiff.filesRemoved.length || graphDiff.dependencyChanges) {
|
|
65
|
-
console.log(
|
|
71
|
+
console.log(chalk_1.default.gray(' Graph diff:'));
|
|
66
72
|
if (graphDiff.filesAdded.length) {
|
|
67
|
-
console.log(
|
|
73
|
+
console.log(chalk_1.default.gray(` + ${graphDiff.filesAdded.length} new file(s)`));
|
|
68
74
|
}
|
|
69
75
|
if (graphDiff.filesRemoved.length) {
|
|
70
|
-
console.log(
|
|
76
|
+
console.log(chalk_1.default.gray(` - ${graphDiff.filesRemoved.length} removed file(s)`));
|
|
71
77
|
}
|
|
72
78
|
if (graphDiff.dependencyChanges) {
|
|
73
|
-
console.log(
|
|
79
|
+
console.log(chalk_1.default.gray(` ~ ${graphDiff.dependencyChanges} dependency change(s)`));
|
|
74
80
|
}
|
|
75
|
-
console.log(
|
|
81
|
+
console.log(chalk_1.default.gray(` Patterns updated (${patterns.importHubs.length} hubs)`));
|
|
76
82
|
}
|
|
77
|
-
await appendMemorySession(cgDir, {
|
|
83
|
+
await (0, repo_memory_1.appendMemorySession)(cgDir, {
|
|
78
84
|
type: 'scan',
|
|
79
85
|
summary: `Scan: ${files.length} files, ${graph.stats.totalDependencies} deps`,
|
|
80
86
|
metadata: { graphDiff },
|
|
81
87
|
});
|
|
82
|
-
console.log(
|
|
83
|
-
console.log(
|
|
88
|
+
console.log(chalk_1.default.green('✓ Scan complete!'));
|
|
89
|
+
console.log(chalk_1.default.green('✓ Updated .cg/ (graph, symbols, arch, patterns, memory)'));
|
|
84
90
|
// Increment audit count after successful scan (for free tier tracking)
|
|
85
91
|
if (!session || session.plan === 'free') {
|
|
86
|
-
await incrementAuditCount();
|
|
87
|
-
await printAuditUsageStatus();
|
|
92
|
+
await (0, audit_usage_1.incrementAuditCount)();
|
|
93
|
+
await (0, audit_usage_1.printAuditUsageStatus)();
|
|
88
94
|
}
|
|
89
95
|
// Auto-sync if user has cloud_sync feature and opts in
|
|
90
|
-
const shouldSync = options.sync || (session && planIncludesFeature(session.plan, 'cloud_sync'));
|
|
96
|
+
const shouldSync = options.sync || (session && (0, plans_1.planIncludesFeature)(session.plan, 'cloud_sync'));
|
|
91
97
|
if (shouldSync && session) {
|
|
92
98
|
try {
|
|
93
|
-
await syncPush(cgDir, rootPath, session);
|
|
94
|
-
console.log(
|
|
99
|
+
await (0, graph_sync_1.syncPush)(cgDir, rootPath, session);
|
|
100
|
+
console.log(chalk_1.default.green('✓ Synced graph to cloud'));
|
|
95
101
|
}
|
|
96
102
|
catch (syncErr) {
|
|
97
103
|
const msg = syncErr instanceof Error ? syncErr.message : String(syncErr);
|
|
98
|
-
console.log(
|
|
104
|
+
console.log(chalk_1.default.yellow(` Sync skipped: ${msg}`));
|
|
99
105
|
}
|
|
100
106
|
}
|
|
101
107
|
}
|
|
102
108
|
catch (err) {
|
|
103
109
|
const message = err instanceof Error ? err.message : String(err);
|
|
104
|
-
console.error(
|
|
110
|
+
console.error(chalk_1.default.red(`✗ Error: ${message}`));
|
|
105
111
|
process.exit(1);
|
|
106
112
|
}
|
|
107
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/watch.js
CHANGED
|
@@ -1,28 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Watch Command
|
|
3
4
|
*
|
|
4
5
|
* Real-time monitoring and analysis of file changes
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.watchCommand = watchCommand;
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const cg_directory_1 = require("../cg-directory");
|
|
11
|
+
const project_watcher_1 = require("../utils/project-watcher");
|
|
12
|
+
const blast_radius_analyzer_1 = require("../utils/blast-radius-analyzer");
|
|
13
|
+
const cli_formatter_1 = require("../utils/cli-formatter");
|
|
14
|
+
async function watchCommand(projectPath, options) {
|
|
15
|
+
const rootPath = (0, path_1.resolve)(projectPath || process.cwd());
|
|
16
|
+
cli_formatter_1.RichOutput.header('Watch Mode');
|
|
14
17
|
try {
|
|
15
|
-
const cgDir = new CgDirectory(rootPath);
|
|
18
|
+
const cgDir = new cg_directory_1.CgDirectory(rootPath);
|
|
16
19
|
const graph = await cgDir.readGraph();
|
|
17
20
|
if (!graph) {
|
|
18
|
-
RichOutput.error('No dependency graph found. Run "cxgrd scan" first.');
|
|
21
|
+
cli_formatter_1.RichOutput.error('No dependency graph found. Run "cxgrd scan" first.');
|
|
19
22
|
process.exit(1);
|
|
20
23
|
}
|
|
21
|
-
RichOutput.info('Starting file watcher...');
|
|
22
|
-
RichOutput.info('Press Q to quit\n');
|
|
23
|
-
const watcher = new ProjectWatcher(rootPath, { debounce: options?.debounce || 500 });
|
|
24
|
-
const ui = new WatchModeUI();
|
|
25
|
-
const analyzer = new BlastRadiusAnalyzer(graph);
|
|
24
|
+
cli_formatter_1.RichOutput.info('Starting file watcher...');
|
|
25
|
+
cli_formatter_1.RichOutput.info('Press Q to quit\n');
|
|
26
|
+
const watcher = new project_watcher_1.ProjectWatcher(rootPath, { debounce: options?.debounce || 500 });
|
|
27
|
+
const ui = new project_watcher_1.WatchModeUI();
|
|
28
|
+
const analyzer = new blast_radius_analyzer_1.BlastRadiusAnalyzer(graph);
|
|
26
29
|
let lastAnalyzedFiles = new Set();
|
|
27
30
|
let isAnalyzing = false;
|
|
28
31
|
// Setup change handler
|
|
@@ -59,7 +62,7 @@ export async function watchCommand(projectPath, options) {
|
|
|
59
62
|
ui.displayBanner();
|
|
60
63
|
// Start watcher
|
|
61
64
|
await watcher.start(rootPath);
|
|
62
|
-
RichOutput.success('Watch mode active');
|
|
65
|
+
cli_formatter_1.RichOutput.success('Watch mode active');
|
|
63
66
|
console.log(` Monitoring: ${rootPath}`);
|
|
64
67
|
console.log(` Graph files: ${Object.keys(graph.files || {}).length}`);
|
|
65
68
|
console.log(` Debounce: ${options?.debounce || 500}ms\n`);
|
|
@@ -67,7 +70,7 @@ export async function watchCommand(projectPath, options) {
|
|
|
67
70
|
await new Promise(() => { });
|
|
68
71
|
}
|
|
69
72
|
catch (err) {
|
|
70
|
-
RichOutput.error(err.message);
|
|
73
|
+
cli_formatter_1.RichOutput.error(err.message);
|
|
71
74
|
process.exit(1);
|
|
72
75
|
}
|
|
73
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAAA;;;;GAIG
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|