@driftless-sh/cli 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.
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAuGjD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA2FjD"}
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.initCommand = initCommand;
4
4
  const api_client_1 = require("../api-client");
5
5
  const git_1 = require("../git");
6
+ const node_fs_1 = require("node:fs");
7
+ const node_path_1 = require("node:path");
6
8
  async function initCommand() {
7
9
  console.log('Driftless — context integrity for engineering teams\n');
8
10
  if (!(0, git_1.isGitRepo)()) {
@@ -33,13 +35,10 @@ async function initCommand() {
33
35
  try {
34
36
  const repos = (await api_client_1.api.get(`/workspaces/${remote.org}/repos`));
35
37
  repo = repos.find((r) => r.github_org === remote.org && r.github_repo === remote.repo);
36
- if (repo) {
38
+ if (repo)
37
39
  console.log(`Repo: ${remote.repo} (existing)`);
38
- }
39
- }
40
- catch {
41
- // ignore
42
40
  }
41
+ catch { /* ignore */ }
43
42
  if (!repo) {
44
43
  repo = await api_client_1.api.post(`/workspaces/${remote.org}/repos`, {
45
44
  github_org: remote.org,
@@ -47,42 +46,39 @@ async function initCommand() {
47
46
  });
48
47
  console.log(`Repo: ${remote.repo} (connected)`);
49
48
  }
50
- // 3. Scan repo
51
- console.log('\nScanning codebase...');
52
- const scanResult = await api_client_1.api.post(`/workspaces/${remote.org}/repos/${repo.id}/scan`);
53
- if (scanResult.status === 'error') {
54
- console.error(`Scan failed: ${scanResult.error}`);
55
- if (scanResult.error?.includes('clone') || scanResult.error?.includes('Cloning')) {
56
- console.error('\nTip: Make sure the repo is public, or add a GitHub token.');
57
- console.error('The scan runs server-side — the API clones your repo for AST analysis.');
58
- }
59
- process.exit(1);
60
- }
61
- const summary = scanResult.summary;
62
- if (!summary) {
63
- console.error('Scan returned no summary. The API might be unable to clone this repo.');
64
- console.error(`Status: ${scanResult.status}`);
65
- process.exit(1);
66
- }
49
+ // 3. Local scan — no cloning, no server-side access
50
+ console.log('\nScanning codebase locally...');
51
+ const cwd = process.cwd();
52
+ const summary = scanLocal(cwd);
67
53
  console.log(`\nResults:`);
68
54
  console.log(` Framework: ${summary.framework}`);
69
55
  console.log(` Type: ${summary.system_type}`);
70
- console.log(` Auth: ${summary.auth_patterns?.join(', ') || 'none'}`);
71
56
  console.log(` Endpoints: ${summary.endpoints}`);
72
- console.log(` Guards: ${summary.guards}`);
73
57
  console.log(` Services: ${summary.services}`);
74
58
  console.log(` Modules: ${summary.modules}`);
75
- // 4. Suggest rules
59
+ console.log(` Guards: ${summary.guards}`);
60
+ if (summary.auth_patterns.length > 0) {
61
+ console.log(` Auth: ${summary.auth_patterns.join(', ')}`);
62
+ }
63
+ // 4. Upload baseline to Cloud
64
+ try {
65
+ await api_client_1.api.post(`/workspaces/${remote.org}/repos/${repo.id}/scan`, summary);
66
+ }
67
+ catch {
68
+ // Non-blocking — upload happens via full scan later
69
+ }
70
+ // 5. Suggest rules
76
71
  console.log('\nSuggested rules:');
77
- const suggestions = [
78
- ...(summary.auth_patterns?.includes('apikey')
79
- ? ['Every B2B endpoint must use BusinessAccessGuard']
80
- : []),
81
- ...(summary.guards > 3 ? ['Services must not import controllers directly'] : []),
82
- ...(summary.endpoints > 50
83
- ? [`app.controller.ts should be split — over 50 endpoints detected`]
84
- : []),
85
- ];
72
+ const suggestions = [];
73
+ if (summary.auth_patterns.includes('apikey') || summary.guards > 0) {
74
+ suggestions.push('Every B2B endpoint must use BusinessAccessGuard');
75
+ }
76
+ if (summary.services > summary.modules) {
77
+ suggestions.push('Services must not import controllers directly');
78
+ }
79
+ if (summary.endpoints > 50) {
80
+ suggestions.push('app.controller.ts should be split — over 50 endpoints detected');
81
+ }
86
82
  if (suggestions.length === 0) {
87
83
  console.log(' No automatic suggestions for this repo.');
88
84
  }
@@ -90,9 +86,106 @@ async function initCommand() {
90
86
  for (const s of suggestions) {
91
87
  console.log(` • ${s}`);
92
88
  }
93
- console.log('\nAccept these suggestions? Run:');
94
- console.log(` driftless rule accept --all`);
95
89
  }
96
90
  console.log(`\nDone! Run 'driftless scan --diff' before pushing to check for violations.`);
91
+ console.log(`View your ecosystem: https://driftless.icu/ecosystem`);
92
+ }
93
+ function scanLocal(rootPath) {
94
+ const pkg = readJson((0, node_path_1.join)(rootPath, 'package.json'));
95
+ const deps = { ...pkg?.dependencies, ...pkg?.devDependencies };
96
+ // Framework detection
97
+ let framework = 'other';
98
+ if (deps?.['@nestjs/core'] || deps?.['@nestjs/common'])
99
+ framework = 'nestjs';
100
+ else if (deps?.['next'])
101
+ framework = 'nextjs';
102
+ else if (deps?.['express'])
103
+ framework = 'express';
104
+ // System type
105
+ let systemType = 'unknown';
106
+ if (framework === 'nestjs')
107
+ systemType = 'api';
108
+ else if (framework === 'nextjs')
109
+ systemType = 'app';
110
+ else if ((0, node_fs_1.existsSync)((0, node_path_1.join)(rootPath, 'pages')) || (0, node_fs_1.existsSync)((0, node_path_1.join)(rootPath, 'app')))
111
+ systemType = 'app';
112
+ // Count source files
113
+ const srcDir = (0, node_path_1.join)(rootPath, 'src');
114
+ const allFiles = listFiles(srcDir);
115
+ // Basic counts from source analysis
116
+ let endpoints = 0;
117
+ let services = 0;
118
+ let modules = 0;
119
+ let guards = 0;
120
+ for (const file of allFiles) {
121
+ try {
122
+ const content = (0, node_fs_1.readFileSync)(file, 'utf8');
123
+ if (content.includes('@Controller')) {
124
+ // Count HTTP decorators
125
+ const matches = content.match(/@(Get|Post|Put|Patch|Delete|All)\s*\(/g);
126
+ if (matches)
127
+ endpoints += matches.length;
128
+ }
129
+ if (content.includes('@Injectable'))
130
+ services++;
131
+ if (content.includes('@Module'))
132
+ modules++;
133
+ if (content.match(/class\s+\w*Guard/) && content.includes('CanActivate'))
134
+ guards++;
135
+ }
136
+ catch { /* skip unreadable files */ }
137
+ }
138
+ // Auth patterns
139
+ const authPatterns = [];
140
+ for (const file of allFiles.slice(0, 200)) {
141
+ try {
142
+ const content = (0, node_fs_1.readFileSync)(file, 'utf8');
143
+ if (content.includes('@clerk/') || content.includes('Clerk'))
144
+ authPatterns.push('clerk');
145
+ if (content.includes('Cognito') || content.includes('cognito'))
146
+ authPatterns.push('cognito');
147
+ if (content.includes('@UseGuards') || content.includes('AuthGuard'))
148
+ authPatterns.push('jwt');
149
+ if (content.includes('x-api-key') || content.includes('ApiKeyGuard') || content.includes('BusinessAccessGuard'))
150
+ authPatterns.push('apikey');
151
+ }
152
+ catch { /* skip */ }
153
+ }
154
+ return {
155
+ framework,
156
+ system_type: systemType,
157
+ endpoints,
158
+ services,
159
+ modules,
160
+ guards,
161
+ auth_patterns: [...new Set(authPatterns)],
162
+ };
163
+ }
164
+ function listFiles(dir) {
165
+ const result = [];
166
+ if (!(0, node_fs_1.existsSync)(dir))
167
+ return result;
168
+ try {
169
+ const entries = (0, node_fs_1.readdirSync)(dir, { withFileTypes: true });
170
+ for (const entry of entries) {
171
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist')
172
+ continue;
173
+ const full = (0, node_path_1.join)(dir, entry.name);
174
+ if (entry.isDirectory())
175
+ result.push(...listFiles(full));
176
+ else if (entry.name.endsWith('.ts') && !entry.name.endsWith('.d.ts'))
177
+ result.push(full);
178
+ }
179
+ }
180
+ catch { /* permission denied */ }
181
+ return result;
182
+ }
183
+ function readJson(path) {
184
+ try {
185
+ return JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
186
+ }
187
+ catch {
188
+ return null;
189
+ }
97
190
  }
98
191
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@driftless-sh/cli",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Driftless CLI — context integrity for AI engineering teams",
5
5
  "license": "MIT",
6
6
  "repository": {