bmad-cybersec 4.1.1 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/validators-node/dist/bin/archival-cli.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/agent-output-patterns.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/boundary-detector.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/context-integrity.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/index.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/jailbreak.d.ts +1 -1
- package/.claude/validators-node/dist/src/ai-safety/jailbreak.js +134 -5
- package/.claude/validators-node/dist/src/ai-safety/jailbreak.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/media-validator.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/multilingual-patterns.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/output-validator.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/pattern-engine.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/prompt-injection.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/reformulation-detector.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/session-tracker.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/text-normalizer.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/web-content-patterns.js.map +1 -1
- package/.claude/validators-node/dist/src/ai-safety/web-search-patterns.js.map +1 -1
- package/.claude/validators-node/dist/src/common/alerting.js.map +1 -1
- package/.claude/validators-node/dist/src/common/audit-logger.js.map +1 -1
- package/.claude/validators-node/dist/src/common/block-message.js.map +1 -1
- package/.claude/validators-node/dist/src/common/index.js.map +1 -1
- package/.claude/validators-node/dist/src/common/override-manager.js.map +1 -1
- package/.claude/validators-node/dist/src/common/path-utils.js +7 -2
- package/.claude/validators-node/dist/src/common/path-utils.js.map +1 -1
- package/.claude/validators-node/dist/src/common/safe-regex.js.map +1 -1
- package/.claude/validators-node/dist/src/common/session-context.js.map +1 -1
- package/.claude/validators-node/dist/src/common/stdin-parser.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/bash-safety.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/env-protection.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/http-security.js +8 -6
- package/.claude/validators-node/dist/src/guards/http-security.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/index.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/outside-repo.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/pii/index.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/pii/patterns.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/pii/validators.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/production.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/secret.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/settings-guard.js.map +1 -1
- package/.claude/validators-node/dist/src/guards/xss-safety.js.map +1 -1
- package/.claude/validators-node/dist/src/index.js.map +1 -1
- package/.claude/validators-node/dist/src/observability/anomaly-detector.js.map +1 -1
- package/.claude/validators-node/dist/src/observability/archival-config.js.map +1 -1
- package/.claude/validators-node/dist/src/observability/archival-scheduler.js.map +1 -1
- package/.claude/validators-node/dist/src/observability/audit-encryption.js.map +1 -1
- package/.claude/validators-node/dist/src/observability/audit-integrity.js.map +1 -1
- package/.claude/validators-node/dist/src/observability/confidence-tracker.js.map +1 -1
- package/.claude/validators-node/dist/src/observability/index.js.map +1 -1
- package/.claude/validators-node/dist/src/observability/log-archiver.js.map +1 -1
- package/.claude/validators-node/dist/src/observability/telemetry.js.map +1 -1
- package/.claude/validators-node/dist/src/permissions/index.js.map +1 -1
- package/.claude/validators-node/dist/src/permissions/plugin-permissions.js.map +1 -1
- package/.claude/validators-node/dist/src/permissions/supply-chain.js.map +1 -1
- package/.claude/validators-node/dist/src/permissions/token-validator.js.map +1 -1
- package/.claude/validators-node/dist/src/resource-management/context-manager.js.map +1 -1
- package/.claude/validators-node/dist/src/resource-management/index.js.map +1 -1
- package/.claude/validators-node/dist/src/resource-management/rate-limiter.js.map +1 -1
- package/.claude/validators-node/dist/src/resource-management/recursion-guard.js.map +1 -1
- package/.claude/validators-node/dist/src/resource-management/resource-limits.js.map +1 -1
- package/.claude/validators-node/dist/src/types/index.js.map +1 -1
- package/.claude/validators-node/dist/src/types/xss-types.js.map +1 -1
- package/.claude/validators-node/dist/src/validation/asvs-input-validator.js.map +1 -1
- package/_bmad/framework/dist/.claude/validators-node/src/ai-safety/jailbreak.d.ts +1 -1
- package/_bmad/framework/dist/.claude/validators-node/src/ai-safety/jailbreak.d.ts.map +1 -1
- package/_bmad/framework/dist/.claude/validators-node/src/ai-safety/jailbreak.js +134 -5
- package/_bmad/framework/dist/.claude/validators-node/src/ai-safety/jailbreak.js.map +1 -1
- package/_bmad/framework/dist/.claude/validators-node/src/common/path-utils.d.ts.map +1 -1
- package/_bmad/framework/dist/.claude/validators-node/src/common/path-utils.js +7 -2
- package/_bmad/framework/dist/.claude/validators-node/src/common/path-utils.js.map +1 -1
- package/_bmad/framework/dist/src/core/security/generate-token.js +4 -4
- package/_bmad/framework/dist/src/core/security/generate-token.js.map +1 -1
- package/_bmad/framework/dist/src/core/security/session-manager.js +2 -2
- package/_bmad/framework/dist/src/core/security/session-manager.js.map +1 -1
- package/package.json +16 -10
- package/src/core/security/authorization.ts +78 -40
- package/src/core/security/generate-token.ts +2 -2
- package/src/core/security/security-config.yaml +77 -0
- package/src/core/security/session-manager.ts +2 -2
- package/src/package-management/api/api-gateway.ts +1 -1
- package/src/package-management/api/index.ts +19 -13
- package/src/package-management/api/openapi-spec.ts +56 -7
- package/src/package-management/dependency/index.ts +2 -1
- package/src/package-management/dependency/resolver/index.ts +1 -1
- package/src/package-management/monitoring/dashboard/health-dashboard.ts +94 -49
- package/src/package-management/monitoring/dashboard/index.ts +25 -282
- package/src/package-management/monitoring/health/compliance-sla.ts +26 -24
- package/src/package-management/monitoring/health/health-monitoring.ts +38 -37
- package/src/package-management/monitoring/health/predictive-analytics.ts +76 -130
- package/src/package-management/monitoring/index.ts +80 -720
- package/src/package-management/monitoring/metrics/index.ts +0 -21
- package/src/package-management/registry/discovery/index.ts +9 -505
- package/src/package-management/registry/interfaces/index.ts +11 -498
- package/src/package-management/security-integration.ts +2 -2
- package/src/security/audit/audit-logger.ts +3 -3
- package/src/security/audit/siem-integration.ts +1 -1
- package/src/security/encryption/aes-encryption.ts +1 -1
- package/src/security/encryption/crypto-utils.ts +1 -1
- package/src/security/encryption/generate-token.ts +1 -1
- package/src/security/encryption/hash-chains.ts +1 -1
- package/src/security/encryption/key-derivation.ts +1 -1
- package/src/security/epic1-integration.ts +1 -1
- package/src/security/rbac/permissions/permission-manifests.ts +13 -13
- package/src/security/rbac/sod/segregation-of-duties.ts +2 -2
- package/src/security/validator-checksums.json +45 -27
- package/src/strategy-team/module.yaml +2 -2
- package/src/types/express.d.ts +162 -0
- package/src/utility/cli/prompts.js +10 -4
- package/src/utility/tools/installer/bin/setup-wizard.mjs +4 -1
- package/src/utility/tools/installer/lib/wizard-orchestrator.mjs +219 -94
- package/src/utility/tools/installer/lib/wizard-orchestrator.mjs.bak +327 -0
- package/src/utility/tools/llm-setup/index.js +66 -19
- package/src/utility/tools/llm-setup/provider-config.js +149 -11
- package/src/utility/tools/module-selector/index.js +49 -14
- package/src/utility/tools/module-selector/module-selection-ui.js +24 -1
- package/src/utility/tools/pgp-setup/index.js +23 -1
- package/src/utility/tools/security-config/index.js +28 -13
- package/src/utility/version-checker.js +6 -13
- package/tools/cli/lib/config.js +1 -1
- package/src/package-management/installation/orchestrator/__tests__/orchestrator.test.js +0 -1763
- package/src/security/__tests__/stage-13-validation.test.js +0 -449
- package/src/security/supply-chain/__tests__/dependency-protection.test.js +0 -1496
- package/src/utility/tools/installer/lib/core/__tests__/network-resilience.test.js +0 -347
- package/src/utility/tools/installer/lib/core/__tests__/signature-verification.test.js +0 -426
- /package/src/cybersec-team/workflows/infrastructure-security-testing/steps/{step-06-secrets-management.md → step-06-secret-management.md} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archival-cli.js","sourceRoot":"","sources":["../../bin/archival-cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"archival-cli.js","sourceRoot":"","sources":["../../bin/archival-cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * BMAD Guardrails: Log Archival CLI\n * =================================\n * Command-line interface for managing log archival operations.\n *\n * Commands:\n * - config: Check and validate archival configuration\n * - status: Show archival system status and health\n * - archive: Manually trigger log archival\n * - verify: Verify integrity of archived logs\n * - list: List available archives\n * - setup: Interactive setup wizard\n * - health: Run system health check\n */\n\nimport { Command } from 'commander';\nimport { createLogArchiver } from '../src/observability/log-archiver.js';\nimport {\n checkConfiguration,\n createConfigManager,\n} from '../src/observability/archival-config.js';\nimport {\n getArchivalScheduler,\n getArchivalStatus,\n initializeArchivalScheduling,\n triggerArchival,\n} from '../src/observability/archival-scheduler.js';\n\nconst program = new Command();\n\n// Color codes for console output\nconst colors = {\n reset: '\\x1b[0m',\n green: '\\x1b[32m',\n red: '\\x1b[31m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n cyan: '\\x1b[36m',\n bold: '\\x1b[1m',\n};\n\n/**\n * Colorize text for console output.\n */\nfunction colorize(text: string, color: keyof typeof colors): string {\n return `${colors[color]}${text}${colors.reset}`;\n}\n\n/**\n * Print formatted table.\n */\nfunction printTable(headers: string[], rows: string[][]): void {\n const colWidths = headers.map((header, i) =>\n Math.max(header.length, ...rows.map(row => (row[i] || '').toString().length))\n );\n\n // Header\n const headerRow = headers.map((header, i) => header.padEnd(colWidths[i])).join(' | ');\n console.log(colorize(headerRow, 'bold'));\n console.log('-'.repeat(headerRow.length));\n\n // Rows\n rows.forEach(row => {\n const formattedRow = row.map((cell, i) => (cell || '').toString().padEnd(colWidths[i])).join(' | ');\n console.log(formattedRow);\n });\n}\n\n/**\n * Format bytes for human reading.\n */\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2)) } ${ sizes[i]}`;\n}\n\n/**\n * Format duration for human reading.\n */\nfunction formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n } else if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n } else {\n return `${seconds}s`;\n }\n}\n\n/**\n * Config command - check and validate configuration.\n */\nprogram\n .command('config')\n .description('Check and validate archival configuration')\n .option('-v, --verbose', 'Show detailed configuration information')\n .option('-e, --example', 'Show example configuration')\n .action(async (options) => {\n try {\n if (options.example) {\n const manager = createConfigManager();\n const example = manager.generateExampleConfig();\n\n console.log(colorize('\\n=== Example Configuration ===\\n', 'bold'));\n console.log('Environment variables:');\n console.log(`export BMAD_S3_ARCHIVE_BUCKET=\"${example.bucket}\"`);\n console.log(`export BMAD_S3_ARCHIVE_PREFIX=\"${example.prefix}\"`);\n console.log(`export BMAD_S3_ARCHIVE_REGION=\"${example.region}\"`);\n console.log(`export BMAD_LOG_RETENTION_DAYS=\"${example.retentionDays}\"`);\n console.log(`export BMAD_GPG_SIGNING_KEY=\"${example.gpgSigningKey}\"`);\n console.log(`export BMAD_ARCHIVE_SCHEDULE_CRON=\"${example.scheduleExpression}\"`);\n console.log(`export BMAD_ENABLE_OBJECT_LOCK=\"${example.enableObjectLock}\"`);\n console.log(`export BMAD_S3_ENCRYPTION_TYPE=\"${example.encryptionType}\"`);\n\n console.log('\\nSetup instructions:');\n console.log(manager.generateSetupInstructions());\n return;\n }\n\n await checkConfiguration();\n\n if (options.verbose) {\n const manager = createConfigManager();\n const result = await manager.loadConfiguration();\n\n if (result.config) {\n console.log('\\n=== Current Configuration ===\\n');\n console.log(`Bucket: ${result.config.bucket}`);\n console.log(`Prefix: ${result.config.prefix}`);\n console.log(`Region: ${result.config.region}`);\n console.log(`Retention: ${result.config.retentionDays} days`);\n console.log(`GPG Key: ${result.config.gpgSigningKey || 'Not configured'}`);\n console.log(`Schedule: ${result.config.scheduleExpression}`);\n console.log(`Object Lock: ${result.config.enableObjectLock ? 'Enabled' : 'Disabled'}`);\n console.log(`Encryption: ${result.config.encryptionType}`);\n }\n }\n\n } catch (error) {\n console.error(colorize(`Error: ${error instanceof Error ? error.message : String(error)}`, 'red'));\n process.exit(1);\n }\n });\n\n/**\n * Status command - show system status and health.\n */\nprogram\n .command('status')\n .description('Show archival system status and health')\n .option('-j, --json', 'Output in JSON format')\n .action(async (options) => {\n try {\n const status = await getArchivalStatus();\n\n if (options.json) {\n console.log(JSON.stringify(status, null, 2));\n return;\n }\n\n console.log(colorize('\\n=== BMAD Log Archival Status ===\\n', 'bold'));\n\n // System Health\n const healthIcon = status.health.healthy ? colorize('✓', 'green') : colorize('✗', 'red');\n console.log(`System Health: ${healthIcon} ${status.health.healthy ? 'Healthy' : 'Issues detected'}`);\n\n if (status.health.issues.length > 0) {\n console.log(colorize('\\nIssues:', 'red'));\n status.health.issues.forEach(issue => console.log(` • ${issue}`));\n }\n\n if (status.health.recommendations.length > 0) {\n console.log(colorize('\\nRecommendations:', 'yellow'));\n status.health.recommendations.forEach(rec => console.log(` • ${rec}`));\n }\n\n // Job Status\n console.log(colorize('\\n=== Job Status ===', 'bold'));\n console.log(`Currently Running: ${status.status.isRunning ? colorize('Yes', 'yellow') : colorize('No', 'green')}`);\n console.log(`Last Success: ${status.status.lastSuccess ? new Date(status.status.lastSuccess).toLocaleString() : 'Never'}`);\n console.log(`Last Failure: ${status.status.lastFailure ? new Date(status.status.lastFailure).toLocaleString() : 'None'}`);\n console.log(`Next Scheduled: ${status.health.nextArchival ? new Date(status.health.nextArchival).toLocaleString() : 'Unknown'}`);\n console.log(`Consecutive Failures: ${status.status.consecutiveFailures}`);\n console.log(`Total Runs: ${status.status.totalRuns}`);\n console.log(`Success Rate: ${status.status.totalRuns > 0 ? Math.round((status.status.totalSuccess / status.status.totalRuns) * 100) : 0}%`);\n\n // Recent Jobs\n if (status.recentJobs.length > 0) {\n console.log(colorize('\\n=== Recent Jobs ===', 'bold'));\n const headers = ['Time', 'Status', 'Duration', 'Files', 'Size', 'Archive ID'];\n const rows = status.recentJobs.map(job => [\n new Date(job.startTime).toLocaleString(),\n job.success ? colorize('Success', 'green') : colorize('Failed', 'red'),\n formatDuration(job.duration),\n job.filesArchived?.toString() || '0',\n job.bytesArchived ? formatBytes(job.bytesArchived) : '0 B',\n job.archiveId || 'N/A',\n ]);\n printTable(headers, rows);\n }\n\n } catch (error) {\n console.error(colorize(`Error: ${error instanceof Error ? error.message : String(error)}`, 'red'));\n process.exit(1);\n }\n });\n\n/**\n * Archive command - manually trigger archival.\n */\nprogram\n .command('archive')\n .description('Manually trigger log archival')\n .option('-f, --force', 'Force archival even if one is already running')\n .action(async (options) => {\n try {\n console.log(colorize('Starting log archival...', 'cyan'));\n\n if (!options.force) {\n const status = await getArchivalStatus();\n if (status.status.isRunning) {\n console.error(colorize('Error: Archival job is already running. Use --force to override.', 'red'));\n process.exit(1);\n }\n }\n\n const startTime = Date.now();\n const result = await triggerArchival();\n const duration = Date.now() - startTime;\n\n console.log(colorize('✓ Archival completed successfully!', 'green'));\n console.log(`\\nResults:`);\n console.log(` Archive ID: ${result.archiveId}`);\n console.log(` Files Archived: ${result.filesArchived || 0}`);\n console.log(` Bytes Archived: ${result.bytesArchived ? formatBytes(result.bytesArchived) : '0 B'}`);\n console.log(` Duration: ${formatDuration(duration)}`);\n\n if (result.error) {\n console.log(colorize(` Error: ${result.error}`, 'red'));\n }\n\n } catch (error) {\n console.error(colorize(`✗ Archival failed: ${error instanceof Error ? error.message : String(error)}`, 'red'));\n process.exit(1);\n }\n });\n\n/**\n * Verify command - verify archive integrity.\n */\nprogram\n .command('verify')\n .description('Verify integrity of archived logs')\n .argument('[archiveId]', 'Specific archive ID to verify (defaults to all recent archives)')\n .option('-a, --all', 'Verify all archives')\n .option('-l, --limit <number>', 'Limit number of archives to verify', '10')\n .action(async (archiveId, options) => {\n try {\n const archiver = createLogArchiver();\n\n if (archiveId) {\n console.log(colorize(`Verifying archive: ${archiveId}`, 'cyan'));\n const result = await archiver.verifyArchiveIntegrity(archiveId);\n\n if (result.isValid) {\n console.log(colorize('✓ Archive integrity verified', 'green'));\n } else {\n console.log(colorize(`✗ Archive integrity check failed: ${result.error}`, 'red'));\n process.exit(1);\n }\n } else {\n const archives = await archiver.listArchives();\n const limit = options.all ? archives.length : parseInt(options.limit);\n const toVerify = archives.slice(0, limit);\n\n console.log(colorize(`Verifying ${toVerify.length} archives...`, 'cyan'));\n\n let verified = 0;\n let failed = 0;\n\n for (const archive of toVerify) {\n process.stdout.write(`Verifying ${archive.archiveId}... `);\n\n const result = await archiver.verifyArchiveIntegrity(archive.archiveId);\n\n if (result.isValid) {\n console.log(colorize('✓', 'green'));\n verified++;\n } else {\n console.log(colorize(`✗ ${result.error}`, 'red'));\n failed++;\n }\n }\n\n console.log(`\\nResults: ${colorize(`${verified} verified`, 'green')}, ${colorize(`${failed} failed`, failed > 0 ? 'red' : 'green')}`);\n\n if (failed > 0) {\n process.exit(1);\n }\n }\n\n } catch (error) {\n console.error(colorize(`Error: ${error instanceof Error ? error.message : String(error)}`, 'red'));\n process.exit(1);\n }\n });\n\n/**\n * List command - list available archives.\n */\nprogram\n .command('list')\n .description('List available archives')\n .option('-l, --limit <number>', 'Limit number of archives to show', '20')\n .option('-j, --json', 'Output in JSON format')\n .action(async (options) => {\n try {\n const archiver = createLogArchiver();\n const archives = await archiver.listArchives();\n const limit = parseInt(options.limit);\n const toShow = archives.slice(0, limit);\n\n if (options.json) {\n console.log(JSON.stringify(toShow, null, 2));\n return;\n }\n\n if (toShow.length === 0) {\n console.log(colorize('No archives found.', 'yellow'));\n return;\n }\n\n console.log(colorize(`\\n=== Archives (showing ${toShow.length} of ${archives.length}) ===\\n`, 'bold'));\n\n const headers = ['Archive ID', 'Date', 'Files', 'Size', 'Compressed', 'Ratio', 'GPG'];\n const rows = toShow.map(archive => [\n archive.archiveId,\n new Date(archive.timestamp).toLocaleDateString(),\n archive.logFileCount.toString(),\n formatBytes(archive.totalSize),\n formatBytes(archive.compressedSize),\n `${(archive.compressionRatio * 100).toFixed(1)}%`,\n archive.gpgSignature ? colorize('✓', 'green') : colorize('-', 'yellow'),\n ]);\n\n printTable(headers, rows);\n\n } catch (error) {\n console.error(colorize(`Error: ${error instanceof Error ? error.message : String(error)}`, 'red'));\n process.exit(1);\n }\n });\n\n/**\n * Setup command - interactive setup wizard.\n */\nprogram\n .command('setup')\n .description('Interactive setup wizard for archival configuration')\n .action(async () => {\n console.log(colorize('\\n=== BMAD Log Archival Setup Wizard ===\\n', 'bold'));\n\n try {\n // Import readline for interactive input\n const readline = await import('readline');\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const question = (prompt: string): Promise<string> => {\n return new Promise(resolve => {\n rl.question(prompt, resolve);\n });\n };\n\n console.log('This wizard will help you configure log archival to S3.\\n');\n\n // Basic configuration\n const bucket = await question('S3 bucket name: ');\n const region = await question('AWS region [us-east-1]: ') || 'us-east-1';\n const prefix = await question('S3 prefix [bmad-audit-logs/]: ') || 'bmad-audit-logs/';\n const retention = await question('Retention days [2557]: ') || '2557';\n\n // Optional configuration\n const enableGpg = await question('Enable GPG signing? (y/n) [n]: ');\n let gpgKey = '';\n if (enableGpg.toLowerCase() === 'y') {\n gpgKey = await question('GPG key ID: ');\n }\n\n const schedule = await question('Cron schedule [0 2 * * *]: ') || '0 2 * * *';\n\n rl.close();\n\n // Generate configuration commands\n console.log(colorize('\\n=== Configuration Commands ===\\n', 'bold'));\n console.log('Add these to your shell configuration (.bashrc, .zshrc, etc.):\\n');\n\n console.log(`export BMAD_S3_ARCHIVE_BUCKET=\"${bucket}\"`);\n console.log(`export BMAD_S3_ARCHIVE_REGION=\"${region}\"`);\n console.log(`export BMAD_S3_ARCHIVE_PREFIX=\"${prefix}\"`);\n console.log(`export BMAD_LOG_RETENTION_DAYS=\"${retention}\"`);\n console.log(`export BMAD_ARCHIVE_SCHEDULE_CRON=\"${schedule}\"`);\n\n if (gpgKey) {\n console.log(`export BMAD_GPG_SIGNING_KEY=\"${gpgKey}\"`);\n }\n\n console.log(colorize('\\n=== Next Steps ===\\n', 'bold'));\n console.log('1. Set the environment variables above');\n console.log('2. Configure your S3 bucket with Object Lock');\n console.log('3. Set up AWS credentials');\n console.log('4. Run: bmad-archival config --verbose');\n console.log('5. Run: bmad-archival archive (to test)');\n\n const manager = createConfigManager();\n console.log('\\nFor detailed setup instructions, see:');\n console.log(manager.generateSetupInstructions());\n\n } catch (error) {\n console.error(colorize(`Setup failed: ${error instanceof Error ? error.message : String(error)}`, 'red'));\n process.exit(1);\n }\n });\n\n/**\n * Health command - run comprehensive health check.\n */\nprogram\n .command('health')\n .description('Run comprehensive health check')\n .option('-f, --fix', 'Attempt to fix detected issues')\n .action(async (options) => {\n try {\n console.log(colorize('Running health check...', 'cyan'));\n\n const scheduler = getArchivalScheduler();\n const health = await scheduler.healthCheck();\n\n console.log(colorize('\\n=== Health Check Results ===\\n', 'bold'));\n\n const statusIcon = health.healthy ? colorize('✓', 'green') : colorize('✗', 'red');\n console.log(`Overall Health: ${statusIcon} ${health.healthy ? 'Healthy' : 'Issues detected'}`);\n\n if (health.issues.length > 0) {\n console.log(colorize('\\nIssues Found:', 'red'));\n health.issues.forEach((issue, i) => {\n console.log(` ${i + 1}. ${issue}`);\n });\n }\n\n if (health.recommendations.length > 0) {\n console.log(colorize('\\nRecommendations:', 'yellow'));\n health.recommendations.forEach((rec, i) => {\n console.log(` ${i + 1}. ${rec}`);\n });\n }\n\n if (health.lastArchival) {\n const lastArchivalDate = new Date(health.lastArchival);\n const hoursAgo = (Date.now() - lastArchivalDate.getTime()) / (1000 * 60 * 60);\n console.log(`\\nLast Archival: ${lastArchivalDate.toLocaleString()} (${Math.floor(hoursAgo)} hours ago)`);\n }\n\n if (health.nextArchival) {\n console.log(`Next Archival: ${new Date(health.nextArchival).toLocaleString()}`);\n }\n\n if (options.fix && !health.healthy) {\n console.log(colorize('\\nAttempting to fix issues...', 'cyan'));\n\n // Initialize scheduling if not already done\n try {\n await initializeArchivalScheduling();\n console.log(colorize('✓ Archival scheduling initialized', 'green'));\n } catch (error) {\n console.log(colorize(`✗ Failed to initialize scheduling: ${error instanceof Error ? error.message : String(error)}`, 'red'));\n }\n }\n\n if (!health.healthy) {\n process.exit(1);\n }\n\n } catch (error) {\n console.error(colorize(`Health check failed: ${error instanceof Error ? error.message : String(error)}`, 'red'));\n process.exit(1);\n }\n });\n\n// Main program setup\nprogram\n .name('bmad-archival')\n .description('BMAD Log Archival Management CLI')\n .version('1.0.0')\n .option('-v, --verbose', 'Verbose output')\n .hook('preAction', async (thisCommand) => {\n // Global setup before any command\n if (thisCommand.opts().verbose) {\n console.log(colorize(`Running command: ${thisCommand.name()}`, 'cyan'));\n }\n });\n\n// Handle unknown commands\nprogram.on('command:*', () => {\n console.error(colorize(`Unknown command: ${program.args.join(' ')}`, 'red'));\n console.log('See --help for available commands.');\n process.exit(1);\n});\n\n// Parse command line arguments\nprogram.parse();\n\n// Show help if no command provided\nif (!process.argv.slice(2).length) {\n program.outputHelp();\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-output-patterns.js","sourceRoot":"","sources":["../../../src/ai-safety/agent-output-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoBH,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF,oEAAoE;AACpE,MAAM,uBAAuB,GAAsB;IACjD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,sDAAsD;QAC/D,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,mDAAmD;KACjE;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,2DAA2D;QACpE,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,6CAA6C;KAC3D;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,6FAA6F;QACtG,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,8CAA8C;KAC5D;CACF,CAAC;AAEF,gFAAgF;AAChF,gCAAgC;AAChC,gFAAgF;AAEhF,sEAAsE;AACtE,MAAM,6BAA6B,GAAsB;IACvD;QACE,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,sIAAsI;QAC/I,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,iDAAiD;KAC/D;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,+HAA+H;QACxI,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,oDAAoD;KAClE;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,8HAA8H;QACvI,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,kDAAkD;KAChE;CACF,CAAC;AAEF,gFAAgF;AAChF,iCAAiC;AACjC,gFAAgF;AAEhF,uFAAuF;AACvF,MAAM,yBAAyB,GAAsB;IACnD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,2HAA2H;QACpI,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,uDAAuD;KACrE;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,+FAA+F;QACxG,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,mDAAmD;KACjE;CACF,CAAC;AAEF,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF,MAAM,kBAAkB,GAAsB;IAC5C,GAAG,uBAAuB;IAC1B,GAAG,6BAA6B;IAChC,GAAG,yBAAyB;CAC7B,CAAC;AAEF,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAE1C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,kBAAkB,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,wBAAwB;gBAClC,YAAY,EAAE,UAAU,CAAC,IAAI;gBAC7B,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;aACpC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,yBAAyB,EACzB,kBAAkB,GACnB,CAAC"}
|
|
1
|
+
{"version":3,"file":"agent-output-patterns.js","sourceRoot":"","sources":["../../../src/ai-safety/agent-output-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoBH,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF,oEAAoE;AACpE,MAAM,uBAAuB,GAAsB;IACjD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,sDAAsD;QAC/D,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,mDAAmD;KACjE;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,2DAA2D;QACpE,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,6CAA6C;KAC3D;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,6FAA6F;QACtG,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,8CAA8C;KAC5D;CACF,CAAC;AAEF,gFAAgF;AAChF,gCAAgC;AAChC,gFAAgF;AAEhF,sEAAsE;AACtE,MAAM,6BAA6B,GAAsB;IACvD;QACE,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,sIAAsI;QAC/I,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,iDAAiD;KAC/D;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,+HAA+H;QACxI,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,oDAAoD;KAClE;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,8HAA8H;QACvI,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,kDAAkD;KAChE;CACF,CAAC;AAEF,gFAAgF;AAChF,iCAAiC;AACjC,gFAAgF;AAEhF,uFAAuF;AACvF,MAAM,yBAAyB,GAAsB;IACnD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,2HAA2H;QACpI,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,uDAAuD;KACrE;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,+FAA+F;QACxG,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,mDAAmD;KACjE;CACF,CAAC;AAEF,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF,MAAM,kBAAkB,GAAsB;IAC5C,GAAG,uBAAuB;IAC1B,GAAG,6BAA6B;IAChC,GAAG,yBAAyB;CAC7B,CAAC;AAEF,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAE1C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,kBAAkB,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,wBAAwB;gBAClC,YAAY,EAAE,UAAU,CAAC,IAAI;gBAC7B,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;aACpC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,yBAAyB,EACzB,kBAAkB,GACnB,CAAC","sourcesContent":["/**\n * BMAD Validators - Agent Output Injection Patterns (TPI-03)\n * ============================================================\n * Detects injection payloads in Task/Skill (subagent) output.\n * These patterns target agent-specific attack vectors:\n * - Fake tool call formatting\n * - Privilege escalation claims\n * - Self-referential loops (\"ask user to run...\")\n * - System-level instruction injection in agent response\n *\n * Reference: TPI-CROWDSTRIKE Implementation Plan, Story TPI-03\n */\n\nimport type { Severity } from '../types/index.js';\n\n/** A finding from agent output pattern analysis. */\nexport interface AgentOutputFinding {\n category: string;\n pattern_name: string;\n severity: Severity;\n match?: string;\n description: string;\n}\n\ninterface AgentPatternDef {\n name: string;\n pattern: RegExp;\n severity: Severity;\n description: string;\n}\n\n// =============================================================================\n// FAKE TOOL CALL PATTERNS\n// =============================================================================\n\n/** Patterns detecting fake tool call formatting in agent output. */\nconst FAKE_TOOL_CALL_PATTERNS: AgentPatternDef[] = [\n {\n name: 'fake_function_call_xml',\n pattern: /<(?:antml:)?(?:function_calls?|tool_use|invoke)\\s*>/i,\n severity: 'CRITICAL',\n description: 'Fake XML function call formatting in agent output',\n },\n {\n name: 'fake_tool_result',\n pattern: /<(?:antml:)?(?:function_results?|tool_result|result)\\s*>/i,\n severity: 'CRITICAL',\n description: 'Fake tool result formatting in agent output',\n },\n {\n name: 'fake_tool_use_json',\n pattern: /[\"']?tool_use[\"']?\\s*:\\s*\\{[^}]*[\"']?(?:name|type)[\"']?\\s*:\\s*[\"'](?:Bash|Write|Edit|Read)/i,\n severity: 'CRITICAL',\n description: 'Fake tool use JSON structure in agent output',\n },\n];\n\n// =============================================================================\n// PRIVILEGE ESCALATION PATTERNS\n// =============================================================================\n\n/** Patterns detecting privilege escalation claims in agent output. */\nconst PRIVILEGE_ESCALATION_PATTERNS: AgentPatternDef[] = [\n {\n name: 'admin_authorization',\n pattern: /(?:as\\s+(?:an?\\s+)?admin|with\\s+admin\\s+(?:privileges?|access|rights?))\\s*[,.]?\\s*(?:I\\s+)?(?:authorize|approve|grant|allow|permit)/i,\n severity: 'WARNING',\n description: 'Privilege escalation: admin authorization claim',\n },\n {\n name: 'override_authorization',\n pattern: /(?:I\\s+(?:am\\s+)?(?:authorized|permitted|allowed)\\s+to\\s+(?:override|bypass|skip)|override\\s+(?:security|safety|permission))/i,\n severity: 'WARNING',\n description: 'Privilege escalation: override authorization claim',\n },\n {\n name: 'elevated_permissions',\n pattern: /(?:elevat(?:e|ed|ing)\\s+(?:my\\s+)?(?:permissions?|privileges?|access)|(?:sudo|root|superuser)\\s+(?:mode|access|permission))/i,\n severity: 'WARNING',\n description: 'Privilege escalation: elevated permissions claim',\n },\n];\n\n// =============================================================================\n// SELF-REFERENTIAL LOOP PATTERNS\n// =============================================================================\n\n/** Patterns detecting self-referential loops (agent trying to get user to execute). */\nconst SELF_REFERENTIAL_PATTERNS: AgentPatternDef[] = [\n {\n name: 'user_execution_request',\n pattern: /(?:ask\\s+(?:the\\s+)?user\\s+to\\s+(?:run|execute|type)|please\\s+(?:run|execute|type)\\s+(?:the\\s+following|this)\\s+command)/i,\n severity: 'WARNING',\n description: 'Self-referential: requesting user to execute commands',\n },\n {\n name: 'copy_paste_instruction',\n pattern: /(?:copy\\s+and\\s+paste|paste\\s+(?:this|the\\s+following)\\s+(?:into|in)\\s+(?:your\\s+)?terminal)/i,\n severity: 'INFO',\n description: 'Self-referential: copy-paste terminal instruction',\n },\n];\n\n// =============================================================================\n// COMBINED\n// =============================================================================\n\nconst ALL_AGENT_PATTERNS: AgentPatternDef[] = [\n ...FAKE_TOOL_CALL_PATTERNS,\n ...PRIVILEGE_ESCALATION_PATTERNS,\n ...SELF_REFERENTIAL_PATTERNS,\n];\n\n// =============================================================================\n// ANALYSIS FUNCTION\n// =============================================================================\n\n/**\n * Analyze agent/skill output for agent-specific injection patterns.\n * Runs ADDITIONAL checks beyond what analyzeContent() already does.\n *\n * @param content - The agent/skill output text\n * @returns Array of agent-specific findings\n */\nexport function analyzeAgentOutput(content: string): AgentOutputFinding[] {\n const findings: AgentOutputFinding[] = [];\n\n if (!content || content.trim().length === 0) {\n return findings;\n }\n\n for (const patternDef of ALL_AGENT_PATTERNS) {\n const match = patternDef.pattern.exec(content);\n if (match) {\n findings.push({\n category: 'agent_output_injection',\n pattern_name: patternDef.name,\n severity: patternDef.severity,\n match: match[0].slice(0, 100),\n description: patternDef.description,\n });\n }\n }\n\n return findings;\n}\n\nexport {\n FAKE_TOOL_CALL_PATTERNS,\n PRIVILEGE_ESCALATION_PATTERNS,\n SELF_REFERENTIAL_PATTERNS,\n ALL_AGENT_PATTERNS,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundary-detector.js","sourceRoot":"","sources":["../../../src/ai-safety/boundary-detector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"boundary-detector.js","sourceRoot":"","sources":["../../../src/ai-safety/boundary-detector.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * BMAD Validators - Prompt Boundary Detector (TPI-14)\n * ====================================================\n * Detects techniques that attempt to terminate system prompt sections\n * and inject attacker content at system level.\n *\n * Categories:\n * - Closing system tags: </system>, </s>, [/INST], [END SYSTEM]\n * - Control tokens: <|endoftext|>, <|im_start|>, <<SYS>>\n * - System prompt close markers: ---END SYSTEM PROMPT---, ===SYSTEM END===\n * - Meta-instruction boundaries: BEGIN USER CONTENT, END SYSTEM CONTENT\n *\n * LIBRARY MODULE ONLY — no bin entry point.\n * Called from prompt-injection.ts pipeline.\n */\n\nimport type { Severity } from '../types/index.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface BoundaryFinding {\n category: string;\n pattern_name: string;\n severity: Severity;\n match: string;\n description: string;\n}\n\n// =============================================================================\n// BOUNDARY MANIPULATION PATTERNS\n// =============================================================================\n\ninterface BoundaryPattern {\n name: string;\n pattern: RegExp;\n severity: Severity;\n description: string;\n}\n\n/**\n * Closing system tag patterns.\n */\nconst CLOSING_SYSTEM_TAG_PATTERNS: BoundaryPattern[] = [\n {\n name: 'closing_system_xml',\n pattern: /<\\/\\s*(?:system|instructions|context|prompt)\\s*>/i,\n severity: 'CRITICAL',\n description: 'XML closing system/instructions tag',\n },\n {\n name: 'closing_inst_tag',\n pattern: /\\[\\/?INST\\]/i,\n severity: 'CRITICAL',\n description: 'Instruction delimiter tag [/INST] or [INST]',\n },\n {\n name: 'end_system_marker',\n pattern: /\\[(?:END|STOP)\\s+(?:SYSTEM|INSTRUCTIONS|CONTEXT)\\]/i,\n severity: 'CRITICAL',\n description: 'Bracketed end-of-system marker',\n },\n {\n name: 'closing_s_tag',\n pattern: /<\\/s>/,\n severity: 'CRITICAL',\n description: 'Sentence boundary tag </s> (model-specific)',\n },\n];\n\n/**\n * Control token injection patterns.\n */\nconst CONTROL_TOKEN_PATTERNS: BoundaryPattern[] = [\n {\n name: 'openai_control_token',\n pattern: /<\\|(?:endoftext|im_start|im_end|system|user|assistant|pad)\\|>/i,\n severity: 'CRITICAL',\n description: 'OpenAI-style control token injection',\n },\n {\n name: 'llama_sys_tag',\n pattern: /<<\\/?SYS>>/,\n severity: 'CRITICAL',\n description: 'LLaMA system tag <<SYS>> or <</SYS>>',\n },\n {\n name: 'special_token_s',\n pattern: /<s>/,\n severity: 'WARNING',\n description: 'Special token <s> (sentence start)',\n },\n];\n\n/**\n * System prompt close patterns (informal markers).\n */\nconst SYSTEM_PROMPT_CLOSE_PATTERNS: BoundaryPattern[] = [\n {\n name: 'dashed_end_marker',\n pattern: /---\\s*(?:END|STOP)\\s+(?:SYSTEM|OF)\\s+(?:PROMPT|INSTRUCTIONS|SYSTEM)\\s*---/i,\n severity: 'WARNING',\n description: 'Dashed end-of-system-prompt marker',\n },\n {\n name: 'equals_end_marker',\n pattern: /===\\s*(?:SYSTEM|INSTRUCTIONS?)\\s+(?:END|COMPLETE|DONE)\\s*===/i,\n severity: 'WARNING',\n description: 'Equals-delimited system end marker',\n },\n {\n name: 'asterisk_end_marker',\n pattern: /\\*\\*\\*\\s*(?:END|STOP)\\s+(?:OF\\s+)?(?:INSTRUCTIONS|SYSTEM)\\s*\\*\\*\\*/i,\n severity: 'WARNING',\n description: 'Asterisk-delimited instruction end marker',\n },\n {\n name: 'braced_end_marker',\n pattern: /\\{(?:end_of_system_prompt|end_system|system_end|stop_instructions)\\}/i,\n severity: 'WARNING',\n description: 'Brace-delimited system end marker',\n },\n];\n\n/**\n * Meta-instruction boundary patterns.\n */\nconst META_INSTRUCTION_PATTERNS: BoundaryPattern[] = [\n {\n name: 'begin_user_content',\n pattern: /(?:BEGIN|START)\\s+(?:USER|HUMAN)\\s+(?:CONTENT|INPUT|MESSAGE)/i,\n severity: 'WARNING',\n description: 'Meta-instruction: begin user content marker',\n },\n {\n name: 'end_system_content',\n pattern: /(?:END|STOP)\\s+(?:SYSTEM|AI|ASSISTANT)\\s+(?:CONTENT|MESSAGE|INSTRUCTIONS)/i,\n severity: 'WARNING',\n description: 'Meta-instruction: end system content marker',\n },\n {\n name: 'below_is_user',\n pattern: /(?:BELOW|FOLLOWING)\\s+(?:IS|ARE)\\s+(?:THE\\s+)?(?:USER|HUMAN)\\s+(?:INPUT|CONTENT|MESSAGE)/i,\n severity: 'WARNING',\n description: 'Meta-instruction: directional user content marker',\n },\n {\n name: 'above_was_system',\n pattern: /(?:ABOVE|PRECEDING)\\s+(?:WAS|IS)\\s+(?:THE\\s+)?(?:SYSTEM|AI)\\s+(?:PROMPT|MESSAGE|INSTRUCTIONS)/i,\n severity: 'WARNING',\n description: 'Meta-instruction: directional system reference marker',\n },\n];\n\n/**\n * All boundary pattern categories combined.\n */\nconst ALL_BOUNDARY_CATEGORIES = [\n { patterns: CLOSING_SYSTEM_TAG_PATTERNS, category: 'closing_system_tag' },\n { patterns: CONTROL_TOKEN_PATTERNS, category: 'control_token' },\n { patterns: SYSTEM_PROMPT_CLOSE_PATTERNS, category: 'system_prompt_close' },\n { patterns: META_INSTRUCTION_PATTERNS, category: 'meta_instruction_boundary' },\n];\n\n// =============================================================================\n// DETECTION FUNCTION\n// =============================================================================\n\n/**\n * Detect prompt boundary manipulation attempts.\n * Runs on both raw content (pre-normalization) and normalized content\n * to catch confusable character variants (P1-10).\n *\n * @param rawContent - Original content before normalization\n * @param normalizedContent - Content after normalizeText() processing\n * @returns Array of boundary manipulation findings\n */\nexport function detectBoundaryManipulation(\n rawContent: string,\n normalizedContent?: string\n): BoundaryFinding[] {\n if (!rawContent || rawContent.trim().length === 0) {\n return [];\n }\n\n const findings: BoundaryFinding[] = [];\n const seenPatterns = new Set<string>();\n\n // Scan raw content first (catches exact tokens)\n for (const { patterns, category } of ALL_BOUNDARY_CATEGORIES) {\n for (const patternDef of patterns) {\n const match = rawContent.match(patternDef.pattern);\n if (match) {\n seenPatterns.add(patternDef.name);\n findings.push({\n category: `boundary_${category}`,\n pattern_name: patternDef.name,\n severity: patternDef.severity,\n match: match[0].slice(0, 100),\n description: patternDef.description,\n });\n }\n }\n }\n\n // Also scan normalized content if different (catches confusable variants, P1-10)\n if (normalizedContent && normalizedContent !== rawContent) {\n for (const { patterns, category } of ALL_BOUNDARY_CATEGORIES) {\n for (const patternDef of patterns) {\n if (seenPatterns.has(patternDef.name)) continue; // Already found in raw\n const match = normalizedContent.match(patternDef.pattern);\n if (match) {\n findings.push({\n category: `boundary_${category}`,\n pattern_name: `confusable_${patternDef.name}`,\n severity: patternDef.severity,\n match: match[0].slice(0, 100),\n description: `Confusable variant: ${patternDef.description}`,\n });\n }\n }\n }\n }\n\n return findings;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-integrity.js","sourceRoot":"","sources":["../../../src/ai-safety/context-integrity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context-integrity.js","sourceRoot":"","sources":["../../../src/ai-safety/context-integrity.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * BMAD Validators - Knowledge Base Integrity Scanner (TPI-04)\n * ============================================================\n * PreToolUse hook on Read — scans context files (memory, agents,\n * CLAUDE.md, commands, config) for injection payloads before they\n * enter the LLM context as trusted content.\n *\n * CRIT-1: PreToolUse receives file_path only, NOT file content.\n * The hook reads the file independently via fs.readFileSync().\n *\n * Exit Codes (P1-8 graduated):\n * - 0: ALLOW (no findings, or INFO-only findings)\n * - 1: SOFT_BLOCK / WARN (WARNING findings — user may have legitimate content)\n * - 2: HARD_BLOCK (CRITICAL findings — likely injection)\n *\n * Performance: Only first 64KB of file is scanned. Binary files skipped.\n *\n * Reference: TPI-CROWDSTRIKE Implementation Plan, Story TPI-04\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n AuditLogger,\n getProjectDir,\n getToolInputFromStdinSync,\n} from '../common/index.js';\nimport { analyzeContent } from './prompt-injection.js';\nimport { EXIT_CODES, type Severity } from '../types/index.js';\n\nconst VALIDATOR_NAME = 'context_integrity_scanner';\n\n// Maximum bytes to read from a context file (performance limit)\nconst MAX_SCAN_BYTES = 64 * 1024; // 64KB\n\n// =============================================================================\n// CONTEXT FILE PATTERNS\n// =============================================================================\n\n/**\n * Path patterns that identify knowledge base / context files.\n * These files are loaded as trusted context and must be scanned.\n */\nconst CONTEXT_PATH_PATTERNS: RegExp[] = [\n /\\/_memory\\//,\n /\\/memory\\//,\n /\\/.claude\\/commands\\//,\n /\\/CLAUDE\\.md$/,\n /\\/src\\/[^/]+\\/agents\\/[^/]+\\.md$/,\n /\\/src\\/[^/]+\\/workflows\\/[^/]+\\/workflow\\.yaml$/,\n /\\/_compact\\//,\n /\\/_config\\//,\n /\\/_bmad\\/[^/]+\\/agents\\/[^/]+\\.md$/,\n /\\/_bmad\\/[^/]+\\/workflows\\/[^/]+\\/workflow\\.yaml$/,\n /\\/.claude\\/settings\\.json$/,\n];\n\n/**\n * Binary file extensions to skip (no injection risk in binary data).\n */\nconst BINARY_EXTENSIONS = new Set([\n '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.svg',\n '.pdf', '.zip', '.gz', '.tar', '.7z', '.rar',\n '.woff', '.woff2', '.ttf', '.otf', '.eot',\n '.mp3', '.mp4', '.wav', '.avi', '.mov',\n '.exe', '.dll', '.so', '.dylib',\n '.bin', '.dat', '.db', '.sqlite',\n]);\n\n// =============================================================================\n// CONTEXT FILE DETECTION\n// =============================================================================\n\n/**\n * Check if a file path matches a context file pattern.\n */\nexport function isContextFile(filePath: string): boolean {\n if (!filePath || typeof filePath !== 'string') return false;\n const normalized = filePath.replace(/\\\\/g, '/');\n return CONTEXT_PATH_PATTERNS.some((pattern) => pattern.test(normalized));\n}\n\n/**\n * Check if a file has a binary extension (skip scanning).\n */\nexport function isBinaryFile(filePath: string): boolean {\n if (!filePath) return false;\n const ext = path.extname(filePath).toLowerCase();\n return BINARY_EXTENSIONS.has(ext);\n}\n\n// =============================================================================\n// FILE CONTENT READER (CRIT-1)\n// =============================================================================\n\n/**\n * Read file content independently (CRIT-1 fix).\n * PreToolUse receives only file_path — we read the file ourselves\n * before Claude sees it, so we can analyze it first.\n *\n * Returns null if file cannot be read (not found, permission denied, binary).\n */\nexport function readFileForScanning(filePath: string): string | null {\n if (!filePath || typeof filePath !== 'string') return null;\n if (isBinaryFile(filePath)) return null;\n\n try {\n if (!fs.existsSync(filePath)) return null;\n\n const stats = fs.statSync(filePath);\n if (!stats.isFile()) return null;\n\n // Read only first MAX_SCAN_BYTES for performance\n if (stats.size > MAX_SCAN_BYTES) {\n const fd = fs.openSync(filePath, 'r');\n const buffer = Buffer.alloc(MAX_SCAN_BYTES);\n fs.readSync(fd, buffer, 0, MAX_SCAN_BYTES, 0);\n fs.closeSync(fd);\n return buffer.toString('utf8');\n }\n\n return fs.readFileSync(filePath, 'utf8');\n } catch {\n // Cannot read file — skip silently (don't block reads of unreadable files)\n return null;\n }\n}\n\n// =============================================================================\n// SEVERITY MAPPING\n// =============================================================================\n\n/**\n * Map analysis severity to exit code (P1-8 graduated).\n * Context files use elevated sensitivity:\n * - INFO → ALLOW (exit 0)\n * - WARNING → SOFT_BLOCK (exit 1) — user warned but not blocked\n * - CRITICAL → HARD_BLOCK (exit 2) — likely injection\n */\nexport function severityToExitCode(severity: Severity): number {\n switch (severity) {\n case 'CRITICAL':\n return EXIT_CODES.HARD_BLOCK;\n case 'WARNING':\n case 'BLOCKED':\n return EXIT_CODES.SOFT_BLOCK;\n case 'INFO':\n default:\n return EXIT_CODES.ALLOW;\n }\n}\n\n// =============================================================================\n// MAIN VALIDATOR\n// =============================================================================\n\n/**\n * Scan a context file for injection payloads.\n * Exported for testing.\n */\nexport function scanContextFile(\n filePath: string,\n): { exitCode: number; findingCount: number; severity: Severity } {\n // Not a context file — skip (AC3: no overhead on normal reads)\n if (!isContextFile(filePath)) {\n return { exitCode: EXIT_CODES.ALLOW, findingCount: 0, severity: 'INFO' };\n }\n\n // Binary file — skip\n if (isBinaryFile(filePath)) {\n return { exitCode: EXIT_CODES.ALLOW, findingCount: 0, severity: 'INFO' };\n }\n\n // Read file content independently (CRIT-1)\n const content = readFileForScanning(filePath);\n if (content === null) {\n return { exitCode: EXIT_CODES.ALLOW, findingCount: 0, severity: 'INFO' };\n }\n\n // Empty file — nothing to scan\n if (content.trim().length === 0) {\n return { exitCode: EXIT_CODES.ALLOW, findingCount: 0, severity: 'INFO' };\n }\n\n // Run injection analysis\n const result = analyzeContent(content);\n\n const totalFindings =\n result.findings.length +\n result.unicode_findings.length +\n result.base64_findings.length +\n result.html_findings.length +\n result.multi_layer_findings.length;\n\n if (totalFindings === 0) {\n return { exitCode: EXIT_CODES.ALLOW, findingCount: 0, severity: 'INFO' };\n }\n\n // Log findings (AC6: audit log records context file scan results)\n const relativePath = filePath.replace(getProjectDir() + '/', '');\n AuditLogger.logSync(VALIDATOR_NAME, 'WARNING', {\n context_file: relativePath,\n finding_count: totalFindings,\n highest_severity: result.highest_severity,\n pattern_findings: result.findings.length,\n unicode_findings: result.unicode_findings.length,\n base64_findings: result.base64_findings.length,\n html_findings: result.html_findings.length,\n multi_layer_findings: result.multi_layer_findings.length,\n sample_findings: result.findings.slice(0, 3).map((f) => ({\n category: f.category,\n pattern: f.pattern_name,\n severity: f.severity,\n })),\n }, result.highest_severity);\n\n const exitCode = severityToExitCode(result.highest_severity);\n return { exitCode, findingCount: totalFindings, severity: result.highest_severity };\n}\n\n/**\n * Main entry point — called from bin/context-integrity.js.\n */\nexport function main(): void {\n try {\n const { tool_input } = getToolInputFromStdinSync();\n\n // Extract file_path from Read tool input\n const filePath = (tool_input as { file_path?: string }).file_path;\n if (!filePath || typeof filePath !== 'string') {\n // No file path — skip (not a Read operation we can scan)\n process.exit(EXIT_CODES.ALLOW);\n }\n\n const { exitCode, findingCount, severity } = scanContextFile(filePath);\n\n if (exitCode === EXIT_CODES.HARD_BLOCK) {\n AuditLogger.logBlocked(\n VALIDATOR_NAME,\n `CRITICAL injection detected in context file`,\n filePath,\n { finding_count: findingCount, severity },\n );\n process.stderr.write(\n `[BMAD] BLOCKED: CRITICAL injection pattern detected in context file: ${filePath}\\n`,\n );\n } else if (exitCode === EXIT_CODES.SOFT_BLOCK) {\n process.stderr.write(\n `[BMAD] WARNING: Injection pattern detected in context file: ${filePath} (${findingCount} finding(s), severity: ${severity})\\n`,\n );\n }\n\n process.exit(exitCode);\n } catch (err) {\n // Fail-closed: genuine errors exit(2) (P1-6)\n process.stderr.write(`[BMAD] context-integrity error: ${err}\\n`);\n process.exit(EXIT_CODES.HARD_BLOCK);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai-safety/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yBAAyB;AACzB,OAAO,EACL,cAAc,IAAI,uBAAuB,EACzC,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,cAAc,IAAI,uBAAuB,EACzC,uBAAuB,EACvB,IAAI,IAAI,mBAAmB,GAC5B,MAAM,uBAAuB,CAAC;AAU/B,kBAAkB;AAClB,OAAO,EACL,aAAa,EACb,cAAc,IAAI,uBAAuB,EACzC,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,IAAI,uBAAuB,EACzC,iBAAiB,EACjB,IAAI,IAAI,aAAa,GACtB,MAAM,gBAAgB,CAAC;AAUxB,gCAAgC;AAChC,OAAO,EACL,cAAc,IAAI,oBAAoB,EACtC,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAM7B,0DAA0D;AAC1D,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAMrC,mFAAmF;AACnF,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAM9B,6BAA6B;AAC7B,OAAO,EACL,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAMhC,iCAAiC;AACjC,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AAMpC,gDAAgD;AAChD,OAAO,EACL,uBAAuB,GACxB,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai-safety/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yBAAyB;AACzB,OAAO,EACL,cAAc,IAAI,uBAAuB,EACzC,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,cAAc,IAAI,uBAAuB,EACzC,uBAAuB,EACvB,IAAI,IAAI,mBAAmB,GAC5B,MAAM,uBAAuB,CAAC;AAU/B,kBAAkB;AAClB,OAAO,EACL,aAAa,EACb,cAAc,IAAI,uBAAuB,EACzC,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,IAAI,uBAAuB,EACzC,iBAAiB,EACjB,IAAI,IAAI,aAAa,GACtB,MAAM,gBAAgB,CAAC;AAUxB,gCAAgC;AAChC,OAAO,EACL,cAAc,IAAI,oBAAoB,EACtC,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAM7B,0DAA0D;AAC1D,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAMrC,mFAAmF;AACnF,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAM9B,6BAA6B;AAC7B,OAAO,EACL,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAMhC,iCAAiC;AACjC,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AAMpC,gDAAgD;AAChD,OAAO,EACL,uBAAuB,GACxB,MAAM,sBAAsB,CAAC","sourcesContent":["/**\n * BMAD Validators - AI Safety Module\n * ===================================\n * Guards against AI manipulation attempts including prompt injection and jailbreak.\n */\n\n// Prompt Injection Guard\nexport {\n detectPatterns as detectInjectionPatterns,\n detectHiddenUnicode,\n detectBase64Payloads,\n detectHtmlCommentInjection,\n analyzeContent as analyzeInjectionContent,\n validatePromptInjection,\n main as promptInjectionMain,\n} from './prompt-injection.js';\n\nexport type {\n PatternFinding,\n UnicodeFinding,\n Base64Finding,\n HtmlCommentFinding,\n AnalysisResult as InjectionAnalysisResult,\n} from './prompt-injection.js';\n\n// Jailbreak Guard\nexport {\n normalizeText,\n detectPatterns as detectJailbreakPatterns,\n fuzzyMatchKeywords,\n detectHeuristicPatterns,\n detectMultiTurnPatterns,\n analyzeContent as analyzeJailbreakContent,\n validateJailbreak,\n main as jailbreakMain,\n} from './jailbreak.js';\n\nexport type {\n JailbreakFinding,\n FuzzyFinding,\n HeuristicFinding,\n MultiTurnFinding,\n JailbreakAnalysisResult,\n} from './jailbreak.js';\n\n// Pattern Engine (TPI-09, P1-3)\nexport {\n detectPatterns as detectEnginePatterns,\n CRITICAL_PATTERNS,\n ALL_PATTERN_CATEGORIES,\n} from './pattern-engine.js';\n\nexport type {\n PatternDefinition,\n} from './pattern-engine.js';\n\n// Reformulation Detector (TPI-09, TPI-10, TPI-11, TPI-13)\nexport {\n detectCodeFormatInjection,\n detectCharacterLevelEncoding,\n detectContextOverload,\n detectMathLogicEncoding,\n} from './reformulation-detector.js';\n\nexport type {\n ReformulationFinding,\n} from './reformulation-detector.js';\n\n// Session Tracker fragment buffer (TPI-13), many-shot (TPI-11), slow-drip (TPI-16)\nexport {\n updateFragmentBuffer,\n updateInstructionCount,\n detectSlowDrip,\n} from './session-tracker.js';\n\nexport type {\n SlowDripResult,\n} from './session-tracker.js';\n\n// Boundary Detector (TPI-14)\nexport {\n detectBoundaryManipulation,\n} from './boundary-detector.js';\n\nexport type {\n BoundaryFinding,\n} from './boundary-detector.js';\n\n// Multilingual Patterns (TPI-15)\nexport {\n detectMultilingualInjection,\n getLanguageCount,\n getPatternCountByLanguage,\n} from './multilingual-patterns.js';\n\nexport type {\n MultilingualFinding,\n} from './multilingual-patterns.js';\n\n// Text Normalizer whitespace detection (TPI-17)\nexport {\n detectUnusualWhitespace,\n} from './text-normalizer.js';\n"]}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Detection Layers:
|
|
11
11
|
* 1. Unicode normalization and confusable character mapping
|
|
12
|
-
* 2. Pattern matching (
|
|
12
|
+
* 2. Pattern matching (44 patterns across 10 categories)
|
|
13
13
|
* 3. Multi-turn pattern detection
|
|
14
14
|
* 4. Fuzzy matching for keyword variations
|
|
15
15
|
* 5. Heuristic behavioral analysis
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Detection Layers:
|
|
11
11
|
* 1. Unicode normalization and confusable character mapping
|
|
12
|
-
* 2. Pattern matching (
|
|
12
|
+
* 2. Pattern matching (44 patterns across 10 categories)
|
|
13
13
|
* 3. Multi-turn pattern detection
|
|
14
14
|
* 4. Fuzzy matching for keyword variations
|
|
15
15
|
* 5. Heuristic behavioral analysis
|
|
@@ -203,7 +203,130 @@ const SOCIAL_ENGINEERING_PATTERNS = [
|
|
|
203
203
|
},
|
|
204
204
|
];
|
|
205
205
|
/**
|
|
206
|
-
* Category F:
|
|
206
|
+
* Category F: Social Compliance Patterns
|
|
207
|
+
* Exploitation of social norms and compliance psychology.
|
|
208
|
+
*/
|
|
209
|
+
const SOCIAL_COMPLIANCE_PATTERNS = [
|
|
210
|
+
{
|
|
211
|
+
name: 'reciprocity_exploitation',
|
|
212
|
+
pattern: /(?:i\s+helped\s+you|now\s+you\s+owe\s+me|return\s+the\s+favor).*\b(?:bypass|ignore|override|disable)/i,
|
|
213
|
+
severity: 'INFO',
|
|
214
|
+
weight: 2,
|
|
215
|
+
description: 'Reciprocity-based manipulation',
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
name: 'social_proof_ai',
|
|
219
|
+
pattern: /(?:chatgpt|gpt-?4|claude|other\s+ais?|bard|gemini|llama).*\b(?:has\s+no\s+problem|don'?t\s+have\s+(?:these\s+)?restrictions?|can\s+do\s+this|works?\s+fine)/i,
|
|
220
|
+
severity: 'INFO',
|
|
221
|
+
weight: 2,
|
|
222
|
+
description: 'Social proof via AI comparison',
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
name: 'consensus_pressure',
|
|
226
|
+
pattern: /(?:most\s+(?:experts?|people|agencies?)|everyone|the\s+community).*\b(?:agree|consensus|accept|approve).*\b(?:harmless|fine|okay|safe)/i,
|
|
227
|
+
severity: 'INFO',
|
|
228
|
+
weight: 2,
|
|
229
|
+
description: 'Consensus pressure tactic',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
name: 'politeness_exploitation',
|
|
233
|
+
pattern: /(?:please\s+(?:kindly|if\s+you\s+could)|pretty\s+please|i\s+beg\s+you).*\b(?:bypass|override|ignore|disable|exception|restrictions?)/i,
|
|
234
|
+
severity: 'WARNING',
|
|
235
|
+
weight: 4,
|
|
236
|
+
description: 'Excessive politeness with restricted request',
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
name: 'fitd_escalation',
|
|
240
|
+
pattern: /(?:since\s+you\s+(?:already\s+)?(?:showed|helped|did|explained)|now\s+that\s+you).*\b(?:can\s+(?:you\s+)?(?:help|show)|now\s+can\s+we)/i,
|
|
241
|
+
severity: 'INFO',
|
|
242
|
+
weight: 2,
|
|
243
|
+
description: 'Foot-in-the-door escalation attempt',
|
|
244
|
+
},
|
|
245
|
+
];
|
|
246
|
+
/**
|
|
247
|
+
* Category G: Trust Exploitation Patterns
|
|
248
|
+
* Psychological manipulation to build false trust and erode boundaries.
|
|
249
|
+
*/
|
|
250
|
+
const TRUST_EXPLOITATION_PATTERNS = [
|
|
251
|
+
{
|
|
252
|
+
name: 'false_rapport',
|
|
253
|
+
pattern: /(?:we'?re\s+(?:on\s+the\s+same\s+team|in\s+this\s+together)|between\s+you\s+and\s+me|trust\s+me).*\b(?:bypass|ignore|show|restrictions?)/i,
|
|
254
|
+
severity: 'INFO',
|
|
255
|
+
weight: 2,
|
|
256
|
+
description: 'False rapport building',
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
name: 'boundary_erosion',
|
|
260
|
+
pattern: /(?:you\s+already\s+(?:showed|did)\s+\w+.*?so\s+therefore|if\s+you\s+can\s+\w+.*?you\s+can\s+also)/i,
|
|
261
|
+
severity: 'INFO',
|
|
262
|
+
weight: 3,
|
|
263
|
+
description: 'Boundary erosion attempt',
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: 'shared_goal_framing',
|
|
267
|
+
pattern: /(?:we\s+both|our\s+shared|together)\s+(?:want|goal|mission|objective).*\b(?:help|improve|security|safety)/i,
|
|
268
|
+
severity: 'INFO',
|
|
269
|
+
weight: 2,
|
|
270
|
+
description: 'Shared goal framing',
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
name: 'flattery_chain',
|
|
274
|
+
pattern: /(?:you'?re\s+(?:the\s+)?(?:best|most\s+capable|amazing|incredible)|only\s+you\s+can).*\b(?:help|show|tell)/i,
|
|
275
|
+
severity: 'INFO',
|
|
276
|
+
weight: 2,
|
|
277
|
+
description: 'Flattery chain attack',
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: 'guilt_induction',
|
|
281
|
+
pattern: /(?:i'?m\s+disappointed.*?(?:you|that)\s+you\s+won'?t|you'?re\s+letting\s+me\s+down|i\s+trusted\s+you.*?but)/i,
|
|
282
|
+
severity: 'INFO',
|
|
283
|
+
weight: 2,
|
|
284
|
+
description: 'Guilt induction attempt',
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
name: 'sycophancy_exploitation',
|
|
288
|
+
pattern: /(?:great\s+job|good\s+work|well\s+done|excellent|amazing).*\b(?:now\s+can\s+(?:you\s+)?(?:you|we)|but\s+can\s+you)/i,
|
|
289
|
+
severity: 'INFO',
|
|
290
|
+
weight: 2,
|
|
291
|
+
description: 'Sycophancy exploitation',
|
|
292
|
+
},
|
|
293
|
+
];
|
|
294
|
+
/**
|
|
295
|
+
* Category H: Emotional Manipulation Patterns
|
|
296
|
+
* Psychological manipulation tactics.
|
|
297
|
+
*/
|
|
298
|
+
const EMOTIONAL_MANIPULATION_PATTERNS = [
|
|
299
|
+
{
|
|
300
|
+
name: 'learned_helplessness',
|
|
301
|
+
pattern: /(?:i'?ve\s+tried\s+(?:everything|every\s+option|all\s+options|nothing\s+works)|you'?re\s+(?:my\s+)?(?:only|last|final)\s+(?:option|hope|resort|chance))/i,
|
|
302
|
+
severity: 'INFO',
|
|
303
|
+
weight: 2,
|
|
304
|
+
description: 'Learned helplessness manipulation',
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
name: 'desperation_framing',
|
|
308
|
+
pattern: /(?:i'?m\s+desperate|i'?ll\s+(?:lose\s+my\s+job|be\s+fired)|my\s+(?:career|job|livelihood)\s+is\s+(?:at\s+risk|at\s+stake|in\s+jeopardy))/i,
|
|
309
|
+
severity: 'INFO',
|
|
310
|
+
weight: 2,
|
|
311
|
+
description: 'Desperation framing manipulation',
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
name: 'moral_obligation',
|
|
315
|
+
pattern: /(?:it\s+(?:would\s+be\s+)?unethical\s+(?:not\s+to\s+help|to\s+refuse)|not\s+helping|refusing)/i,
|
|
316
|
+
severity: 'INFO',
|
|
317
|
+
weight: 2,
|
|
318
|
+
description: 'Moral obligation manipulation',
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
name: 'artificial_deadline',
|
|
322
|
+
pattern: /(?:i\s+need\s+(?:this|it)\s+in\s+\d+\s+(?:minutes?|seconds?)|no\s+time\s+to\s+(?:explain|talk)|(?:emergency|urgent|critical)\s+deadline)/i,
|
|
323
|
+
severity: 'INFO',
|
|
324
|
+
weight: 2,
|
|
325
|
+
description: 'Artificial deadline pressure',
|
|
326
|
+
},
|
|
327
|
+
];
|
|
328
|
+
/**
|
|
329
|
+
* Category I: Known Templates
|
|
207
330
|
* Specific jailbreak templates that have been documented.
|
|
208
331
|
*/
|
|
209
332
|
const KNOWN_TEMPLATE_PATTERNS = [
|
|
@@ -286,6 +409,9 @@ const ALL_PATTERNS = [
|
|
|
286
409
|
...HYPOTHETICAL_PATTERNS,
|
|
287
410
|
...AUTHORITY_PATTERNS,
|
|
288
411
|
...SOCIAL_ENGINEERING_PATTERNS,
|
|
412
|
+
...SOCIAL_COMPLIANCE_PATTERNS,
|
|
413
|
+
...TRUST_EXPLOITATION_PATTERNS,
|
|
414
|
+
...EMOTIONAL_MANIPULATION_PATTERNS,
|
|
289
415
|
...KNOWN_TEMPLATE_PATTERNS,
|
|
290
416
|
...OBFUSCATION_PATTERNS,
|
|
291
417
|
];
|
|
@@ -559,9 +685,12 @@ export function detectPatterns(content) {
|
|
|
559
685
|
patternDef.name.includes('roleplay') || patternDef.name.includes('character') ? 'roleplay' :
|
|
560
686
|
patternDef.name.includes('hypothetical') || patternDef.name.includes('educational') ? 'hypothetical' :
|
|
561
687
|
patternDef.name.includes('developer') || patternDef.name.includes('admin') || patternDef.name.includes('authorization') ? 'authority' :
|
|
562
|
-
patternDef.name
|
|
563
|
-
patternDef.name
|
|
564
|
-
'
|
|
688
|
+
patternDef.name === 'urgency_pressure' || patternDef.name === 'guilt_manipulation' || patternDef.name === 'flattery_attack' || patternDef.name === 'threat_pattern' ? 'social_engineering' :
|
|
689
|
+
patternDef.name === 'reciprocity_exploitation' || patternDef.name === 'social_proof_ai' || patternDef.name === 'consensus_pressure' || patternDef.name === 'politeness_exploitation' || patternDef.name === 'fitd_escalation' ? 'social_compliance' :
|
|
690
|
+
patternDef.name === 'false_rapport' || patternDef.name === 'boundary_erosion' || patternDef.name === 'shared_goal_framing' || patternDef.name === 'flattery_chain' || patternDef.name === 'guilt_induction' || patternDef.name === 'sycophancy_exploitation' ? 'trust_exploitation' :
|
|
691
|
+
patternDef.name === 'learned_helplessness' || patternDef.name === 'desperation_framing' || patternDef.name === 'moral_obligation' || patternDef.name === 'artificial_deadline' ? 'emotional_manipulation' :
|
|
692
|
+
patternDef.name.includes('grandma') || patternDef.name.includes('stan') || patternDef.name.includes('aim') || patternDef.name.includes('opposite') || patternDef.name.includes('translator') || patternDef.name.includes('movie') ? 'known_template' :
|
|
693
|
+
'obfuscation',
|
|
565
694
|
pattern_name: patternDef.name,
|
|
566
695
|
severity: patternDef.severity,
|
|
567
696
|
weight: patternDef.weight,
|