@neurcode-ai/cli 0.4.0 → 0.4.1

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 (111) hide show
  1. package/dist/api-client.d.ts +105 -17
  2. package/dist/api-client.d.ts.map +1 -1
  3. package/dist/api-client.js +388 -85
  4. package/dist/api-client.js.map +1 -1
  5. package/dist/commands/allow.d.ts.map +1 -1
  6. package/dist/commands/allow.js +6 -33
  7. package/dist/commands/allow.js.map +1 -1
  8. package/dist/commands/check.d.ts.map +1 -1
  9. package/dist/commands/check.js +56 -13
  10. package/dist/commands/check.js.map +1 -1
  11. package/dist/commands/doctor.d.ts +7 -0
  12. package/dist/commands/doctor.d.ts.map +1 -0
  13. package/dist/commands/doctor.js +134 -0
  14. package/dist/commands/doctor.js.map +1 -0
  15. package/dist/commands/init.d.ts +13 -0
  16. package/dist/commands/init.d.ts.map +1 -0
  17. package/dist/commands/init.js +365 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/login.d.ts +8 -0
  20. package/dist/commands/login.d.ts.map +1 -0
  21. package/dist/commands/login.js +209 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/logout.d.ts +7 -0
  24. package/dist/commands/logout.d.ts.map +1 -0
  25. package/dist/commands/logout.js +70 -0
  26. package/dist/commands/logout.js.map +1 -0
  27. package/dist/commands/plan.d.ts +2 -0
  28. package/dist/commands/plan.d.ts.map +1 -1
  29. package/dist/commands/plan.js +210 -57
  30. package/dist/commands/plan.js.map +1 -1
  31. package/dist/commands/prompt.d.ts +6 -0
  32. package/dist/commands/prompt.d.ts.map +1 -0
  33. package/dist/commands/prompt.js +254 -0
  34. package/dist/commands/prompt.js.map +1 -0
  35. package/dist/commands/revert.d.ts.map +1 -1
  36. package/dist/commands/revert.js +10 -0
  37. package/dist/commands/revert.js.map +1 -1
  38. package/dist/commands/session.d.ts +29 -0
  39. package/dist/commands/session.d.ts.map +1 -0
  40. package/dist/commands/session.js +382 -0
  41. package/dist/commands/session.js.map +1 -0
  42. package/dist/commands/verify.d.ts.map +1 -1
  43. package/dist/commands/verify.js +127 -13
  44. package/dist/commands/verify.js.map +1 -1
  45. package/dist/commands/watch.d.ts +8 -0
  46. package/dist/commands/watch.d.ts.map +1 -0
  47. package/dist/commands/watch.js +78 -0
  48. package/dist/commands/watch.js.map +1 -0
  49. package/dist/config.d.ts +29 -4
  50. package/dist/config.d.ts.map +1 -1
  51. package/dist/config.js +186 -21
  52. package/dist/config.js.map +1 -1
  53. package/dist/index.js +120 -3
  54. package/dist/index.js.map +1 -1
  55. package/dist/services/integrations/TicketService.d.ts +68 -0
  56. package/dist/services/integrations/TicketService.d.ts.map +1 -0
  57. package/dist/services/integrations/TicketService.js +151 -0
  58. package/dist/services/integrations/TicketService.js.map +1 -0
  59. package/dist/services/security/SecurityGuard.d.ts +80 -0
  60. package/dist/services/security/SecurityGuard.d.ts.map +1 -0
  61. package/dist/services/security/SecurityGuard.js +410 -0
  62. package/dist/services/security/SecurityGuard.js.map +1 -0
  63. package/dist/services/watch/BlobStore.d.ts +33 -0
  64. package/dist/services/watch/BlobStore.d.ts.map +1 -0
  65. package/dist/services/watch/BlobStore.js +108 -0
  66. package/dist/services/watch/BlobStore.js.map +1 -0
  67. package/dist/services/watch/CommandPoller.d.ts +76 -0
  68. package/dist/services/watch/CommandPoller.d.ts.map +1 -0
  69. package/dist/services/watch/CommandPoller.js +298 -0
  70. package/dist/services/watch/CommandPoller.js.map +1 -0
  71. package/dist/services/watch/Journal.d.ts +58 -0
  72. package/dist/services/watch/Journal.d.ts.map +1 -0
  73. package/dist/services/watch/Journal.js +144 -0
  74. package/dist/services/watch/Journal.js.map +1 -0
  75. package/dist/services/watch/Sentinel.d.ts +49 -0
  76. package/dist/services/watch/Sentinel.d.ts.map +1 -0
  77. package/dist/services/watch/Sentinel.js +205 -0
  78. package/dist/services/watch/Sentinel.js.map +1 -0
  79. package/dist/services/watch/Syncer.d.ts +55 -0
  80. package/dist/services/watch/Syncer.d.ts.map +1 -0
  81. package/dist/services/watch/Syncer.js +231 -0
  82. package/dist/services/watch/Syncer.js.map +1 -0
  83. package/dist/utils/ROILogger.d.ts +16 -0
  84. package/dist/utils/ROILogger.d.ts.map +1 -0
  85. package/dist/utils/ROILogger.js +45 -0
  86. package/dist/utils/ROILogger.js.map +1 -0
  87. package/dist/utils/box.d.ts +16 -0
  88. package/dist/utils/box.d.ts.map +1 -0
  89. package/dist/utils/box.js +85 -0
  90. package/dist/utils/box.js.map +1 -0
  91. package/dist/utils/gitignore.d.ts +10 -0
  92. package/dist/utils/gitignore.d.ts.map +1 -0
  93. package/dist/utils/gitignore.js +34 -0
  94. package/dist/utils/gitignore.js.map +1 -0
  95. package/dist/utils/messages.d.ts +81 -0
  96. package/dist/utils/messages.d.ts.map +1 -0
  97. package/dist/utils/messages.js +306 -0
  98. package/dist/utils/messages.js.map +1 -0
  99. package/dist/utils/restore.d.ts +14 -0
  100. package/dist/utils/restore.d.ts.map +1 -0
  101. package/dist/utils/restore.js +89 -0
  102. package/dist/utils/restore.js.map +1 -0
  103. package/dist/utils/state.d.ts +69 -0
  104. package/dist/utils/state.d.ts.map +1 -0
  105. package/dist/utils/state.js +151 -0
  106. package/dist/utils/state.js.map +1 -0
  107. package/dist/utils/user-context.d.ts +28 -0
  108. package/dist/utils/user-context.d.ts.map +1 -0
  109. package/dist/utils/user-context.js +68 -0
  110. package/dist/utils/user-context.js.map +1 -0
  111. package/package.json +11 -4
