@snapback/cli 1.1.12 → 1.1.14

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 (41) hide show
  1. package/README.md +9 -9
  2. package/dist/{analysis-Z53F5FT2.js → analysis-C6XVLBAL.js} +3 -3
  3. package/dist/{analysis-Z53F5FT2.js.map → analysis-C6XVLBAL.js.map} +1 -1
  4. package/dist/{chunk-KPETDXQO.js → chunk-2TOJVUVJ.js} +296 -33
  5. package/dist/chunk-2TOJVUVJ.js.map +1 -0
  6. package/dist/chunk-5EQLSU5B.js +385 -0
  7. package/dist/chunk-5EQLSU5B.js.map +1 -0
  8. package/dist/{chunk-YOVA65PS.js → chunk-A3TUM7U4.js} +320 -63
  9. package/dist/chunk-A3TUM7U4.js.map +1 -0
  10. package/dist/{chunk-ISVRGBWT.js → chunk-LEXNOXPV.js} +6030 -632
  11. package/dist/chunk-LEXNOXPV.js.map +1 -0
  12. package/dist/{chunk-G7QXHNGB.js → chunk-OJNDAPC2.js} +41 -15
  13. package/dist/chunk-OJNDAPC2.js.map +1 -0
  14. package/dist/{chunk-NKBZIXCN.js → chunk-Q5XZ3DCB.js} +5 -5
  15. package/dist/{chunk-NKBZIXCN.js.map → chunk-Q5XZ3DCB.js.map} +1 -1
  16. package/dist/chunk-QLCHTUT5.js +1067 -0
  17. package/dist/chunk-QLCHTUT5.js.map +1 -0
  18. package/dist/dist-D2SHOZMS.js +8 -0
  19. package/dist/{dist-7UKXVKH3.js.map → dist-D2SHOZMS.js.map} +1 -1
  20. package/dist/{dist-7UKXVKH3.js → dist-L76VXYJ5.js} +3 -3
  21. package/dist/{dist-VDK7WEF4.js.map → dist-L76VXYJ5.js.map} +1 -1
  22. package/dist/dist-RPM72FHJ.js +5 -0
  23. package/dist/{dist-WKLJSPJT.js.map → dist-RPM72FHJ.js.map} +1 -1
  24. package/dist/index.js +38672 -24130
  25. package/dist/index.js.map +1 -1
  26. package/dist/learning-pruner-YSZSOOOC.js +7 -0
  27. package/dist/learning-pruner-YSZSOOOC.js.map +1 -0
  28. package/dist/{secure-credentials-6UMEU22H.js → secure-credentials-A4QHHOE2.js} +14 -6
  29. package/dist/secure-credentials-A4QHHOE2.js.map +1 -0
  30. package/dist/{snapback-dir-T3CRQRY6.js → snapback-dir-6QUSO6Y3.js} +3 -3
  31. package/dist/{snapback-dir-T3CRQRY6.js.map → snapback-dir-6QUSO6Y3.js.map} +1 -1
  32. package/dist/storage-H366UNAR.js +6 -0
  33. package/dist/storage-H366UNAR.js.map +1 -0
  34. package/package.json +8 -9
  35. package/dist/chunk-G7QXHNGB.js.map +0 -1
  36. package/dist/chunk-ISVRGBWT.js.map +0 -1
  37. package/dist/chunk-KPETDXQO.js.map +0 -1
  38. package/dist/chunk-YOVA65PS.js.map +0 -1
  39. package/dist/dist-VDK7WEF4.js +0 -5
  40. package/dist/dist-WKLJSPJT.js +0 -8
  41. package/dist/secure-credentials-6UMEU22H.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ export { AutomatedLearningPruner } from './chunk-5EQLSU5B.js';
