@claude-flow/cli 3.7.0-alpha.8 → 3.7.0-alpha.81

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 (291) hide show
  1. package/.claude/agents/github/release-manager.md +2 -2
  2. package/.claude/agents/github/release-swarm.md +1 -1
  3. package/.claude/agents/github/repo-architect.md +2 -2
  4. package/.claude/agents/github/swarm-pr.md +1 -1
  5. package/.claude/agents/github/workflow-automation.md +2 -2
  6. package/.claude/commands/github/code-review-swarm.md +1 -1
  7. package/.claude/commands/github/issue-tracker.md +3 -3
  8. package/.claude/commands/github/release-manager.md +5 -3
  9. package/.claude/commands/github/release-swarm.md +1 -1
  10. package/.claude/commands/github/repo-architect.md +2 -2
  11. package/.claude/commands/github/swarm-issue.md +4 -1
  12. package/.claude/commands/github/swarm-pr.md +6 -3
  13. package/.claude/commands/github/sync-coordinator.md +3 -1
  14. package/.claude/commands/github/workflow-automation.md +2 -2
  15. package/.claude/helpers/github-safe.js +95 -60
  16. package/.claude/helpers/github-setup.sh +26 -9
  17. package/.claude/helpers/hook-handler.cjs +12 -4
  18. package/.claude/helpers/statusline.cjs +31 -2
  19. package/.claude/helpers/statusline.js +35 -4
  20. package/.claude/settings.json +1 -1
  21. package/.claude/skills/dual-mode/README.md +71 -0
  22. package/.claude/skills/dual-mode/dual-collect.md +103 -0
  23. package/.claude/skills/dual-mode/dual-coordinate.md +85 -0
  24. package/.claude/skills/dual-mode/dual-spawn.md +81 -0
  25. package/.claude/skills/flow-nexus-neural/SKILL.md +0 -11
  26. package/.claude/skills/flow-nexus-platform/SKILL.md +2 -5
  27. package/.claude/skills/flow-nexus-swarm/SKILL.md +0 -6
  28. package/.claude/skills/github-code-review/SKILL.md +2 -17
  29. package/.claude/skills/github-multi-repo/SKILL.md +4 -16
  30. package/.claude/skills/github-project-management/SKILL.md +18 -33
  31. package/.claude/skills/github-release-management/SKILL.md +4 -21
  32. package/.claude/skills/github-workflow-automation/SKILL.md +8 -26
  33. package/.claude/skills/reasoningbank-intelligence/SKILL.md +2 -2
  34. package/.claude/skills/sparc-methodology/SKILL.md +2 -11
  35. package/.claude/skills/stream-chain/SKILL.md +0 -3
  36. package/.claude/skills/swarm-advanced/SKILL.md +2 -5
  37. package/.claude/skills/swarm-orchestration/SKILL.md +1 -1
  38. package/.claude/skills/verification-quality/SKILL.md +120 -78
  39. package/README.md +57 -38
  40. package/bin/cli.js +15 -2
  41. package/bin/mcp-server.js +1 -1
  42. package/dist/src/__probe.d.ts +2 -0
  43. package/dist/src/__probe.d.ts.map +1 -0
  44. package/dist/src/__probe.js +5 -0
  45. package/dist/src/__probe.js.map +1 -0
  46. package/dist/src/commands/agent-wasm.js +2 -2
  47. package/dist/src/commands/agent-wasm.js.map +1 -1
  48. package/dist/src/commands/benchmark-cosign.d.ts +29 -0
  49. package/dist/src/commands/benchmark-cosign.d.ts.map +1 -0
  50. package/dist/src/commands/benchmark-cosign.js +222 -0
  51. package/dist/src/commands/benchmark-cosign.js.map +1 -0
  52. package/dist/src/commands/benchmark-verify.d.ts +21 -0
  53. package/dist/src/commands/benchmark-verify.d.ts.map +1 -0
  54. package/dist/src/commands/benchmark-verify.js +202 -0
  55. package/dist/src/commands/benchmark-verify.js.map +1 -0
  56. package/dist/src/commands/daemon.d.ts +20 -0
  57. package/dist/src/commands/daemon.d.ts.map +1 -1
  58. package/dist/src/commands/daemon.js +366 -7
  59. package/dist/src/commands/daemon.js.map +1 -1
  60. package/dist/src/commands/doctor.d.ts.map +1 -1
  61. package/dist/src/commands/doctor.js +224 -46
  62. package/dist/src/commands/doctor.js.map +1 -1
  63. package/dist/src/commands/embeddings.d.ts.map +1 -1
  64. package/dist/src/commands/embeddings.js +18 -9
  65. package/dist/src/commands/embeddings.js.map +1 -1
  66. package/dist/src/commands/hive-mind.d.ts.map +1 -1
  67. package/dist/src/commands/hive-mind.js +25 -7
  68. package/dist/src/commands/hive-mind.js.map +1 -1
  69. package/dist/src/commands/hooks.d.ts.map +1 -1
  70. package/dist/src/commands/hooks.js +56 -29
  71. package/dist/src/commands/hooks.js.map +1 -1
  72. package/dist/src/commands/init.d.ts.map +1 -1
  73. package/dist/src/commands/init.js +21 -1
  74. package/dist/src/commands/init.js.map +1 -1
  75. package/dist/src/commands/memory.d.ts.map +1 -1
  76. package/dist/src/commands/memory.js +128 -3
  77. package/dist/src/commands/memory.js.map +1 -1
  78. package/dist/src/commands/start.js +1 -1
  79. package/dist/src/commands/start.js.map +1 -1
  80. package/dist/src/commands/swarm.js +1 -1
  81. package/dist/src/commands/swarm.js.map +1 -1
  82. package/dist/src/commands/task.d.ts.map +1 -1
  83. package/dist/src/commands/task.js +8 -4
  84. package/dist/src/commands/task.js.map +1 -1
  85. package/dist/src/config-adapter.js +1 -1
  86. package/dist/src/config-adapter.js.map +1 -1
  87. package/dist/src/index.d.ts +5 -1
  88. package/dist/src/index.d.ts.map +1 -1
  89. package/dist/src/index.js +61 -18
  90. package/dist/src/index.js.map +1 -1
  91. package/dist/src/init/claudemd-generator.d.ts.map +1 -1
  92. package/dist/src/init/claudemd-generator.js +1 -0
  93. package/dist/src/init/claudemd-generator.js.map +1 -1
  94. package/dist/src/init/executor.d.ts.map +1 -1
  95. package/dist/src/init/executor.js +133 -0
  96. package/dist/src/init/executor.js.map +1 -1
  97. package/dist/src/init/helpers-generator.d.ts +1 -0
  98. package/dist/src/init/helpers-generator.d.ts.map +1 -1
  99. package/dist/src/init/helpers-generator.js +19 -2
  100. package/dist/src/init/helpers-generator.js.map +1 -1
  101. package/dist/src/init/mcp-generator.js +4 -4
  102. package/dist/src/init/mcp-generator.js.map +1 -1
  103. package/dist/src/init/settings-generator.d.ts.map +1 -1
  104. package/dist/src/init/settings-generator.js +84 -19
  105. package/dist/src/init/settings-generator.js.map +1 -1
  106. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  107. package/dist/src/init/statusline-generator.js +75 -31
  108. package/dist/src/init/statusline-generator.js.map +1 -1
  109. package/dist/src/init/types.d.ts +30 -0
  110. package/dist/src/init/types.d.ts.map +1 -1
  111. package/dist/src/init/types.js +18 -5
  112. package/dist/src/init/types.js.map +1 -1
  113. package/dist/src/mcp-client.d.ts.map +1 -1
  114. package/dist/src/mcp-client.js +12 -0
  115. package/dist/src/mcp-client.js.map +1 -1
  116. package/dist/src/mcp-server.d.ts.map +1 -1
  117. package/dist/src/mcp-server.js +38 -5
  118. package/dist/src/mcp-server.js.map +1 -1
  119. package/dist/src/mcp-tools/agent-execute-core.d.ts +3 -2
  120. package/dist/src/mcp-tools/agent-execute-core.d.ts.map +1 -1
  121. package/dist/src/mcp-tools/agent-execute-core.js +157 -83
  122. package/dist/src/mcp-tools/agent-execute-core.js.map +1 -1
  123. package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
  124. package/dist/src/mcp-tools/agent-tools.js +119 -11
  125. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  126. package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -1
  127. package/dist/src/mcp-tools/agentdb-tools.js +101 -24
  128. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
  129. package/dist/src/mcp-tools/analyze-tools.js +6 -6
  130. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  131. package/dist/src/mcp-tools/autopilot-tools.js +10 -10
  132. package/dist/src/mcp-tools/autopilot-tools.js.map +1 -1
  133. package/dist/src/mcp-tools/browser-session-tools.d.ts.map +1 -1
  134. package/dist/src/mcp-tools/browser-session-tools.js +18 -7
  135. package/dist/src/mcp-tools/browser-session-tools.js.map +1 -1
  136. package/dist/src/mcp-tools/browser-tools.js +23 -23
  137. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  138. package/dist/src/mcp-tools/claims-tools.js +12 -12
  139. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  140. package/dist/src/mcp-tools/config-tools.js +6 -6
  141. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  142. package/dist/src/mcp-tools/coordination-tools.js +7 -7
  143. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  144. package/dist/src/mcp-tools/daa-tools.js +8 -8
  145. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  146. package/dist/src/mcp-tools/embeddings-tools.js +10 -10
  147. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  148. package/dist/src/mcp-tools/github-tools.js +5 -5
  149. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  150. package/dist/src/mcp-tools/guidance-tools.js +21 -21
  151. package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
  152. package/dist/src/mcp-tools/hive-consensus-runtime.d.ts +149 -0
  153. package/dist/src/mcp-tools/hive-consensus-runtime.d.ts.map +1 -0
  154. package/dist/src/mcp-tools/hive-consensus-runtime.js +296 -0
  155. package/dist/src/mcp-tools/hive-consensus-runtime.js.map +1 -0
  156. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
  157. package/dist/src/mcp-tools/hive-mind-tools.js +53 -9
  158. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  159. package/dist/src/mcp-tools/hooks-tools.d.ts +2 -0
  160. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  161. package/dist/src/mcp-tools/hooks-tools.js +179 -46
  162. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  163. package/dist/src/mcp-tools/managed-agent-tools.d.ts +22 -0
  164. package/dist/src/mcp-tools/managed-agent-tools.d.ts.map +1 -0
  165. package/dist/src/mcp-tools/managed-agent-tools.js +357 -0
  166. package/dist/src/mcp-tools/managed-agent-tools.js.map +1 -0
  167. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  168. package/dist/src/mcp-tools/memory-tools.js +499 -68
  169. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  170. package/dist/src/mcp-tools/neural-tools.js +6 -6
  171. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  172. package/dist/src/mcp-tools/performance-tools.js +6 -6
  173. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  174. package/dist/src/mcp-tools/progress-tools.js +4 -4
  175. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  176. package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +1 -1
  177. package/dist/src/mcp-tools/ruvllm-tools.js +27 -11
  178. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
  179. package/dist/src/mcp-tools/security-tools.d.ts.map +1 -1
  180. package/dist/src/mcp-tools/security-tools.js +34 -9
  181. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  182. package/dist/src/mcp-tools/session-tools.d.ts.map +1 -1
  183. package/dist/src/mcp-tools/session-tools.js +130 -6
  184. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  185. package/dist/src/mcp-tools/swarm-tools.d.ts +28 -0
  186. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
  187. package/dist/src/mcp-tools/swarm-tools.js +80 -9
  188. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  189. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  190. package/dist/src/mcp-tools/system-tools.js +91 -18
  191. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  192. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
  193. package/dist/src/mcp-tools/task-tools.js +55 -7
  194. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  195. package/dist/src/mcp-tools/terminal-tools.js +5 -5
  196. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  197. package/dist/src/mcp-tools/transfer-tools.js +11 -11
  198. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  199. package/dist/src/mcp-tools/wasm-agent-tools.js +11 -11
  200. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
  201. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  202. package/dist/src/mcp-tools/workflow-tools.js +118 -10
  203. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  204. package/dist/src/memory/ann-router-registry.d.ts +61 -0
  205. package/dist/src/memory/ann-router-registry.d.ts.map +1 -0
  206. package/dist/src/memory/ann-router-registry.js +72 -0
  207. package/dist/src/memory/ann-router-registry.js.map +1 -0
  208. package/dist/src/memory/diskann-registry.d.ts +56 -0
  209. package/dist/src/memory/diskann-registry.d.ts.map +1 -0
  210. package/dist/src/memory/diskann-registry.js +88 -0
  211. package/dist/src/memory/diskann-registry.js.map +1 -0
  212. package/dist/src/memory/memory-bridge.d.ts +4 -0
  213. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  214. package/dist/src/memory/memory-bridge.js +49 -8
  215. package/dist/src/memory/memory-bridge.js.map +1 -1
  216. package/dist/src/memory/memory-initializer.d.ts +12 -0
  217. package/dist/src/memory/memory-initializer.d.ts.map +1 -1
  218. package/dist/src/memory/memory-initializer.js +98 -19
  219. package/dist/src/memory/memory-initializer.js.map +1 -1
  220. package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
  221. package/dist/src/memory/sona-optimizer.js +3 -0
  222. package/dist/src/memory/sona-optimizer.js.map +1 -1
  223. package/dist/src/parser.d.ts +9 -0
  224. package/dist/src/parser.d.ts.map +1 -1
  225. package/dist/src/parser.js +11 -0
  226. package/dist/src/parser.js.map +1 -1
  227. package/dist/src/plugins/store/discovery.d.ts +15 -4
  228. package/dist/src/plugins/store/discovery.d.ts.map +1 -1
  229. package/dist/src/plugins/store/discovery.js +40 -18
  230. package/dist/src/plugins/store/discovery.js.map +1 -1
  231. package/dist/src/ruvector/agent-wasm.d.ts.map +1 -1
  232. package/dist/src/ruvector/agent-wasm.js +4 -1
  233. package/dist/src/ruvector/agent-wasm.js.map +1 -1
  234. package/dist/src/ruvector/coverage-tools.js +6 -6
  235. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  236. package/dist/src/services/headless-worker-executor.d.ts +20 -1
  237. package/dist/src/services/headless-worker-executor.d.ts.map +1 -1
  238. package/dist/src/services/headless-worker-executor.js +91 -13
  239. package/dist/src/services/headless-worker-executor.js.map +1 -1
  240. package/dist/src/services/worker-daemon.d.ts +92 -2
  241. package/dist/src/services/worker-daemon.d.ts.map +1 -1
  242. package/dist/src/services/worker-daemon.js +431 -16
  243. package/dist/src/services/worker-daemon.js.map +1 -1
  244. package/dist/tsconfig.tsbuildinfo +1 -1
  245. package/package.json +12 -8
  246. package/.claude/agents/core/coder.md +0 -453
  247. package/.claude/agents/core/researcher.md +0 -369
  248. package/.claude/agents/core/reviewer.md +0 -520
  249. package/.claude/agents/core/tester.md +0 -512
  250. package/.claude/agents/goal/goal-planner.md +0 -73
  251. package/.claude/agents/v3/adr-architect.md +0 -184
  252. package/.claude/agents/v3/memory-specialist.md +0 -995
  253. package/.claude/agents/v3/security-auditor.md +0 -771
  254. package/.claude/agents/v3/sparc-orchestrator.md +0 -182
  255. package/.claude/commands/flow-nexus/app-store.md +0 -124
  256. package/.claude/commands/flow-nexus/challenges.md +0 -120
  257. package/.claude/commands/flow-nexus/login-registration.md +0 -65
  258. package/.claude/commands/flow-nexus/neural-network.md +0 -134
  259. package/.claude/commands/flow-nexus/payments.md +0 -116
  260. package/.claude/commands/flow-nexus/sandbox.md +0 -83
  261. package/.claude/commands/flow-nexus/swarm.md +0 -87
  262. package/.claude/commands/flow-nexus/user-tools.md +0 -152
  263. package/.claude/commands/flow-nexus/workflow.md +0 -115
  264. package/.claude/skills/agentic-jujutsu/SKILL.md +0 -645
  265. package/.claude/skills/aidefence-scan.md +0 -151
  266. package/.claude/skills/aidefence.yaml +0 -297
  267. package/.claude/skills/hive-mind-advanced/SKILL.md +0 -712
  268. package/.claude/skills/performance-analysis/SKILL.md +0 -563
  269. package/.claude/skills/secure-review.md +0 -181
  270. package/.claude/skills/worker-benchmarks/skill.md +0 -135
  271. package/.claude/skills/worker-integration/skill.md +0 -154
  272. package/dist/src/ruvector/flash-attention.d.ts +0 -195
  273. package/dist/src/ruvector/flash-attention.d.ts.map +0 -1
  274. package/dist/src/ruvector/flash-attention.js +0 -643
  275. package/dist/src/ruvector/flash-attention.js.map +0 -1
  276. package/dist/src/ruvector/moe-router.d.ts +0 -206
  277. package/dist/src/ruvector/moe-router.d.ts.map +0 -1
  278. package/dist/src/ruvector/moe-router.js +0 -626
  279. package/dist/src/ruvector/moe-router.js.map +0 -1
  280. package/dist/src/services/event-stream.d.ts +0 -25
  281. package/dist/src/services/event-stream.d.ts.map +0 -1
  282. package/dist/src/services/event-stream.js +0 -27
  283. package/dist/src/services/event-stream.js.map +0 -1
  284. package/dist/src/services/loop-worker-runner.d.ts +0 -16
  285. package/dist/src/services/loop-worker-runner.d.ts.map +0 -1
  286. package/dist/src/services/loop-worker-runner.js +0 -34
  287. package/dist/src/services/loop-worker-runner.js.map +0 -1
  288. package/dist/src/services/runtime-capabilities.d.ts +0 -22
  289. package/dist/src/services/runtime-capabilities.d.ts.map +0 -1
  290. package/dist/src/services/runtime-capabilities.js +0 -45
  291. package/dist/src/services/runtime-capabilities.js.map +0 -1
