@claude-flow/cli 3.7.0-alpha.7 → 3.7.0-alpha.70

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 (262) hide show
  1. package/.claude/helpers/hook-handler.cjs +12 -4
  2. package/.claude/helpers/statusline.cjs +31 -2
  3. package/.claude/helpers/statusline.js +35 -4
  4. package/README.md +51 -34
  5. package/bin/cli.js +15 -2
  6. package/bin/mcp-server.js +1 -1
  7. package/dist/src/__probe.d.ts +2 -0
  8. package/dist/src/__probe.d.ts.map +1 -0
  9. package/dist/src/__probe.js +5 -0
  10. package/dist/src/__probe.js.map +1 -0
  11. package/dist/src/commands/agent-wasm.js +2 -2
  12. package/dist/src/commands/agent-wasm.js.map +1 -1
  13. package/dist/src/commands/benchmark-cosign.d.ts +29 -0
  14. package/dist/src/commands/benchmark-cosign.d.ts.map +1 -0
  15. package/dist/src/commands/benchmark-cosign.js +222 -0
  16. package/dist/src/commands/benchmark-cosign.js.map +1 -0
  17. package/dist/src/commands/benchmark-verify.d.ts +21 -0
  18. package/dist/src/commands/benchmark-verify.d.ts.map +1 -0
  19. package/dist/src/commands/benchmark-verify.js +202 -0
  20. package/dist/src/commands/benchmark-verify.js.map +1 -0
  21. package/dist/src/commands/daemon.d.ts +20 -0
  22. package/dist/src/commands/daemon.d.ts.map +1 -1
  23. package/dist/src/commands/daemon.js +366 -7
  24. package/dist/src/commands/daemon.js.map +1 -1
  25. package/dist/src/commands/doctor.d.ts.map +1 -1
  26. package/dist/src/commands/doctor.js +224 -46
  27. package/dist/src/commands/doctor.js.map +1 -1
  28. package/dist/src/commands/embeddings.d.ts.map +1 -1
  29. package/dist/src/commands/embeddings.js +18 -9
  30. package/dist/src/commands/embeddings.js.map +1 -1
  31. package/dist/src/commands/hive-mind.d.ts.map +1 -1
  32. package/dist/src/commands/hive-mind.js +25 -7
  33. package/dist/src/commands/hive-mind.js.map +1 -1
  34. package/dist/src/commands/hooks.d.ts.map +1 -1
  35. package/dist/src/commands/hooks.js +56 -29
  36. package/dist/src/commands/hooks.js.map +1 -1
  37. package/dist/src/commands/memory.d.ts.map +1 -1
  38. package/dist/src/commands/memory.js +104 -3
  39. package/dist/src/commands/memory.js.map +1 -1
  40. package/dist/src/commands/start.js +1 -1
  41. package/dist/src/commands/start.js.map +1 -1
  42. package/dist/src/commands/swarm.js +1 -1
  43. package/dist/src/commands/swarm.js.map +1 -1
  44. package/dist/src/commands/task.d.ts.map +1 -1
  45. package/dist/src/commands/task.js +8 -4
  46. package/dist/src/commands/task.js.map +1 -1
  47. package/dist/src/config-adapter.js +1 -1
  48. package/dist/src/config-adapter.js.map +1 -1
  49. package/dist/src/index.d.ts +5 -1
  50. package/dist/src/index.d.ts.map +1 -1
  51. package/dist/src/index.js +61 -18
  52. package/dist/src/index.js.map +1 -1
  53. package/dist/src/init/executor.d.ts.map +1 -1
  54. package/dist/src/init/executor.js +92 -0
  55. package/dist/src/init/executor.js.map +1 -1
  56. package/dist/src/init/helpers-generator.d.ts.map +1 -1
  57. package/dist/src/init/helpers-generator.js +6 -2
  58. package/dist/src/init/helpers-generator.js.map +1 -1
  59. package/dist/src/init/mcp-generator.js +4 -4
  60. package/dist/src/init/mcp-generator.js.map +1 -1
  61. package/dist/src/init/settings-generator.d.ts.map +1 -1
  62. package/dist/src/init/settings-generator.js +78 -19
  63. package/dist/src/init/settings-generator.js.map +1 -1
  64. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  65. package/dist/src/init/statusline-generator.js +75 -31
  66. package/dist/src/init/statusline-generator.js.map +1 -1
  67. package/dist/src/init/types.d.ts +7 -0
  68. package/dist/src/init/types.d.ts.map +1 -1
  69. package/dist/src/init/types.js.map +1 -1
  70. package/dist/src/mcp-client.d.ts.map +1 -1
  71. package/dist/src/mcp-client.js +12 -0
  72. package/dist/src/mcp-client.js.map +1 -1
  73. package/dist/src/mcp-server.d.ts.map +1 -1
  74. package/dist/src/mcp-server.js +38 -5
  75. package/dist/src/mcp-server.js.map +1 -1
  76. package/dist/src/mcp-tools/agent-execute-core.d.ts +3 -2
  77. package/dist/src/mcp-tools/agent-execute-core.d.ts.map +1 -1
  78. package/dist/src/mcp-tools/agent-execute-core.js +16 -9
  79. package/dist/src/mcp-tools/agent-execute-core.js.map +1 -1
  80. package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
  81. package/dist/src/mcp-tools/agent-tools.js +88 -11
  82. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  83. package/dist/src/mcp-tools/agentdb-tools.d.ts +3 -0
  84. package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -1
  85. package/dist/src/mcp-tools/agentdb-tools.js +206 -21
  86. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
  87. package/dist/src/mcp-tools/analyze-tools.js +6 -6
  88. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  89. package/dist/src/mcp-tools/autopilot-tools.js +10 -10
  90. package/dist/src/mcp-tools/autopilot-tools.js.map +1 -1
  91. package/dist/src/mcp-tools/browser-session-tools.d.ts.map +1 -1
  92. package/dist/src/mcp-tools/browser-session-tools.js +18 -7
  93. package/dist/src/mcp-tools/browser-session-tools.js.map +1 -1
  94. package/dist/src/mcp-tools/browser-tools.js +23 -23
  95. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  96. package/dist/src/mcp-tools/claims-tools.js +12 -12
  97. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  98. package/dist/src/mcp-tools/config-tools.js +6 -6
  99. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  100. package/dist/src/mcp-tools/coordination-tools.js +7 -7
  101. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  102. package/dist/src/mcp-tools/daa-tools.js +8 -8
  103. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  104. package/dist/src/mcp-tools/embeddings-tools.js +10 -10
  105. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  106. package/dist/src/mcp-tools/github-tools.js +5 -5
  107. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  108. package/dist/src/mcp-tools/guidance-tools.js +21 -21
  109. package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
  110. package/dist/src/mcp-tools/hive-consensus-runtime.d.ts +149 -0
  111. package/dist/src/mcp-tools/hive-consensus-runtime.d.ts.map +1 -0
  112. package/dist/src/mcp-tools/hive-consensus-runtime.js +296 -0
  113. package/dist/src/mcp-tools/hive-consensus-runtime.js.map +1 -0
  114. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
  115. package/dist/src/mcp-tools/hive-mind-tools.js +53 -9
  116. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  117. package/dist/src/mcp-tools/hooks-tools.d.ts +2 -0
  118. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  119. package/dist/src/mcp-tools/hooks-tools.js +179 -46
  120. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  121. package/dist/src/mcp-tools/managed-agent-tools.d.ts +22 -0
  122. package/dist/src/mcp-tools/managed-agent-tools.d.ts.map +1 -0
  123. package/dist/src/mcp-tools/managed-agent-tools.js +357 -0
  124. package/dist/src/mcp-tools/managed-agent-tools.js.map +1 -0
  125. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  126. package/dist/src/mcp-tools/memory-tools.js +490 -68
  127. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  128. package/dist/src/mcp-tools/neural-tools.js +6 -6
  129. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  130. package/dist/src/mcp-tools/performance-tools.js +6 -6
  131. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  132. package/dist/src/mcp-tools/progress-tools.js +4 -4
  133. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  134. package/dist/src/mcp-tools/ruvllm-tools.js +10 -10
  135. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
  136. package/dist/src/mcp-tools/security-tools.d.ts.map +1 -1
  137. package/dist/src/mcp-tools/security-tools.js +34 -9
  138. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  139. package/dist/src/mcp-tools/session-tools.d.ts.map +1 -1
  140. package/dist/src/mcp-tools/session-tools.js +130 -6
  141. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  142. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
  143. package/dist/src/mcp-tools/swarm-tools.js +76 -7
  144. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  145. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  146. package/dist/src/mcp-tools/system-tools.js +91 -18
  147. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  148. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
  149. package/dist/src/mcp-tools/task-tools.js +55 -7
  150. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  151. package/dist/src/mcp-tools/terminal-tools.js +5 -5
  152. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  153. package/dist/src/mcp-tools/transfer-tools.js +11 -11
  154. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  155. package/dist/src/mcp-tools/wasm-agent-tools.js +11 -11
  156. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
  157. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  158. package/dist/src/mcp-tools/workflow-tools.js +118 -10
  159. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  160. package/dist/src/memory/ann-router-registry.d.ts +61 -0
  161. package/dist/src/memory/ann-router-registry.d.ts.map +1 -0
  162. package/dist/src/memory/ann-router-registry.js +72 -0
  163. package/dist/src/memory/ann-router-registry.js.map +1 -0
  164. package/dist/src/memory/diskann-registry.d.ts +56 -0
  165. package/dist/src/memory/diskann-registry.d.ts.map +1 -0
  166. package/dist/src/memory/diskann-registry.js +88 -0
  167. package/dist/src/memory/diskann-registry.js.map +1 -0
  168. package/dist/src/memory/memory-bridge.d.ts +69 -0
  169. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  170. package/dist/src/memory/memory-bridge.js +293 -5
  171. package/dist/src/memory/memory-bridge.js.map +1 -1
  172. package/dist/src/memory/memory-initializer.d.ts +8 -0
  173. package/dist/src/memory/memory-initializer.d.ts.map +1 -1
  174. package/dist/src/memory/memory-initializer.js +89 -16
  175. package/dist/src/memory/memory-initializer.js.map +1 -1
  176. package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
  177. package/dist/src/memory/sona-optimizer.js +3 -0
  178. package/dist/src/memory/sona-optimizer.js.map +1 -1
  179. package/dist/src/parser.d.ts +9 -0
  180. package/dist/src/parser.d.ts.map +1 -1
  181. package/dist/src/parser.js +11 -0
  182. package/dist/src/parser.js.map +1 -1
  183. package/dist/src/plugins/store/discovery.d.ts +15 -4
  184. package/dist/src/plugins/store/discovery.d.ts.map +1 -1
  185. package/dist/src/plugins/store/discovery.js +40 -18
  186. package/dist/src/plugins/store/discovery.js.map +1 -1
  187. package/dist/src/ruvector/agent-wasm.d.ts.map +1 -1
  188. package/dist/src/ruvector/agent-wasm.js +4 -1
  189. package/dist/src/ruvector/agent-wasm.js.map +1 -1
  190. package/dist/src/ruvector/coverage-tools.js +6 -6
  191. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  192. package/dist/src/services/headless-worker-executor.d.ts +6 -0
  193. package/dist/src/services/headless-worker-executor.d.ts.map +1 -1
  194. package/dist/src/services/headless-worker-executor.js +37 -3
  195. package/dist/src/services/headless-worker-executor.js.map +1 -1
  196. package/dist/src/services/worker-daemon.d.ts +80 -2
  197. package/dist/src/services/worker-daemon.d.ts.map +1 -1
  198. package/dist/src/services/worker-daemon.js +372 -11
  199. package/dist/src/services/worker-daemon.js.map +1 -1
  200. package/dist/tsconfig.tsbuildinfo +1 -1
  201. package/package.json +12 -8
  202. package/.claude/skills/agentdb-advanced/SKILL.md +0 -550
  203. package/.claude/skills/agentdb-learning/SKILL.md +0 -545
  204. package/.claude/skills/agentdb-memory-patterns/SKILL.md +0 -339
  205. package/.claude/skills/agentdb-optimization/SKILL.md +0 -509
  206. package/.claude/skills/agentdb-vector-search/SKILL.md +0 -339
  207. package/.claude/skills/agentic-jujutsu/SKILL.md +0 -645
  208. package/.claude/skills/aidefence-scan.md +0 -151
  209. package/.claude/skills/aidefence.yaml +0 -297
  210. package/.claude/skills/browser/SKILL.md +0 -204
  211. package/.claude/skills/flow-nexus-neural/SKILL.md +0 -738
  212. package/.claude/skills/flow-nexus-platform/SKILL.md +0 -1157
  213. package/.claude/skills/flow-nexus-swarm/SKILL.md +0 -610
  214. package/.claude/skills/github-code-review/SKILL.md +0 -1140
  215. package/.claude/skills/github-multi-repo/SKILL.md +0 -874
  216. package/.claude/skills/github-project-management/SKILL.md +0 -1277
  217. package/.claude/skills/github-release-management/SKILL.md +0 -1081
  218. package/.claude/skills/github-workflow-automation/SKILL.md +0 -1065
  219. package/.claude/skills/hive-mind-advanced/SKILL.md +0 -712
  220. package/.claude/skills/hooks-automation/SKILL.md +0 -1201
  221. package/.claude/skills/pair-programming/SKILL.md +0 -1202
  222. package/.claude/skills/performance-analysis/SKILL.md +0 -563
  223. package/.claude/skills/reasoningbank-agentdb/SKILL.md +0 -446
  224. package/.claude/skills/reasoningbank-intelligence/SKILL.md +0 -201
  225. package/.claude/skills/secure-review.md +0 -181
  226. package/.claude/skills/skill-builder/SKILL.md +0 -910
  227. package/.claude/skills/sparc-methodology/SKILL.md +0 -1115
  228. package/.claude/skills/stream-chain/SKILL.md +0 -563
  229. package/.claude/skills/swarm-advanced/SKILL.md +0 -973
  230. package/.claude/skills/swarm-orchestration/SKILL.md +0 -179
  231. package/.claude/skills/v3-cli-modernization/SKILL.md +0 -872
  232. package/.claude/skills/v3-core-implementation/SKILL.md +0 -797
  233. package/.claude/skills/v3-ddd-architecture/SKILL.md +0 -442
  234. package/.claude/skills/v3-integration-deep/SKILL.md +0 -241
  235. package/.claude/skills/v3-mcp-optimization/SKILL.md +0 -777
  236. package/.claude/skills/v3-memory-unification/SKILL.md +0 -174
  237. package/.claude/skills/v3-performance-optimization/SKILL.md +0 -390
  238. package/.claude/skills/v3-security-overhaul/SKILL.md +0 -82
  239. package/.claude/skills/v3-swarm-coordination/SKILL.md +0 -340
  240. package/.claude/skills/verification-quality/SKILL.md +0 -649
  241. package/.claude/skills/worker-benchmarks/skill.md +0 -135
  242. package/.claude/skills/worker-integration/skill.md +0 -154
  243. package/dist/src/ruvector/flash-attention.d.ts +0 -195
  244. package/dist/src/ruvector/flash-attention.d.ts.map +0 -1
  245. package/dist/src/ruvector/flash-attention.js +0 -643
  246. package/dist/src/ruvector/flash-attention.js.map +0 -1
  247. package/dist/src/ruvector/moe-router.d.ts +0 -206
  248. package/dist/src/ruvector/moe-router.d.ts.map +0 -1
  249. package/dist/src/ruvector/moe-router.js +0 -626
  250. package/dist/src/ruvector/moe-router.js.map +0 -1
  251. package/dist/src/services/event-stream.d.ts +0 -25
  252. package/dist/src/services/event-stream.d.ts.map +0 -1
  253. package/dist/src/services/event-stream.js +0 -27
  254. package/dist/src/services/event-stream.js.map +0 -1
  255. package/dist/src/services/loop-worker-runner.d.ts +0 -16
  256. package/dist/src/services/loop-worker-runner.d.ts.map +0 -1
  257. package/dist/src/services/loop-worker-runner.js +0 -34
  258. package/dist/src/services/loop-worker-runner.js.map +0 -1
  259. package/dist/src/services/runtime-capabilities.d.ts +0 -22
  260. package/dist/src/services/runtime-capabilities.d.ts.map +0 -1
  261. package/dist/src/services/runtime-capabilities.js +0 -45
  262. package/dist/src/services/runtime-capabilities.js.map +0 -1
