claude-flow-novice 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/.claude-flow-novice/preferences/generation.json +147 -0
  2. package/.claude-flow-novice/preferences/language-configs/javascript.json +51 -0
  3. package/.claude-flow-novice/preferences/language-configs/python.json +50 -0
  4. package/.claude-flow-novice/preferences/language-configs/rust.json +237 -0
  5. package/.claude-flow-novice/preferences/language-configs/typescript.json +54 -0
  6. package/.claude-flow-novice/preferences/project-local.json +91 -0
  7. package/.claude-flow-novice/preferences/resource-delegation.json +120 -0
  8. package/.claude-flow-novice/preferences/team-shared.json +195 -0
  9. package/.claude-flow-novice/preferences/user-global.json +247 -0
  10. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-JAVASCRIPT.md +769 -0
  11. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-PYTHON.md +1214 -0
  12. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-RUST.md +475 -0
  13. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-TYPESCRIPT.md +851 -0
  14. package/.claude-flow-novice/templates/claude-md-templates/README.md +263 -0
  15. package/CLAUDE.md +81 -0
  16. package/README-NPM.md +0 -0
  17. package/package.json +11 -7
  18. package/scripts/build/README.md +167 -0
  19. package/scripts/build/build-config.js +27 -0
  20. package/scripts/build/build-prompt-copier.sh +30 -0
  21. package/scripts/build/performance-monitor.js +869 -0
  22. package/scripts/build/prepare-publish.js +150 -0
  23. package/scripts/build/typescript-fixer.js +621 -0
  24. package/scripts/build/unified-builder.sh +428 -0
  25. package/scripts/build/update-bin-version.js +32 -0
  26. package/scripts/dev/README.md +264 -0
  27. package/scripts/dev/claude-flow-wrapper.sh +35 -0
  28. package/scripts/dev/claude-monitor.py +419 -0
  29. package/scripts/dev/claude-sparc.sh +562 -0
  30. package/scripts/dev/claude-wrapper.sh +17 -0
  31. package/scripts/dev/demo-phase3-compliance.js +172 -0
  32. package/scripts/dev/demo-task-system.ts +224 -0
  33. package/scripts/dev/deployment-validator.js +315 -0
  34. package/scripts/dev/spawn-claude-terminal.sh +32 -0
  35. package/scripts/dev/start-portal.sh +506 -0
  36. package/scripts/dev/start-web-ui.js +15 -0
  37. package/scripts/dev/stop-portal.sh +311 -0
  38. package/scripts/dev/validate-examples.ts +288 -0
  39. package/scripts/dev/validate-phase2.cjs +451 -0
  40. package/scripts/dev/validate-phase2.js +785 -0
  41. package/scripts/dev/validate-phase3.cjs +208 -0
  42. package/scripts/dev/validate-security-remediation.js +1 -0
  43. package/scripts/legacy/README.md +272 -0
  44. package/scripts/legacy/batch-fix-ts.sh +54 -0
  45. package/scripts/legacy/build-migration.sh +105 -0
  46. package/scripts/legacy/build-monitor.js +209 -0
  47. package/scripts/legacy/build-with-filter.sh +84 -0
  48. package/scripts/legacy/build-workaround.sh +71 -0
  49. package/scripts/legacy/fix-ts-advanced.js +358 -0
  50. package/scripts/legacy/fix-ts-final.sh +50 -0
  51. package/scripts/legacy/fix-ts-targeted.sh +49 -0
  52. package/scripts/legacy/fix-typescript-errors.js +305 -0
  53. package/scripts/legacy/force-build.sh +63 -0
  54. package/scripts/legacy/optimize-performance.js +400 -0
  55. package/scripts/legacy/performance-monitor.js +263 -0
  56. package/scripts/legacy/performance-monitoring.js +532 -0
  57. package/scripts/legacy/performance-test-runner.js +645 -0
  58. package/scripts/legacy/quick-fix-ts.js +281 -0
  59. package/scripts/legacy/safe-build.sh +63 -0
  60. package/scripts/migration/README.md +434 -0
  61. package/scripts/migration/install-arm64.js +78 -0
  62. package/scripts/migration/install.js +83 -0
  63. package/scripts/migration/migrate-hooks.js +173 -0
  64. package/scripts/migration/migration-examples.ts +318 -0
  65. package/scripts/optimization/build-optimizer.js +438 -0
  66. package/scripts/optimization/config-validator.js +761 -0
  67. package/scripts/optimization/test-optimization.js +432 -0
  68. package/scripts/optimization/unified-activation.js +839 -0
  69. package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
  70. package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
  71. package/scripts/performance/test-enhanced-backend.sh +504 -0
  72. package/scripts/performance-test-runner.js +698 -0
  73. package/scripts/security/README.md +339 -0
  74. package/scripts/security/install-git-hooks.sh +132 -0
  75. package/scripts/security/ruv-swarm-safe.js +74 -0
  76. package/scripts/test/README.md +236 -0
  77. package/scripts/test/check-links.ts +274 -0
  78. package/scripts/test/check-performance-regression.ts +168 -0
  79. package/scripts/test/coverage-report.ts +692 -0
  80. package/scripts/test/generate-swarm-tests.js +633 -0
  81. package/scripts/test/integration-test-validation.cjs +253 -0
  82. package/scripts/test/load-test-swarm.js +576 -0
  83. package/scripts/test/run-phase3-compliance-tests.js +427 -0
  84. package/scripts/test/test-batch-tasks.ts +29 -0
  85. package/scripts/test/test-byzantine-resolution.js +246 -0
  86. package/scripts/test/test-claude-spawn-options.sh +63 -0
  87. package/scripts/test/test-cli-wizard.js +331 -0
  88. package/scripts/test/test-comprehensive.js +401 -0
  89. package/scripts/test/test-coordination-features.ts +238 -0
  90. package/scripts/test/test-fallback-systems.js +276 -0
  91. package/scripts/test/test-init-command.ts +302 -0
  92. package/scripts/test/test-mcp.ts +251 -0
  93. package/scripts/test/test-runner.ts +568 -0
  94. package/scripts/test/test-swarm-integration.sh +92 -0
  95. package/scripts/test/test-swarm.ts +142 -0
  96. package/scripts/test/validation-summary.ts +408 -0
  97. package/scripts/utils/README.md +261 -0
  98. package/scripts/utils/clean-build-artifacts.sh +94 -0
  99. package/scripts/utils/cleanup-root.sh +69 -0
  100. package/scripts/utils/fix-cliffy-imports.js +307 -0
  101. package/scripts/utils/fix-duplicate-imports.js +114 -0
  102. package/scripts/utils/fix-error-handling.cjs +70 -0
  103. package/scripts/utils/fix-import-paths.js +104 -0
  104. package/scripts/utils/fix-imports.js +116 -0
  105. package/scripts/utils/fix-shebang.js +78 -0
  106. package/scripts/utils/fix-test-modules.js +27 -0
  107. package/scripts/utils/fix-timezone-issue-246.js +200 -0
  108. package/scripts/utils/fix-ts-comprehensive.py +182 -0
  109. package/scripts/utils/fix-ts-targeted-batch.js +250 -0
  110. package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
  111. package/scripts/utils/simple-test-fixer.js +190 -0
  112. package/scripts/utils/validate-metrics-structure.cjs +144 -0
  113. package/scripts/verify-mcp-server.js +86 -0
  114. package/src/cli/simple-commands/__tests__/agent.test.js +291 -0
  115. package/src/cli/simple-commands/__tests__/memory.test.js +8 -0
  116. package/src/cli/simple-commands/__tests__/swarm.test.js +371 -0
  117. package/src/cli/simple-commands/__tests__/task.test.js +8 -0
  118. package/src/cli/simple-commands/agent.js +216 -0
  119. package/src/cli/simple-commands/analysis.js +570 -0
  120. package/src/cli/simple-commands/automation-executor.js +1603 -0
  121. package/src/cli/simple-commands/automation.js +627 -0
  122. package/src/cli/simple-commands/batch-manager.js +338 -0
  123. package/src/cli/simple-commands/claude-telemetry.js +311 -0
  124. package/src/cli/simple-commands/claude-track.js +102 -0
  125. package/src/cli/simple-commands/concurrent-display.js +348 -0
  126. package/src/cli/simple-commands/config.js +319 -0
  127. package/src/cli/simple-commands/coordination.js +307 -0
  128. package/src/cli/simple-commands/enhanced-ui-views.js +654 -0
  129. package/src/cli/simple-commands/enhanced-webui-complete.js +1038 -0
  130. package/src/cli/simple-commands/fix-hook-variables.js +363 -0
  131. package/src/cli/simple-commands/github/gh-coordinator.js +605 -0
  132. package/src/cli/simple-commands/github/github-api.js +624 -0
  133. package/src/cli/simple-commands/github/init.js +543 -0
  134. package/src/cli/simple-commands/github.js +377 -0
  135. package/src/cli/simple-commands/goal.js +145 -0
  136. package/src/cli/simple-commands/hive-mind/auto-save-middleware.js +311 -0
  137. package/src/cli/simple-commands/hive-mind/communication.js +740 -0
  138. package/src/cli/simple-commands/hive-mind/core.js +1031 -0
  139. package/src/cli/simple-commands/hive-mind/db-optimizer.js +872 -0
  140. package/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1364 -0
  141. package/src/cli/simple-commands/hive-mind/memory.js +1292 -0
  142. package/src/cli/simple-commands/hive-mind/performance-optimizer.js +618 -0
  143. package/src/cli/simple-commands/hive-mind/performance-test.js +373 -0
  144. package/src/cli/simple-commands/hive-mind/queen.js +809 -0
  145. package/src/cli/simple-commands/hive-mind/session-manager.js +1223 -0
  146. package/src/cli/simple-commands/hive-mind-optimize.js +361 -0
  147. package/src/cli/simple-commands/hive-mind-wizard.js +281 -0
  148. package/src/cli/simple-commands/hive-mind.js +3112 -0
  149. package/src/cli/simple-commands/hive.js +140 -0
  150. package/src/cli/simple-commands/hook-safety.js +671 -0
  151. package/src/cli/simple-commands/hooks.js +1268 -0
  152. package/src/cli/simple-commands/init/.claude/checkpoints/1756224542.json +7 -0
  153. package/src/cli/simple-commands/init/.claude/checkpoints/1756224544.json +8 -0
  154. package/src/cli/simple-commands/init/README.md +106 -0
  155. package/src/cli/simple-commands/init/VALIDATION_ROLLBACK.md +488 -0
  156. package/src/cli/simple-commands/init/agent-copier.js +347 -0
  157. package/src/cli/simple-commands/init/batch-init.js +663 -0
  158. package/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +438 -0
  159. package/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +876 -0
  160. package/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +356 -0
  161. package/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +501 -0
  162. package/src/cli/simple-commands/init/claude-commands/slash-commands.js +57 -0
  163. package/src/cli/simple-commands/init/claude-commands/sparc-commands.js +296 -0
  164. package/src/cli/simple-commands/init/copy-revised-templates.js +175 -0
  165. package/src/cli/simple-commands/init/executable-wrapper.js +122 -0
  166. package/src/cli/simple-commands/init/gitignore-updater.js +137 -0
  167. package/src/cli/simple-commands/init/help.js +110 -0
  168. package/src/cli/simple-commands/init/hive-mind-init.js +749 -0
  169. package/src/cli/simple-commands/init/index.js +1953 -0
  170. package/src/cli/simple-commands/init/performance-monitor.js +344 -0
  171. package/src/cli/simple-commands/init/rollback/backup-manager.js +542 -0
  172. package/src/cli/simple-commands/init/rollback/index.js +399 -0
  173. package/src/cli/simple-commands/init/rollback/recovery-manager.js +778 -0
  174. package/src/cli/simple-commands/init/rollback/rollback-executor.js +521 -0
  175. package/src/cli/simple-commands/init/rollback/state-tracker.js +486 -0
  176. package/src/cli/simple-commands/init/sparc/roo-readme.js +61 -0
  177. package/src/cli/simple-commands/init/sparc/roomodes-config.js +102 -0
  178. package/src/cli/simple-commands/init/sparc/workflows.js +40 -0
  179. package/src/cli/simple-commands/init/sparc-structure.js +68 -0
  180. package/src/cli/simple-commands/init/template-copier.js +640 -0
  181. package/src/cli/simple-commands/init/templates/CLAUDE.md +1185 -0
  182. package/src/cli/simple-commands/init/templates/CLAUDE.md.optimized +265 -0
  183. package/src/cli/simple-commands/init/templates/claude-flow-universal +81 -0
  184. package/src/cli/simple-commands/init/templates/claude-flow.bat +18 -0
  185. package/src/cli/simple-commands/init/templates/claude-flow.ps1 +24 -0
  186. package/src/cli/simple-commands/init/templates/claude-md.js +1101 -0
  187. package/src/cli/simple-commands/init/templates/commands/analysis/bottleneck-detect.md +162 -0
  188. package/src/cli/simple-commands/init/templates/commands/automation/auto-agent.md +122 -0
  189. package/src/cli/simple-commands/init/templates/commands/coordination/swarm-init.md +85 -0
  190. package/src/cli/simple-commands/init/templates/commands/github/github-swarm.md +121 -0
  191. package/src/cli/simple-commands/init/templates/commands/helpers/standard-checkpoint-hooks.sh +179 -0
  192. package/src/cli/simple-commands/init/templates/commands/hooks/notification.md +113 -0
  193. package/src/cli/simple-commands/init/templates/commands/hooks/post-command.md +116 -0
  194. package/src/cli/simple-commands/init/templates/commands/hooks/post-edit.md +117 -0
  195. package/src/cli/simple-commands/init/templates/commands/hooks/post-task.md +112 -0
  196. package/src/cli/simple-commands/init/templates/commands/hooks/pre-command.md +113 -0
  197. package/src/cli/simple-commands/init/templates/commands/hooks/pre-edit.md +113 -0
  198. package/src/cli/simple-commands/init/templates/commands/hooks/pre-search.md +112 -0
  199. package/src/cli/simple-commands/init/templates/commands/hooks/pre-task.md +111 -0
  200. package/src/cli/simple-commands/init/templates/commands/hooks/session-end.md +118 -0
  201. package/src/cli/simple-commands/init/templates/commands/hooks/session-restore.md +118 -0
  202. package/src/cli/simple-commands/init/templates/commands/hooks/session-start.md +117 -0
  203. package/src/cli/simple-commands/init/templates/coordination-md.js +340 -0
  204. package/src/cli/simple-commands/init/templates/coordination.md +16 -0
  205. package/src/cli/simple-commands/init/templates/enhanced-templates.js +2347 -0
  206. package/src/cli/simple-commands/init/templates/github-safe-enhanced.js +331 -0
  207. package/src/cli/simple-commands/init/templates/github-safe.js +106 -0
  208. package/src/cli/simple-commands/init/templates/memory-bank-md.js +259 -0
  209. package/src/cli/simple-commands/init/templates/memory-bank.md +16 -0
  210. package/src/cli/simple-commands/init/templates/readme-files.js +72 -0
  211. package/src/cli/simple-commands/init/templates/safe-hook-patterns.js +430 -0
  212. package/src/cli/simple-commands/init/templates/settings.json +109 -0
  213. package/src/cli/simple-commands/init/templates/settings.json.enhanced +35 -0
  214. package/src/cli/simple-commands/init/templates/sparc-modes.js +1401 -0
  215. package/src/cli/simple-commands/init/templates/verification-claude-md.js +432 -0
  216. package/src/cli/simple-commands/init/validation/config-validator.js +354 -0
  217. package/src/cli/simple-commands/init/validation/health-checker.js +599 -0
  218. package/src/cli/simple-commands/init/validation/index.js +388 -0
  219. package/src/cli/simple-commands/init/validation/mode-validator.js +387 -0
  220. package/src/cli/simple-commands/init/validation/post-init-validator.js +390 -0
  221. package/src/cli/simple-commands/init/validation/pre-init-validator.js +290 -0
  222. package/src/cli/simple-commands/init/validation/test-runner.js +488 -0
  223. package/src/cli/simple-commands/init.js +4 -0
  224. package/src/cli/simple-commands/mcp-health.js +163 -0
  225. package/src/cli/simple-commands/mcp-integration-layer.js +689 -0
  226. package/src/cli/simple-commands/mcp.js +420 -0
  227. package/src/cli/simple-commands/memory-consolidation.js +631 -0
  228. package/src/cli/simple-commands/memory.js +345 -0
  229. package/src/cli/simple-commands/migrate-hooks.js +63 -0
  230. package/src/cli/simple-commands/monitor.js +417 -0
  231. package/src/cli/simple-commands/neural.js +148 -0
  232. package/src/cli/simple-commands/pair-autofix-only.js +755 -0
  233. package/src/cli/simple-commands/pair-basic.js +751 -0
  234. package/src/cli/simple-commands/pair-old.js +623 -0
  235. package/src/cli/simple-commands/pair-working.js +849 -0
  236. package/src/cli/simple-commands/pair.js +849 -0
  237. package/src/cli/simple-commands/performance-hooks.js +149 -0
  238. package/src/cli/simple-commands/performance-metrics.js +601 -0
  239. package/src/cli/simple-commands/process-ui-enhanced.js +821 -0
  240. package/src/cli/simple-commands/process-ui.js +274 -0
  241. package/src/cli/simple-commands/realtime-update-system.js +659 -0
  242. package/src/cli/simple-commands/sparc/architecture.js +1750 -0
  243. package/src/cli/simple-commands/sparc/commands.js +575 -0
  244. package/src/cli/simple-commands/sparc/completion.js +1831 -0
  245. package/src/cli/simple-commands/sparc/coordinator.js +1045 -0
  246. package/src/cli/simple-commands/sparc/index.js +321 -0
  247. package/src/cli/simple-commands/sparc/phase-base.js +430 -0
  248. package/src/cli/simple-commands/sparc/pseudocode.js +984 -0
  249. package/src/cli/simple-commands/sparc/refinement.js +1856 -0
  250. package/src/cli/simple-commands/sparc/specification.js +736 -0
  251. package/src/cli/simple-commands/sparc-modes/architect.js +125 -0
  252. package/src/cli/simple-commands/sparc-modes/ask.js +126 -0
  253. package/src/cli/simple-commands/sparc-modes/code.js +148 -0
  254. package/src/cli/simple-commands/sparc-modes/debug.js +112 -0
  255. package/src/cli/simple-commands/sparc-modes/devops.js +137 -0
  256. package/src/cli/simple-commands/sparc-modes/docs-writer.js +38 -0
  257. package/src/cli/simple-commands/sparc-modes/generic.js +34 -0
  258. package/src/cli/simple-commands/sparc-modes/index.js +201 -0
  259. package/src/cli/simple-commands/sparc-modes/integration.js +55 -0
  260. package/src/cli/simple-commands/sparc-modes/mcp.js +38 -0
  261. package/src/cli/simple-commands/sparc-modes/monitoring.js +38 -0
  262. package/src/cli/simple-commands/sparc-modes/optimization.js +38 -0
  263. package/src/cli/simple-commands/sparc-modes/security-review.js +130 -0
  264. package/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +167 -0
  265. package/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +38 -0
  266. package/src/cli/simple-commands/sparc-modes/supabase-admin.js +149 -0
  267. package/src/cli/simple-commands/sparc-modes/swarm.js +436 -0
  268. package/src/cli/simple-commands/sparc-modes/tdd.js +112 -0
  269. package/src/cli/simple-commands/sparc-modes/tutorial.js +277 -0
  270. package/src/cli/simple-commands/sparc.js +530 -0
  271. package/src/cli/simple-commands/start-ui.js +147 -0
  272. package/src/cli/simple-commands/start-wrapper.js +285 -0
  273. package/src/cli/simple-commands/start.js +2 -0
  274. package/src/cli/simple-commands/status.js +303 -0
  275. package/src/cli/simple-commands/stream-chain-clean.js +221 -0
  276. package/src/cli/simple-commands/stream-chain-fixed.js +89 -0
  277. package/src/cli/simple-commands/stream-chain-real.js +408 -0
  278. package/src/cli/simple-commands/stream-chain-working.js +323 -0
  279. package/src/cli/simple-commands/stream-chain.js +491 -0
  280. package/src/cli/simple-commands/stream-processor.js +340 -0
  281. package/src/cli/simple-commands/swarm-executor.js +253 -0
  282. package/src/cli/simple-commands/swarm-metrics-integration.js +371 -0
  283. package/src/cli/simple-commands/swarm-ui.js +741 -0
  284. package/src/cli/simple-commands/swarm-webui-integration.js +311 -0
  285. package/src/cli/simple-commands/swarm.js +2277 -0
  286. package/src/cli/simple-commands/task.js +228 -0
  287. package/src/cli/simple-commands/templates/mle-star-workflow.json +294 -0
  288. package/src/cli/simple-commands/timestamp-fix.js +104 -0
  289. package/src/cli/simple-commands/token-tracker.js +372 -0
  290. package/src/cli/simple-commands/tool-execution-framework.js +555 -0
  291. package/src/cli/simple-commands/train-and-stream.js +354 -0
  292. package/src/cli/simple-commands/training-pipeline.js +874 -0
  293. package/src/cli/simple-commands/training.js +288 -0
  294. package/src/cli/simple-commands/verification-hooks.js +336 -0
  295. package/src/cli/simple-commands/verification-integration.js +464 -0
  296. package/src/cli/simple-commands/verification-training-integration.js +646 -0
  297. package/src/cli/simple-commands/verification.js +551 -0
  298. package/src/cli/simple-commands/web-server.js +929 -0
  299. package/src/cli/simple-commands/webui-validator.js +136 -0
  300. package/src/language/README.md +503 -0
  301. package/src/language/claude-md-generator.js +618 -0
  302. package/src/language/cli.js +422 -0
  303. package/src/language/example.js +347 -0
  304. package/src/language/integration-system.js +619 -0
  305. package/src/language/language-detector.js +581 -0
