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,359 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Test Suite for Path Update Automation Script
5
+ *
6
+ * Validates all features of update-paths.js including:
7
+ * - Pattern matching (string and regex)
8
+ * - File type validation (JSON, YAML, JavaScript, Markdown)
9
+ * - Backup creation
10
+ * - Dry-run mode
11
+ * - Error handling
12
+ *
13
+ * @module scripts/migration/test-update-paths
14
+ */
15
+
16
+ import { promises as fs } from 'fs';
17
+ import path from 'path';
18
+ import { tmpdir } from 'os';
19
+ import {
20
+ validateJSON,
21
+ validateYAML,
22
+ validateJavaScript,
23
+ validateMarkdown,
24
+ applyPattern,
25
+ processFile
26
+ } from './update-paths.js';
27
+
28
+ const colors = {
29
+ reset: '\x1b[0m',
30
+ green: '\x1b[32m',
31
+ red: '\x1b[31m',
32
+ yellow: '\x1b[33m',
33
+ blue: '\x1b[34m',
34
+ bright: '\x1b[1m'
35
+ };
36
+
37
+ let testsPassed = 0;
38
+ let testsFailed = 0;
39
+
40
+ /**
41
+ * Run a single test case
42
+ */
43
+ function test(name, fn) {
44
+ try {
45
+ fn();
46
+ console.log(`${colors.green}✓${colors.reset} ${name}`);
47
+ testsPassed++;
48
+ } catch (error) {
49
+ console.log(`${colors.red}✗${colors.reset} ${name}`);
50
+ console.log(` ${colors.red}${error.message}${colors.reset}`);
51
+ testsFailed++;
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Assert helper
57
+ */
58
+ function assert(condition, message) {
59
+ if (!condition) {
60
+ throw new Error(message || 'Assertion failed');
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Test JSON validation
66
+ */
67
+ function testJSONValidation() {
68
+ console.log(`\n${colors.bright}${colors.blue}JSON Validation Tests${colors.reset}`);
69
+
70
+ test('validates correct JSON', () => {
71
+ const result = validateJSON('{"key": "value", "number": 123}');
72
+ assert(result.valid === true, 'Should validate correct JSON');
73
+ });
74
+
75
+ test('rejects invalid JSON - missing quote', () => {
76
+ const result = validateJSON('{"key: "value"}');
77
+ assert(result.valid === false, 'Should reject invalid JSON');
78
+ assert(result.error, 'Should provide error message');
79
+ });
80
+
81
+ test('rejects invalid JSON - trailing comma', () => {
82
+ const result = validateJSON('{"key": "value",}');
83
+ assert(result.valid === false, 'Should reject JSON with trailing comma');
84
+ });
85
+
86
+ test('validates complex nested JSON', () => {
87
+ const complex = JSON.stringify({
88
+ nested: { deeply: { structured: { data: [1, 2, 3] } } }
89
+ });
90
+ const result = validateJSON(complex);
91
+ assert(result.valid === true, 'Should validate complex JSON');
92
+ });
93
+ }
94
+
95
+ /**
96
+ * Test YAML validation
97
+ */
98
+ function testYAMLValidation() {
99
+ console.log(`\n${colors.bright}${colors.blue}YAML Validation Tests${colors.reset}`);
100
+
101
+ test('validates correct YAML', () => {
102
+ const yaml = 'key: value\nnumber: 123\nlist:\n - item1\n - item2';
103
+ const result = validateYAML(yaml);
104
+ assert(result.valid === true, 'Should validate correct YAML');
105
+ });
106
+
107
+ test('rejects invalid YAML - bad indentation', () => {
108
+ const yaml = 'key: value\n bad: indentation';
109
+ const result = validateYAML(yaml);
110
+ assert(result.valid === false, 'Should reject YAML with bad indentation');
111
+ });
112
+
113
+ test('validates YAML with comments', () => {
114
+ const yaml = '# Comment\nkey: value # inline comment';
115
+ const result = validateYAML(yaml);
116
+ assert(result.valid === true, 'Should validate YAML with comments');
117
+ });
118
+ }
119
+
120
+ /**
121
+ * Test JavaScript validation
122
+ */
123
+ function testJavaScriptValidation() {
124
+ console.log(`\n${colors.bright}${colors.blue}JavaScript Validation Tests${colors.reset}`);
125
+
126
+ test('validates correct JavaScript', () => {
127
+ const js = 'const x = 1; function test() { return x; }';
128
+ const result = validateJavaScript(js);
129
+ assert(result.valid === true, 'Should validate correct JavaScript');
130
+ });
131
+
132
+ test('rejects unbalanced braces', () => {
133
+ const js = 'function test() { return 1;';
134
+ const result = validateJavaScript(js);
135
+ assert(result.valid === false, 'Should reject unbalanced braces');
136
+ });
137
+
138
+ test('rejects unbalanced brackets', () => {
139
+ const js = 'const arr = [1, 2, 3;';
140
+ const result = validateJavaScript(js);
141
+ assert(result.valid === false, 'Should reject unbalanced brackets');
142
+ });
143
+
144
+ test('rejects unbalanced parentheses', () => {
145
+ const js = 'function test( { return 1; }';
146
+ const result = validateJavaScript(js);
147
+ assert(result.valid === false, 'Should reject unbalanced parentheses');
148
+ });
149
+ }
150
+
151
+ /**
152
+ * Test Markdown validation
153
+ */
154
+ function testMarkdownValidation() {
155
+ console.log(`\n${colors.bright}${colors.blue}Markdown Validation Tests${colors.reset}`);
156
+
157
+ test('validates correct Markdown', () => {
158
+ const md = '# Header\n\nSome text with `inline code`\n\n```js\ncode block\n```';
159
+ const result = validateMarkdown(md);
160
+ assert(result.valid === true, 'Should validate correct Markdown');
161
+ });
162
+
163
+ test('rejects unbalanced code fences', () => {
164
+ const md = '# Header\n\n```js\ncode block without closing fence';
165
+ const result = validateMarkdown(md);
166
+ assert(result.valid === false, 'Should reject unbalanced code fences');
167
+ });
168
+
169
+ test('rejects unbalanced inline code', () => {
170
+ const md = 'Some text with `unclosed inline code';
171
+ const result = validateMarkdown(md);
172
+ assert(result.valid === false, 'Should reject unbalanced inline code');
173
+ });
174
+
175
+ test('validates Markdown with multiple code blocks', () => {
176
+ const md = '```js\nblock1\n```\n\nText\n\n```python\nblock2\n```';
177
+ const result = validateMarkdown(md);
178
+ assert(result.valid === true, 'Should validate multiple code blocks');
179
+ });
180
+ }
181
+
182
+ /**
183
+ * Test pattern application
184
+ */
185
+ function testPatternApplication() {
186
+ console.log(`\n${colors.bright}${colors.blue}Pattern Application Tests${colors.reset}`);
187
+
188
+ test('applies string literal pattern', () => {
189
+ const content = 'node test-runner.js and node test-suite.js';
190
+ const pattern = { pattern: 'node test-', replacement: 'node tests/manual/test-' };
191
+ const result = applyPattern(content, pattern, false);
192
+
193
+ assert(result.changed === true, 'Should detect changes');
194
+ assert(result.matchCount === 2, 'Should count 2 matches');
195
+ assert(
196
+ result.content === 'node tests/manual/test-runner.js and node tests/manual/test-suite.js',
197
+ 'Should replace both occurrences'
198
+ );
199
+ });
200
+
201
+ test('applies regex pattern', () => {
202
+ const content = 'path/to/.claude-flow-novice/dist and another/.claude-flow-novice/dist';
203
+ const pattern = { pattern: '\\.claude-flow-novice/dist', replacement: 'dist/' };
204
+ const result = applyPattern(content, pattern, true);
205
+
206
+ assert(result.changed === true, 'Should detect changes');
207
+ assert(result.matchCount === 2, 'Should count 2 matches');
208
+ assert(
209
+ result.content === 'path/to/dist/ and another/dist/',
210
+ 'Should replace with regex'
211
+ );
212
+ });
213
+
214
+ test('handles no matches', () => {
215
+ const content = 'no matching content here';
216
+ const pattern = { pattern: 'test-', replacement: 'tests/' };
217
+ const result = applyPattern(content, pattern, false);
218
+
219
+ assert(result.changed === false, 'Should detect no changes');
220
+ assert(result.matchCount === 0, 'Should count 0 matches');
221
+ assert(result.content === content, 'Content should be unchanged');
222
+ });
223
+
224
+ test('handles case-sensitive matching', () => {
225
+ const content = 'node Test-runner.js and node test-runner.js';
226
+ const pattern = { pattern: 'node test-', replacement: 'node tests/' };
227
+ const result = applyPattern(content, pattern, false);
228
+
229
+ assert(result.matchCount === 1, 'Should only match lowercase');
230
+ });
231
+ }
232
+
233
+ /**
234
+ * Test file processing
235
+ */
236
+ async function testFileProcessing() {
237
+ console.log(`\n${colors.bright}${colors.blue}File Processing Tests${colors.reset}`);
238
+
239
+ // Create temporary test files
240
+ const tempDir = await fs.mkdtemp(path.join(tmpdir(), 'update-paths-test-'));
241
+
242
+ try {
243
+ // Test JSON file processing
244
+ const jsonFile = path.join(tempDir, 'test.json');
245
+ await fs.writeFile(
246
+ jsonFile,
247
+ JSON.stringify({ script: 'node test-runner.js' }, null, 2)
248
+ );
249
+
250
+ const jsonResult = await processFile(
251
+ jsonFile,
252
+ [{ pattern: 'node test-', replacement: 'node tests/manual/test-' }],
253
+ { dryRun: true }
254
+ );
255
+
256
+ test('processes JSON file in dry-run', () => {
257
+ assert(jsonResult.processed === true, 'Should process file');
258
+ assert(jsonResult.changed === true, 'Should detect changes');
259
+ assert(jsonResult.validated === true, 'Should validate JSON');
260
+ assert(jsonResult.dryRun === true, 'Should respect dry-run flag');
261
+ });
262
+
263
+ // Test actual file modification
264
+ const jsonResult2 = await processFile(
265
+ jsonFile,
266
+ [{ pattern: 'node test-', replacement: 'node tests/manual/test-' }],
267
+ { dryRun: false, createBackups: false }
268
+ );
269
+
270
+ const updatedContent = await fs.readFile(jsonFile, 'utf8');
271
+
272
+ test('modifies file when not dry-run', () => {
273
+ assert(jsonResult2.processed === true, 'Should process file');
274
+ assert(jsonResult2.changed === true, 'Should detect changes');
275
+ assert(updatedContent.includes('node tests/manual/test-runner.js'), 'Should update content');
276
+ assert(JSON.parse(updatedContent), 'Should maintain valid JSON');
277
+ });
278
+
279
+ // Test validation failure prevention
280
+ const invalidJsonFile = path.join(tempDir, 'invalid.json');
281
+ await fs.writeFile(invalidJsonFile, '{"key": "value"}');
282
+
283
+ const invalidResult = await processFile(
284
+ invalidJsonFile,
285
+ [{ pattern: '"value"', replacement: '"value' }], // Will break JSON
286
+ { dryRun: false, createBackups: false }
287
+ );
288
+
289
+ test('prevents modification on validation failure', () => {
290
+ assert(invalidResult.processed === false, 'Should not process file');
291
+ assert(invalidResult.validated === false, 'Should fail validation');
292
+ assert(invalidResult.error, 'Should provide error message');
293
+ });
294
+
295
+ // Test backup creation
296
+ const backupTestFile = path.join(tempDir, 'backup-test.json');
297
+ await fs.writeFile(
298
+ backupTestFile,
299
+ JSON.stringify({ test: 'node test-file.js' }, null, 2)
300
+ );
301
+
302
+ await processFile(
303
+ backupTestFile,
304
+ [{ pattern: 'node test-', replacement: 'node tests/' }],
305
+ { dryRun: false, createBackups: true }
306
+ );
307
+
308
+ const backupFiles = (await fs.readdir(tempDir)).filter(f =>
309
+ f.startsWith('backup-test.json.backup-')
310
+ );
311
+
312
+ test('creates backup before modification', () => {
313
+ assert(backupFiles.length > 0, 'Should create backup file');
314
+ });
315
+
316
+ } finally {
317
+ // Cleanup
318
+ await fs.rm(tempDir, { recursive: true, force: true });
319
+ }
320
+ }
321
+
322
+ /**
323
+ * Run all tests
324
+ */
325
+ async function runTests() {
326
+ console.log(`${colors.bright}${colors.blue}
327
+ ╔═══════════════════════════════════════════════════════════╗
328
+ ║ Path Update Automation - Test Suite ║
329
+ ╚═══════════════════════════════════════════════════════════╝
330
+ ${colors.reset}`);
331
+
332
+ testJSONValidation();
333
+ testYAMLValidation();
334
+ testJavaScriptValidation();
335
+ testMarkdownValidation();
336
+ testPatternApplication();
337
+ await testFileProcessing();
338
+
339
+ // Summary
340
+ console.log(`\n${colors.bright}${colors.blue}Test Summary${colors.reset}`);
341
+ console.log(`${colors.green}Passed: ${testsPassed}${colors.reset}`);
342
+ console.log(`${colors.red}Failed: ${testsFailed}${colors.reset}`);
343
+
344
+ if (testsFailed === 0) {
345
+ console.log(`\n${colors.green}${colors.bright}✓ All tests passed!${colors.reset}\n`);
346
+ process.exit(0);
347
+ } else {
348
+ console.log(`\n${colors.red}${colors.bright}✗ Some tests failed${colors.reset}\n`);
349
+ process.exit(1);
350
+ }
351
+ }
352
+
353
+ // Run tests if executed directly
354
+ if (import.meta.url === `file://${process.argv[1]}`) {
355
+ runTests().catch(error => {
356
+ console.error(`${colors.red}Fatal error:${colors.reset}`, error);
357
+ process.exit(1);
358
+ });
359
+ }