3
+ import './chunk-QLCHTUT5.js';
4
+ import './chunk-6MR2TINI.js';
5
+ import './chunk-BW7RALUZ.js';
6
+ //# sourceMappingURL=learning-pruner-YSZSOOOC.js.map
7
+ //# sourceMappingURL=learning-pruner-YSZSOOOC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"learning-pruner-YSZSOOOC.js"}
@@ -135,7 +135,9 @@ var SecureCredentialsManager = class SecureCredentialsManager2 {
135
135
  * Selects the best available provider
136
136
  */
137
137
  async initialize() {
138
- if (this.initialized) return;
138
+ if (this.initialized) {
139
+ return;
140
+ }
139
141
  const keytarProvider = await createKeytarProvider();
140
142
  if (keytarProvider && await keytarProvider.isAvailable()) {
141
143
  this.provider = keytarProvider;
@@ -156,7 +158,9 @@ var SecureCredentialsManager = class SecureCredentialsManager2 {
156
158
  */
157
159
  async getCredentials() {
158
160
  await this.initialize();
159
- if (!this.provider) return null;
161
+ if (!this.provider) {
162
+ return null;
163
+ }
160
164
  const stored = await this.provider.getPassword(SERVICE_NAME, ACCOUNT_NAME);
161
165
  if (!stored) {
162
166
  const legacy = await this.getLegacyCredentials();
@@ -202,7 +206,9 @@ var SecureCredentialsManager = class SecureCredentialsManager2 {
202
206
  */
203
207
  async clearCredentials() {
204
208
  await this.initialize();
205
- if (!this.provider) return;
209
+ if (!this.provider) {
210
+ return;
211
+ }
206
212
  await this.provider.deletePassword(SERVICE_NAME, ACCOUNT_NAME);
207
213
  try {
208
214
  await unlink(CREDENTIALS_FILE);
@@ -218,7 +224,9 @@ var SecureCredentialsManager = class SecureCredentialsManager2 {
218
224
  */
219
225
  async isLoggedIn() {
220
226
  const credentials = await this.getCredentials();
221
- if (!credentials?.accessToken) return false;
227
+ if (!credentials?.accessToken) {
228
+ return false;
229
+ }
222
230
  if (credentials.expiresAt) {
223
231
  const expiresAt = new Date(credentials.expiresAt);
224
232
  if (expiresAt < /* @__PURE__ */ new Date()) {
@@ -254,5 +262,5 @@ async function isLoggedInSecure() {
254
262
  __name(isLoggedInSecure, "isLoggedInSecure");
255
263
 
256
264
  export { SecureCredentialsManager, clearCredentialsSecure, getCredentialsSecure, getSecureCredentials, isLoggedInSecure, saveCredentialsSecure };
257
- //# sourceMappingURL=secure-credentials-6UMEU22H.js.map
258
- //# sourceMappingURL=secure-credentials-6UMEU22H.js.map
265
+ //# sourceMappingURL=secure-credentials-A4QHHOE2.js.map
266
+ //# sourceMappingURL=secure-credentials-A4QHHOE2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/secure-credentials.ts"],"names":["SERVICE_NAME","ACCOUNT_NAME","ENCRYPTION_ALGORITHM","KEY_LENGTH","IV_LENGTH","AUTH_TAG_LENGTH","SALT_LENGTH","GLOBAL_DIR","join","homedir","CREDENTIALS_FILE","ENCRYPTED_CREDENTIALS_FILE","createKeytarProvider","keytar","name","isAvailable","getPassword","service","account","setPassword","password","deletePassword","deriveMachineKey","salt","machineData","hostname","platform","userInfo","username","process","arch","scryptSync","encryptCredentials","credentials","key","iv","randomBytes","cipher","createCipheriv","plaintext","JSON","stringify","encrypted","Buffer","concat","update","final","authTag","getAuthTag","decryptCredentials","data","subarray","decipher","createDecipheriv","setAuthTag","decrypted","parse","toString","createEncryptedFileProvider","_service","_account","readFile","mkdir","dirname","recursive","writeFile","unlink","SecureCredentialsManager","provider","initialized","initialize","keytarProvider","getProviderName","getCredentials","stored","legacy","getLegacyCredentials","setCredentials","content","Error","clearCredentials","isLoggedIn","accessToken","expiresAt","Date","secureCredentialsManager","getSecureCredentials","getCredentialsSecure","saveCredentialsSecure","clearCredentialsSecure","isLoggedInSecure"],"mappings":"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","file":"secure-credentials-A4QHHOE2.js","sourcesContent":["/**\n * Secure Credentials Storage for SnapBack CLI\n *\n * FIX 4: Implements OS keychain storage with file fallback\n *\n * Security Hierarchy:\n * 1. OS Keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service)\n * 2. Encrypted file fallback (AES-256-GCM with machine-derived key)\n * 3. Plain text fallback (development only, with warning)\n *\n * @module services/secure-credentials\n */\n\nimport { createCipheriv, createDecipheriv, randomBytes, scryptSync } from \"node:crypto\";\nimport { mkdir, readFile, unlink, writeFile } from \"node:fs/promises\";\nimport { homedir, hostname, platform, userInfo } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport type { GlobalCredentials } from \"./snapback-dir\";\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst SERVICE_NAME = \"snapback-cli\";\nconst ACCOUNT_NAME = \"default\";\nconst ENCRYPTION_ALGORITHM = \"aes-256-gcm\";\nconst KEY_LENGTH = 32;\nconst IV_LENGTH = 12;\nconst AUTH_TAG_LENGTH = 16;\nconst SALT_LENGTH = 32;\n\n// File paths\nconst GLOBAL_DIR = join(homedir(), \".snapback\");\nconst CREDENTIALS_FILE = join(GLOBAL_DIR, \"credentials.json\");\nconst ENCRYPTED_CREDENTIALS_FILE = join(GLOBAL_DIR, \"credentials.enc\");\n\n// =============================================================================\n// KEYCHAIN INTERFACE\n// =============================================================================\n\n/**\n * Keychain abstraction interface\n * Allows for different implementations based on availability\n */\ninterface KeychainProvider {\n\tname: string;\n\tisAvailable(): Promise<boolean>;\n\tgetPassword(service: string, account: string): Promise<string | null>;\n\tsetPassword(service: string, account: string, password: string): Promise<void>;\n\tdeletePassword(service: string, account: string): Promise<boolean>;\n}\n\n// =============================================================================\n// KEYTAR PROVIDER (OS KEYCHAIN)\n// =============================================================================\n\n/**\n * Keytar-based keychain provider\n * Uses OS-level secure credential storage\n */\nasync function createKeytarProvider(): Promise<KeychainProvider | null> {\n\ttry {\n\t\t// Dynamic import to handle missing keytar gracefully\n\t\t// @ts-expect-error - keytar is optional dependency\n\t\tconst keytar = await import(\"keytar\");\n\n\t\treturn {\n\t\t\tname: \"keytar\",\n\t\t\tasync isAvailable(): Promise<boolean> {\n\t\t\t\ttry {\n\t\t\t\t\t// Test availability by trying a no-op operation\n\t\t\t\t\tawait keytar.getPassword(\"__snapback_test__\", \"__test__\");\n\t\t\t\t\treturn true;\n\t\t\t\t} catch {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync getPassword(service: string, account: string): Promise<string | null> {\n\t\t\t\treturn keytar.getPassword(service, account);\n\t\t\t},\n\t\t\tasync setPassword(service: string, account: string, password: string): Promise<void> {\n\t\t\t\tawait keytar.setPassword(service, account, password);\n\t\t\t},\n\t\t\tasync deletePassword(service: string, account: string): Promise<boolean> {\n\t\t\t\treturn keytar.deletePassword(service, account);\n\t\t\t},\n\t\t};\n\t} catch {\n\t\t// keytar not available (not installed or native module issues)\n\t\treturn null;\n\t}\n}\n\n// =============================================================================\n// ENCRYPTED FILE PROVIDER\n// =============================================================================\n\n/**\n * Derive an encryption key from machine-specific data\n * This provides defense-in-depth even if the file is copied to another machine\n */\nfunction deriveMachineKey(salt: Buffer): Buffer {\n\t// Combine machine-specific values for key derivation\n\tconst machineData = [\n\t\thostname(),\n\t\tplatform(),\n\t\tuserInfo().username,\n\t\thomedir(),\n\t\t// Add some entropy from process info\n\t\tprocess.arch,\n\t\tprocess.platform,\n\t].join(\"|\");\n\n\treturn scryptSync(machineData, salt, KEY_LENGTH);\n}\n\n/**\n * Encrypt credentials with machine-derived key\n */\nfunction encryptCredentials(credentials: GlobalCredentials, salt: Buffer): Buffer {\n\tconst key = deriveMachineKey(salt);\n\tconst iv = randomBytes(IV_LENGTH);\n\tconst cipher = createCipheriv(ENCRYPTION_ALGORITHM, key, iv);\n\n\tconst plaintext = JSON.stringify(credentials);\n\tconst encrypted = Buffer.concat([cipher.update(plaintext, \"utf8\"), cipher.final()]);\n\tconst authTag = cipher.getAuthTag();\n\n\t// Format: salt (32) + iv (12) + authTag (16) + encrypted data\n\treturn Buffer.concat([salt, iv, authTag, encrypted]);\n}\n\n/**\n * Decrypt credentials with machine-derived key\n */\nfunction decryptCredentials(data: Buffer): GlobalCredentials {\n\t// Extract components\n\tconst salt = data.subarray(0, SALT_LENGTH);\n\tconst iv = data.subarray(SALT_LENGTH, SALT_LENGTH + IV_LENGTH);\n\tconst authTag = data.subarray(SALT_LENGTH + IV_LENGTH, SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);\n\tconst encrypted = data.subarray(SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);\n\n\tconst key = deriveMachineKey(salt);\n\tconst decipher = createDecipheriv(ENCRYPTION_ALGORITHM, key, iv);\n\tdecipher.setAuthTag(authTag);\n\n\tconst decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);\n\treturn JSON.parse(decrypted.toString(\"utf8\")) as GlobalCredentials;\n}\n\n/**\n * Encrypted file provider\n * Uses AES-256-GCM with machine-derived key\n */\nfunction createEncryptedFileProvider(): KeychainProvider {\n\treturn {\n\t\tname: \"encrypted-file\",\n\t\tasync isAvailable(): Promise<boolean> {\n\t\t\treturn true; // Always available as fallback\n\t\t},\n\t\tasync getPassword(_service: string, _account: string): Promise<string | null> {\n\t\t\ttry {\n\t\t\t\tconst data = await readFile(ENCRYPTED_CREDENTIALS_FILE);\n\t\t\t\tconst credentials = decryptCredentials(data);\n\t\t\t\treturn JSON.stringify(credentials);\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tasync setPassword(_service: string, _account: string, password: string): Promise<void> {\n\t\t\tconst credentials = JSON.parse(password) as GlobalCredentials;\n\t\t\tconst salt = randomBytes(SALT_LENGTH);\n\t\t\tconst encrypted = encryptCredentials(credentials, salt);\n\n\t\t\tawait mkdir(dirname(ENCRYPTED_CREDENTIALS_FILE), { recursive: true });\n\t\t\tawait writeFile(ENCRYPTED_CREDENTIALS_FILE, encrypted);\n\t\t},\n\t\tasync deletePassword(_service: string, _account: string): Promise<boolean> {\n\t\t\ttry {\n\t\t\t\tawait unlink(ENCRYPTED_CREDENTIALS_FILE);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t};\n}\n\n// =============================================================================\n// PLAIN FILE PROVIDER (DEVELOPMENT FALLBACK)\n// =============================================================================\n\n/**\n * Plain file provider (legacy, development only)\n * Shows warning when used in production\n * @deprecated Use encrypted file provider instead\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction _createPlainFileProvider(): KeychainProvider {\n\tlet warningShown = false;\n\n\treturn {\n\t\tname: \"plain-file\",\n\t\tasync isAvailable(): Promise<boolean> {\n\t\t\treturn true;\n\t\t},\n\t\tasync getPassword(_service: string, _account: string): Promise<string | null> {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(CREDENTIALS_FILE, \"utf8\");\n\t\t\t\treturn content;\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tasync setPassword(_service: string, _account: string, password: string): Promise<void> {\n\t\t\tif (process.env.NODE_ENV === \"production\" && !warningShown) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"\\n⚠️ Warning: Storing credentials in plain text. \" +\n\t\t\t\t\t\t\"Install 'keytar' for OS keychain support: pnpm add keytar\\n\",\n\t\t\t\t);\n\t\t\t\twarningShown = true;\n\t\t\t}\n\n\t\t\tawait mkdir(dirname(CREDENTIALS_FILE), { recursive: true });\n\t\t\tawait writeFile(CREDENTIALS_FILE, password, { mode: 0o600 }); // Restrict file permissions\n\t\t},\n\t\tasync deletePassword(_service: string, _account: string): Promise<boolean> {\n\t\t\ttry {\n\t\t\t\tawait unlink(CREDENTIALS_FILE);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t};\n}\n\n// =============================================================================\n// SECURE CREDENTIALS MANAGER\n// =============================================================================\n\n/**\n * Secure Credentials Manager\n *\n * Automatically selects the most secure available storage:\n * 1. OS Keychain (via keytar)\n * 2. Encrypted file\n * 3. Plain file (with warning)\n */\nclass SecureCredentialsManager {\n\tprivate provider: KeychainProvider | null = null;\n\tprivate initialized = false;\n\n\t/**\n\t * Initialize the credentials manager\n\t * Selects the best available provider\n\t */\n\tasync initialize(): Promise<void> {\n\t\tif (this.initialized) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Try keytar first (OS keychain)\n\t\tconst keytarProvider = await createKeytarProvider();\n\t\tif (keytarProvider && (await keytarProvider.isAvailable())) {\n\t\t\tthis.provider = keytarProvider;\n\t\t\tthis.initialized = true;\n\t\t\treturn;\n\t\t}\n\n\t\t// Fall back to encrypted file\n\t\tthis.provider = createEncryptedFileProvider();\n\t\tthis.initialized = true;\n\t}\n\n\t/**\n\t * Get the name of the active provider\n\t */\n\tgetProviderName(): string {\n\t\treturn this.provider?.name ?? \"none\";\n\t}\n\n\t/**\n\t * Get stored credentials\n\t */\n\tasync getCredentials(): Promise<GlobalCredentials | null> {\n\t\tawait this.initialize();\n\t\tif (!this.provider) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst stored = await this.provider.getPassword(SERVICE_NAME, ACCOUNT_NAME);\n\t\tif (!stored) {\n\t\t\t// Check legacy plain file as migration fallback\n\t\t\tconst legacy = await this.getLegacyCredentials();\n\t\t\tif (legacy) {\n\t\t\t\t// Migrate to secure storage\n\t\t\t\tawait this.setCredentials(legacy);\n\t\t\t\t// Delete legacy file after successful migration\n\t\t\t\ttry {\n\t\t\t\t\tawait unlink(CREDENTIALS_FILE);\n\t\t\t\t} catch {\n\t\t\t\t\t// Ignore if file doesn't exist\n\t\t\t\t}\n\t\t\t\treturn legacy;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.parse(stored) as GlobalCredentials;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Get legacy plain-text credentials for migration\n\t */\n\tprivate async getLegacyCredentials(): Promise<GlobalCredentials | null> {\n\t\ttry {\n\t\t\tconst content = await readFile(CREDENTIALS_FILE, \"utf8\");\n\t\t\treturn JSON.parse(content) as GlobalCredentials;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Save credentials securely\n\t */\n\tasync setCredentials(credentials: GlobalCredentials): Promise<void> {\n\t\tawait this.initialize();\n\t\tif (!this.provider) {\n\t\t\tthrow new Error(\"No credentials provider available\");\n\t\t}\n\n\t\tawait this.provider.setPassword(SERVICE_NAME, ACCOUNT_NAME, JSON.stringify(credentials));\n\t}\n\n\t/**\n\t * Clear stored credentials\n\t */\n\tasync clearCredentials(): Promise<void> {\n\t\tawait this.initialize();\n\t\tif (!this.provider) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.provider.deletePassword(SERVICE_NAME, ACCOUNT_NAME);\n\n\t\t// Also clean up any legacy files\n\t\ttry {\n\t\t\tawait unlink(CREDENTIALS_FILE);\n\t\t} catch {\n\t\t\t// Ignore\n\t\t}\n\t\ttry {\n\t\t\tawait unlink(ENCRYPTED_CREDENTIALS_FILE);\n\t\t} catch {\n\t\t\t// Ignore\n\t\t}\n\t}\n\n\t/**\n\t * Check if user is logged in\n\t */\n\tasync isLoggedIn(): Promise<boolean> {\n\t\tconst credentials = await this.getCredentials();\n\t\tif (!credentials?.accessToken) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if token is expired\n\t\tif (credentials.expiresAt) {\n\t\t\tconst expiresAt = new Date(credentials.expiresAt);\n\t\t\tif (expiresAt < new Date()) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n}\n\n// =============================================================================\n// EXPORTS\n// =============================================================================\n\n// Singleton instance\nlet secureCredentialsManager: SecureCredentialsManager | null = null;\n\n/**\n * Get the secure credentials manager singleton\n */\nexport function getSecureCredentials(): SecureCredentialsManager {\n\tif (!secureCredentialsManager) {\n\t\tsecureCredentialsManager = new SecureCredentialsManager();\n\t}\n\treturn secureCredentialsManager;\n}\n\n/**\n * Secure versions of credential functions (drop-in replacements)\n */\nexport async function getCredentialsSecure(): Promise<GlobalCredentials | null> {\n\treturn getSecureCredentials().getCredentials();\n}\n\nexport async function saveCredentialsSecure(credentials: GlobalCredentials): Promise<void> {\n\treturn getSecureCredentials().setCredentials(credentials);\n}\n\nexport async function clearCredentialsSecure(): Promise<void> {\n\treturn getSecureCredentials().clearCredentials();\n}\n\nexport async function isLoggedInSecure(): Promise<boolean> {\n\treturn getSecureCredentials().isLoggedIn();\n}\n\nexport { SecureCredentialsManager };\n"]}
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- export { appendSnapbackJsonl, clearCredentials, createGlobalDirectory, createSnapbackDirectory, deleteGlobalJson, endCurrentSession, findWorkspaceRoot, getCredentials, getCurrentSession, getGlobalConfig, getGlobalDir, getGlobalPath, getLearnings, getProtectedFiles, getStats, getViolations, getWorkspaceConfig, getWorkspaceDir, getWorkspacePath, getWorkspaceVitals, isLoggedIn, isSnapbackInitialized, loadSnapbackJsonl, pathExists, readGlobalJson, readSnapbackJson, recordLearning, recordViolation, saveCredentials, saveCurrentSession, saveGlobalConfig, saveProtectedFiles, saveWorkspaceConfig, saveWorkspaceVitals, writeGlobalJson, writeSnapbackJson } from './chunk-NKBZIXCN.js';
2
+ export { appendSnapbackJsonl, clearCredentials, createGlobalDirectory, createSnapbackDirectory, deleteGlobalJson, endCurrentSession, findWorkspaceRoot, getCredentials, getCurrentSession, getGlobalConfig, getGlobalDir, getGlobalPath, getLearnings, getProtectedFiles, getStats, getViolations, getWorkspaceConfig, getWorkspaceDir, getWorkspacePath, getWorkspaceVitals, isLoggedIn, isSnapbackInitialized, loadSnapbackJsonl, pathExists, readGlobalJson, readSnapbackJson, recordLearning, recordViolation, saveCredentials, saveCurrentSession, saveGlobalConfig, saveProtectedFiles, saveWorkspaceConfig, saveWorkspaceVitals, writeGlobalJson, writeSnapbackJson } from './chunk-Q5XZ3DCB.js';
3
3
  export { generateId } from './chunk-6MR2TINI.js';
4
4
  import './chunk-BW7RALUZ.js';
5
- //# sourceMappingURL=snapback-dir-T3CRQRY6.js.map
6
- //# sourceMappingURL=snapback-dir-T3CRQRY6.js.map
5
+ //# sourceMappingURL=snapback-dir-6QUSO6Y3.js.map
6
+ //# sourceMappingURL=snapback-dir-6QUSO6Y3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"snapback-dir-T3CRQRY6.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"snapback-dir-6QUSO6Y3.js"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ export { ConfigStore, StateStore, appendJsonl, appendJsonlAsync, countInJsonl, deriveEncryptionKey, findInJsonl, generateId, getMachineId, loadJsonl, updateInJsonl, writeJsonl } from './chunk-QLCHTUT5.js';
3
+ import './chunk-6MR2TINI.js';
4
+ import './chunk-BW7RALUZ.js';
5
+ //# sourceMappingURL=storage-H366UNAR.js.map
6
+ //# sourceMappingURL=storage-H366UNAR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"storage-H366UNAR.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snapback/cli",
3
- "version": "1.1.12",
3
+ "version": "1.1.14",
4
4
  "description": "CLI tool for managing SnapBack snapshots and file protection",
5
5
  "homepage": "https://snapback.dev",
6
6
  "repository": {
@@ -34,12 +34,12 @@
34
34
  ],
35
35
  "dependencies": {
36
36
  "@asteasolutions/zod-to-openapi": "7.3.4",
37
- "@aws-sdk/client-s3": "3.600.0",
38
- "@aws-sdk/s3-request-presigner": "3.600.0",
37
+ "@aws-sdk/client-s3": "3.750.0",
38
+ "@aws-sdk/s3-request-presigner": "3.750.0",
39
39
  "@babel/parser": "7.28.5",
40
40
  "@babel/traverse": "7.28.5",
41
41
  "@inquirer/prompts": "7.9.0",
42
- "@modelcontextprotocol/sdk": "1.25.1",
42
+ "@modelcontextprotocol/sdk": "1.25.3",
43
43
  "@typescript-eslint/parser": "8.46.2",
44
44
  "@xenova/transformers": "^2.17.2",
45
45
  "atomically": "^2.0.0",
@@ -83,14 +83,13 @@
83
83
  "tsx": "4.20.5",
84
84
  "typescript": "5.9.2",
85
85
  "vitest": "3.2.4",
86
+ "@snapback/intelligence": "0.1.0",
87
+ "@snapback/sdk": "0.2.0",
86
88
  "@snapback/contracts": "0.2.1",
89
+ "@snapback/mcp": "0.1.0",
87
90
  "@snapback/engine": "0.1.0",
88
- "@snapback/core": "0.2.0",
89
- "@snapback/core-runtime": "0.1.0",
90
91
  "@snapback/mcp-config": "1.0.0",
91
- "@snapback/sdk": "0.2.0",
92
- "@snapback/intelligence": "0.1.0",
93
- "@snapback/mcp": "0.1.0"
92
+ "@snapback/core": "0.2.0"
94
93
  },
95
94
  "publishConfig": {
96
95
  "access": "public",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../packages/core/dist/analysis/ast/SyntaxAnalyzer.js","../../../packages/core/dist/analysis/completeness/CompletenessAnalyzer.js","../../../packages/core/dist/analysis/impact/ChangeImpactAnalyzer.js","../../../packages/core/dist/analysis/security/SecurityAnalyzer.js","../../../packages/core/dist/analysis/static/OrphanDetector.js","../../../packages/core/dist/analysis/static/index.js"],"names":["SyntaxAnalyzer","id","name","filePatterns","analyze","context","startTime","performance","now","issues","filesAnalyzed","nodesVisited","parseErrors","file","content","contents","shouldAnalyzeFile","ast","parse","sourceType","ecmaFeatures","jsx","endsWith","ecmaVersion","errorOnUnknownASTType","countNodes","checkSyntaxPatterns","error","parseError","extractParseError","push","message","line","severity","type","column","fix","analyzer","success","coverage","Math","max","files","length","duration","metadata","shouldRun","some","f","ext","split","pop","toLowerCase","includes","Error","match","Number","parseInt","String","node","count","key","Object","keys","value","Array","isArray","item","lines","i","lineNum","indexOf","snippet","trim","test","assignMatch","CompletenessAnalyzer","todoPatterns","placeholderPatterns","parserOptions","plugins","errorRecovery","checkTodoComments","checkPlaceholderPatterns","getPluginsForFile","result","analyzeAST","patternsChecked","pattern","lastIndex","todoContent","slice","_content","traverse","enter","CatchClause","path","body","loc","start","stmt","FunctionDeclaration","funcName","ClassMethod","abstract","kind","methodName","ArrowFunctionExpression","parent","varName","CallExpression","callee","object","property","firstArg","arguments","msg","EXPORT_PATTERNS","PERFORMANCE_PATTERNS","risk","TEST_FILE_PATTERNS","ChangeImpactAnalyzer","workspaceRoot","dependencyGraph","Map","reverseDependencyGraph","p","RegExp","replace","Date","buildDependencyGraph","get","breakingChanges","detectBreakingChanges","bc","symbol","toUpperCase","description","migration","perfImpacts","detectPerformanceImpacts","pi","component","recommendation","affectedTests","findAffectedTests","getFullImpact","performanceImpacts","dependentFiles","recommendations","tests","breaks","perfs","deps","findDependentFiles","impactScore","calculateImpactScore","dedupeItems","clear","imports","extractImports","set","imp","existing","fromFile","importRegex","requireRegex","exec","importPath","resolveImportPath","startsWith","dir","dirname","extensions","resolved","relPath","relative","fileName","basename","directTestPatterns","reason","level","importers","importer","isTestFile","regex","source","flags","symbolName","interfaceRegex","interfaceName","impacts","getPerformanceRecommendation","dependents","visited","Set","current","depth","has","add","score","min","filter","items","seen","createChangeImpactAnalyzer","SecurityAnalyzer","fileIssues","fileContext","isDaemon","hasSignalHandler","isStaticString","MemberExpression","parentPath","isCallExpression","pathMethods","isStaticPath","NewExpression","JSXAttribute","VariableDeclarator","init","checkForHardcodedSecret","ClassProperty","Program","exit","expressions","every","arg","secretIndicators","s","valueStr","DEFAULT_OPTIONS","fileExtensions","excludePatterns","detectOrphans","entryPoint","options","mergedOptions","madgeModule","madge","default","excludeRegExp","map","regexPattern","tsConfig","tsConfigPath","detectiveOptions","ts","skipTypeImports","orphans","allFiles","obj","totalFiles","filterOrphansToFiles","orphanResult","targetFiles","targetSet","orphan","normalizedOrphan","t","checkFilesForOrphanStatus","baseDir","runStaticAnalysis","_workspaceRoot","skippedTests","orphanedFiles","errors","skipTestDetection","analyzeSkippedTests","testResults","testResult","parsed","skipped","skipOrphanDetection"],"mappings":"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","file":"chunk-G7QXHNGB.js","sourcesContent":["/**\n * Syntax Analyzer\n *\n * Uses @typescript-eslint/parser for real AST-based syntax validation.\n * Replaces bracket counting with proper parsing.\n *\n * @module analysis/ast/SyntaxAnalyzer\n */\nimport * as eslintParser from \"@typescript-eslint/parser\";\n/**\n * AST-based syntax analyzer using @typescript-eslint/parser\n */\nexport class SyntaxAnalyzer {\n id = \"syntax\";\n name = \"Syntax Analysis\";\n filePatterns = [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"];\n async analyze(context) {\n const startTime = performance.now();\n const issues = [];\n let filesAnalyzed = 0;\n let nodesVisited = 0;\n const parseErrors = [];\n for (const [file, content] of context.contents) {\n if (!this.shouldAnalyzeFile(file))\n continue;\n filesAnalyzed++;\n try {\n // Parse with @typescript-eslint/parser\n const ast = eslintParser.parse(content, {\n sourceType: \"module\",\n ecmaFeatures: {\n jsx: file.endsWith(\".tsx\") || file.endsWith(\".jsx\"),\n },\n ecmaVersion: \"latest\",\n // Error recovery mode to get partial AST even with errors\n errorOnUnknownASTType: false,\n });\n // Count nodes for coverage metric\n nodesVisited += this.countNodes(ast);\n // Check for syntax issues that the parser didn't catch but still parsed\n this.checkSyntaxPatterns(content, file, issues);\n }\n catch (error) {\n // Parse error - this is a real syntax issue\n const parseError = this.extractParseError(error);\n parseErrors.push(`${file}: ${parseError.message}`);\n issues.push({\n id: `syntax/parse-error/${file}/${parseError.line}`,\n severity: \"critical\",\n type: \"SYNTAX_ERROR\",\n message: parseError.message,\n file,\n line: parseError.line,\n column: parseError.column,\n fix: \"Fix the syntax error to allow parsing\",\n });\n }\n }\n return {\n analyzer: this.id,\n success: true,\n issues,\n coverage: filesAnalyzed / Math.max(context.files.length, 1),\n duration: performance.now() - startTime,\n metadata: {\n filesAnalyzed,\n nodesVisited,\n parseErrors,\n },\n };\n }\n shouldRun(context) {\n return context.files.some((f) => this.shouldAnalyzeFile(f));\n }\n shouldAnalyzeFile(file) {\n const ext = file.split(\".\").pop()?.toLowerCase();\n return [\"ts\", \"tsx\", \"js\", \"jsx\"].includes(ext || \"\");\n }\n /**\n * Extract parse error information from parser exception\n */\n extractParseError(error) {\n if (error instanceof Error) {\n // @typescript-eslint/parser errors have line/column info\n const match = error.message.match(/\\((\\d+):(\\d+)\\)/);\n if (match) {\n return {\n message: error.message,\n line: Number.parseInt(match[1], 10),\n column: Number.parseInt(match[2], 10),\n };\n }\n return {\n message: error.message,\n line: 1,\n column: 1,\n };\n }\n return {\n message: String(error),\n line: 1,\n column: 1,\n };\n }\n /**\n * Count AST nodes for coverage metrics\n */\n countNodes(node) {\n if (!node || typeof node !== \"object\")\n return 0;\n let count = 1;\n for (const key of Object.keys(node)) {\n const value = node[key];\n if (Array.isArray(value)) {\n for (const item of value) {\n count += this.countNodes(item);\n }\n }\n else if (value && typeof value === \"object\" && \"type\" in value) {\n count += this.countNodes(value);\n }\n }\n return count;\n }\n /**\n * Check for additional syntax patterns that may indicate issues\n */\n checkSyntaxPatterns(content, file, issues) {\n const lines = content.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lineNum = i + 1;\n // Check for double semicolons\n if (line.includes(\";;\")) {\n issues.push({\n id: `syntax/double-semicolon/${file}/${lineNum}`,\n severity: \"low\",\n type: \"SYNTAX_WARNING\",\n message: \"Double semicolon detected\",\n file,\n line: lineNum,\n column: line.indexOf(\";;\") + 1,\n fix: \"Remove extra semicolon\",\n snippet: line.trim(),\n });\n }\n // Check for console.assert with empty second argument\n if (/console\\.assert\\([^,]+,\\s*\\)/.test(line)) {\n issues.push({\n id: `syntax/empty-assert/${file}/${lineNum}`,\n severity: \"medium\",\n type: \"SYNTAX_WARNING\",\n message: \"console.assert with empty message\",\n file,\n line: lineNum,\n fix: \"Add assertion message for debugging\",\n snippet: line.trim(),\n });\n }\n // Check for likely typos: = instead of === in conditions\n if (/if\\s*\\([^=]*=\\s*[^=]/.test(line) && !/if\\s*\\([^=]*[=!]==/.test(line)) {\n // Only warn if it looks like an assignment in a condition\n const assignMatch = line.match(/if\\s*\\(\\s*(\\w+)\\s*=\\s*[^=]/);\n if (assignMatch) {\n issues.push({\n id: `syntax/assignment-in-condition/${file}/${lineNum}`,\n severity: \"medium\",\n type: \"SYNTAX_WARNING\",\n message: \"Possible assignment in condition (did you mean ===?)\",\n file,\n line: lineNum,\n fix: \"Use === for comparison, or wrap in extra parentheses if intentional\",\n snippet: line.trim(),\n });\n }\n }\n }\n }\n}\n","/**\n * Completeness Analyzer\n *\n * Detects incomplete implementations: TODO comments, empty catch blocks,\n * NotImplementedError, empty function bodies, placeholder code.\n *\n * Uses @babel/parser + @babel/traverse for AST-based detection.\n *\n * @module analysis/completeness/CompletenessAnalyzer\n */\nimport { parse } from \"@babel/parser\";\nimport traverse from \"@babel/traverse\";\n/**\n * AST-based completeness analyzer\n */\nexport class CompletenessAnalyzer {\n id = \"completeness\";\n name = \"Completeness Detection\";\n filePatterns = [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"];\n todoPatterns = [\n /\\/\\/\\s*TODO\\b/gi,\n /\\/\\/\\s*FIXME\\b/gi,\n /\\/\\/\\s*XXX\\b/gi,\n /\\/\\/\\s*HACK\\b/gi,\n /\\/\\*\\s*TODO\\b/gi,\n /\\/\\*\\s*FIXME\\b/gi,\n ];\n placeholderPatterns = [\n /throw\\s+new\\s+Error\\s*\\(\\s*['\"`].*not\\s*implemented.*['\"`]\\s*\\)/gi,\n /throw\\s+new\\s+Error\\s*\\(\\s*['\"`]TODO.*['\"`]\\s*\\)/gi,\n /NotImplementedError/gi,\n /throw\\s+new\\s+Error\\s*\\(\\s*['\"`]STUB['\"`]\\s*\\)/gi,\n ];\n parserOptions = {\n sourceType: \"module\",\n plugins: [\"typescript\", \"jsx\"],\n errorRecovery: true,\n };\n async analyze(context) {\n const startTime = performance.now();\n const issues = [];\n let filesAnalyzed = 0;\n let nodesVisited = 0;\n const parseErrors = [];\n for (const [file, content] of context.contents) {\n if (!this.shouldAnalyzeFile(file))\n continue;\n filesAnalyzed++;\n // Line-based detection for comments\n this.checkTodoComments(content, file, issues);\n this.checkPlaceholderPatterns(content, file, issues);\n // AST-based detection for structural issues\n try {\n const ast = parse(content, {\n ...this.parserOptions,\n plugins: this.getPluginsForFile(file),\n });\n const result = this.analyzeAST(ast, content, file);\n issues.push(...result.issues);\n nodesVisited += result.nodesVisited;\n }\n catch (error) {\n parseErrors.push(`${file}: ${error instanceof Error ? error.message : String(error)}`);\n // Parsing errors are handled by SyntaxAnalyzer, don't duplicate\n }\n }\n return {\n analyzer: this.id,\n success: true,\n issues,\n coverage: filesAnalyzed / Math.max(context.files.length, 1),\n duration: performance.now() - startTime,\n metadata: {\n filesAnalyzed,\n nodesVisited,\n patternsChecked: [\"TODO\", \"FIXME\", \"EMPTY_CATCH\", \"EMPTY_FUNCTION\", \"NOT_IMPLEMENTED\", \"PLACEHOLDER\"],\n parseErrors,\n },\n };\n }\n shouldRun(context) {\n return context.files.some((f) => this.shouldAnalyzeFile(f));\n }\n shouldAnalyzeFile(file) {\n const ext = file.split(\".\").pop()?.toLowerCase();\n return [\"ts\", \"tsx\", \"js\", \"jsx\"].includes(ext || \"\");\n }\n getPluginsForFile(file) {\n const plugins = [\"typescript\"];\n if (file.endsWith(\".tsx\") || file.endsWith(\".jsx\")) {\n plugins.push(\"jsx\");\n }\n return plugins;\n }\n /**\n * Check for TODO/FIXME comments\n */\n checkTodoComments(content, file, issues) {\n const lines = content.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lineNum = i + 1;\n for (const pattern of this.todoPatterns) {\n // Reset lastIndex for global patterns\n pattern.lastIndex = 0;\n if (pattern.test(line)) {\n // Extract the TODO content\n const todoContent = line.trim().slice(0, 100);\n issues.push({\n id: `completeness/todo/${file}/${lineNum}`,\n severity: \"medium\",\n type: \"INCOMPLETE_IMPLEMENTATION\",\n message: `TODO/FIXME: ${todoContent}`,\n file,\n line: lineNum,\n snippet: todoContent,\n });\n break; // Only report once per line\n }\n }\n }\n }\n /**\n * Check for placeholder/stub patterns\n */\n checkPlaceholderPatterns(content, file, issues) {\n const lines = content.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lineNum = i + 1;\n for (const pattern of this.placeholderPatterns) {\n pattern.lastIndex = 0;\n if (pattern.test(line)) {\n issues.push({\n id: `completeness/placeholder/${file}/${lineNum}`,\n severity: \"high\",\n type: \"INCOMPLETE_IMPLEMENTATION\",\n message: 'Placeholder implementation: \"not implemented\" or similar',\n file,\n line: lineNum,\n fix: \"Implement the functionality or remove the placeholder\",\n snippet: line.trim().slice(0, 100),\n });\n break;\n }\n }\n }\n }\n /**\n * AST-based detection of empty/incomplete code\n */\n analyzeAST(ast, _content, file) {\n const issues = [];\n let nodesVisited = 0;\n traverse(ast, {\n enter() {\n nodesVisited++;\n },\n // Empty catch blocks\n CatchClause: (path) => {\n const body = path.node.body;\n if (body.body.length === 0) {\n issues.push({\n id: `completeness/empty-catch/${file}/${path.node.loc?.start.line}`,\n severity: \"medium\",\n type: \"INCOMPLETE_IMPLEMENTATION\",\n message: \"Empty catch block - errors silently swallowed\",\n file,\n line: path.node.loc?.start.line,\n fix: \"Add error handling, rethrow, or log the error\",\n });\n }\n else if (body.body.length === 1) {\n // Check for comment-only catch blocks\n const stmt = body.body[0];\n if (stmt.type === \"EmptyStatement\") {\n issues.push({\n id: `completeness/empty-catch/${file}/${path.node.loc?.start.line}`,\n severity: \"medium\",\n type: \"INCOMPLETE_IMPLEMENTATION\",\n message: \"Catch block contains only empty statement\",\n file,\n line: path.node.loc?.start.line,\n fix: \"Add proper error handling\",\n });\n }\n }\n },\n // Empty function bodies (excluding type declarations and interface methods)\n FunctionDeclaration: (path) => {\n if (path.node.body.body.length === 0) {\n const funcName = path.node.id?.name || \"anonymous\";\n // Skip if it's likely a stub for interface implementation\n const hasOverrideDecorator = false; // Would need to check decorators\n if (!hasOverrideDecorator) {\n issues.push({\n id: `completeness/empty-fn/${file}/${path.node.loc?.start.line}`,\n severity: \"medium\",\n type: \"INCOMPLETE_IMPLEMENTATION\",\n message: `Empty function body: ${funcName}()`,\n file,\n line: path.node.loc?.start.line,\n fix: \"Implement the function or mark as abstract/stub if intentional\",\n });\n }\n }\n },\n // Empty method bodies\n ClassMethod: (path) => {\n // Skip abstract methods, getters with explicit return, etc.\n if (path.node.abstract)\n return;\n if (path.node.kind === \"get\" || path.node.kind === \"set\")\n return;\n const body = path.node.body;\n if (body && body.body.length === 0) {\n const methodName = path.node.key.type === \"Identifier\" ? path.node.key.name : \"anonymous\";\n // Skip constructor with only super() call\n if (methodName === \"constructor\")\n return;\n issues.push({\n id: `completeness/empty-method/${file}/${path.node.loc?.start.line}`,\n severity: \"medium\",\n type: \"INCOMPLETE_IMPLEMENTATION\",\n message: `Empty method body: ${methodName}()`,\n file,\n line: path.node.loc?.start.line,\n fix: \"Implement the method or mark as abstract if intentional\",\n });\n }\n },\n // Arrow functions that just throw or are empty (might be intentional)\n ArrowFunctionExpression: (path) => {\n const body = path.node.body;\n // Check if it's a block body that's empty\n if (body.type === \"BlockStatement\" && body.body.length === 0) {\n // Only warn if it's assigned to a variable (likely meant to be implemented)\n const parent = path.parent;\n if (parent.type === \"VariableDeclarator\") {\n const varName = parent.id.type === \"Identifier\" ? parent.id.name : \"anonymous\";\n issues.push({\n id: `completeness/empty-arrow/${file}/${path.node.loc?.start.line}`,\n severity: \"low\",\n type: \"INCOMPLETE_IMPLEMENTATION\",\n message: `Empty arrow function: ${varName}`,\n file,\n line: path.node.loc?.start.line,\n fix: \"Implement the function or use () => {} if intentionally empty\",\n });\n }\n }\n },\n // Check for console.log that might be debug code\n CallExpression: (path) => {\n const callee = path.node.callee;\n if (callee.type === \"MemberExpression\" &&\n callee.object.type === \"Identifier\" &&\n callee.object.name === \"console\" &&\n callee.property.type === \"Identifier\" &&\n callee.property.name === \"log\") {\n // Check if it looks like debug code\n const firstArg = path.node.arguments[0];\n if (firstArg && firstArg.type === \"StringLiteral\") {\n const msg = firstArg.value.toLowerCase();\n if (msg.includes(\"debug\") ||\n msg.includes(\"test\") ||\n msg.includes(\"todo\") ||\n msg.includes(\"remove\")) {\n issues.push({\n id: `completeness/debug-log/${file}/${path.node.loc?.start.line}`,\n severity: \"low\",\n type: \"DEBUG_CODE\",\n message: `Debug console.log left in code: \"${firstArg.value.slice(0, 50)}\"`,\n file,\n line: path.node.loc?.start.line,\n fix: \"Remove debug logging before commit\",\n });\n }\n }\n }\n },\n });\n return { issues, nodesVisited };\n }\n}\n","/**\n * ChangeImpactAnalyzer\n *\n * Predicts the impact of code changes across the codebase:\n * - Affected tests (which tests might fail)\n * - Breaking changes (API/interface changes)\n * - Performance implications (hot path modifications)\n * - Dependency ripple effects\n *\n * @module analysis/impact/ChangeImpactAnalyzer\n */\nimport { basename, dirname, relative } from \"node:path\";\n// =============================================================================\n// Pattern Matchers\n// =============================================================================\n/**\n * Patterns that indicate exported API\n */\nconst EXPORT_PATTERNS = [\n /export\\s+(const|function|class|interface|type|enum)\\s+(\\w+)/g,\n /export\\s+default\\s+(function|class)?\\s*(\\w+)?/g,\n /export\\s+\\{([^}]+)\\}/g,\n];\n/**\n * Patterns that indicate function signatures\n */\nconst _SIGNATURE_PATTERNS = [\n // Function with parameters\n /(?:async\\s+)?function\\s+(\\w+)\\s*\\(([^)]*)\\)/g,\n // Arrow function\n /(?:const|let)\\s+(\\w+)\\s*=\\s*(?:async\\s*)?\\(([^)]*)\\)\\s*(?::\\s*\\w+)?\\s*=>/g,\n // Method in class\n /(?:public|private|protected)?\\s*(?:async\\s+)?(\\w+)\\s*\\(([^)]*)\\)/g,\n];\n/**\n * Patterns indicating performance-sensitive code\n */\nconst PERFORMANCE_PATTERNS = [\n { pattern: /\\.forEach\\s*\\(/g, type: \"computation\", risk: \"low\" },\n { pattern: /for\\s*\\(\\s*let\\s+\\w+\\s*=\\s*0/g, type: \"computation\", risk: \"low\" },\n { pattern: /while\\s*\\(/g, type: \"computation\", risk: \"medium\" },\n { pattern: /async\\s+function|await\\s+/g, type: \"io\", risk: \"medium\" },\n { pattern: /new\\s+(Map|Set|Array)\\s*\\(/g, type: \"memory\", risk: \"low\" },\n { pattern: /JSON\\.(parse|stringify)/g, type: \"computation\", risk: \"medium\" },\n { pattern: /readFileSync|writeFileSync/g, type: \"io\", risk: \"high\" },\n { pattern: /spawn|exec\\s*\\(/g, type: \"io\", risk: \"high\" },\n { pattern: /import\\s*\\(/g, type: \"bundle\", risk: \"low\" },\n { pattern: /require\\s*\\(/g, type: \"bundle\", risk: \"medium\" },\n];\n/**\n * File patterns that indicate test files\n */\nconst TEST_FILE_PATTERNS = [/\\.test\\.[tj]sx?$/, /\\.spec\\.[tj]sx?$/, /__tests__\\//, /test\\//, /tests\\//];\n// =============================================================================\n// ChangeImpactAnalyzer\n// =============================================================================\nexport class ChangeImpactAnalyzer {\n id = \"change-impact\";\n name = \"Change Impact Analyzer\";\n filePatterns = [\"**/*.ts\", \"**/*.tsx\", \"**/*.js\", \"**/*.jsx\"];\n workspaceRoot;\n dependencyGraph = new Map();\n reverseDependencyGraph = new Map();\n constructor(workspaceRoot) {\n this.workspaceRoot = workspaceRoot;\n }\n /**\n * Check if this analyzer should run\n */\n shouldRun(context) {\n return context.files.some((f) => this.filePatterns.some((p) => new RegExp(p.replace(/\\*/g, \".*\")).test(f)));\n }\n /**\n * Run impact analysis\n */\n async analyze(context) {\n const start = Date.now();\n const issues = [];\n try {\n // Build dependency graph from context\n await this.buildDependencyGraph(context);\n // Analyze each file\n for (const file of context.files) {\n const content = context.contents.get(file);\n if (!content) {\n continue;\n }\n // Detect breaking changes\n const breakingChanges = this.detectBreakingChanges(content, file);\n for (const bc of breakingChanges) {\n issues.push({\n id: `impact/breaking/${bc.type}/${file}/${bc.symbol}`,\n severity: bc.severity,\n type: `BREAKING_${bc.type.toUpperCase()}`,\n message: bc.description,\n file,\n fix: bc.migration,\n });\n }\n // Detect performance impacts\n const perfImpacts = this.detectPerformanceImpacts(content, file);\n for (const pi of perfImpacts) {\n if (pi.risk === \"high\" || pi.risk === \"critical\") {\n issues.push({\n id: `impact/perf/${pi.type}/${file}/${pi.component}`,\n severity: pi.risk === \"critical\" ? \"critical\" : \"high\",\n type: `PERF_${pi.type.toUpperCase()}`,\n message: pi.description,\n file,\n fix: pi.recommendation,\n });\n }\n }\n // Check for affected tests\n const affectedTests = this.findAffectedTests(file);\n if (affectedTests.length > 5) {\n issues.push({\n id: `impact/tests/${file}`,\n severity: \"medium\",\n type: \"HIGH_TEST_IMPACT\",\n message: `Change affects ${affectedTests.length} test files - consider running full test suite`,\n file,\n });\n }\n }\n return {\n analyzer: this.id,\n success: true,\n issues,\n coverage: 1,\n duration: Date.now() - start,\n metadata: {\n filesAnalyzed: context.files.length,\n },\n };\n }\n catch (error) {\n return {\n analyzer: this.id,\n success: false,\n issues: [\n {\n id: \"impact/error\",\n severity: \"high\",\n type: \"ANALYSIS_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n },\n ],\n coverage: 0,\n duration: Date.now() - start,\n };\n }\n }\n /**\n * Get full impact analysis (more detailed than standard analyze)\n */\n async getFullImpact(files, contents) {\n const start = Date.now();\n // Build context\n const context = {\n workspaceRoot: this.workspaceRoot,\n files,\n contents,\n };\n await this.buildDependencyGraph(context);\n const affectedTests = [];\n const breakingChanges = [];\n const performanceImpacts = [];\n const dependentFiles = [];\n const recommendations = [];\n for (const file of files) {\n const content = contents.get(file) || \"\";\n // Find affected tests\n const tests = this.findAffectedTests(file);\n affectedTests.push(...tests);\n // Detect breaking changes\n const breaks = this.detectBreakingChanges(content, file);\n breakingChanges.push(...breaks);\n // Detect performance impacts\n const perfs = this.detectPerformanceImpacts(content, file);\n performanceImpacts.push(...perfs);\n // Find dependent files\n const deps = this.findDependentFiles(file);\n dependentFiles.push(...deps);\n }\n // Calculate impact score\n const impactScore = this.calculateImpactScore(affectedTests, breakingChanges, performanceImpacts, dependentFiles);\n // Generate recommendations\n if (breakingChanges.length > 0) {\n recommendations.push(`⚠️ ${breakingChanges.length} breaking change(s) detected - update dependent code`);\n }\n if (affectedTests.length > 10) {\n recommendations.push(`🧪 Run full test suite - ${affectedTests.length} tests potentially affected`);\n }\n if (performanceImpacts.some((p) => p.risk === \"high\" || p.risk === \"critical\")) {\n recommendations.push(\"⚡ Performance-sensitive code modified - run benchmarks\");\n }\n if (dependentFiles.length > 20) {\n recommendations.push(\"🔗 High ripple effect - consider incremental rollout\");\n }\n return {\n filesAnalyzed: files.length,\n affectedTests: this.dedupeItems(affectedTests),\n breakingChanges,\n performanceImpacts,\n dependentFiles: this.dedupeItems(dependentFiles),\n impactScore,\n recommendations,\n duration: Date.now() - start,\n };\n }\n // =========================================================================\n // Private Methods\n // =========================================================================\n /**\n * Build dependency graph from file contents\n */\n async buildDependencyGraph(context) {\n this.dependencyGraph.clear();\n this.reverseDependencyGraph.clear();\n for (const file of context.files) {\n const content = context.contents.get(file);\n if (!content) {\n continue;\n }\n const imports = this.extractImports(content, file);\n this.dependencyGraph.set(file, imports);\n // Build reverse graph\n for (const imp of imports) {\n const existing = this.reverseDependencyGraph.get(imp) || [];\n existing.push(file);\n this.reverseDependencyGraph.set(imp, existing);\n }\n }\n }\n /**\n * Extract import statements from file content\n */\n extractImports(content, fromFile) {\n const imports = [];\n const importRegex = /import\\s+(?:.*?\\s+from\\s+)?['\"]([^'\"]+)['\"]/g;\n const requireRegex = /require\\s*\\(['\"]([^'\"]+)['\"]\\)/g;\n let match;\n while ((match = importRegex.exec(content)) !== null) {\n const importPath = this.resolveImportPath(match[1], fromFile);\n if (importPath) {\n imports.push(importPath);\n }\n }\n while ((match = requireRegex.exec(content)) !== null) {\n const importPath = this.resolveImportPath(match[1], fromFile);\n if (importPath) {\n imports.push(importPath);\n }\n }\n return imports;\n }\n /**\n * Resolve import path to absolute file path\n */\n resolveImportPath(importPath, fromFile) {\n // Skip external packages\n if (!importPath.startsWith(\".\") && !importPath.startsWith(\"/\")) {\n return null;\n }\n const dir = dirname(fromFile);\n const extensions = [\".ts\", \".tsx\", \".js\", \".jsx\", \"/index.ts\", \"/index.tsx\", \"/index.js\"];\n for (const ext of extensions) {\n const resolved = `${dir}/${importPath}${ext}`.replace(/\\/\\.\\//g, \"/\");\n return resolved;\n }\n return null;\n }\n /**\n * Find test files that might be affected by a change\n */\n findAffectedTests(file) {\n const tests = [];\n const relPath = relative(this.workspaceRoot, file);\n const fileName = basename(file).replace(/\\.[tj]sx?$/, \"\");\n // Direct test files for this source\n const directTestPatterns = [\n `${fileName}.test.ts`,\n `${fileName}.test.tsx`,\n `${fileName}.spec.ts`,\n `${fileName}.spec.tsx`,\n `__tests__/${fileName}.test.ts`,\n `__tests__/${fileName}.test.tsx`,\n ];\n for (const pattern of directTestPatterns) {\n tests.push({\n path: pattern,\n reason: \"Direct test file for changed source\",\n level: \"high\",\n });\n }\n // Files that import this file might have tests\n const importers = this.reverseDependencyGraph.get(file) || [];\n for (const importer of importers) {\n if (this.isTestFile(importer)) {\n tests.push({\n path: relative(this.workspaceRoot, importer),\n reason: \"Test file imports changed module\",\n level: \"medium\",\n });\n }\n }\n // Integration tests if this is a core module\n if (relPath.includes(\"/core/\") || relPath.includes(\"/services/\")) {\n tests.push({\n path: \"**/*.integration.test.ts\",\n reason: \"Core module change may affect integration tests\",\n level: \"low\",\n });\n }\n return tests;\n }\n /**\n * Check if a file is a test file\n */\n isTestFile(file) {\n return TEST_FILE_PATTERNS.some((p) => p.test(file));\n }\n /**\n * Detect breaking changes in content\n */\n detectBreakingChanges(content, file) {\n const breaks = [];\n // Check for exported symbols\n for (const pattern of EXPORT_PATTERNS) {\n const regex = new RegExp(pattern.source, pattern.flags);\n let match;\n while ((match = regex.exec(content)) !== null) {\n const symbolName = match[2] || match[1];\n if (symbolName) {\n // Check if this is a potential breaking change\n // (In a real implementation, we'd compare with previous version)\n breaks.push({\n type: \"export\",\n symbol: symbolName,\n file,\n description: `Exported symbol '${symbolName}' may have changed`,\n severity: \"medium\",\n migration: `Verify consumers of '${symbolName}' are updated`,\n });\n }\n }\n }\n // Check for interface/type changes\n const interfaceRegex = /(?:export\\s+)?interface\\s+(\\w+)\\s*\\{([^}]+)\\}/g;\n let match;\n while ((match = interfaceRegex.exec(content)) !== null) {\n const interfaceName = match[1];\n const body = match[2];\n // Check for optional vs required changes (simplified)\n if (body.includes(\"?:\") || body.includes(\": \")) {\n breaks.push({\n type: \"type\",\n symbol: interfaceName,\n file,\n description: `Interface '${interfaceName}' definition changed`,\n severity: \"medium\",\n });\n }\n }\n return breaks;\n }\n /**\n * Detect performance-sensitive code changes\n */\n detectPerformanceImpacts(content, file) {\n const impacts = [];\n for (const { pattern, type, risk } of PERFORMANCE_PATTERNS) {\n const regex = new RegExp(pattern.source, pattern.flags);\n let match;\n while ((match = regex.exec(content)) !== null) {\n impacts.push({\n type,\n description: `${type} operation detected: ${match[0]}`,\n risk,\n component: basename(file),\n recommendation: this.getPerformanceRecommendation(type),\n });\n }\n }\n return impacts;\n }\n /**\n * Get recommendation for performance issue type\n */\n getPerformanceRecommendation(type) {\n switch (type) {\n case \"hotpath\":\n return \"Consider memoization or caching for hot paths\";\n case \"memory\":\n return \"Monitor memory usage, consider object pooling\";\n case \"io\":\n return \"Use async operations, consider batching\";\n case \"computation\":\n return \"Profile for bottlenecks, consider Web Workers\";\n case \"bundle\":\n return \"Use dynamic imports for code splitting\";\n default:\n return \"Profile before optimizing\";\n }\n }\n /**\n * Find files that depend on changed file\n */\n findDependentFiles(file) {\n const dependents = [];\n const visited = new Set();\n const traverse = (current, depth) => {\n if (visited.has(current) || depth > 3) {\n return;\n }\n visited.add(current);\n const importers = this.reverseDependencyGraph.get(current) || [];\n for (const importer of importers) {\n dependents.push({\n path: relative(this.workspaceRoot, importer),\n reason: depth === 0 ? \"Directly imports changed file\" : `Transitive dependency (depth ${depth})`,\n level: depth === 0 ? \"high\" : depth === 1 ? \"medium\" : \"low\",\n });\n traverse(importer, depth + 1);\n }\n };\n traverse(file, 0);\n return dependents;\n }\n /**\n * Calculate overall impact score\n */\n calculateImpactScore(tests, breaks, perfs, deps) {\n let score = 0;\n // Weight by category\n score += Math.min(tests.length * 0.05, 0.25);\n score += Math.min(breaks.length * 0.15, 0.35);\n score += Math.min(perfs.filter((p) => p.risk === \"high\").length * 0.1, 0.2);\n score += Math.min(deps.length * 0.02, 0.2);\n return Math.min(score, 1);\n }\n /**\n * Deduplicate impact items\n */\n dedupeItems(items) {\n const seen = new Set();\n return items.filter((item) => {\n if (seen.has(item.path)) {\n return false;\n }\n seen.add(item.path);\n return true;\n });\n }\n}\n// =============================================================================\n// Factory\n// =============================================================================\n/**\n * Create ChangeImpactAnalyzer instance\n */\nexport function createChangeImpactAnalyzer(workspaceRoot) {\n return new ChangeImpactAnalyzer(workspaceRoot);\n}\n","/**\n * Security Analyzer\n *\n * Uses @babel/parser + @babel/traverse for AST-based security analysis.\n * Detects eval, path traversal, missing signal handlers, and other security issues.\n *\n * @module analysis/security/SecurityAnalyzer\n */\nimport { parse } from \"@babel/parser\";\nimport traverse from \"@babel/traverse\";\n/**\n * AST-based security analyzer using Babel\n */\nexport class SecurityAnalyzer {\n id = \"security\";\n name = \"Security Analysis\";\n filePatterns = [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"];\n parserOptions = {\n sourceType: \"module\",\n plugins: [\"typescript\", \"jsx\"],\n errorRecovery: true,\n };\n async analyze(context) {\n const startTime = performance.now();\n const issues = [];\n let filesAnalyzed = 0;\n let nodesVisited = 0;\n const parseErrors = [];\n for (const [file, content] of context.contents) {\n if (!this.shouldAnalyzeFile(file))\n continue;\n filesAnalyzed++;\n try {\n const ast = parse(content, {\n ...this.parserOptions,\n plugins: this.getPluginsForFile(file),\n });\n const fileIssues = this.analyzeAST(ast, content, file);\n issues.push(...fileIssues.issues);\n nodesVisited += fileIssues.nodesVisited;\n }\n catch (error) {\n parseErrors.push(`${file}: ${error instanceof Error ? error.message : String(error)}`);\n issues.push({\n id: `security/parse-error/${file}`,\n severity: \"info\",\n type: \"PARSE_ERROR\",\n message: `Could not parse for security analysis: ${error instanceof Error ? error.message : String(error)}`,\n file,\n });\n }\n }\n return {\n analyzer: this.id,\n success: true,\n issues,\n coverage: filesAnalyzed / Math.max(context.files.length, 1),\n duration: performance.now() - startTime,\n metadata: {\n filesAnalyzed,\n nodesVisited,\n patternsChecked: [\n \"UNSAFE_EVAL\",\n \"PATH_TRAVERSAL\",\n \"MISSING_SIGNAL_HANDLER\",\n \"COMMAND_INJECTION\",\n \"SQL_INJECTION\",\n \"XSS_RISK\",\n \"HARDCODED_SECRET\",\n \"UNSAFE_REGEX\",\n ],\n parseErrors,\n },\n };\n }\n shouldRun(context) {\n return context.files.some((f) => this.shouldAnalyzeFile(f));\n }\n shouldAnalyzeFile(file) {\n const ext = file.split(\".\").pop()?.toLowerCase();\n return [\"ts\", \"tsx\", \"js\", \"jsx\"].includes(ext || \"\");\n }\n getPluginsForFile(file) {\n const plugins = [\"typescript\"];\n if (file.endsWith(\".tsx\") || file.endsWith(\".jsx\")) {\n plugins.push(\"jsx\");\n }\n return plugins;\n }\n /**\n * Analyze AST for security issues\n */\n analyzeAST(ast, content, file) {\n const issues = [];\n let nodesVisited = 0;\n // Track context for daemon/server detection\n const fileContext = {\n isDaemon: false,\n hasSignalHandler: false,\n hasSocketPermissions: false,\n hasBufferLimits: false,\n };\n // Pre-scan content for daemon indicators\n fileContext.isDaemon =\n content.includes(\".listen(\") ||\n file.includes(\"daemon\") ||\n file.includes(\"server\") ||\n file.includes(\"worker\");\n traverse(ast, {\n enter() {\n nodesVisited++;\n },\n // Detect eval()\n CallExpression: (path) => {\n const callee = path.node.callee;\n // eval() detection\n if (callee.type === \"Identifier\" && callee.name === \"eval\") {\n issues.push({\n id: `security/eval/${file}/${path.node.loc?.start.line}`,\n severity: \"critical\",\n type: \"UNSAFE_EVAL\",\n message: \"eval() allows arbitrary code execution\",\n file,\n line: path.node.loc?.start.line,\n column: path.node.loc?.start.column,\n fix: \"Use JSON.parse() for data or refactor logic to avoid eval\",\n });\n }\n // new Function() detection\n if (callee.type === \"Identifier\" && callee.name === \"Function\") {\n issues.push({\n id: `security/function-constructor/${file}/${path.node.loc?.start.line}`,\n severity: \"critical\",\n type: \"UNSAFE_EVAL\",\n message: \"new Function() is equivalent to eval() and allows arbitrary code execution\",\n file,\n line: path.node.loc?.start.line,\n column: path.node.loc?.start.column,\n fix: \"Refactor to avoid dynamic code generation\",\n });\n }\n // setTimeout/setInterval with string (like eval)\n if (callee.type === \"Identifier\" && (callee.name === \"setTimeout\" || callee.name === \"setInterval\")) {\n const firstArg = path.node.arguments[0];\n if (firstArg && firstArg.type === \"StringLiteral\") {\n issues.push({\n id: `security/string-timer/${file}/${path.node.loc?.start.line}`,\n severity: \"high\",\n type: \"UNSAFE_EVAL\",\n message: `${callee.name} with string argument executes code like eval()`,\n file,\n line: path.node.loc?.start.line,\n fix: \"Pass a function instead of a string\",\n });\n }\n }\n // exec/execSync (command injection risk)\n if (callee.type === \"Identifier\" && (callee.name === \"exec\" || callee.name === \"execSync\")) {\n const firstArg = path.node.arguments[0];\n if (firstArg && !this.isStaticString(firstArg)) {\n issues.push({\n id: `security/command-injection/${file}/${path.node.loc?.start.line}`,\n severity: \"high\",\n type: \"COMMAND_INJECTION\",\n message: \"exec with dynamic command - potential command injection\",\n file,\n line: path.node.loc?.start.line,\n fix: \"Validate/sanitize input or use execFile with explicit arguments\",\n });\n }\n }\n // Signal handler detection for daemons\n if (callee.type === \"MemberExpression\" &&\n callee.object.type === \"Identifier\" &&\n callee.object.name === \"process\" &&\n callee.property.type === \"Identifier\" &&\n callee.property.name === \"on\") {\n const firstArg = path.node.arguments[0];\n if (firstArg && firstArg.type === \"StringLiteral\") {\n if (firstArg.value === \"SIGTERM\" || firstArg.value === \"SIGINT\") {\n fileContext.hasSignalHandler = true;\n }\n }\n }\n },\n // Detect fs operations with dynamic paths\n MemberExpression: (path) => {\n const node = path.node;\n if (node.object.type === \"Identifier\" && (node.object.name === \"fs\" || node.object.name === \"fsp\")) {\n const parent = path.parentPath;\n if (parent.isCallExpression()) {\n const methodName = node.property.type === \"Identifier\"\n ? node.property.name\n : node.property.value;\n // fs operations that take paths\n const pathMethods = [\n \"readFile\",\n \"readFileSync\",\n \"writeFile\",\n \"writeFileSync\",\n \"readdir\",\n \"readdirSync\",\n \"stat\",\n \"statSync\",\n \"unlink\",\n \"unlinkSync\",\n \"mkdir\",\n \"mkdirSync\",\n \"rmdir\",\n \"rmdirSync\",\n \"access\",\n \"accessSync\",\n ];\n if (pathMethods.includes(methodName)) {\n const firstArg = parent.node.arguments[0];\n if (firstArg && !this.isStaticPath(firstArg)) {\n issues.push({\n id: `security/path-traversal/${file}/${path.node.loc?.start.line}`,\n severity: \"high\",\n type: \"PATH_TRAVERSAL\",\n message: `fs.${methodName} with dynamic path - potential path traversal`,\n file,\n line: path.node.loc?.start.line,\n fix: \"Validate paths against workspace root before use\",\n });\n }\n }\n }\n }\n },\n // Check for dangerous regex patterns\n NewExpression: (path) => {\n if (path.node.callee.type === \"Identifier\" && path.node.callee.name === \"RegExp\") {\n const firstArg = path.node.arguments[0];\n if (firstArg && !this.isStaticString(firstArg)) {\n issues.push({\n id: `security/unsafe-regex/${file}/${path.node.loc?.start.line}`,\n severity: \"medium\",\n type: \"UNSAFE_REGEX\",\n message: \"Dynamic RegExp - potential ReDoS or injection vulnerability\",\n file,\n line: path.node.loc?.start.line,\n fix: \"Use static regex patterns or validate input\",\n });\n }\n }\n },\n // Check for innerHTML/dangerouslySetInnerHTML (XSS)\n JSXAttribute: (path) => {\n const name = path.node.name;\n if (name.type === \"JSXIdentifier\" && name.name === \"dangerouslySetInnerHTML\") {\n issues.push({\n id: `security/xss-risk/${file}/${path.node.loc?.start.line}`,\n severity: \"high\",\n type: \"XSS_RISK\",\n message: \"dangerouslySetInnerHTML can lead to XSS if content is not sanitized\",\n file,\n line: path.node.loc?.start.line,\n fix: \"Sanitize HTML content before rendering or avoid using dangerouslySetInnerHTML\",\n });\n }\n },\n // Check for hardcoded secrets in variable declarations\n VariableDeclarator: (path) => {\n const id = path.node.id;\n const init = path.node.init;\n if (id.type === \"Identifier\" && init) {\n this.checkForHardcodedSecret(id.name, init, file, path.node.loc?.start.line, issues);\n }\n },\n // Check for hardcoded secrets in class properties\n ClassProperty: (path) => {\n const key = path.node.key;\n const value = path.node.value;\n if (key.type === \"Identifier\" && value) {\n this.checkForHardcodedSecret(key.name, value, file, path.node.loc?.start.line, issues);\n }\n },\n // After traversal is complete, check daemon-specific patterns\n Program: {\n exit: () => {\n if (fileContext.isDaemon && !fileContext.hasSignalHandler) {\n issues.push({\n id: `security/signal-handler/${file}`,\n severity: \"high\",\n type: \"MISSING_SIGNAL_HANDLER\",\n message: \"Daemon/server missing signal handlers (SIGTERM/SIGINT)\",\n file,\n fix: \"Add process.on('SIGTERM', gracefulShutdown) for clean shutdown\",\n });\n }\n },\n },\n });\n return { issues, nodesVisited };\n }\n /**\n * Check if expression is a static string (safe)\n */\n isStaticString(node) {\n if (node.type === \"StringLiteral\")\n return true;\n if (node.type === \"TemplateLiteral\" && node.expressions.length === 0)\n return true;\n return false;\n }\n /**\n * Check if expression is a static path (safe)\n */\n isStaticPath(node) {\n // Static string literal\n if (node.type === \"StringLiteral\")\n return true;\n // Template literal with no interpolation\n if (node.type === \"TemplateLiteral\" && node.expressions.length === 0)\n return true;\n // path.join(__dirname, 'static') is somewhat safe\n if (node.type === \"CallExpression\") {\n const callee = node.callee;\n if (callee.type === \"MemberExpression\" &&\n callee.object.type === \"Identifier\" &&\n callee.object.name === \"path\" &&\n callee.property.type === \"Identifier\" &&\n callee.property.name === \"join\") {\n // Check if all arguments are static or __dirname\n return node.arguments.every((arg) => {\n if (arg.type === \"StringLiteral\")\n return true;\n if (arg.type === \"Identifier\" && (arg.name === \"__dirname\" || arg.name === \"__filename\"))\n return true;\n return false;\n });\n }\n }\n return false;\n }\n /**\n * Check if a value looks like a hardcoded secret\n */\n checkForHardcodedSecret(name, value, file, line, issues) {\n if (!value) {\n return;\n }\n const varName = name.toLowerCase();\n const secretIndicators = [\"apikey\", \"api_key\", \"secret\", \"password\", \"token\", \"credential\", \"auth\", \"key\"];\n if (secretIndicators.some((s) => varName.includes(s))) {\n if (value.type === \"StringLiteral\" && value.value.length > 8) {\n // Skip obvious placeholders\n const valueStr = value.value.toLowerCase();\n if (!valueStr.includes(\"placeholder\") &&\n !valueStr.includes(\"example\") &&\n !valueStr.includes(\"xxx\") &&\n !valueStr.includes(\"todo\") &&\n !valueStr.includes(\"your_\") &&\n !valueStr.includes(\"env.\")) {\n issues.push({\n id: `security/hardcoded-secret/${file}/${line}`,\n severity: \"critical\",\n type: \"HARDCODED_SECRET\",\n message: `Possible hardcoded secret in \"${name}\"`,\n file,\n line,\n fix: \"Use environment variables for secrets\",\n });\n }\n }\n }\n }\n}\n","/**\n * Orphan File Detector\n *\n * Uses madge to detect orphaned files (files with no dependents).\n * These are potential dead code that may be safe to delete.\n *\n * Note: madge is a dev dependency, so this module handles the case\n * where it's not available gracefully.\n *\n * @module analysis/static/OrphanDetector\n */\nconst DEFAULT_OPTIONS = {\n fileExtensions: [\"ts\", \"tsx\", \"js\", \"jsx\"],\n excludePatterns: [\n \"node_modules\",\n \"dist\",\n \".next\",\n \"coverage\",\n \"**/*.test.*\",\n \"**/*.spec.*\",\n \"**/__tests__/**\",\n \"**/__mocks__/**\",\n ],\n};\n/**\n * Detect orphaned files in a directory\n *\n * @param entryPoint - Entry file or directory to analyze\n * @param options - Detection options\n * @returns Detection result with orphan list\n *\n * @example\n * ```typescript\n * const result = await detectOrphans(\"src/index.ts\", {\n * fileExtensions: [\"ts\", \"tsx\"],\n * excludePatterns: [\"node_modules\", \"dist\"]\n * });\n *\n * if (result.success && result.orphans.length > 0) {\n * console.log(\"Potential dead code:\", result.orphans);\n * }\n * ```\n */\nexport async function detectOrphans(entryPoint, options = {}) {\n const startTime = Date.now();\n const mergedOptions = { ...DEFAULT_OPTIONS, ...options };\n try {\n // Dynamic import madge - it's a dev dependency\n const madgeModule = await import(\"madge\");\n const madge = madgeModule.default || madgeModule;\n const result = await madge(entryPoint, {\n fileExtensions: mergedOptions.fileExtensions,\n excludeRegExp: mergedOptions.excludePatterns.map((p) => {\n // Convert glob patterns to regex\n const regexPattern = p.replace(/\\*\\*/g, \".*\").replace(/\\*/g, \"[^/]*\").replace(/\\./g, \"\\\\.\");\n return new RegExp(regexPattern);\n }),\n tsConfig: mergedOptions.tsConfigPath,\n detectiveOptions: {\n ts: {\n skipTypeImports: true,\n },\n },\n });\n const orphans = result.orphans();\n const allFiles = Object.keys(result.obj());\n return {\n orphans,\n totalFiles: allFiles.length,\n success: true,\n duration: Date.now() - startTime,\n };\n }\n catch (error) {\n return {\n orphans: [],\n totalFiles: 0,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n duration: Date.now() - startTime,\n };\n }\n}\n/**\n * Filter orphans to only include files from a specific list\n *\n * Useful for focusing on files the AI agent plans to modify.\n *\n * @param orphanResult - Result from detectOrphans\n * @param targetFiles - Files to filter to\n * @returns Filtered orphan list\n */\nexport function filterOrphansToFiles(orphanResult, targetFiles) {\n if (!orphanResult.success) {\n return [];\n }\n const targetSet = new Set(targetFiles.map((f) => f.replace(/\\\\/g, \"/\")));\n return orphanResult.orphans.filter((orphan) => {\n const normalizedOrphan = orphan.replace(/\\\\/g, \"/\");\n return targetSet.has(normalizedOrphan) || targetFiles.some((t) => normalizedOrphan.endsWith(t));\n });\n}\n/**\n * Check if specific files are orphans\n *\n * More efficient than full orphan detection when you only care\n * about specific files.\n *\n * @param files - Files to check\n * @param workspaceRoot - Workspace root directory\n * @returns Which of the provided files are orphans\n */\nexport async function checkFilesForOrphanStatus(files, workspaceRoot) {\n // For efficiency, we analyze the whole workspace once\n // then filter to the requested files\n const result = await detectOrphans(workspaceRoot, {\n baseDir: workspaceRoot,\n });\n if (!result.success) {\n return { orphans: [], success: false, error: result.error };\n }\n const orphans = filterOrphansToFiles(result, files);\n return { orphans, success: true };\n}\n","/**\n * Static Analysis Module\n *\n * Lightweight static analysis tools for AI agent assistance.\n * These tools help agents identify issues upfront, saving exploration tokens.\n *\n * Features:\n * - Skipped test detection (describe.skip, it.skip, test.skip)\n * - Orphaned file detection (dead code candidates)\n *\n * @module analysis/static\n */\n// Circular Dependency Detection\nexport { detectCircular, detectCircularInMonorepo, formatCycles, summarizeCircular, } from \"./CircularDetector.js\";\n// Orphan Detection\nexport { checkFilesForOrphanStatus, detectOrphans, filterOrphansToFiles, } from \"./OrphanDetector.js\";\n// Skipped Test Detection\nexport { analyzeSkippedTests, detectSkippedTests, getSkippedTestSummary, } from \"./SkippedTestDetector.js\";\n/**\n * Run lightweight static analysis on target files\n *\n * This is designed to be fast enough to run in begin_task\n * without significantly impacting latency.\n *\n * @param files - Files to analyze (map of path to content)\n * @param workspaceRoot - Workspace root for orphan detection\n * @param options - Analysis options\n * @returns Combined analysis result\n */\nexport async function runStaticAnalysis(files, _workspaceRoot, options = {}) {\n const startTime = Date.now();\n const result = {\n skippedTests: [],\n orphanedFiles: [],\n duration: 0,\n success: true,\n errors: [],\n };\n // 1. Detect skipped tests (fast - just AST parsing)\n if (!options.skipTestDetection) {\n try {\n const { analyzeSkippedTests } = await import(\"./SkippedTestDetector.js\");\n const testResults = analyzeSkippedTests(files);\n for (const testResult of testResults) {\n if (!testResult.parsed && testResult.error) {\n result.errors.push(`Parse error in ${testResult.file}: ${testResult.error}`);\n }\n for (const skipped of testResult.skipped) {\n result.skippedTests.push({\n file: skipped.file,\n type: skipped.type,\n name: skipped.name,\n line: skipped.line,\n });\n }\n }\n }\n catch (error) {\n result.errors.push(`Skipped test detection failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n // 2. Orphan detection is disabled by default in begin_task\n // because it requires analyzing the full dependency graph\n // which can be slow for large codebases (500ms+)\n // Enable with options.skipOrphanDetection = false\n if (!options.skipOrphanDetection) {\n // Orphan detection is expensive - skip by default\n // Will be enabled in a future version with caching\n }\n result.duration = Date.now() - startTime;\n result.success = result.errors.length === 0;\n return result;\n}\n"]}