@@ -8,6 +8,16 @@ import { callMCPTool, MCPClientError } from '../mcp-client.js';
8
8
  import { storeCommand } from './transfer-store.js';
9
9
  import { existsSync, readFileSync, statSync } from 'node:fs';
10
10
  import { join } from 'node:path';
11
+ /**
12
+ * #1686 — `?? 0` only defaults null/undefined; NaN slips through and
13
+ * surfaces as `"NaN"` (or earlier crashed `.toFixed`) in the metrics
14
+ * dashboard and pretrain output. Coerce to a finite number, fall back
15
+ * to `fallback` when the input is null/undefined/non-numeric/NaN/Infinity.
16
+ */
17
+ function safeNum(value, fallback = 0) {
18
+ const n = typeof value === 'number' ? value : Number(value);
19
+ return Number.isFinite(n) ? n : fallback;
20
+ }
11
21
  /**
12
22
  * Read coverage data from disk. Checks these locations in order:
13
23
  * 1. coverage/coverage-summary.json (Jest/Istanbul)
@@ -260,7 +270,7 @@ const preEditCommand = {
260
270
  ],
261
271
  action: async (ctx) => {
262
272
  // Default file to 'unknown' for backward compatibility (env var may be empty)
263
- const filePath = ctx.args[0] || ctx.flags.file || 'unknown';
273
+ const filePath = ctx.flags.file || ctx.args[0] || 'unknown';
264
274
  const operation = ctx.flags.operation || 'update';
265
275
  output.printInfo(`Analyzing context for: ${output.highlight(filePath)}`);
266
276
  try {
@@ -365,7 +375,7 @@ const postEditCommand = {
365
375
  ],
366
376
  action: async (ctx) => {
367
377
  // Default file to 'unknown' for backward compatibility (env var may be empty)
368
- const filePath = ctx.args[0] || ctx.flags.file || 'unknown';
378
+ const filePath = ctx.flags.file || ctx.args[0] || 'unknown';
369
379
  // Default success to true for backward compatibility (PostToolUse = success, PostToolUseFailure = failure)
370
380
  const success = ctx.flags.success !== undefined ? ctx.flags.success : true;
371
381
  output.printInfo(`Recording outcome for: ${output.highlight(filePath)}`);
@@ -448,7 +458,7 @@ const preCommandCommand = {
448
458
  { command: 'claude-flow hooks pre-command -c "npm install lodash"', description: 'Check package install' }
449
459
  ],
450
460
  action: async (ctx) => {
451
- const command = ctx.args[0] || ctx.flags.command;
461
+ const command = ctx.flags.command || ctx.args[0];
452
462
  if (!command) {
453
463
  output.printError('Command is required. Use --command or -c flag.');
454
464
  return { success: false, exitCode: 1 };
@@ -557,7 +567,7 @@ const postCommandCommand = {
557
567
  { command: 'claude-flow hooks post-command -c "npm build" --success false -e 1', description: 'Record failed build' }
558
568
  ],
559
569
  action: async (ctx) => {
560
- const command = ctx.args[0] || ctx.flags.command;
570
+ const command = ctx.flags.command || ctx.args[0];
561
571
  // Default success to true for backward compatibility
562
572
  const success = ctx.flags.success !== undefined ? ctx.flags.success : true;
563
573
  if (!command) {
@@ -629,7 +639,7 @@ const routeCommand = {
629
639
  { command: 'claude-flow hooks route -t "Optimize database queries" -K 5', description: 'Get top 5 suggestions' }
630
640
  ],
631
641
  action: async (ctx) => {
632
- const task = ctx.args[0] || ctx.flags.task;
642
+ const task = ctx.flags.task || ctx.args[0];
633
643
  const topK = ctx.flags.topK || 3;
634
644
  if (!task) {
635
645
  output.printError('Task description is required. Use --task or -t flag.');
@@ -741,7 +751,7 @@ const explainCommand = {
741
751
  { command: 'claude-flow hooks explain -t "Optimize queries" -a coder --verbose', description: 'Verbose explanation for specific agent' }
742
752
  ],
743
753
  action: async (ctx) => {
744
- const task = ctx.args[0] || ctx.flags.task;
754
+ const task = ctx.flags.task || ctx.args[0];
745
755
  if (!task) {
746
756
  output.printError('Task description is required. Use --task or -t flag.');
747
757
  return { success: false, exitCode: 1 };
@@ -903,8 +913,10 @@ const pretrainCommand = {
903
913
  });
904
914
  spinner.succeed('Pretraining completed');
905
915
  // Normalize shape: prefer `statistics`, fall back to `stats` for older tools.
916
+ // #1686 — coerce duration through safeNum so a NaN from the underlying
917
+ // pretrain pipeline surfaces as `0.0s` rather than `NaNs`.
906
918
  const stats = (rawResult.statistics ?? rawResult.stats ?? {});
907
- const durationMs = rawResult.duration ?? rawResult.statistics?.executionTime ?? 0;
919
+ const durationMs = safeNum(rawResult.duration ?? rawResult.statistics?.executionTime);
908
920
  const result = { ...rawResult, stats, duration: durationMs };
909
921
  if (ctx.flags.format === 'json') {
910
922
  output.printJson(result);
@@ -1089,18 +1101,19 @@ const metricsCommand = {
1089
1101
  category: ctx.flags.category,
1090
1102
  });
1091
1103
  // Normalize across both shapes; default every numeric to 0 so toFixed
1092
- // never sees null/undefined.
1093
- const totalPatterns = rawMetrics.patterns?.total ?? rawMetrics.summary?.patternsLearned ?? 0;
1094
- const successfulPatterns = rawMetrics.patterns?.successful ?? Math.round((rawMetrics.summary?.successRate ?? 0) * totalPatterns);
1095
- const failedPatterns = rawMetrics.patterns?.failed ?? Math.max(0, totalPatterns - successfulPatterns);
1096
- const avgConfidence = rawMetrics.patterns?.avgConfidence ?? rawMetrics.summary?.avgQuality ?? 0;
1097
- const routingAccuracy = rawMetrics.agents?.routingAccuracy
1098
- ?? (rawMetrics.routing?.avgConfidence ?? 0);
1099
- const totalRoutes = rawMetrics.agents?.totalRoutes ?? rawMetrics.routing?.totalRoutes ?? 0;
1104
+ // never sees null/undefined. #1686 — also coerce NaN through `safeNum`
1105
+ // because `?? 0` only catches null/undefined; an upstream NaN would
1106
+ // still land in `.toFixed(...)` and surface as `"NaN"`.
1107
+ const totalPatterns = safeNum(rawMetrics.patterns?.total ?? rawMetrics.summary?.patternsLearned);
1108
+ const successfulPatterns = safeNum(rawMetrics.patterns?.successful ?? Math.round(safeNum(rawMetrics.summary?.successRate) * totalPatterns));
1109
+ const failedPatterns = Math.max(0, safeNum(rawMetrics.patterns?.failed ?? totalPatterns - successfulPatterns));
1110
+ const avgConfidence = safeNum(rawMetrics.patterns?.avgConfidence ?? rawMetrics.summary?.avgQuality);
1111
+ const routingAccuracy = safeNum(rawMetrics.agents?.routingAccuracy ?? rawMetrics.routing?.avgConfidence);
1112
+ const totalRoutes = safeNum(rawMetrics.agents?.totalRoutes ?? rawMetrics.routing?.totalRoutes);
1100
1113
  const topAgent = rawMetrics.agents?.topAgent ?? rawMetrics.routing?.topAgents?.[0]?.agent ?? 'n/a';
1101
- const totalCommands = rawMetrics.commands?.totalExecuted ?? rawMetrics.commands?.totalCommands ?? 0;
1102
- const commandSuccessRate = rawMetrics.commands?.successRate ?? 0;
1103
- const avgRiskScore = rawMetrics.commands?.avgRiskScore ?? rawMetrics.commands?.avgExecutionTime ?? 0;
1114
+ const totalCommands = safeNum(rawMetrics.commands?.totalExecuted ?? rawMetrics.commands?.totalCommands);
1115
+ const commandSuccessRate = safeNum(rawMetrics.commands?.successRate);
1116
+ const avgRiskScore = safeNum(rawMetrics.commands?.avgRiskScore ?? rawMetrics.commands?.avgExecutionTime);
1104
1117
  const result = {
1105
1118
  ...rawMetrics,
1106
1119
  patterns: { total: totalPatterns, successful: successfulPatterns, failed: failedPatterns, avgConfidence },
@@ -1211,7 +1224,7 @@ const transferFromProjectCommand = {
1211
1224
  { command: 'claude-flow hooks transfer from-project -s ../prod --filter security -m 0.9', description: 'Transfer high-confidence security patterns' }
1212
1225
  ],
1213
1226
  action: async (ctx) => {
1214
- const sourcePath = ctx.args[0] || ctx.flags.source;
1227
+ const sourcePath = ctx.flags.source || ctx.args[0];
1215
1228
  const minConfidence = ctx.flags.minConfidence || 0.7;
1216
1229
  if (!sourcePath) {
1217
1230
  output.printError('Source project path is required. Use --source or -s flag.');
@@ -1409,7 +1422,7 @@ const preTaskCommand = {
1409
1422
  ],
1410
1423
  action: async (ctx) => {
1411
1424
  const taskId = ctx.flags.taskId || `task-${Date.now().toString(36)}`;
1412
- const description = ctx.args[0] || ctx.flags.description;
1425
+ const description = ctx.flags.description || ctx.args[0];
1413
1426
  if (!description) {
1414
1427
  output.printError('Description is required: --description "your task"');
1415
1428
  return { success: false, exitCode: 1 };
@@ -1694,7 +1707,7 @@ const sessionRestoreCommand = {
1694
1707
  { command: 'claude-flow hooks session-restore -i session-12345', description: 'Restore specific session' }
1695
1708
  ],
1696
1709
  action: async (ctx) => {
1697
- const sessionId = ctx.args[0] || ctx.flags.sessionId || 'latest';
1710
+ const sessionId = ctx.flags.sessionId || ctx.args[0] || 'latest';
1698
1711
  output.printInfo(`Restoring session: ${output.highlight(sessionId)}`);
1699
1712
  try {
1700
1713
  const result = await callMCPTool('hooks_session-restore', {
@@ -2506,7 +2519,7 @@ const coverageRouteCommand = {
2506
2519
  { command: 'claude-flow hooks coverage-route -t "add tests" --threshold 90', description: 'Route with custom threshold' }
2507
2520
  ],
2508
2521
  action: async (ctx) => {
2509
- const task = ctx.args[0] || ctx.flags.task;
2522
+ const task = ctx.flags.task || ctx.args[0];
2510
2523
  const threshold = ctx.flags.threshold || 80;
2511
2524
  const useRuvector = !ctx.flags['no-ruvector'];
2512
2525
  if (!task) {
@@ -2726,7 +2739,7 @@ const coverageSuggestCommand = {
2726
2739
  { command: 'claude-flow hooks coverage-suggest -p src/services --threshold 90', description: 'Stricter threshold' }
2727
2740
  ],
2728
2741
  action: async (ctx) => {
2729
- const targetPath = ctx.args[0] || ctx.flags.path;
2742
+ const targetPath = ctx.flags.path || ctx.args[0];
2730
2743
  const threshold = ctx.flags.threshold || 80;
2731
2744
  const limit = ctx.flags.limit || 20;
2732
2745
  if (!targetPath) {
@@ -3289,7 +3302,13 @@ const statuslineCommand = {
3289
3302
  },
3290
3303
  {
3291
3304
  name: 'compact',
3292
- description: 'Compact single-line output',
3305
+ description: 'Compact single-line output (auto-enabled when terminal width < 100 cols)',
3306
+ type: 'boolean',
3307
+ default: false
3308
+ },
3309
+ {
3310
+ name: 'full',
3311
+ description: 'Force the full multi-line output even on narrow terminals',
3293
3312
  type: 'boolean',
3294
3313
  default: false
3295
3314
  },
@@ -3518,8 +3537,16 @@ const statuslineCommand = {
3518
3537
  output.printJson(statusData);
3519
3538
  return { success: true, data: statusData };
3520
3539
  }
3521
- // Compact output
3522
- if (ctx.flags.compact) {
3540
+ // #1153: auto-collapse to compact on narrow terminals so the full
3541
+ // 6+ line statusline doesn't dominate the screen. Honors:
3542
+ // - explicit --compact → compact
3543
+ // - explicit --full → full (overrides auto-detection)
3544
+ // - else → compact when terminal < 100 cols (full multi-line
3545
+ // output expects ~100 cols of horizontal space)
3546
+ const COMPACT_WIDTH_THRESHOLD = 100;
3547
+ const terminalCols = process.stdout.columns ?? 80;
3548
+ const autoCompact = !ctx.flags.full && terminalCols < COMPACT_WIDTH_THRESHOLD;
3549
+ if (ctx.flags.compact || autoCompact) {
3523
3550
  const line = `DDD:${progress.domainsCompleted}/${progress.totalDomains} CVE:${security.cvesFixed}/${security.totalCves} Swarm:${swarm.activeAgents}/${swarm.maxAgents} Ctx:${system.contextPct}% Int:${system.intelligencePct}%`;
3524
3551
  output.writeln(line);
3525
3552
  return { success: true, data: statusData };
@@ -3950,7 +3977,7 @@ const modelRouteCommand = {
3950
3977
  { command: 'claude-flow hooks model-route -t "architect auth system"', description: 'Route complex task (likely opus)' },
3951
3978
  ],
3952
3979
  action: async (ctx) => {
3953
- const task = ctx.args[0] || ctx.flags.task;
3980
+ const task = ctx.flags.task || ctx.args[0];
3954
3981
  if (!task) {
3955
3982
  output.printError('Task description required. Use --task or -t flag.');
3956
3983
  return { success: false, exitCode: 1 };
@@ -4258,7 +4285,7 @@ const taskCompletedCommand = {
4258
4285
  { command: 'claude-flow hooks task-completed -i task-456 --notify-lead --quality 0.95', description: 'Complete with quality score' }
4259
4286
  ],
4260
4287
  action: async (ctx) => {
4261
- const taskId = ctx.args[0] || ctx.flags.taskId;
4288
+ const taskId = ctx.flags.taskId || ctx.args[0];
4262
4289
  const trainPatterns = ctx.flags.trainPatterns !== false;
4263
4290
  const notifyLead = ctx.flags.notifyLead !== false;
4264
4291
  const success = ctx.flags.success !== false;
@@ -4336,7 +4363,7 @@ const notifyCommand = {
4336
4363
  { command: 'claude-flow hooks notify -m "Test failed" -l error', description: 'Send error notification' },
4337
4364
  ],
4338
4365
  action: async (ctx) => {
4339
- const message = ctx.args[0] || ctx.flags.message;
4366
+ const message = ctx.flags.message || ctx.args[0];
4340
4367
  const level = ctx.flags.level || 'info';
4341
4368
  if (!message) {
4342
4369
  output.printError('Message is required: --message "your message"');