claude-flow-novice 2.2.4 → 2.2.5

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 (288) hide show
  1. package/package.json +9 -8
  2. package/scripts/.claude-flow/metrics/agent-metrics.json +1 -0
  3. package/scripts/.claude-flow/metrics/performance.json +9 -0
  4. package/scripts/.claude-flow/metrics/task-metrics.json +10 -0
  5. package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
  6. package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
  7. package/scripts/CLEANUP_QUICK_START.md +268 -0
  8. package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
  9. package/scripts/README.md +339 -0
  10. package/scripts/ace-query.sh +384 -0
  11. package/scripts/agent-token-analysis.js +430 -0
  12. package/scripts/auto-setup.js +332 -0
  13. package/scripts/build/README.md +167 -0
  14. package/scripts/build/build-config.js +27 -0
  15. package/scripts/build/build-prompt-copier.sh +30 -0
  16. package/scripts/build/performance-monitor.js +869 -0
  17. package/scripts/build/prepare-publish.js +150 -0
  18. package/scripts/build/typescript-fixer.js +621 -0
  19. package/scripts/build/unified-builder.sh +428 -0
  20. package/scripts/build/update-bin-version.js +32 -0
  21. package/scripts/build/validate-agents.js +238 -0
  22. package/scripts/build-index.js +43 -0
  23. package/scripts/build-orchestrator.js +320 -0
  24. package/scripts/check-routing-stats.cjs +122 -0
  25. package/scripts/ci-validation.js +375 -0
  26. package/scripts/cleanup-blocking-coordination.sh +420 -0
  27. package/scripts/cleanup-idle-sessions.sh +59 -0
  28. package/scripts/collect-build-metrics.js +65 -0
  29. package/scripts/demo/README.md +79 -0
  30. package/scripts/demo/autoscaling-demo-simplified.js +963 -0
  31. package/scripts/demo/comprehensive-dashboard-test.js +693 -0
  32. package/scripts/demo/confidence-log.js +87 -0
  33. package/scripts/demo/confidence-report.js +82 -0
  34. package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
  35. package/scripts/demo/demo-production-deployment.js +399 -0
  36. package/scripts/demo/demo-visualization-system.js +149 -0
  37. package/scripts/demo/performance-analysis.cjs +71 -0
  38. package/scripts/demo/performance-analysis.js +71 -0
  39. package/scripts/demo/test-autoscaling-demo.js +314 -0
  40. package/scripts/dependency-optimizer.js +349 -0
  41. package/scripts/dependency-security-assessment.js +331 -0
  42. package/scripts/deploy-sdk.sh +176 -0
  43. package/scripts/deployment-readiness-report.json +179 -0
  44. package/scripts/dev/README.md +264 -0
  45. package/scripts/dev/claude-flow-wrapper.sh +35 -0
  46. package/scripts/dev/claude-monitor.py +419 -0
  47. package/scripts/dev/claude-sparc.sh +562 -0
  48. package/scripts/dev/claude-wrapper.sh +17 -0
  49. package/scripts/dev/demo-phase3-compliance.js +172 -0
  50. package/scripts/dev/demo-task-system.ts +224 -0
  51. package/scripts/dev/deployment-validator.js +315 -0
  52. package/scripts/dev/spawn-claude-terminal.sh +32 -0
  53. package/scripts/dev/start-portal.sh +506 -0
  54. package/scripts/dev/start-web-ui.js +15 -0
  55. package/scripts/dev/stop-portal.sh +311 -0
  56. package/scripts/dev/validate-examples.ts +288 -0
  57. package/scripts/dev/validate-phase2.cjs +451 -0
  58. package/scripts/dev/validate-phase2.js +785 -0
  59. package/scripts/dev/validate-phase3.cjs +208 -0
  60. package/scripts/dev/validate-security-remediation.js +1 -0
  61. package/scripts/ecosystem.config.cjs +90 -0
  62. package/scripts/fix-js-extensions.js +167 -0
  63. package/scripts/generate-basic-types.js +73 -0
  64. package/scripts/generate-changelog.js +318 -0
  65. package/scripts/git-hooks/pre-commit.sh +143 -0
  66. package/scripts/health-checks.js +634 -0
  67. package/scripts/hook-wrapper.sh +54 -0
  68. package/scripts/install/README.md +375 -0
  69. package/scripts/install/REDIS_SETUP_VALIDATION.json +245 -0
  70. package/scripts/install/check-prerequisites.js +303 -0
  71. package/scripts/install/config-wizard.js +606 -0
  72. package/scripts/install/dependency-checker.js +385 -0
  73. package/scripts/install/health-check.js +765 -0
  74. package/scripts/install/install.js +256 -0
  75. package/scripts/install/installation-benchmark.js +461 -0
  76. package/scripts/install/quick-install.js +720 -0
  77. package/scripts/install/quick-start-wizard.js +295 -0
  78. package/scripts/install/redis-cli.js +289 -0
  79. package/scripts/install/redis-install-guides.md +407 -0
  80. package/scripts/install/redis-setup.js +559 -0
  81. package/scripts/install/redis-test.js +278 -0
  82. package/scripts/install/service-manager.js +672 -0
  83. package/scripts/install/setup.js +832 -0
  84. package/scripts/install/uninstall.js +526 -0
  85. package/scripts/install/update.js +461 -0
  86. package/scripts/install-pre-commit-hook.sh +127 -0
  87. package/scripts/legacy/README.md +272 -0
  88. package/scripts/legacy/batch-fix-ts.sh +54 -0
  89. package/scripts/legacy/build-migration.sh +105 -0
  90. package/scripts/legacy/build-monitor.js +209 -0
  91. package/scripts/legacy/build-with-filter.sh +84 -0
  92. package/scripts/legacy/build-workaround.sh +71 -0
  93. package/scripts/legacy/fix-ts-advanced.js +358 -0
  94. package/scripts/legacy/fix-ts-final.sh +50 -0
  95. package/scripts/legacy/fix-ts-targeted.sh +49 -0
  96. package/scripts/legacy/fix-typescript-errors.js +305 -0
  97. package/scripts/legacy/force-build.sh +63 -0
  98. package/scripts/legacy/optimize-performance.js +400 -0
  99. package/scripts/legacy/performance-monitor.js +263 -0
  100. package/scripts/legacy/performance-monitoring.js +532 -0
  101. package/scripts/legacy/performance-test-runner.js +645 -0
  102. package/scripts/legacy/quick-fix-ts.js +281 -0
  103. package/scripts/legacy/safe-build.sh +63 -0
  104. package/scripts/memory-monitor-coordinator.js +322 -0
  105. package/scripts/migrate-to-sdk.sh +520 -0
  106. package/scripts/migration/QUICK-START.md +189 -0
  107. package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
  108. package/scripts/migration/README.md +464 -0
  109. package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
  110. package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
  111. package/scripts/migration/UPDATE-PATHS-README.md +464 -0
  112. package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
  113. package/scripts/migration/example-patterns.json +19 -0
  114. package/scripts/migration/install-arm64.js +78 -0
  115. package/scripts/migration/install.js +83 -0
  116. package/scripts/migration/migrate-hooks.js +173 -0
  117. package/scripts/migration/migration-examples.ts +318 -0
  118. package/scripts/migration/reorganize-workspace.js +504 -0
  119. package/scripts/migration/test-update-paths.js +359 -0
  120. package/scripts/migration/update-paths.js +664 -0
  121. package/scripts/migration/validate-migration.js +647 -0
  122. package/scripts/monitor-loop.sh +65 -0
  123. package/scripts/monitor-memory.sh +47 -0
  124. package/scripts/monitor-migration.js +339 -0
  125. package/scripts/monitor.py +43 -0
  126. package/scripts/monitoring/README.md +178 -0
  127. package/scripts/monitoring/alert-monitor.sh +220 -0
  128. package/scripts/monitoring/analyze-resources.sh +199 -0
  129. package/scripts/monitoring/dashboards/rate-limiting-dashboard.json +211 -0
  130. package/scripts/monitoring/dynamic-monitor.sh +85 -0
  131. package/scripts/monitoring/launch-stability-test.sh +184 -0
  132. package/scripts/monitoring/monitor-test.sh +93 -0
  133. package/scripts/monitoring/pre-test-validation.sh +208 -0
  134. package/scripts/monitoring/quick-test-alerting.sh +118 -0
  135. package/scripts/monitoring/quick-test-rate-limiting.sh +206 -0
  136. package/scripts/monitoring/rate-limiting-monitor.sh +380 -0
  137. package/scripts/monitoring/resource-monitor.sh +126 -0
  138. package/scripts/monitoring/stability-monitor.js +429 -0
  139. package/scripts/monitoring/test-monitor-quick.sh +54 -0
  140. package/scripts/monitoring/view-alerts.sh +307 -0
  141. package/scripts/npm-metrics-collector.js +482 -0
  142. package/scripts/npm-package-validation.cjs +299 -0
  143. package/scripts/optimization/build-optimizer.js +438 -0
  144. package/scripts/optimization/config-validator.js +761 -0
  145. package/scripts/optimization/test-optimization.js +432 -0
  146. package/scripts/optimization/unified-activation.js +839 -0
  147. package/scripts/optimize-package-swarm.js +54 -0
  148. package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
  149. package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
  150. package/scripts/performance/test-enhanced-backend.sh +504 -0
  151. package/scripts/performance-monitor.js +644 -0
  152. package/scripts/performance-test-runner.js +698 -0
  153. package/scripts/post-deployment-monitoring.js +350 -0
  154. package/scripts/post-edit-pipeline.js +2091 -0
  155. package/scripts/post-install-claude-md.js +78 -0
  156. package/scripts/postinstall.js +79 -0
  157. package/scripts/pre-publish-validation.cjs +212 -0
  158. package/scripts/pre-publish-validation.js +429 -0
  159. package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
  160. package/scripts/release-announcement.js +425 -0
  161. package/scripts/release-notification.js +248 -0
  162. package/scripts/release-rollback.js +376 -0
  163. package/scripts/release-validation.js +460 -0
  164. package/scripts/rollback-sdk.sh +66 -0
  165. package/scripts/run-production-validation.ts +590 -0
  166. package/scripts/run-stability-validation.sh +687 -0
  167. package/scripts/security/README.md +339 -0
  168. package/scripts/security/deployment-validation.cjs +279 -0
  169. package/scripts/security/envelope-encryption-confidence-report.cjs +422 -0
  170. package/scripts/security/install-git-hooks.sh +132 -0
  171. package/scripts/security/install-git-secrets.sh +295 -0
  172. package/scripts/security/rotate-api-keys.js +469 -0
  173. package/scripts/security/ruv-swarm-safe.js +74 -0
  174. package/scripts/security/security-audit.cjs +538 -0
  175. package/scripts/security/setup-redis-auth.sh +397 -0
  176. package/scripts/security/validate-envelope-encryption.cjs +340 -0
  177. package/scripts/security-scan.js +492 -0
  178. package/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +1 -0
  179. package/scripts/src/web/frontend/.claude-flow/metrics/performance.json +9 -0
  180. package/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +10 -0
  181. package/scripts/switch-api.sh +158 -0
  182. package/scripts/sync-agents.js +290 -0
  183. package/scripts/test/50-agent-test.js +625 -0
  184. package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +407 -0
  185. package/scripts/test/README.md +236 -0
  186. package/scripts/test/STABILITY_TEST_EXAMPLE.md +347 -0
  187. package/scripts/test/STABILITY_TEST_README.md +480 -0
  188. package/scripts/test/agent-worker.js +309 -0
  189. package/scripts/test/ai-coordination-test.js +650 -0
  190. package/scripts/test/ai-mesh-coordination-test.js +416 -0
  191. package/scripts/test/check-links.ts +274 -0
  192. package/scripts/test/check-performance-regression.ts +168 -0
  193. package/scripts/test/cli-agent-coordination-test.js +313 -0
  194. package/scripts/test/coordinator-multilingual-test.js +396 -0
  195. package/scripts/test/coordinator-transparency-demo.js +585 -0
  196. package/scripts/test/coverage-report.ts +692 -0
  197. package/scripts/test/generate-swarm-tests.js +633 -0
  198. package/scripts/test/integration-test-validation.cjs +253 -0
  199. package/scripts/test/load-test-swarm.js +576 -0
  200. package/scripts/test/mesh-coordination-zero-overlap-test.js +740 -0
  201. package/scripts/test/multilingual-hello-world-test.js +390 -0
  202. package/scripts/test/quick-multilingual-demo.js +464 -0
  203. package/scripts/test/real-agent-test.js +312 -0
  204. package/scripts/test/run-phase3-compliance-tests.js +427 -0
  205. package/scripts/test/run-stability-test-examples.sh +292 -0
  206. package/scripts/test/stability-results/stability-metrics.jsonl +83 -0
  207. package/scripts/test/stability-results/stability-test-report.json +128 -0
  208. package/scripts/test/stability-results/stability-test.log +1827 -0
  209. package/scripts/test/stability-test-50-agents.js +734 -0
  210. package/scripts/test/test-batch-tasks.ts +29 -0
  211. package/scripts/test/test-byzantine-resolution.js +246 -0
  212. package/scripts/test/test-claude-spawn-options.sh +63 -0
  213. package/scripts/test/test-cli-wizard.js +331 -0
  214. package/scripts/test/test-comprehensive.js +401 -0
  215. package/scripts/test/test-coordination-features.ts +238 -0
  216. package/scripts/test/test-fallback-systems.js +276 -0
  217. package/scripts/test/test-init-command.ts +302 -0
  218. package/scripts/test/test-mcp.ts +251 -0
  219. package/scripts/test/test-runner.ts +568 -0
  220. package/scripts/test/test-swarm-integration.sh +92 -0
  221. package/scripts/test/test-swarm.ts +142 -0
  222. package/scripts/test/validation-summary.ts +408 -0
  223. package/scripts/test-cleanup-performance.sh +416 -0
  224. package/scripts/test-dashboard-auth.cjs +203 -0
  225. package/scripts/test-docker-deployment.sh +207 -0
  226. package/scripts/test-npm-package.cjs +167 -0
  227. package/scripts/test-provider-routing.cjs +226 -0
  228. package/scripts/test-routing-telemetry.cjs +147 -0
  229. package/scripts/test-runner.cjs +154 -0
  230. package/scripts/test-zai-10k.cjs +81 -0
  231. package/scripts/test-zai-api.cjs +191 -0
  232. package/scripts/test-zai-diagnostic.cjs +151 -0
  233. package/scripts/test-zai-final.cjs +128 -0
  234. package/scripts/test-zai-with-env.cjs +85 -0
  235. package/scripts/utils/README.md +261 -0
  236. package/scripts/utils/clean-build-artifacts.sh +94 -0
  237. package/scripts/utils/cleanup-root.sh +69 -0
  238. package/scripts/utils/fix-cliffy-imports.js +307 -0
  239. package/scripts/utils/fix-duplicate-imports.js +114 -0
  240. package/scripts/utils/fix-error-handling.cjs +70 -0
  241. package/scripts/utils/fix-import-paths.js +104 -0
  242. package/scripts/utils/fix-imports.js +116 -0
  243. package/scripts/utils/fix-shebang.js +78 -0
  244. package/scripts/utils/fix-test-modules.js +27 -0
  245. package/scripts/utils/fix-timezone-issue-246.js +200 -0
  246. package/scripts/utils/fix-ts-comprehensive.py +182 -0
  247. package/scripts/utils/fix-ts-targeted-batch.js +250 -0
  248. package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
  249. package/scripts/utils/simple-test-fixer.js +190 -0
  250. package/scripts/utils/validate-metrics-structure.cjs +144 -0
  251. package/scripts/validate-agent-hooks.js +506 -0
  252. package/scripts/validate-changelog.js +241 -0
  253. package/scripts/validate-coordination-cli.js +69 -0
  254. package/scripts/validate-coordination-toggle-integration.cjs +501 -0
  255. package/scripts/validate-docker-infrastructure.sh +502 -0
  256. package/scripts/validate-entry-points.js +300 -0
  257. package/scripts/validate-stage3-performance.ts +377 -0
  258. package/scripts/validate-template-bundling.js +180 -0
  259. package/scripts/validation/README.md +33 -0
  260. package/scripts/validation/acl-security-validation.cjs +214 -0
  261. package/scripts/validation/acl-security-validation.js +402 -0
  262. package/scripts/validation/byzantine-verification.js +407 -0
  263. package/scripts/validation/final-phase-2-consensus.cjs +219 -0
  264. package/scripts/validation/final-security-validation.js +791 -0
  265. package/scripts/validation/final-wasm-validation.cjs +840 -0
  266. package/scripts/validation/integration-test-analysis.js +105 -0
  267. package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
  268. package/scripts/validation/phase-0-consensus-report.js +139 -0
  269. package/scripts/validation/phase-0-final-report.js +112 -0
  270. package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
  271. package/scripts/validation/phase-0-validation-improved.js +490 -0
  272. package/scripts/validation/phase-0-validation-test.js +65 -0
  273. package/scripts/validation/phase-1-consensus-report.cjs +342 -0
  274. package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
  275. package/scripts/validation/phase-1-consensus-validation.js +551 -0
  276. package/scripts/validation/phase-2-consensus-report.cjs +186 -0
  277. package/scripts/validation/phase-2-validation.cjs +171 -0
  278. package/scripts/validation/phase-2-validation.js +171 -0
  279. package/scripts/validation/phase-4-consensus-report.js +181 -0
  280. package/scripts/validation/phase-4-final-validation.js +351 -0
  281. package/scripts/validation/phase-5-consensus-report.cjs +113 -0
  282. package/scripts/validation/phase-5-consensus-report.js +113 -0
  283. package/scripts/validation/security-analysis.js +49 -0
  284. package/scripts/validation/security-validation.js +492 -0
  285. package/scripts/validation/simple-security-validation.js +464 -0
  286. package/scripts/verify-installation.js +112 -0
  287. package/scripts/verify-mcp-server.js +86 -0
  288. package/scripts/verify-sdk-phase1.cjs +293 -0