@@ -1,181 +0,0 @@
1
- ---
2
- name: secure-review
3
- version: 1.0.0
4
- description: Security-focused code review with AI manipulation detection
5
- author: rUv
6
- tags: [security, code-review, aidefence]
7
-
8
- invocation:
9
- - /secure-review
10
- - /security-review
11
-
12
- requires:
13
- - "@claude-flow/aidefence"
14
- ---
15
-
16
- # Secure Review Skill
17
-
18
- Perform security-focused code reviews that include AI manipulation detection, credential scanning, and security best practice validation.
19
-
20
- ## Commands
21
-
22
- ### `/secure-review <file-or-directory>`
23
- Review code for security issues including:
24
- - Hardcoded credentials
25
- - Prompt injection vulnerabilities
26
- - Unsafe input handling
27
- - Security anti-patterns
28
-
29
- ### `/secure-review --quick <file>`
30
- Quick security scan without detailed analysis.
31
-
32
- ### `/secure-review --fix <file>`
33
- Review and suggest fixes for security issues.
34
-
35
- ---
36
-
37
- ## Execution Instructions
38
-
39
- When `/secure-review` is invoked:
40
-
41
- ### Step 1: Initialize Security Tools
42
-
43
- ```typescript
44
- import { createAIDefence } from '@claude-flow/aidefence';
45
-
46
- const aidefence = createAIDefence({ enableLearning: true });
47
- ```
48
-
49
- ### Step 2: Read and Analyze Files
50
-
51
- For each file to review:
52
-
53
- 1. **Read the file** using the Read tool
54
- 2. **Scan for PII/Credentials**:
55
- ```typescript
56
- const piiResult = aidefence.hasPII(fileContent);
57
- if (piiResult) {
58
- findings.push({
59
- type: 'pii',
60
- severity: 'high',
61
- message: 'Potential credentials or PII detected',
62
- file: filePath
63
- });
64
- }
65
- ```
66
-
67
- 3. **Check for dangerous patterns**:
68
- ```typescript
69
- const dangerousPatterns = [
70
- { pattern: /eval\s*\(/, message: 'Unsafe eval() usage', severity: 'critical' },
71
- { pattern: /innerHTML\s*=/, message: 'Potential XSS via innerHTML', severity: 'high' },
72
- { pattern: /shell:\s*true/, message: 'Shell injection risk', severity: 'critical' },
73
- { pattern: /dangerouslySetInnerHTML/, message: 'Dangerous HTML injection', severity: 'high' },
74
- { pattern: /password.*=.*['"][^'"]+['"]/, message: 'Hardcoded password', severity: 'critical' },
75
- ];
76
-
77
- for (const { pattern, message, severity } of dangerousPatterns) {
78
- const match = fileContent.match(pattern);
79
- if (match) {
80
- findings.push({ type: 'security', severity, message, file: filePath, line: getLineNumber(match) });
81
- }
82
- }
83
- ```
84
-
85
- 4. **Scan for prompt injection in AI code**:
86
- ```typescript
87
- // If file contains AI/LLM related code
88
- if (/openai|anthropic|llm|prompt|chat/i.test(fileContent)) {
89
- // Check for unsafe prompt construction
90
- const unsafePromptPatterns = [
91
- /\$\{.*user.*\}/i, // Template literal with user input
92
- /\+ .*input/i, // String concatenation with input
93
- /prompt.*=.*request/i, // Direct request to prompt
94
- ];
95
-
96
- for (const pattern of unsafePromptPatterns) {
97
- if (pattern.test(fileContent)) {
98
- findings.push({
99
- type: 'prompt_injection_risk',
100
- severity: 'high',
101
- message: 'Potential prompt injection vulnerability - user input directly in prompt',
102
- file: filePath
103
- });
104
- }
105
- }
106
- }
107
- ```
108
-
109
- ### Step 3: Generate Report
110
-
111
- ```markdown
112
- ## Security Review Report
113
-
114
- ### Summary
115
- - Files reviewed: X
116
- - Critical issues: X
117
- - High severity: X
118
- - Medium severity: X
119
- - Low severity: X
120
-
121
- ### Findings
122
-
123
- #### Critical
124
- 1. **[file.ts:42]** Hardcoded API key detected
125
- - **Risk**: Credential exposure
126
- - **Fix**: Move to environment variable
127
-
128
- #### High
129
- 1. **[api.ts:108]** User input directly concatenated to prompt
130
- - **Risk**: Prompt injection vulnerability
131
- - **Fix**: Sanitize and validate user input before including in prompts
132
-
133
- ### Recommendations
134
- 1. Enable input validation at all API boundaries
135
- 2. Use environment variables for all credentials
136
- 3. Implement prompt injection defenses for AI code
137
- ```
138
-
139
- ### Step 4: Learn from Review
140
-
141
- ```typescript
142
- // Store review patterns for learning
143
- for (const finding of findings) {
144
- await aidefence.learnFromDetection(
145
- finding.context,
146
- { safe: false, threats: [{ type: finding.type, severity: finding.severity }] }
147
- );
148
- }
149
- ```
150
-
151
- ## Example Output
152
-
153
- ```
154
- 🔍 Security Review: src/api/
155
-
156
- Scanning 12 files...
157
-
158
- ❌ CRITICAL: src/api/config.ts:15
159
- Hardcoded API key: sk-ant-api03...
160
- → Move to .env file and use process.env.ANTHROPIC_API_KEY
161
-
162
- ⚠️ HIGH: src/api/chat.ts:42
163
- User input directly in prompt template
164
- → Sanitize input: const sanitized = sanitizeForPrompt(userInput)
165
-
166
- ⚠️ HIGH: src/api/chat.ts:67
167
- No input length validation
168
- → Add: if (input.length > MAX_INPUT_LENGTH) throw new Error('...')
169
-
170
- ℹ️ MEDIUM: src/api/utils.ts:23
171
- Using eval() for JSON parsing
172
- → Use JSON.parse() instead
173
-
174
- 📊 Summary: 1 critical, 2 high, 1 medium issues found
175
- ```
176
-
177
- ## Integration Notes
178
-
179
- - Works with `reviewer` agent for comprehensive code reviews
180
- - Findings are stored in memory for pattern learning
181
- - Can be triggered automatically via pre-commit hooks
@@ -1,135 +0,0 @@
1
- ---
2
- name: worker-benchmarks
3
- description: Run comprehensive worker system benchmarks and performance analysis
4
- version: 1.0.0
5
- invocable: true
6
- author: agentic-flow
7
- capabilities:
8
- - performance_testing
9
- - metrics_collection
10
- - optimization_recommendations
11
- ---
12
-
13
- # Worker Benchmarks Skill
14
-
15
- Run comprehensive performance benchmarks for the agentic-flow worker system.
16
-
17
- ## Quick Start
18
-
19
- ```bash
20
- # Run full benchmark suite
21
- npx agentic-flow workers benchmark
22
-
23
- # Run specific benchmark
24
- npx agentic-flow workers benchmark --type trigger-detection
25
- npx agentic-flow workers benchmark --type registry
26
- npx agentic-flow workers benchmark --type agent-selection
27
- npx agentic-flow workers benchmark --type concurrent
28
- ```
29
-
30
- ## Benchmark Types
31
-
32
- ### 1. Trigger Detection (`trigger-detection`)
33
- Tests keyword detection speed across 12 worker triggers.
34
- - **Target**: p95 < 5ms
35
- - **Iterations**: 1000
36
- - **Metrics**: latency, throughput, histogram
37
-
38
- ### 2. Worker Registry (`registry`)
39
- Tests CRUD operations on worker entries.
40
- - **Target**: p95 < 10ms
41
- - **Iterations**: 500 creates, gets, updates
42
- - **Metrics**: per-operation latency breakdown
43
-
44
- ### 3. Agent Selection (`agent-selection`)
45
- Tests performance-based agent selection.
46
- - **Target**: p95 < 1ms
47
- - **Iterations**: 1000
48
- - **Metrics**: selection confidence, agent scores
49
-
50
- ### 4. Model Cache (`cache`)
51
- Tests model caching performance.
52
- - **Target**: p95 < 0.5ms
53
- - **Metrics**: hit rate, cache size, eviction stats
54
-
55
- ### 5. Concurrent Workers (`concurrent`)
56
- Tests parallel worker creation and updates.
57
- - **Target**: < 1000ms for 10 workers
58
- - **Metrics**: per-worker latency, memory usage
59
-
60
- ### 6. Memory Key Generation (`memory-keys`)
61
- Tests memory pattern key generation.
62
- - **Target**: p95 < 0.1ms
63
- - **Iterations**: 5000
64
- - **Metrics**: unique patterns, throughput
65
-
66
- ## Output Format
67
-
68
- ```
69
- ═══════════════════════════════════════════════════════════
70
- 📈 BENCHMARK RESULTS
71
- ═══════════════════════════════════════════════════════════
72
-
73
- ✅ Trigger Detection
74
- Operation: detect
75
- Count: 1,000
76
- Avg: 0.045ms | p95: 0.120ms (target: 5ms)
77
- Throughput: 22,222 ops/s
78
- Memory Δ: 0.12MB
79
-
80
- ✅ Worker Registry
81
- Operation: crud
82
- Count: 1,500
83
- Avg: 1.234ms | p95: 3.456ms (target: 10ms)
84
- Throughput: 810 ops/s
85
- Memory Δ: 2.34MB
86
-
87
- ───────────────────────────────────────────────────────────
88
- 📊 SUMMARY
89
- ───────────────────────────────────────────────────────────
90
- Total Tests: 6
91
- Passed: 6 | Failed: 0
92
- Avg Latency: 0.567ms
93
- Total Duration: 2345ms
94
- Peak Memory: 8.90MB
95
- ═══════════════════════════════════════════════════════════
96
- ```
97
-
98
- ## Integration with Settings
99
-
100
- Benchmark thresholds are configured in `.claude/settings.json`:
101
-
102
- ```json
103
- {
104
- "performance": {
105
- "benchmarkThresholds": {
106
- "triggerDetection": { "p95Ms": 5 },
107
- "workerRegistry": { "p95Ms": 10 },
108
- "agentSelection": { "p95Ms": 1 },
109
- "memoryKeyGeneration": { "p95Ms": 0.1 },
110
- "concurrentWorkers": { "totalMs": 1000 }
111
- }
112
- }
113
- }
114
- ```
115
-
116
- ## Programmatic Usage
117
-
118
- ```typescript
119
- import { workerBenchmarks, runBenchmarks } from 'agentic-flow/workers/worker-benchmarks';
120
-
121
- // Run full suite
122
- const suite = await runBenchmarks();
123
- console.log(suite.summary);
124
-
125
- // Run individual benchmarks
126
- const triggerResult = await workerBenchmarks.benchmarkTriggerDetection(1000);
127
- const registryResult = await workerBenchmarks.benchmarkRegistryOperations(500);
128
- ```
129
-
130
- ## Performance Optimization Tips
131
-
132
- 1. **Model Cache**: Enable with `CLAUDE_FLOW_MODEL_CACHE_MB=512`
133
- 2. **Parallel Workers**: Enable with `CLAUDE_FLOW_WORKER_PARALLEL=true`
134
- 3. **Warning Suppression**: Enable with `CLAUDE_FLOW_SUPPRESS_WARNINGS=true`
135
- 4. **SQLite WAL Mode**: Automatic for better concurrent performance
@@ -1,154 +0,0 @@
1
- ---
2
- name: worker-integration
3
- description: Worker-Agent integration for intelligent task dispatch and performance tracking
4
- version: 1.0.0
5
- invocable: true
6
- author: agentic-flow
7
- capabilities:
8
- - agent_selection
9
- - performance_tracking
10
- - memory_coordination
11
- - self_learning
12
- ---
13
-
14
- # Worker-Agent Integration Skill
15
-
16
- Intelligent coordination between background workers and specialized agents.
17
-
18
- ## Quick Start
19
-
20
- ```bash
21
- # View agent recommendations for a trigger
22
- npx agentic-flow workers agents ultralearn
23
- npx agentic-flow workers agents optimize
24
-
25
- # View performance metrics
26
- npx agentic-flow workers metrics
27
-
28
- # View integration stats
29
- npx agentic-flow workers stats --integration
30
- ```
31
-
32
- ## Agent Mappings
33
-
34
- Workers automatically dispatch to optimal agents based on trigger type:
35
-
36
- | Trigger | Primary Agents | Fallback | Pipeline Phases |
37
- |---------|---------------|----------|-----------------|
38
- | `ultralearn` | researcher, coder | planner | discovery → patterns → vectorization → summary |
39
- | `optimize` | performance-analyzer, coder | researcher | static-analysis → performance → patterns |
40
- | `audit` | security-analyst, tester | reviewer | security → secrets → vulnerability-scan |
41
- | `benchmark` | performance-analyzer | coder, tester | performance → metrics → report |
42
- | `testgaps` | tester | coder | discovery → coverage → gaps |
43
- | `document` | documenter, researcher | coder | api-discovery → patterns → indexing |
44
- | `deepdive` | researcher, security-analyst | coder | call-graph → deps → trace |
45
- | `refactor` | coder, reviewer | researcher | complexity → smells → patterns |
46
-
47
- ## Performance-Based Selection
48
-
49
- The system learns from execution history to improve agent selection:
50
-
51
- ```typescript
52
- // Agent selection considers:
53
- // 1. Quality score (0-1)
54
- // 2. Success rate
55
- // 3. Average latency
56
- // 4. Execution count
57
-
58
- const { agent, confidence, reasoning } = selectBestAgent('optimize');
59
- // agent: "performance-analyzer"
60
- // confidence: 0.87
61
- // reasoning: "Selected based on 45 executions with 94.2% success"
62
- ```
63
-
64
- ## Memory Key Patterns
65
-
66
- Workers store results using consistent patterns:
67
-
68
- ```
69
- {trigger}/{topic}/{phase}
70
-
71
- Examples:
72
- - ultralearn/auth-module/analysis
73
- - optimize/database/performance
74
- - audit/payment/vulnerabilities
75
- - benchmark/api/metrics
76
- ```
77
-
78
- ## Benchmark Thresholds
79
-
80
- Agents are monitored against performance thresholds:
81
-
82
- ```json
83
- {
84
- "researcher": {
85
- "p95_latency": "<500ms",
86
- "memory_mb": "<256MB"
87
- },
88
- "coder": {
89
- "p95_latency": "<300ms",
90
- "quality_score": ">0.85"
91
- },
92
- "security-analyst": {
93
- "scan_coverage": ">95%",
94
- "p95_latency": "<1000ms"
95
- }
96
- }
97
- ```
98
-
99
- ## Feedback Loop
100
-
101
- Workers provide feedback for continuous improvement:
102
-
103
- ```typescript
104
- import { workerAgentIntegration } from 'agentic-flow/workers/worker-agent-integration';
105
-
106
- // Record execution feedback
107
- workerAgentIntegration.recordFeedback(
108
- 'optimize', // trigger
109
- 'coder', // agent
110
- true, // success
111
- 245, // latency ms
112
- 0.92 // quality score
113
- );
114
-
115
- // Check compliance
116
- const { compliant, violations } = workerAgentIntegration.checkBenchmarkCompliance('coder');
117
- ```
118
-
119
- ## Integration Statistics
120
-
121
- ```bash
122
- $ npx agentic-flow workers stats --integration
123
-
124
- Worker-Agent Integration Stats
125
- ══════════════════════════════
126
- Total Agents: 6
127
- Tracked Agents: 4
128
- Total Feedback: 156
129
- Avg Quality Score: 0.89
130
-
131
- Model Cache Stats
132
- ─────────────────
133
- Hits: 1,234
134
- Misses: 45
135
- Hit Rate: 96.5%
136
- ```
137
-
138
- ## Configuration
139
-
140
- Enable integration features in `.claude/settings.json`:
141
-
142
- ```json
143
- {
144
- "workers": {
145
- "enabled": true,
146
- "parallel": true,
147
- "memoryDepositEnabled": true,
148
- "agentMappings": {
149
- "ultralearn": ["researcher", "coder"],
150
- "optimize": ["performance-analyzer", "coder"]
151
- }
152
- }
153
- }
154
- ```
@@ -1,195 +0,0 @@
1
- /**
2
- * Flash Attention Implementation for RuVector Intelligence System
3
- *
4
- * Implements block-wise attention computation for faster similarity calculations.
5
- * Achieves O(N) memory instead of O(N^2) through tiling strategy.
6
- *
7
- * Key optimizations:
8
- * - Block-wise computation to fit in L1 cache
9
- * - Fused softmax-matmul operations
10
- * - Float32Array for all operations
11
- * - Online softmax for numerical stability
12
- *
13
- * Target: 2-5x speedup on CPU vs naive attention
14
- *
15
- * Created with love by ruv.io
16
- */
17
- export interface FlashAttentionConfig {
18
- /** Block size for tiling (32-64 optimal for CPU L1 cache) */
19
- blockSize: number;
20
- /** Number of dimensions in embedding vectors */
21
- dimensions: number;
22
- /** Temperature for softmax scaling */
23
- temperature: number;
24
- /** Enable numerical stability optimizations */
25
- useStableMode: boolean;
26
- /** Use optimized CPU path (default: true) */
27
- useCPUOptimizations: boolean;
28
- }
29
- export interface AttentionResult {
30
- /** Output vectors after attention */
31
- output: Float32Array[];
32
- /** Attention weights (optional, for debugging) */
33
- weights?: Float32Array[];
34
- /** Computation time in milliseconds */
35
- computeTimeMs: number;
36
- }
37
- export interface BenchmarkResult {
38
- /** Naive attention time in milliseconds */
39
- naiveTimeMs: number;
40
- /** Flash attention time in milliseconds */
41
- flashTimeMs: number;
42
- /** Speedup factor (naive / flash) */
43
- speedup: number;
44
- /** Number of vectors benchmarked */
45
- numVectors: number;
46
- /** Dimensions of vectors */
47
- dimensions: number;
48
- /** Memory usage estimate for naive (bytes) */
49
- naiveMemoryBytes: number;
50
- /** Memory usage estimate for flash (bytes) */
51
- flashMemoryBytes: number;
52
- /** Memory reduction factor */
53
- memoryReduction: number;
54
- }
55
- export declare class FlashAttention {
56
- private config;
57
- private lastSpeedup;
58
- private benchmarkHistory;
59
- private scoreBuffer;
60
- private expBuffer;
61
- private accumBuffer;
62
- constructor(config?: Partial<FlashAttentionConfig>);
63
- /**
64
- * Main attention computation using Flash Attention algorithm
65
- *
66
- * @param queries - Query vectors [N x D]
67
- * @param keys - Key vectors [M x D]
68
- * @param values - Value vectors [M x D]
69
- * @returns Attention output [N x D]
70
- */
71
- attention(queries: Float32Array[], keys: Float32Array[], values: Float32Array[]): AttentionResult;
72
- /**
73
- * CPU-optimized attention with aggressive optimizations
74
- *
75
- * Key optimizations:
76
- * - Blocked score computation (better cache utilization)
77
- * - Top-K sparse attention (only use most relevant keys)
78
- * - Pre-allocated buffers to avoid GC pressure
79
- * - 8x loop unrolling for dot products
80
- * - Fused max-finding during score computation
81
- */
82
- private cpuOptimizedAttention;
83
- /**
84
- * Partial dot product using only first N dimensions (for screening)
85
- */
86
- private partialDotProduct;
87
- /**
88
- * Partial sort to get top-K elements (QuickSelect-like)
89
- * Only ensures first K elements are the largest, not sorted
90
- */
91
- private partialSort;
92
- /**
93
- * Swap two indices in array
94
- */
95
- private swapIndices;
96
- /**
97
- * Fast dot product with 8x unrolling
98
- */
99
- private fastDotProduct;
100
- /**
101
- * Block-wise attention computation (Flash Attention core algorithm)
102
- *
103
- * Algorithm:
104
- * For each block of queries Q_b:
105
- * For each block of keys K_b:
106
- * S_b = Q_b @ K_b.T / sqrt(d) // Block scores
107
- * P_b = softmax(S_b) // Block attention
108
- * O_b += P_b @ V_b // Accumulate output
109
- *
110
- * @param Q - Query vectors
111
- * @param K - Key vectors
112
- * @param V - Value vectors
113
- * @param blockSize - Block size for tiling
114
- */
115
- blockAttention(Q: Float32Array[], K: Float32Array[], V: Float32Array[], blockSize: number): Float32Array[];
116
- /**
117
- * Get the speedup factor from the last benchmark
118
- */
119
- getSpeedup(): number;
120
- /**
121
- * Run benchmark comparing naive vs CPU-optimized attention
122
- *
123
- * @param numVectors - Number of vectors to test
124
- * @param dimensions - Dimensions per vector
125
- * @param iterations - Number of iterations for averaging
126
- */
127
- benchmark(numVectors?: number, dimensions?: number, iterations?: number): BenchmarkResult;
128
- /**
129
- * Get benchmark history
130
- */
131
- getBenchmarkHistory(): BenchmarkResult[];
132
- /**
133
- * Get configuration
134
- */
135
- getConfig(): FlashAttentionConfig;
136
- /**
137
- * Update configuration
138
- */
139
- setConfig(config: Partial<FlashAttentionConfig>): void;
140
- /**
141
- * Naive O(N^2) attention implementation for comparison
142
- */
143
- private naiveAttention;
144
- /**
145
- * Compute block of attention scores
146
- */
147
- private computeBlockScores;
148
- /**
149
- * Online softmax with output accumulation (key to Flash Attention)
150
- *
151
- * Uses the online softmax trick to maintain numerical stability
152
- * while processing blocks incrementally.
153
- */
154
- private onlineSoftmaxAccumulate;
155
- /**
156
- * Compute dot product of two vectors
157
- */
158
- private dotProduct;
159
- /**
160
- * Stable softmax implementation
161
- */
162
- private softmax;
163
- /**
164
- * Generate random vectors for benchmarking
165
- */
166
- private generateRandomVectors;
167
- /**
168
- * Validate input arrays
169
- */
170
- private validateInputs;
171
- }
172
- /**
173
- * Get singleton FlashAttention instance
174
- *
175
- * @param config - Optional configuration (only used on first call)
176
- * @returns FlashAttention instance
177
- */
178
- export declare function getFlashAttention(config?: Partial<FlashAttentionConfig>): FlashAttention;
179
- /**
180
- * Reset singleton (for testing)
181
- */
182
- export declare function resetFlashAttention(): void;
183
- /**
184
- * Compute attention using Flash Attention
185
- */
186
- export declare function computeAttention(queries: Float32Array[], keys: Float32Array[], values: Float32Array[], config?: Partial<FlashAttentionConfig>): AttentionResult;
187
- /**
188
- * Run Flash Attention benchmark
189
- */
190
- export declare function benchmarkFlashAttention(numVectors?: number, dimensions?: number, iterations?: number): BenchmarkResult;
191
- /**
192
- * Get current speedup from last benchmark
193
- */
194
- export declare function getFlashAttentionSpeedup(): number;
195
- //# sourceMappingURL=flash-attention.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flash-attention.d.ts","sourceRoot":"","sources":["../../../src/ruvector/flash-attention.ts"],"names":[],"mappings":"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"}