@@ -0,0 +1,390 @@
1
+ import { promises as fs } from 'fs';
2
+ // post-init-validator.js - Post-initialization verification checks
3
+
4
+ export class PostInitValidator {
5
+ constructor(workingDir) {
6
+ this.workingDir = workingDir;
7
+ }
8
+
9
+ /**
10
+ * Check file integrity (existence, size, readability)
11
+ */
12
+ async checkFileIntegrity() {
13
+ const result = {
14
+ success: true,
15
+ errors: [],
16
+ warnings: [],
17
+ files: {},
18
+ };
19
+
20
+ const expectedFiles = [
21
+ { path: 'CLAUDE.md', minSize: 100 },
22
+ { path: 'memory-bank.md', minSize: 50 },
23
+ { path: 'coordination.md', minSize: 50 },
24
+ { path: 'memory/claude-flow-data.json', minSize: 10 },
25
+ { path: 'memory/agents/README.md', minSize: 10 },
26
+ { path: 'memory/sessions/README.md', minSize: 10 },
27
+ { path: 'claude-flow', minSize: 50, executable: true },
28
+ ];
29
+
30
+ for (const file of expectedFiles) {
31
+ const filePath = `${this.workingDir}/${file.path}`;
32
+
33
+ try {
34
+ const stat = await fs.stat(filePath);
35
+
36
+ // Check if it exists and is a file
37
+ if (!stat.isFile) {
38
+ result.success = false;
39
+ result.errors.push(`Expected file but found directory: ${file.path}`);
40
+ result.files[file.path] = { status: 'not_file' };
41
+ continue;
42
+ }
43
+
44
+ // Check file size
45
+ if (stat.size < file.minSize) {
46
+ result.success = false;
47
+ result.errors.push(
48
+ `File too small: ${file.path} (${stat.size} bytes, expected >= ${file.minSize})`,
49
+ );
50
+ result.files[file.path] = { status: 'too_small', size: stat.size };
51
+ continue;
52
+ }
53
+
54
+ // Check if executable (if required)
55
+ if (file.executable && Deno.build.os !== 'windows') {
56
+ const isExecutable = (stat.mode & 0o111) !== 0;
57
+ if (!isExecutable) {
58
+ result.warnings.push(`File not executable: ${file.path}`);
59
+ result.files[file.path] = { status: 'not_executable', size: stat.size };
60
+ continue;
61
+ }
62
+ }
63
+
64
+ // Try to read the file
65
+ try {
66
+ await fs.readFile(filePath, 'utf8');
67
+ result.files[file.path] = { status: 'ok', size: stat.size };
68
+ } catch (readError) {
69
+ result.success = false;
70
+ result.errors.push(`Cannot read file: ${file.path} - ${readError.message}`);
71
+ result.files[file.path] = { status: 'unreadable', size: stat.size };
72
+ }
73
+ } catch (error) {
74
+ result.success = false;
75
+ result.errors.push(`File not found: ${file.path}`);
76
+ result.files[file.path] = { status: 'missing' };
77
+ }
78
+ }
79
+
80
+ return result;
81
+ }
82
+
83
+ /**
84
+ * Check completeness of initialization
85
+ */
86
+ async checkCompleteness() {
87
+ const result = {
88
+ success: true,
89
+ errors: [],
90
+ warnings: [],
91
+ missing: [],
92
+ };
93
+
94
+ const requiredDirs = [
95
+ 'memory',
96
+ 'memory/agents',
97
+ 'memory/sessions',
98
+ 'coordination',
99
+ 'coordination/memory_bank',
100
+ 'coordination/subtasks',
101
+ 'coordination/orchestration',
102
+ '.claude',
103
+ '.claude/commands',
104
+ '.claude/logs',
105
+ ];
106
+
107
+ const optionalDirs = [
108
+ '.roo',
109
+ '.roo/templates',
110
+ '.roo/workflows',
111
+ '.roo/modes',
112
+ '.roo/configs',
113
+ '.claude/commands/sparc',
114
+ ];
115
+
116
+ // Check required directories
117
+ for (const dir of requiredDirs) {
118
+ const dirPath = `${this.workingDir}/${dir}`;
119
+
120
+ try {
121
+ const stat = await fs.stat(dirPath);
122
+ if (!stat.isDirectory) {
123
+ result.success = false;
124
+ result.errors.push(`Expected directory but found file: ${dir}`);
125
+ result.missing.push(dir);
126
+ }
127
+ } catch {
128
+ result.success = false;
129
+ result.errors.push(`Required directory missing: ${dir}`);
130
+ result.missing.push(dir);
131
+ }
132
+ }
133
+
134
+ // Check optional directories (SPARC-related)
135
+ for (const dir of optionalDirs) {
136
+ const dirPath = `${this.workingDir}/${dir}`;
137
+
138
+ try {
139
+ await fs.stat(dirPath);
140
+ } catch {
141
+ if (dir.includes('.roo') || dir.includes('sparc')) {
142
+ result.warnings.push(`Optional SPARC directory missing: ${dir}`);
143
+ }
144
+ }
145
+ }
146
+
147
+ return result;
148
+ }
149
+
150
+ /**
151
+ * Validate directory structure and organization
152
+ */
153
+ async validateStructure() {
154
+ const result = {
155
+ success: true,
156
+ errors: [],
157
+ warnings: [],
158
+ structure: {},
159
+ };
160
+
161
+ try {
162
+ // Check memory structure
163
+ const memoryStructure = await this.validateMemoryStructure();
164
+ result.structure.memory = memoryStructure;
165
+ if (!memoryStructure.valid) {
166
+ result.warnings.push('Memory directory structure is incomplete');
167
+ }
168
+
169
+ // Check coordination structure
170
+ const coordinationStructure = await this.validateCoordinationStructure();
171
+ result.structure.coordination = coordinationStructure;
172
+ if (!coordinationStructure.valid) {
173
+ result.warnings.push('Coordination directory structure is incomplete');
174
+ }
175
+
176
+ // Check Claude integration structure
177
+ const claudeStructure = await this.validateClaudeStructure();
178
+ result.structure.claude = claudeStructure;
179
+ if (!claudeStructure.valid) {
180
+ result.warnings.push('Claude integration structure is incomplete');
181
+ }
182
+
183
+ // Check SPARC structure (if present)
184
+ const sparcExists = await this.checkSparcExists();
185
+ if (sparcExists) {
186
+ const sparcStructure = await this.validateSparcStructure();
187
+ result.structure.sparc = sparcStructure;
188
+ if (!sparcStructure.valid) {
189
+ result.warnings.push('SPARC structure is incomplete');
190
+ }
191
+ }
192
+ } catch (error) {
193
+ result.success = false;
194
+ result.errors.push(`Structure validation failed: ${error.message}`);
195
+ }
196
+
197
+ return result;
198
+ }
199
+
200
+ /**
201
+ * Check permissions on created files and directories
202
+ */
203
+ async checkPermissions() {
204
+ const result = {
205
+ success: true,
206
+ errors: [],
207
+ warnings: [],
208
+ permissions: {},
209
+ };
210
+
211
+ const itemsToCheck = [
212
+ { path: 'CLAUDE.md', type: 'file', requiredMode: 0o644 },
213
+ { path: 'memory-bank.md', type: 'file', requiredMode: 0o644 },
214
+ { path: 'coordination.md', type: 'file', requiredMode: 0o644 },
215
+ { path: 'claude-flow', type: 'file', requiredMode: 0o755 },
216
+ { path: 'memory', type: 'dir', requiredMode: 0o755 },
217
+ { path: 'coordination', type: 'dir', requiredMode: 0o755 },
218
+ { path: '.claude', type: 'dir', requiredMode: 0o755 },
219
+ ];
220
+
221
+ // Skip permission checks on Windows
222
+ if (Deno.build.os === 'windows') {
223
+ result.warnings.push('Permission checks skipped on Windows');
224
+ return result;
225
+ }
226
+
227
+ for (const item of itemsToCheck) {
228
+ const itemPath = `${this.workingDir}/${item.path}`;
229
+
230
+ try {
231
+ const stat = await fs.stat(itemPath);
232
+ const actualMode = stat.mode & 0o777;
233
+ const expectedMode = item.requiredMode;
234
+
235
+ result.permissions[item.path] = {
236
+ actual: actualMode.toString(8),
237
+ expected: expectedMode.toString(8),
238
+ correct: actualMode === expectedMode,
239
+ };
240
+
241
+ if (actualMode !== expectedMode) {
242
+ result.warnings.push(
243
+ `Incorrect permissions on ${item.path}: ` +
244
+ `${actualMode.toString(8)} (expected ${expectedMode.toString(8)})`,
245
+ );
246
+ }
247
+ } catch (error) {
248
+ result.warnings.push(`Could not check permissions for ${item.path}: ${error.message}`);
249
+ }
250
+ }
251
+
252
+ return result;
253
+ }
254
+
255
+ // Helper methods
256
+
257
+ async validateMemoryStructure() {
258
+ const structure = {
259
+ valid: true,
260
+ dirs: [],
261
+ files: [],
262
+ };
263
+
264
+ const expectedDirs = ['agents', 'sessions'];
265
+ const expectedFiles = ['claude-flow-data.json', 'agents/README.md', 'sessions/README.md'];
266
+
267
+ for (const dir of expectedDirs) {
268
+ try {
269
+ await fs.stat(`${this.workingDir}/memory/${dir}`);
270
+ structure.dirs.push(dir);
271
+ } catch {
272
+ structure.valid = false;
273
+ }
274
+ }
275
+
276
+ for (const file of expectedFiles) {
277
+ try {
278
+ await fs.stat(`${this.workingDir}/memory/${file}`);
279
+ structure.files.push(file);
280
+ } catch {
281
+ structure.valid = false;
282
+ }
283
+ }
284
+
285
+ return structure;
286
+ }
287
+
288
+ async validateCoordinationStructure() {
289
+ const structure = {
290
+ valid: true,
291
+ dirs: [],
292
+ };
293
+
294
+ const expectedDirs = ['memory_bank', 'subtasks', 'orchestration'];
295
+
296
+ for (const dir of expectedDirs) {
297
+ try {
298
+ await fs.stat(`${this.workingDir}/coordination/${dir}`);
299
+ structure.dirs.push(dir);
300
+ } catch {
301
+ structure.valid = false;
302
+ }
303
+ }
304
+
305
+ return structure;
306
+ }
307
+
308
+ async validateClaudeStructure() {
309
+ const structure = {
310
+ valid: true,
311
+ dirs: [],
312
+ hasCommands: false,
313
+ };
314
+
315
+ const expectedDirs = ['commands', 'logs'];
316
+
317
+ for (const dir of expectedDirs) {
318
+ try {
319
+ await fs.stat(`${this.workingDir}/.claude/${dir}`);
320
+ structure.dirs.push(dir);
321
+ } catch {
322
+ structure.valid = false;
323
+ }
324
+ }
325
+
326
+ // Check if there are any command files
327
+ try {
328
+ const entries = [];
329
+ for await (const entry of fs.readdir(`${this.workingDir}/.claude/commands`)) {
330
+ if (entry.isFile && entry.name.endsWith('.js')) {
331
+ entries.push(entry.name);
332
+ }
333
+ }
334
+ structure.hasCommands = entries.length > 0;
335
+ structure.commandCount = entries.length;
336
+ } catch {
337
+ structure.hasCommands = false;
338
+ }
339
+
340
+ return structure;
341
+ }
342
+
343
+ async checkSparcExists() {
344
+ try {
345
+ await fs.stat(`${this.workingDir}/.roomodes`);
346
+ return true;
347
+ } catch {
348
+ return false;
349
+ }
350
+ }
351
+
352
+ async validateSparcStructure() {
353
+ const structure = {
354
+ valid: true,
355
+ hasRoomodes: false,
356
+ hasRooDir: false,
357
+ dirs: [],
358
+ };
359
+
360
+ // Check .roomodes file
361
+ try {
362
+ const stat = await fs.stat(`${this.workingDir}/.roomodes`);
363
+ structure.hasRoomodes = stat.isFile;
364
+ } catch {
365
+ structure.valid = false;
366
+ }
367
+
368
+ // Check .roo directory
369
+ try {
370
+ const stat = await fs.stat(`${this.workingDir}/.roo`);
371
+ structure.hasRooDir = stat.isDirectory;
372
+
373
+ if (structure.hasRooDir) {
374
+ const expectedDirs = ['templates', 'workflows', 'modes', 'configs'];
375
+ for (const dir of expectedDirs) {
376
+ try {
377
+ await fs.stat(`${this.workingDir}/.roo/${dir}`);
378
+ structure.dirs.push(dir);
379
+ } catch {
380
+ // Optional subdirectories
381
+ }
382
+ }
383
+ }
384
+ } catch {
385
+ // .roo directory is optional
386
+ }
387
+
388
+ return structure;
389
+ }
390
+ }
@@ -0,0 +1,290 @@
1
+ // pre-init-validator.js - Pre-initialization validation checks
2
+
3
+ import { printWarning } from '../../../utils.js';
4
+
5
+ export class PreInitValidator {
6
+ constructor(workingDir) {
7
+ this.workingDir = workingDir;
8
+ }
9
+
10
+ /**
11
+ * Check file system permissions
12
+ */
13
+ async checkPermissions() {
14
+ const result = {
15
+ success: true,
16
+ errors: [],
17
+ warnings: [],
18
+ };
19
+
20
+ try {
21
+ // Test write permission in working directory
22
+ const testFile = `${this.workingDir}/.claude-flow-permission-test`;
23
+ await Deno.writeTextFile(testFile, 'test');
24
+ await Deno.remove(testFile);
25
+
26
+ // Test directory creation permission
27
+ const testDir = `${this.workingDir}/.claude-flow-dir-test`;
28
+ await Deno.mkdir(testDir);
29
+ await Deno.remove(testDir);
30
+ } catch (error) {
31
+ result.success = false;
32
+ result.errors.push(`Insufficient permissions in ${this.workingDir}: ${error.message}`);
33
+ }
34
+
35
+ return result;
36
+ }
37
+
38
+ /**
39
+ * Check available disk space
40
+ */
41
+ async checkDiskSpace() {
42
+ const result = {
43
+ success: true,
44
+ errors: [],
45
+ warnings: [],
46
+ };
47
+
48
+ try {
49
+ // Get disk usage information
50
+ const command = new Deno.Command('df', {
51
+ args: ['-k', this.workingDir],
52
+ stdout: 'piped',
53
+ stderr: 'piped',
54
+ });
55
+
56
+ const { stdout, success } = await command.output();
57
+
58
+ if (success) {
59
+ const output = new TextDecoder().decode(stdout);
60
+ const lines = output.trim().split('\n');
61
+
62
+ if (lines.length >= 2) {
63
+ const dataLine = lines[1];
64
+ const parts = dataLine.split(/\s+/);
65
+
66
+ if (parts.length >= 4) {
67
+ const availableKB = parseInt(parts[3]);
68
+ const availableMB = availableKB / 1024;
69
+
70
+ // Require at least 100MB free space
71
+ if (availableMB < 100) {
72
+ result.success = false;
73
+ result.errors.push(
74
+ `Insufficient disk space: ${availableMB.toFixed(2)}MB available (minimum 100MB required)`,
75
+ );
76
+ } else if (availableMB < 500) {
77
+ result.warnings.push(`Low disk space: ${availableMB.toFixed(2)}MB available`);
78
+ }
79
+ }
80
+ }
81
+ }
82
+ } catch (error) {
83
+ // Non-critical - just warn if we can't check disk space
84
+ result.warnings.push(`Could not check disk space: ${error.message}`);
85
+ }
86
+
87
+ return result;
88
+ }
89
+
90
+ /**
91
+ * Check for existing files and conflicts
92
+ */
93
+ async checkConflicts(force = false) {
94
+ const result = {
95
+ success: true,
96
+ errors: [],
97
+ warnings: [],
98
+ conflicts: [],
99
+ };
100
+
101
+ const criticalFiles = [
102
+ 'CLAUDE.md',
103
+ 'memory-bank.md',
104
+ 'coordination.md',
105
+ '.roomodes',
106
+ 'memory/claude-flow-data.json',
107
+ ];
108
+
109
+ const criticalDirs = ['.roo', '.claude', 'memory', 'coordination'];
110
+
111
+ // Check critical files
112
+ for (const file of criticalFiles) {
113
+ try {
114
+ const stat = await Deno.stat(`${this.workingDir}/${file}`);
115
+ if (stat.isFile) {
116
+ result.conflicts.push(file);
117
+ if (!force) {
118
+ result.success = false;
119
+ result.errors.push(`File already exists: ${file}`);
120
+ } else {
121
+ result.warnings.push(`File will be overwritten: ${file}`);
122
+ }
123
+ }
124
+ } catch {
125
+ // File doesn't exist - good
126
+ }
127
+ }
128
+
129
+ // Check critical directories
130
+ for (const dir of criticalDirs) {
131
+ try {
132
+ const stat = await Deno.stat(`${this.workingDir}/${dir}`);
133
+ if (stat.isDirectory) {
134
+ // Check if directory has important content
135
+ const entries = [];
136
+ for await (const entry of Deno.readDir(`${this.workingDir}/${dir}`)) {
137
+ entries.push(entry.name);
138
+ }
139
+
140
+ if (entries.length > 0) {
141
+ result.conflicts.push(`${dir}/ (${entries.length} items)`);
142
+ if (!force) {
143
+ result.warnings.push(`Directory exists with content: ${dir}/`);
144
+ }
145
+ }
146
+ }
147
+ } catch {
148
+ // Directory doesn't exist - good
149
+ }
150
+ }
151
+
152
+ return result;
153
+ }
154
+
155
+ /**
156
+ * Check for required dependencies
157
+ */
158
+ async checkDependencies() {
159
+ const result = {
160
+ success: true,
161
+ errors: [],
162
+ warnings: [],
163
+ dependencies: {},
164
+ };
165
+
166
+ const dependencies = [
167
+ { name: 'node', command: 'node', args: ['--version'], required: true },
168
+ { name: 'npm', command: 'npm', args: ['--version'], required: true },
169
+ { name: 'git', command: 'git', args: ['--version'], required: false },
170
+ { name: 'npx', command: 'npx', args: ['--version'], required: true },
171
+ ];
172
+
173
+ for (const dep of dependencies) {
174
+ try {
175
+ const command = new Deno.Command(dep.command, {
176
+ args: dep.args,
177
+ stdout: 'piped',
178
+ stderr: 'piped',
179
+ });
180
+
181
+ const { stdout, success } = await command.output();
182
+
183
+ if (success) {
184
+ const version = new TextDecoder().decode(stdout).trim();
185
+ result.dependencies[dep.name] = {
186
+ available: true,
187
+ version,
188
+ };
189
+ } else {
190
+ throw new Error('Command failed');
191
+ }
192
+ } catch (error) {
193
+ result.dependencies[dep.name] = {
194
+ available: false,
195
+ error: error.message,
196
+ };
197
+
198
+ if (dep.required) {
199
+ result.success = false;
200
+ result.errors.push(`Required dependency '${dep.name}' is not available`);
201
+ } else {
202
+ result.warnings.push(`Optional dependency '${dep.name}' is not available`);
203
+ }
204
+ }
205
+ }
206
+
207
+ return result;
208
+ }
209
+
210
+ /**
211
+ * Check environment variables and configuration
212
+ */
213
+ async checkEnvironment() {
214
+ const result = {
215
+ success: true,
216
+ errors: [],
217
+ warnings: [],
218
+ environment: {},
219
+ };
220
+
221
+ // Check for important environment variables
222
+ const envVars = [
223
+ { name: 'HOME', required: false },
224
+ { name: 'PATH', required: true },
225
+ { name: 'PWD', required: false },
226
+ { name: 'CLAUDE_FLOW_DEBUG', required: false },
227
+ ];
228
+
229
+ for (const envVar of envVars) {
230
+ const value = Deno.env.get(envVar.name);
231
+
232
+ if (value) {
233
+ result.environment[envVar.name] = 'set';
234
+ } else {
235
+ result.environment[envVar.name] = 'not set';
236
+
237
+ if (envVar.required) {
238
+ result.success = false;
239
+ result.errors.push(`Required environment variable ${envVar.name} is not set`);
240
+ }
241
+ }
242
+ }
243
+
244
+ // Check if we're in a git repository
245
+ try {
246
+ const command = new Deno.Command('git', {
247
+ args: ['rev-parse', '--git-dir'],
248
+ cwd: this.workingDir,
249
+ stdout: 'piped',
250
+ stderr: 'piped',
251
+ });
252
+
253
+ const { success } = await command.output();
254
+ result.environment.gitRepo = success;
255
+
256
+ if (!success) {
257
+ result.warnings.push('Not in a git repository - version control recommended');
258
+ }
259
+ } catch {
260
+ result.environment.gitRepo = false;
261
+ result.warnings.push('Could not check git repository status');
262
+ }
263
+
264
+ return result;
265
+ }
266
+
267
+ /**
268
+ * Run all pre-initialization checks
269
+ */
270
+ async runAllChecks(options = {}) {
271
+ const results = {
272
+ permissions: await this.checkPermissions(),
273
+ diskSpace: await this.checkDiskSpace(),
274
+ conflicts: await this.checkConflicts(options.force),
275
+ dependencies: await this.checkDependencies(),
276
+ environment: await this.checkEnvironment(),
277
+ };
278
+
279
+ const overallSuccess = Object.values(results).every((r) => r.success);
280
+ const allErrors = Object.values(results).flatMap((r) => r.errors || []);
281
+ const allWarnings = Object.values(results).flatMap((r) => r.warnings || []);
282
+
283
+ return {
284
+ success: overallSuccess,
285
+ results,
286
+ errors: allErrors,
287
+ warnings: allWarnings,
288
+ };
289
+ }
290
+ }