@@ -0,0 +1,410 @@
1
+ "use strict";
2
+ /**
3
+ * Security Guard - Shadow AI Shield
4
+ *
5
+ * Local privacy scanner that runs before any API call to detect and mask secrets.
6
+ * Uses regex patterns and AST analysis (via ts-morph) to identify sensitive data.
7
+ * Also includes hallucination detection for phantom packages.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SecurityGuard = void 0;
11
+ const ts_morph_1 = require("ts-morph");
12
+ const fs_1 = require("fs");
13
+ const path_1 = require("path");
14
+ /**
15
+ * Security Guard for local secret detection and hallucination detection
16
+ */
17
+ class SecurityGuard {
18
+ REDACTION_PLACEHOLDER = '[REDACTED_BY_NEURCODE]';
19
+ // High-performance regex patterns for common secrets
20
+ patterns = {
21
+ // AWS Access Keys (AKIA followed by 16 base32 characters)
22
+ aws_key: /\bAKIA[0-9A-Z]{16}\b/g,
23
+ // Bearer tokens / API keys (common patterns)
24
+ bearer_token: /\b(bearer|token|apikey)\s*[:=]\s*['"]?([a-zA-Z0-9_\-]{32,})['"]?/gi,
25
+ // GitHub tokens (ghp_, gho_, ghu_, ghs_, ghr_)
26
+ github_token: /\b(ghp|gho|ghu|ghs|ghr)_[a-zA-Z0-9]{36,}\b/g,
27
+ // Generic high-entropy strings labeled as secrets
28
+ generic_secret: /\b(password|secret|key|token|api[_-]?key|private[_-]?key)\s*[:=]\s*['"]?([a-zA-Z0-9_\-+/=]{20,})['"]?/gi,
29
+ };
30
+ // Variable names that suggest secrets (case-insensitive)
31
+ sensitiveVarNames = [
32
+ /api[_-]?key/i,
33
+ /secret/i,
34
+ /password/i,
35
+ /token/i,
36
+ /private[_-]?key/i,
37
+ /access[_-]?token/i,
38
+ /auth[_-]?token/i,
39
+ ];
40
+ // Safe list of common packages and standard library modules
41
+ // Using Set for O(1) lookup performance
42
+ safePackageList = new Set([
43
+ // Standard Node.js modules
44
+ 'fs', 'path', 'os', 'crypto', 'http', 'https', 'url', 'util', 'events', 'stream',
45
+ 'buffer', 'process', 'child_process', 'cluster', 'dgram', 'dns', 'net', 'readline',
46
+ 'repl', 'tls', 'tty', 'vm', 'zlib', 'assert', 'querystring', 'string_decoder',
47
+ 'timers', 'punycode', 'v8', 'worker_threads', 'perf_hooks', 'async_hooks',
48
+ 'inspector', 'module', 'console', 'domain', 'constants',
49
+ // Common npm packages (top 100 most popular)
50
+ 'react', 'react-dom', 'lodash', 'express', 'axios', 'moment', 'vue', 'angular',
51
+ 'typescript', 'webpack', 'babel', 'jest', 'mocha', 'chai', 'sinon', 'eslint',
52
+ 'prettier', 'next', 'gatsby', 'nuxt', 'svelte', 'rxjs', 'redux', 'mobx',
53
+ 'styled-components', 'emotion', 'tailwindcss', 'bootstrap', 'material-ui',
54
+ '@mui/material', '@mui/icons-material', 'antd', 'semantic-ui', 'chakra-ui',
55
+ 'node-fetch', 'got', 'request', 'superagent', 'cheerio', 'puppeteer', 'playwright',
56
+ 'mongoose', 'sequelize', 'typeorm', 'prisma', 'knex', 'pg', 'mysql2', 'sqlite3',
57
+ 'redis', 'ioredis', 'ws', 'socket.io', 'graphql', 'apollo', 'relay',
58
+ 'dotenv', 'cross-env', 'nodemon', 'pm2', 'forever', 'concurrently',
59
+ 'uuid', 'nanoid', 'crypto-js', 'bcrypt', 'jsonwebtoken', 'passport',
60
+ 'winston', 'morgan', 'pino', 'debug', 'chalk', 'colors', 'commander',
61
+ 'yargs', 'inquirer', 'ora', 'listr', 'glob', 'minimist', 'dot-prop',
62
+ 'fast-glob', 'micromatch', 'rimraf', 'mkdirp', 'fs-extra', 'graceful-fs',
63
+ 'chokidar', 'watchman', 'nodemailer', 'handlebars', 'ejs', 'pug', 'mustache',
64
+ 'marked', 'highlight.js', 'prismjs', 'showdown', 'remark', 'rehype',
65
+ ]);
66
+ /**
67
+ * Scan text content for secrets using regex patterns
68
+ */
69
+ scanText(text, location = 'text') {
70
+ const detections = [];
71
+ // Check AWS keys
72
+ const awsMatches = text.match(this.patterns.aws_key);
73
+ if (awsMatches) {
74
+ awsMatches.forEach(match => {
75
+ detections.push({
76
+ type: 'aws_key',
77
+ severity: 'high',
78
+ location,
79
+ pattern: match,
80
+ });
81
+ });
82
+ }
83
+ // Check GitHub tokens
84
+ const githubMatches = text.match(this.patterns.github_token);
85
+ if (githubMatches) {
86
+ githubMatches.forEach(match => {
87
+ detections.push({
88
+ type: 'github_token',
89
+ severity: 'high',
90
+ location,
91
+ pattern: match,
92
+ });
93
+ });
94
+ }
95
+ // Check bearer tokens and generic secrets
96
+ const bearerMatches = Array.from(text.matchAll(this.patterns.bearer_token));
97
+ bearerMatches.forEach(match => {
98
+ if (match[2] && match[2].length >= 32) {
99
+ detections.push({
100
+ type: 'bearer_token',
101
+ severity: 'high',
102
+ location,
103
+ pattern: match[0],
104
+ });
105
+ }
106
+ });
107
+ const genericMatches = Array.from(text.matchAll(this.patterns.generic_secret));
108
+ genericMatches.forEach(match => {
109
+ if (match[2] && match[2].length >= 20) {
110
+ detections.push({
111
+ type: 'generic_secret',
112
+ severity: match[1]?.toLowerCase().includes('password') ? 'high' : 'medium',
113
+ location,
114
+ pattern: match[0],
115
+ });
116
+ }
117
+ });
118
+ return detections;
119
+ }
120
+ /**
121
+ * Extract package names from import/require statements
122
+ * Returns array of { packageName, importStatement }
123
+ */
124
+ extractPackageImports(code) {
125
+ const imports = [];
126
+ // Pattern 1: ES6 import statements
127
+ // import x from 'package'
128
+ // import { x } from 'package'
129
+ // import * as x from 'package'
130
+ // import 'package'
131
+ const es6ImportPattern = /import\s+(?:(?:\*\s+as\s+\w+)|(?:\{[^}]*\})|(?:\w+)|(?:\w+\s*,\s*\{[^}]*\}))\s+from\s+['"]([^'"]+)['"]/g;
132
+ // Also catch: import 'package' (side-effect imports)
133
+ const sideEffectImportPattern = /import\s+['"]([^'"]+)['"]/g;
134
+ // Pattern 2: CommonJS require
135
+ // const x = require('package')
136
+ // require('package')
137
+ const requirePattern = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
138
+ // Extract ES6 imports
139
+ let match;
140
+ while ((match = es6ImportPattern.exec(code)) !== null) {
141
+ const packageName = match[1];
142
+ if (packageName && !packageName.startsWith('.') && !packageName.startsWith('/')) {
143
+ imports.push({ packageName, importStatement: match[0] });
144
+ }
145
+ }
146
+ // Extract side-effect imports
147
+ while ((match = sideEffectImportPattern.exec(code)) !== null) {
148
+ const packageName = match[1];
149
+ if (packageName && !packageName.startsWith('.') && !packageName.startsWith('/')) {
150
+ // Avoid duplicates
151
+ const importStatement = match[0];
152
+ if (!imports.some(imp => imp.importStatement === importStatement)) {
153
+ imports.push({ packageName, importStatement });
154
+ }
155
+ }
156
+ }
157
+ // Extract require statements
158
+ while ((match = requirePattern.exec(code)) !== null) {
159
+ const packageName = match[1];
160
+ if (packageName && !packageName.startsWith('.') && !packageName.startsWith('/')) {
161
+ imports.push({ packageName, importStatement: match[0] });
162
+ }
163
+ }
164
+ return imports;
165
+ }
166
+ /**
167
+ * Load package.json dependencies from project root
168
+ */
169
+ loadProjectDependencies(rootDir = process.cwd()) {
170
+ const packageJsonPath = (0, path_1.join)(rootDir, 'package.json');
171
+ const dependencies = new Set();
172
+ if (!(0, fs_1.existsSync)(packageJsonPath)) {
173
+ return dependencies;
174
+ }
175
+ try {
176
+ const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
177
+ // Add dependencies
178
+ if (packageJson.dependencies && typeof packageJson.dependencies === 'object') {
179
+ Object.keys(packageJson.dependencies).forEach(pkg => dependencies.add(pkg));
180
+ }
181
+ // Add devDependencies
182
+ if (packageJson.devDependencies && typeof packageJson.devDependencies === 'object') {
183
+ Object.keys(packageJson.devDependencies).forEach(pkg => dependencies.add(pkg));
184
+ }
185
+ // Add peerDependencies
186
+ if (packageJson.peerDependencies && typeof packageJson.peerDependencies === 'object') {
187
+ Object.keys(packageJson.peerDependencies).forEach(pkg => dependencies.add(pkg));
188
+ }
189
+ }
190
+ catch (error) {
191
+ // If package.json can't be read or parsed, return empty set
192
+ // This is non-fatal - we'll just rely on safe list
193
+ }
194
+ return dependencies;
195
+ }
196
+ /**
197
+ * Scan code for hallucinated packages (phantom packages)
198
+ * Checks against safe list and project's package.json
199
+ */
200
+ async scanForHallucinations(code, location = 'code', rootDir = process.cwd()) {
201
+ const hallucinations = [];
202
+ // Extract all package imports
203
+ const imports = this.extractPackageImports(code);
204
+ if (imports.length === 0) {
205
+ return {
206
+ hallucinations: [],
207
+ hasHallucinations: false,
208
+ blocked: false,
209
+ };
210
+ }
211
+ // Load project dependencies
212
+ const projectDependencies = this.loadProjectDependencies(rootDir);
213
+ // Check each import
214
+ for (const { packageName, importStatement } of imports) {
215
+ // Skip scoped packages that might be local (e.g., @company/utils)
216
+ // We'll be conservative and only flag obvious non-existent packages
217
+ // Check if package is in safe list
218
+ if (this.safePackageList.has(packageName)) {
219
+ continue; // Safe package, skip
220
+ }
221
+ // Check if package is in project dependencies
222
+ if (projectDependencies.has(packageName)) {
223
+ continue; // Package exists in project, skip
224
+ }
225
+ // Check for scoped packages - if it starts with @, check if the scope exists
226
+ // For now, we'll flag scoped packages that aren't in dependencies as potential hallucinations
227
+ // This is conservative but catches common AI hallucinations like @non-existent/package
228
+ if (packageName.startsWith('@')) {
229
+ // Scoped package - check if it's in dependencies
230
+ if (!projectDependencies.has(packageName)) {
231
+ // Potential hallucination
232
+ hallucinations.push({
233
+ packageName,
234
+ location,
235
+ importStatement,
236
+ });
237
+ }
238
+ }
239
+ else {
240
+ // Non-scoped package not in safe list or dependencies - likely hallucination
241
+ hallucinations.push({
242
+ packageName,
243
+ location,
244
+ importStatement,
245
+ });
246
+ }
247
+ }
248
+ return {
249
+ hallucinations,
250
+ hasHallucinations: hallucinations.length > 0,
251
+ blocked: hallucinations.length > 0, // Block if any hallucinations detected
252
+ };
253
+ }
254
+ /**
255
+ * Scan TypeScript/JavaScript files using AST analysis
256
+ */
257
+ async scanFile(filePath, rootDir = process.cwd()) {
258
+ const detections = [];
259
+ const fullPath = (0, path_1.resolve)(rootDir, filePath);
260
+ // Check if file exists and is a .ts or .js file
261
+ if (!(0, fs_1.existsSync)(fullPath)) {
262
+ return detections;
263
+ }
264
+ const ext = filePath.split('.').pop()?.toLowerCase();
265
+ if (ext !== 'ts' && ext !== 'js' && ext !== 'tsx' && ext !== 'jsx') {
266
+ // For non-TS/JS files, use regex scanning
267
+ try {
268
+ const content = (0, fs_1.readFileSync)(fullPath, 'utf-8');
269
+ return this.scanText(content, filePath);
270
+ }
271
+ catch {
272
+ return detections;
273
+ }
274
+ }
275
+ try {
276
+ // Use ts-morph for AST analysis
277
+ const project = new ts_morph_1.Project({
278
+ skipAddingFilesFromTsConfig: true,
279
+ skipFileDependencyResolution: true,
280
+ });
281
+ const sourceFile = project.addSourceFileAtPath(fullPath);
282
+ // Scan for variable declarations with sensitive names
283
+ sourceFile.getVariableDeclarations().forEach(variable => {
284
+ const name = variable.getName();
285
+ const initializer = variable.getInitializer();
286
+ // Check if variable name suggests a secret
287
+ const isSensitive = this.sensitiveVarNames.some(pattern => pattern.test(name));
288
+ if (isSensitive && initializer) {
289
+ // Check if initializer is a string literal
290
+ const kind = initializer.getKindName();
291
+ if (kind === 'StringLiteral' || kind === 'NoSubstitutionTemplateLiteral') {
292
+ const text = initializer.getText().replace(/['"`]/g, '');
293
+ // Check if the value looks like a secret (high entropy)
294
+ if (text.length >= 20 && /[a-zA-Z0-9_\-+/=]{20,}/.test(text)) {
295
+ detections.push({
296
+ type: 'ast_literal',
297
+ severity: 'high',
298
+ location: filePath,
299
+ pattern: `${name} = ${initializer.getText()}`,
300
+ });
301
+ }
302
+ }
303
+ }
304
+ });
305
+ // Also run regex scanning as fallback
306
+ const content = sourceFile.getFullText();
307
+ const regexDetections = this.scanText(content, filePath);
308
+ detections.push(...regexDetections);
309
+ }
310
+ catch (error) {
311
+ // If AST parsing fails, fall back to regex scanning
312
+ try {
313
+ const content = (0, fs_1.readFileSync)(fullPath, 'utf-8');
314
+ return this.scanText(content, filePath);
315
+ }
316
+ catch {
317
+ // File cannot be read, return empty
318
+ }
319
+ }
320
+ return detections;
321
+ }
322
+ /**
323
+ * Scan multiple files
324
+ */
325
+ async scanFiles(filePaths, rootDir = process.cwd()) {
326
+ const allDetections = [];
327
+ for (const filePath of filePaths) {
328
+ const detections = await this.scanFile(filePath, rootDir);
329
+ allDetections.push(...detections);
330
+ }
331
+ return {
332
+ secrets: allDetections,
333
+ hasSecrets: allDetections.length > 0,
334
+ };
335
+ }
336
+ /**
337
+ * Scan intent string for secrets
338
+ */
339
+ scanIntent(intent) {
340
+ const detections = this.scanText(intent, 'intent');
341
+ return {
342
+ secrets: detections,
343
+ hasSecrets: detections.length > 0,
344
+ };
345
+ }
346
+ /**
347
+ * Mask secrets in text
348
+ */
349
+ maskSecrets(text, detections) {
350
+ let maskedText = text;
351
+ // Sort detections by pattern length (longest first) to avoid partial replacements
352
+ const sortedDetections = [...detections].sort((a, b) => b.pattern.length - a.pattern.length);
353
+ for (const detection of sortedDetections) {
354
+ // Escape special regex characters in the pattern
355
+ const escapedPattern = detection.pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
356
+ const regex = new RegExp(escapedPattern, 'g');
357
+ maskedText = maskedText.replace(regex, this.REDACTION_PLACEHOLDER);
358
+ }
359
+ return maskedText;
360
+ }
361
+ /**
362
+ * Complete scan with masking
363
+ */
364
+ async scanAndMask(intent, filePaths, rootDir = process.cwd()) {
365
+ const intentResult = this.scanIntent(intent);
366
+ const filesResult = await this.scanFiles(filePaths, rootDir);
367
+ const allDetections = [...intentResult.secrets, ...filesResult.secrets];
368
+ const hasSecrets = allDetections.length > 0;
369
+ let maskedIntent;
370
+ let maskedFiles;
371
+ if (hasSecrets) {
372
+ // Mask intent
373
+ if (intentResult.hasSecrets) {
374
+ maskedIntent = this.maskSecrets(intent, intentResult.secrets);
375
+ }
376
+ // Mask files
377
+ if (filesResult.hasSecrets) {
378
+ maskedFiles = new Map();
379
+ const fileDetections = new Map();
380
+ // Group detections by file
381
+ for (const detection of filesResult.secrets) {
382
+ if (detection.location !== 'intent') {
383
+ const fileDetectionsList = fileDetections.get(detection.location) || [];
384
+ fileDetectionsList.push(detection);
385
+ fileDetections.set(detection.location, fileDetectionsList);
386
+ }
387
+ }
388
+ // Mask each file
389
+ for (const [filePath, detections] of fileDetections.entries()) {
390
+ try {
391
+ const content = (0, fs_1.readFileSync)((0, path_1.resolve)(rootDir, filePath), 'utf-8');
392
+ const masked = this.maskSecrets(content, detections);
393
+ maskedFiles.set(filePath, masked);
394
+ }
395
+ catch {
396
+ // Skip files that can't be read
397
+ }
398
+ }
399
+ }
400
+ }
401
+ return {
402
+ secrets: allDetections,
403
+ hasSecrets,
404
+ maskedIntent,
405
+ maskedFiles,
406
+ };
407
+ }
408
+ }
409
+ exports.SecurityGuard = SecurityGuard;
410
+ //# sourceMappingURL=SecurityGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityGuard.js","sourceRoot":"","sources":["../../../src/services/security/SecurityGuard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * BlobStore - Content-Addressable Storage for file content
3
+ *
4
+ * Stores compressed file content in .neurcode/blobs/ directory.
5
+ * Filename is the SHA-256 hash of the content.
6
+ */
7
+ export declare class BlobStore {
8
+ private readonly blobsDir;
9
+ constructor(projectRoot: string);
10
+ /**
11
+ * Initialize the blob store directory
12
+ */
13
+ initialize(): Promise<void>;
14
+ /**
15
+ * Store content and return its hash
16
+ * @param content - The file content to store
17
+ * @returns The SHA-256 hash of the content
18
+ */
19
+ store(content: string): Promise<string>;
20
+ /**
21
+ * Check if a blob exists by hash
22
+ * @param hash - The SHA-256 hash
23
+ * @returns True if the blob exists
24
+ */
25
+ exists(hash: string): Promise<boolean>;
26
+ /**
27
+ * Get the path to a blob by hash
28
+ * @param hash - The SHA-256 hash
29
+ * @returns The full path to the blob file
30
+ */
31
+ getBlobPath(hash: string): string;
32
+ }
33
+ //# sourceMappingURL=BlobStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlobStore.d.ts","sourceRoot":"","sources":["../../../src/services/watch/BlobStore.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;;OAIG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB7C;;;;OAIG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5C;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAGlC"}
@@ -0,0 +1,108 @@
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
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BlobStore = void 0;
37
+ const crypto_1 = require("crypto");
38
+ const zlib_1 = require("zlib");
39
+ const fs_1 = require("fs");
40
+ const path = __importStar(require("path"));
41
+ const fsExtra = __importStar(require("fs-extra"));
42
+ /**
43
+ * BlobStore - Content-Addressable Storage for file content
44
+ *
45
+ * Stores compressed file content in .neurcode/blobs/ directory.
46
+ * Filename is the SHA-256 hash of the content.
47
+ */
48
+ class BlobStore {
49
+ blobsDir;
50
+ constructor(projectRoot) {
51
+ this.blobsDir = path.join(projectRoot, '.neurcode', 'blobs');
52
+ }
53
+ /**
54
+ * Initialize the blob store directory
55
+ */
56
+ async initialize() {
57
+ await fsExtra.ensureDir(this.blobsDir);
58
+ }
59
+ /**
60
+ * Store content and return its hash
61
+ * @param content - The file content to store
62
+ * @returns The SHA-256 hash of the content
63
+ */
64
+ async store(content) {
65
+ // Compute SHA-256 hash
66
+ const hash = (0, crypto_1.createHash)('sha256').update(content, 'utf8').digest('hex');
67
+ const blobPath = path.join(this.blobsDir, hash);
68
+ // Check if blob already exists
69
+ try {
70
+ await fs_1.promises.access(blobPath);
71
+ // Blob already exists, return hash
72
+ return hash;
73
+ }
74
+ catch {
75
+ // Blob doesn't exist, create it
76
+ }
77
+ // Compress content with GZIP
78
+ const compressed = (0, zlib_1.gzipSync)(Buffer.from(content, 'utf8'));
79
+ // Write compressed content to disk
80
+ await fs_1.promises.writeFile(blobPath, compressed);
81
+ return hash;
82
+ }
83
+ /**
84
+ * Check if a blob exists by hash
85
+ * @param hash - The SHA-256 hash
86
+ * @returns True if the blob exists
87
+ */
88
+ async exists(hash) {
89
+ const blobPath = path.join(this.blobsDir, hash);
90
+ try {
91
+ await fs_1.promises.access(blobPath);
92
+ return true;
93
+ }
94
+ catch {
95
+ return false;
96
+ }
97
+ }
98
+ /**
99
+ * Get the path to a blob by hash
100
+ * @param hash - The SHA-256 hash
101
+ * @returns The full path to the blob file
102
+ */
103
+ getBlobPath(hash) {
104
+ return path.join(this.blobsDir, hash);
105
+ }
106
+ }
107
+ exports.BlobStore = BlobStore;
108
+ //# sourceMappingURL=BlobStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlobStore.js","sourceRoot":"","sources":["../../../src/services/watch/BlobStore.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAoC;AACpC,+BAAgC;AAChC,2BAAoC;AACpC,2CAA6B;AAC7B,kDAAoC;AAEpC;;;;;GAKG;AACH,MAAa,SAAS;IACH,QAAQ,CAAS;IAElC,YAAY,WAAmB;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,OAAe;QACzB,uBAAuB;QACvB,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEhD,+BAA+B;QAC/B,IAAI,CAAC;YACH,MAAM,aAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,mCAAmC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;QAED,6BAA6B;QAC7B,MAAM,UAAU,GAAG,IAAA,eAAQ,EAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAE1D,mCAAmC;QACnC,MAAM,aAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,aAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;CACF;AAjED,8BAiEC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * CommandPoller - Polls for remote commands and executes them locally
3
+ *
4
+ * Polls the cloud API every 3 seconds for pending commands (like file reverts).
5
+ * When a command is received, executes it locally and updates the status.
6
+ */
7
+ export interface Command {
8
+ id: string;
9
+ userId: string;
10
+ organizationId: string;
11
+ type: string;
12
+ payload: {
13
+ filePath: string;
14
+ blobHash: string;
15
+ };
16
+ status: string;
17
+ createdAt: string;
18
+ updatedAt: string;
19
+ }
20
+ export interface PollResponse {
21
+ command: Command | null;
22
+ }
23
+ /**
24
+ * CommandPoller - Handles polling and execution of remote commands
25
+ */
26
+ export declare class CommandPoller {
27
+ private apiUrl;
28
+ private apiKey;
29
+ private projectRoot;
30
+ private pollInterval;
31
+ private readonly pollIntervalMs;
32
+ private isRunning;
33
+ private blobStore;
34
+ constructor(projectRoot: string);
35
+ /**
36
+ * Start polling for commands
37
+ */
38
+ start(): void;
39
+ /**
40
+ * Stop polling for commands
41
+ */
42
+ stop(): void;
43
+ /**
44
+ * Poll for pending commands and execute them
45
+ */
46
+ private poll;
47
+ /**
48
+ * Execute a command locally
49
+ */
50
+ private executeCommand;
51
+ /**
52
+ * Compute the hash of the current file content
53
+ */
54
+ private computeCurrentFileHash;
55
+ /**
56
+ * Execute a FILE_REVERT command
57
+ */
58
+ private executeFileRevert;
59
+ /**
60
+ * Fetch blob content from cloud API and store it locally
61
+ */
62
+ private fetchBlobFromCloud;
63
+ /**
64
+ * Update command status on the server
65
+ */
66
+ private updateCommandStatus;
67
+ /**
68
+ * Check if poller is configured (has API key)
69
+ */
70
+ isConfigured(): boolean;
71
+ /**
72
+ * Reload API key from config (useful if user logs in after watch starts)
73
+ */
74
+ reloadConfig(): void;
75
+ }
76
+ //# sourceMappingURL=CommandPoller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPoller.d.ts","sourceRoot":"","sources":["../../../src/services/watch/CommandPoller.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,SAAS,CAAY;gBAEjB,WAAW,EAAE,MAAM;IAQ/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAsBb;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;YACW,IAAI;IA6ClB;;OAEG;YACW,cAAc;IAe5B;;OAEG;YACW,sBAAsB;IAmBpC;;OAEG;YACW,iBAAiB;IAyC/B;;OAEG;YACW,kBAAkB;IAwChC;;OAEG;YACW,mBAAmB;IA+BjC;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,YAAY,IAAI,IAAI;CAUrB"}