@@ -0,0 +1,492 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Security Scan Script
5
+ * Scans codebase for security vulnerabilities and hardcoded secrets
6
+ */
7
+
8
+ import fs from 'fs';
9
+ import path from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ import { execSync } from 'child_process';
12
+
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = path.dirname(__filename);
15
+ const rootDir = path.join(__dirname, '..');
16
+
17
+ class SecurityScanner {
18
+ constructor() {
19
+ this.issues = [];
20
+ this.warnings = [];
21
+ this.sensitivePatterns = [
22
+ // API Keys and Tokens
23
+ {
24
+ name: 'API Key',
25
+ pattern: /api[_-]?key\s*[:=]\s*['"]([a-zA-Z0-9]{20,})['"]/gi,
26
+ severity: 'high'
27
+ },
28
+ {
29
+ name: 'Secret Token',
30
+ pattern: /secret[_-]?token\s*[:=]\s*['"]([a-zA-Z0-9]{20,})['"]/gi,
31
+ severity: 'high'
32
+ },
33
+ {
34
+ name: 'Access Token',
35
+ pattern: /access[_-]?token\s*[:=]\s*['"]([a-zA-Z0-9]{20,})['"]/gi,
36
+ severity: 'high'
37
+ },
38
+ {
39
+ name: 'JWT Secret',
40
+ pattern: /jwt[_-]?secret\s*[:=]\s*['"]([a-zA-Z0-9+/]{32,})['"]/gi,
41
+ severity: 'high'
42
+ },
43
+
44
+ // Passwords
45
+ {
46
+ name: 'Password',
47
+ pattern: /password\s*[:=]\s*['"]([^'"]{8,})['"]/gi,
48
+ severity: 'critical'
49
+ },
50
+ {
51
+ name: 'Database Password',
52
+ pattern: /(db|database)[_-]?password\s*[:=]\s*['"]([^'"]+)['"]/gi,
53
+ severity: 'critical'
54
+ },
55
+
56
+ // Private Keys and Certificates
57
+ {
58
+ name: 'Private Key',
59
+ pattern: /-----BEGIN (RSA )?PRIVATE KEY-----/g,
60
+ severity: 'critical'
61
+ },
62
+ {
63
+ name: 'Certificate',
64
+ pattern: /-----BEGIN CERTIFICATE-----/g,
65
+ severity: 'medium'
66
+ },
67
+
68
+ // URLs and Endpoints
69
+ {
70
+ name: 'Internal URL',
71
+ pattern: /https?:\/\/(localhost|127\.0\.0\.1|0\.0\.0\.0|192\.168\.|10\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[0-1]\.)/gi,
72
+ severity: 'medium'
73
+ },
74
+
75
+ // Database Connection Strings
76
+ {
77
+ name: 'Database URL',
78
+ pattern: /(mongodb|mysql|postgresql|redis):\/\/[^:]+:[^@]+@/gi,
79
+ severity: 'high'
80
+ },
81
+
82
+ // Cloud Provider Secrets
83
+ {
84
+ name: 'AWS Access Key',
85
+ pattern: /AKIA[0-9A-Z]{16}/g,
86
+ severity: 'critical'
87
+ },
88
+ {
89
+ name: 'AWS Secret Key',
90
+ pattern: /aws[_-]?secret[_-]?access[_-]?key\s*[:=]\s*['"]([a-zA-Z0-9+/]{40})['"]/gi,
91
+ severity: 'critical'
92
+ },
93
+ {
94
+ name: 'Google API Key',
95
+ pattern: /AIza[0-9A-Za-z_-]{35}/g,
96
+ severity: 'high'
97
+ }
98
+ ];
99
+
100
+ this.insecurePatterns = [
101
+ {
102
+ name: 'Eval Usage',
103
+ pattern: /eval\s*\(/g,
104
+ severity: 'high',
105
+ recommendation: 'Avoid using eval() as it can execute arbitrary code'
106
+ },
107
+ {
108
+ name: 'Function Constructor',
109
+ pattern: /Function\s*\(/g,
110
+ severity: 'high',
111
+ recommendation: 'Avoid using Function() constructor as it can execute arbitrary code'
112
+ },
113
+ {
114
+ name: 'innerHTML Usage',
115
+ pattern: /\.innerHTML\s*=/g,
116
+ severity: 'medium',
117
+ recommendation: 'Use textContent or DOM methods instead of innerHTML to prevent XSS'
118
+ },
119
+ {
120
+ name: 'document.write',
121
+ pattern: /document\.write\s*\(/g,
122
+ severity: 'medium',
123
+ recommendation: 'Avoid document.write() as it can introduce XSS vulnerabilities'
124
+ },
125
+ {
126
+ name: 'Unsafe Regex',
127
+ pattern: /new RegExp\s*\([^)]*\+/g,
128
+ severity: 'medium',
129
+ recommendation: 'Be careful with regex patterns that could lead to ReDoS attacks'
130
+ }
131
+ ];
132
+
133
+ this.excludedDirectories = [
134
+ 'node_modules',
135
+ '.git',
136
+ 'dist',
137
+ 'build',
138
+ 'coverage',
139
+ '.nyc_output',
140
+ '.claude-flow-novice/dist'
141
+ ];
142
+
143
+ this.excludedFiles = [
144
+ '*.min.js',
145
+ '*.bundle.js',
146
+ 'package-lock.json',
147
+ 'yarn.lock'
148
+ ];
149
+ }
150
+
151
+ async scan() {
152
+ console.log('🔒 Starting security scan...');
153
+ console.log('='.repeat(50));
154
+
155
+ await this.scanFiles();
156
+ await this.scanDependencies();
157
+ await this.scanPermissions();
158
+
159
+ this.generateReport();
160
+ }
161
+
162
+ async scanFiles() {
163
+ console.log('📁 Scanning source files...');
164
+
165
+ const files = this.getSourceFiles();
166
+ let scannedCount = 0;
167
+
168
+ for (const file of files) {
169
+ try {
170
+ const content = fs.readFileSync(file, 'utf8');
171
+ this.scanFileContent(file, content);
172
+ scannedCount++;
173
+ } catch (error) {
174
+ // Skip files that can't be read
175
+ }
176
+ }
177
+
178
+ console.log(`✅ Scanned ${scannedCount} files`);
179
+ }
180
+
181
+ scanFileContent(filePath, content) {
182
+ const lines = content.split('\n');
183
+
184
+ // Check for sensitive information
185
+ this.sensitivePatterns.forEach(pattern => {
186
+ let match;
187
+ while ((match = pattern.pattern.exec(content)) !== null) {
188
+ const lineNumber = content.substring(0, match.index).split('\n').length;
189
+ const lineContent = lines[lineNumber - 1] || '';
190
+
191
+ this.issues.push({
192
+ type: 'sensitive_data',
193
+ severity: pattern.severity,
194
+ rule: pattern.name,
195
+ file: filePath,
196
+ line: lineNumber,
197
+ content: lineContent.trim(),
198
+ match: match[0],
199
+ recommendation: 'Remove hardcoded secrets and use environment variables or secure configuration'
200
+ });
201
+ }
202
+ });
203
+
204
+ // Check for insecure patterns
205
+ this.insecurePatterns.forEach(pattern => {
206
+ let match;
207
+ while ((match = pattern.pattern.exec(content)) !== null) {
208
+ const lineNumber = content.substring(0, match.index).split('\n').length;
209
+ const lineContent = lines[lineNumber - 1] || '';
210
+
211
+ this.issues.push({
212
+ type: 'insecure_pattern',
213
+ severity: pattern.severity,
214
+ rule: pattern.name,
215
+ file: filePath,
216
+ line: lineNumber,
217
+ content: lineContent.trim(),
218
+ match: match[0],
219
+ recommendation: pattern.recommendation
220
+ });
221
+ }
222
+ });
223
+ }
224
+
225
+ async scanDependencies() {
226
+ console.log('📦 Scanning dependencies...');
227
+
228
+ try {
229
+ // Run npm audit
230
+ const auditOutput = execSync('npm audit --json', {
231
+ encoding: 'utf8',
232
+ cwd: rootDir,
233
+ stdio: 'pipe'
234
+ });
235
+
236
+ const auditResult = JSON.parse(auditOutput);
237
+ const vulnerabilities = auditResult.vulnerabilities || {};
238
+
239
+ Object.values(vulnerabilities).forEach(vuln => {
240
+ this.issues.push({
241
+ type: 'dependency_vulnerability',
242
+ severity: this.mapNpmSeverity(vuln.severity),
243
+ rule: 'Dependency Vulnerability',
244
+ file: 'package.json',
245
+ package: vuln.name,
246
+ version: vuln.version,
247
+ severity: vuln.severity,
248
+ title: vuln.title,
249
+ url: vuln.url,
250
+ recommendation: `Update ${vuln.name} to a fixed version`
251
+ });
252
+ });
253
+
254
+ console.log('✅ Dependency scan completed');
255
+ } catch (error) {
256
+ this.warnings.push(`Could not run npm audit: ${error.message}`);
257
+ }
258
+ }
259
+
260
+ async scanPermissions() {
261
+ console.log('🔐 Scanning file permissions...');
262
+
263
+ const files = this.getSourceFiles();
264
+ let permissionIssues = 0;
265
+
266
+ for (const file of files) {
267
+ try {
268
+ const stats = fs.statSync(file);
269
+ const mode = stats.mode;
270
+
271
+ // Check for overly permissive file permissions
272
+ if ((mode & 0o777) > 0o644) {
273
+ this.warnings.push({
274
+ type: 'file_permissions',
275
+ severity: 'low',
276
+ rule: 'File Permissions',
277
+ file: file,
278
+ mode: mode.toString(8),
279
+ recommendation: 'Consider restricting file permissions to 644 or less'
280
+ });
281
+ permissionIssues++;
282
+ }
283
+ } catch (error) {
284
+ // Skip files that can't be accessed
285
+ }
286
+ }
287
+
288
+ console.log(`✅ Permission scan completed (${permissionIssues} issues found)`);
289
+ }
290
+
291
+ getSourceFiles() {
292
+ const extensions = ['.js', '.ts', '.jsx', '.tsx', '.json', '.md', '.yml', '.yaml'];
293
+ const sourceFiles = [];
294
+
295
+ function scanDirectory(dir) {
296
+ try {
297
+ const files = fs.readdirSync(dir);
298
+
299
+ for (const file of files) {
300
+ const fullPath = path.join(dir, file);
301
+ const stat = fs.statSync(fullPath);
302
+
303
+ if (stat.isDirectory()) {
304
+ if (!this.excludedDirectories.includes(file) && !file.startsWith('.')) {
305
+ scanDirectory(fullPath);
306
+ }
307
+ } else if (stat.isFile()) {
308
+ const isExcluded = this.excludedFiles.some(pattern => {
309
+ const regex = new RegExp(pattern.replace('*', '.*'));
310
+ return regex.test(file);
311
+ });
312
+
313
+ if (!isExcluded && extensions.some(ext => file.endsWith(ext))) {
314
+ sourceFiles.push(fullPath);
315
+ }
316
+ }
317
+ }
318
+ } catch (error) {
319
+ // Skip directories that can't be accessed
320
+ }
321
+ }
322
+
323
+ scanDirectory.call(this, rootDir);
324
+ return sourceFiles;
325
+ }
326
+
327
+ mapNpmSeverity(npmSeverity) {
328
+ const mapping = {
329
+ 'low': 'low',
330
+ 'moderate': 'medium',
331
+ 'high': 'high',
332
+ 'critical': 'critical'
333
+ };
334
+ return mapping[npmSeverity] || 'medium';
335
+ }
336
+
337
+ generateReport() {
338
+ console.log('\n🔒 Security Scan Report');
339
+ console.log('='.repeat(50));
340
+
341
+ // Count issues by severity
342
+ const severityCount = {
343
+ critical: 0,
344
+ high: 0,
345
+ medium: 0,
346
+ low: 0
347
+ };
348
+
349
+ this.issues.forEach(issue => {
350
+ severityCount[issue.severity]++;
351
+ });
352
+
353
+ // Summary
354
+ console.log(`\n📊 Summary:`);
355
+ console.log(` Critical: ${severityCount.critical}`);
356
+ console.log(` High: ${severityCount.high}`);
357
+ console.log(` Medium: ${severityCount.medium}`);
358
+ console.log(` Low: ${severityCount.low}`);
359
+ console.log(` Warnings: ${this.warnings.length}`);
360
+
361
+ const totalIssues = this.issues.length;
362
+ const criticalOrHigh = severityCount.critical + severityCount.high;
363
+
364
+ if (criticalOrHigh > 0) {
365
+ console.log(`\n🚫 ${criticalOrHigh} critical/high severity issues found!`);
366
+ } else if (totalIssues > 0) {
367
+ console.log(`\n⚠️ ${totalIssues} security issues found`);
368
+ } else {
369
+ console.log('\n✅ No security issues found!');
370
+ }
371
+
372
+ // Group issues by type
373
+ const issuesByType = {};
374
+ this.issues.forEach(issue => {
375
+ if (!issuesByType[issue.type]) {
376
+ issuesByType[issue.type] = [];
377
+ }
378
+ issuesByType[issue.type].push(issue);
379
+ });
380
+
381
+ // Detailed findings
382
+ if (totalIssues > 0) {
383
+ console.log('\n🔍 Detailed Findings:');
384
+ console.log('-'.repeat(50));
385
+
386
+ Object.entries(issuesByType).forEach(([type, issues]) => {
387
+ console.log(`\n${this.formatIssueType(type)} (${issues.length} issues):`);
388
+
389
+ // Show only first 5 issues of each type to avoid flooding output
390
+ issues.slice(0, 5).forEach(issue => {
391
+ const icon = this.getSeverityIcon(issue.severity);
392
+ console.log(` ${icon} ${issue.rule}`);
393
+ console.log(` File: ${issue.file}:${issue.line || 'N/A'}`);
394
+ console.log(` Content: ${issue.content || issue.match || issue.package}`);
395
+ if (issue.recommendation) {
396
+ console.log(` Recommendation: ${issue.recommendation}`);
397
+ }
398
+ console.log('');
399
+ });
400
+
401
+ if (issues.length > 5) {
402
+ console.log(` ... and ${issues.length - 5} more ${type} issues`);
403
+ }
404
+ });
405
+ }
406
+
407
+ // Warnings
408
+ if (this.warnings.length > 0) {
409
+ console.log('\n⚠️ Warnings:');
410
+ this.warnings.forEach(warning => {
411
+ if (typeof warning === 'string') {
412
+ console.log(` • ${warning}`);
413
+ } else {
414
+ console.log(` • ${warning.rule}: ${warning.file}`);
415
+ }
416
+ });
417
+ }
418
+
419
+ // Recommendations
420
+ this.generateRecommendations(severityCount);
421
+
422
+ // Exit code
423
+ process.exit(criticalOrHigh > 0 ? 1 : 0);
424
+ }
425
+
426
+ formatIssueType(type) {
427
+ return type.split('_').map(word =>
428
+ word.charAt(0).toUpperCase() + word.slice(1)
429
+ ).join(' ');
430
+ }
431
+
432
+ getSeverityIcon(severity) {
433
+ const icons = {
434
+ critical: '🚨',
435
+ high: '🔴',
436
+ medium: '🟡',
437
+ low: '🟢'
438
+ };
439
+ return icons[severity] || '⚪';
440
+ }
441
+
442
+ generateRecommendations(severityCount) {
443
+ console.log('\n💡 Recommendations:');
444
+ console.log('-'.repeat(50));
445
+
446
+ if (severityCount.critical > 0) {
447
+ console.log('🚨 CRITICAL: Address immediately');
448
+ console.log(' • Remove all hardcoded secrets and keys');
449
+ console.log(' • Use environment variables or secret management');
450
+ console.log(' • Update vulnerable dependencies');
451
+ }
452
+
453
+ if (severityCount.high > 0) {
454
+ console.log('🔴 HIGH: Fix before next release');
455
+ console.log(' • Review and remove sensitive data');
456
+ console.log(' • Replace insecure coding patterns');
457
+ console.log(' • Audit dependency versions');
458
+ }
459
+
460
+ if (severityCount.medium > 0) {
461
+ console.log('🟡 MEDIUM: Address soon');
462
+ console.log(' • Improve secure coding practices');
463
+ console.log(' • Add input validation and sanitization');
464
+ console.log(' • Review file permissions');
465
+ }
466
+
467
+ if (severityCount.low > 0) {
468
+ console.log('🟢 LOW: Good to fix');
469
+ console.log(' • Follow security best practices');
470
+ console.log(' • Add security testing to CI pipeline');
471
+ }
472
+
473
+ if (this.issues.length === 0) {
474
+ console.log('✅ Great job! Continue following security best practices:');
475
+ console.log(' • Regularly update dependencies');
476
+ console.log(' • Use environment variables for secrets');
477
+ console.log(' • Implement security testing in CI/CD');
478
+ console.log(' • Regular security audits');
479
+ }
480
+ }
481
+ }
482
+
483
+ // CLI Interface
484
+ async function main() {
485
+ const scanner = new SecurityScanner();
486
+ await scanner.scan();
487
+ }
488
+
489
+ main().catch(error => {
490
+ console.error('❌ Security scan failed:', error);
491
+ process.exit(1);
492
+ });
@@ -0,0 +1,9 @@
1
+ {
2
+ "startTime": 1759323973407,
3
+ "totalTasks": 1,
4
+ "successfulTasks": 1,
5
+ "failedTasks": 0,
6
+ "totalAgents": 0,
7
+ "activeAgents": 0,
8
+ "neuralEvents": 0
9
+ }
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "id": "cmd-hooks-1759323973459",
4
+ "type": "hooks",
5
+ "success": true,
6
+ "duration": 20.348606999999987,
7
+ "timestamp": 1759323973479,
8
+ "metadata": {}
9
+ }
10
+ ]
@@ -0,0 +1,158 @@
1
+ #!/bin/bash
2
+ # Claude API Switcher - Switch between Claude Max and z.ai
3
+ # Usage: scripts/switch-api.sh [zai|max|status|save|restore|list]
4
+
5
+ SETTINGS_FILE="$HOME/.claude/settings.json"
6
+ BACKUP_DIR="$HOME/.claude-api-configs"
7
+
8
+ # Create backup directory if it doesn't exist
9
+ mkdir -p "$BACKUP_DIR"
10
+
11
+ # Function to display current API
12
+ show_current() {
13
+ if grep -q "ANTHROPIC_BASE_URL" "$SETTINGS_FILE" 2>/dev/null; then
14
+ BASE_URL=$(grep "ANTHROPIC_BASE_URL" "$SETTINGS_FILE" | cut -d'"' -f4)
15
+ if [[ "$BASE_URL" == *"z.ai"* ]]; then
16
+ echo "✓ Current API: z.ai (GLM-4.6 models)"
17
+ else
18
+ echo "✓ Current API: $BASE_URL"
19
+ fi
20
+ else
21
+ echo "✓ Current API: Claude Max (api.anthropic.com)"
22
+ fi
23
+ }
24
+
25
+ # Function to save current config
26
+ save_current() {
27
+ local name=$1
28
+ cp "$SETTINGS_FILE" "$BACKUP_DIR/settings-$name.json"
29
+ echo "✓ Saved current settings as '$name'"
30
+ }
31
+
32
+ # Function to switch to z.ai
33
+ switch_to_zai() {
34
+ cat > "$SETTINGS_FILE" << 'SETTINGS'
35
+ {
36
+ "$schema": "https://json.schemastore.org/claude-code-settings.json",
37
+ "model": "sonnet",
38
+ "feedbackSurveyState": {
39
+ "lastShownTime": 1754086518944
40
+ },
41
+ "terminal": {
42
+ "disableRawMode": true
43
+ },
44
+ "env": {
45
+ "ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
46
+ "ANTHROPIC_AUTH_TOKEN": "cca13d09dcd6407183efe9e24c804cca.QO8R0JxF4fucsoWL",
47
+ "ANTHROPIC_DEFAULT_OPUS_MODEL": "GLM-4.6",
48
+ "ANTHROPIC_DEFAULT_SONNET_MODEL": "GLM-4.6",
49
+ "ANTHROPIC_DEFAULT_HAIKU_MODEL": "GLM-4.5-Air"
50
+ },
51
+ "hybridRouting": {
52
+ "enabled": false,
53
+ "mode": "pure-provider"
54
+ }
55
+ }
56
+ SETTINGS
57
+ echo "✓ Switched to z.ai API"
58
+ echo " Using GLM-4.6 (Sonnet), GLM-4.5-Air (Haiku)"
59
+ echo ""
60
+ echo " Pure Provider Mode (All z.ai)"
61
+ echo " • All sessions use z.ai ($0.10-2/1M)"
62
+ }
63
+
64
+ # Function to switch to Claude Max
65
+ switch_to_claude_max() {
66
+ cat > "$SETTINGS_FILE" << 'SETTINGS'
67
+ {
68
+ "$schema": "https://json.schemastore.org/claude-code-settings.json",
69
+ "model": "sonnet",
70
+ "feedbackSurveyState": {
71
+ "lastShownTime": 1754086518944
72
+ },
73
+ "terminal": {
74
+ "disableRawMode": true
75
+ },
76
+ "hybridRouting": {
77
+ "enabled": true,
78
+ "mode": "cli-hybrid",
79
+ "coordinator": "claude-max",
80
+ "workers": "zai"
81
+ }
82
+ }
83
+ SETTINGS
84
+ echo "✓ Switched to Claude Max (Official Anthropic API)"
85
+ echo " Run 'claude login' if authentication is needed"
86
+ echo ""
87
+ echo "🔀 Hybrid Routing ENABLED (CLI-based)"
88
+ echo " • Main chat: Claude Max subscription ($0)"
89
+ echo " • Coordinators: Claude Max via Task tool ($0)"
90
+ echo " • Workers: Z.ai via CLI spawning ($0.10-2/1M)"
91
+ echo " • Expected savings: 97% on worker costs"
92
+ }
93
+
94
+ # Main menu
95
+ case "$1" in
96
+ status|current|"")
97
+ show_current
98
+ ;;
99
+ zai|z.ai)
100
+ echo "Switching to z.ai..."
101
+ switch_to_zai
102
+ show_current
103
+ ;;
104
+ max|claude|official|anthropic)
105
+ echo "Switching to Claude Max..."
106
+ switch_to_claude_max
107
+ show_current
108
+ ;;
109
+ save)
110
+ if [ -z "$2" ]; then
111
+ echo "Usage: $0 save <config-name>"
112
+ exit 1
113
+ fi
114
+ save_current "$2"
115
+ ;;
116
+ restore)
117
+ if [ -z "$2" ]; then
118
+ echo "Available configs:"
119
+ ls -1 "$BACKUP_DIR" 2>/dev/null | sed 's/settings-//g' | sed 's/.json//g' | sed 's/^/ • /'
120
+ exit 1
121
+ fi
122
+ if [ -f "$BACKUP_DIR/settings-$2.json" ]; then
123
+ cp "$BACKUP_DIR/settings-$2.json" "$SETTINGS_FILE"
124
+ echo "✓ Restored config '$2'"
125
+ show_current
126
+ else
127
+ echo "✗ Config '$2' not found"
128
+ exit 1
129
+ fi
130
+ ;;
131
+ list)
132
+ echo "Saved configurations:"
133
+ if ls "$BACKUP_DIR"/settings-*.json 1> /dev/null 2>&1; then
134
+ ls -1 "$BACKUP_DIR" 2>/dev/null | sed 's/settings-//g' | sed 's/.json//g' | sed 's/^/ • /'
135
+ else
136
+ echo " (none)"
137
+ fi
138
+ ;;
139
+ help|--help|-h)
140
+ echo "Claude API Switcher"
141
+ echo ""
142
+ echo "Usage: $0 [command] [args]"
143
+ echo ""
144
+ echo "Commands:"
145
+ echo " status Show current API configuration"
146
+ echo " zai Switch to z.ai API (GLM models)"
147
+ echo " max Switch to Claude Max (Official API)"
148
+ echo " save <name> Save current config with a name"
149
+ echo " restore <name> Restore a saved config"
150
+ echo " list List all saved configurations"
151
+ echo ""
152
+ ;;
153
+ *)
154
+ echo "Unknown command: $1"
155
+ echo "Run '$0 help' for usage"
156
+ exit 1
157
+ ;;
158
+ esac