@accelerationguy/accel 1.0.0

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 (376) hide show
  1. package/CLAUDE.md +19 -0
  2. package/LICENSE +33 -0
  3. package/README.md +275 -0
  4. package/bin/install.js +661 -0
  5. package/docs/getting-started.md +164 -0
  6. package/docs/module-guide.md +139 -0
  7. package/modules/drive/LICENSE +21 -0
  8. package/modules/drive/PAUL-VS-GSD.md +171 -0
  9. package/modules/drive/README.md +555 -0
  10. package/modules/drive/assets/terminal.svg +67 -0
  11. package/modules/drive/bin/install.js +210 -0
  12. package/modules/drive/integration.js +76 -0
  13. package/modules/drive/package.json +38 -0
  14. package/modules/drive/src/commands/add-phase.md +36 -0
  15. package/modules/drive/src/commands/apply.md +83 -0
  16. package/modules/drive/src/commands/assumptions.md +37 -0
  17. package/modules/drive/src/commands/audit.md +57 -0
  18. package/modules/drive/src/commands/complete-milestone.md +36 -0
  19. package/modules/drive/src/commands/config.md +175 -0
  20. package/modules/drive/src/commands/consider-issues.md +41 -0
  21. package/modules/drive/src/commands/discover.md +48 -0
  22. package/modules/drive/src/commands/discuss-milestone.md +33 -0
  23. package/modules/drive/src/commands/discuss.md +34 -0
  24. package/modules/drive/src/commands/flows.md +73 -0
  25. package/modules/drive/src/commands/handoff.md +201 -0
  26. package/modules/drive/src/commands/help.md +525 -0
  27. package/modules/drive/src/commands/init.md +54 -0
  28. package/modules/drive/src/commands/map-codebase.md +34 -0
  29. package/modules/drive/src/commands/milestone.md +34 -0
  30. package/modules/drive/src/commands/pause.md +44 -0
  31. package/modules/drive/src/commands/plan-fix.md +216 -0
  32. package/modules/drive/src/commands/plan.md +36 -0
  33. package/modules/drive/src/commands/progress.md +138 -0
  34. package/modules/drive/src/commands/register.md +29 -0
  35. package/modules/drive/src/commands/remove-phase.md +37 -0
  36. package/modules/drive/src/commands/research-phase.md +209 -0
  37. package/modules/drive/src/commands/research.md +47 -0
  38. package/modules/drive/src/commands/resume.md +49 -0
  39. package/modules/drive/src/commands/status.md +78 -0
  40. package/modules/drive/src/commands/unify.md +87 -0
  41. package/modules/drive/src/commands/verify.md +60 -0
  42. package/modules/drive/src/references/checkpoints.md +234 -0
  43. package/modules/drive/src/references/context-management.md +219 -0
  44. package/modules/drive/src/references/git-strategy.md +206 -0
  45. package/modules/drive/src/references/loop-phases.md +254 -0
  46. package/modules/drive/src/references/plan-format.md +263 -0
  47. package/modules/drive/src/references/quality-principles.md +152 -0
  48. package/modules/drive/src/references/research-quality-control.md +247 -0
  49. package/modules/drive/src/references/sonarqube-integration.md +244 -0
  50. package/modules/drive/src/references/specialized-workflow-integration.md +186 -0
  51. package/modules/drive/src/references/subagent-criteria.md +179 -0
  52. package/modules/drive/src/references/tdd.md +219 -0
  53. package/modules/drive/src/references/work-units.md +161 -0
  54. package/modules/drive/src/rules/commands.md +108 -0
  55. package/modules/drive/src/rules/references.md +107 -0
  56. package/modules/drive/src/rules/style.md +123 -0
  57. package/modules/drive/src/rules/templates.md +51 -0
  58. package/modules/drive/src/rules/workflows.md +133 -0
  59. package/modules/drive/src/templates/CONTEXT.md +88 -0
  60. package/modules/drive/src/templates/DEBUG.md +164 -0
  61. package/modules/drive/src/templates/DISCOVERY.md +148 -0
  62. package/modules/drive/src/templates/HANDOFF.md +77 -0
  63. package/modules/drive/src/templates/ISSUES.md +93 -0
  64. package/modules/drive/src/templates/MILESTONES.md +167 -0
  65. package/modules/drive/src/templates/PLAN.md +328 -0
  66. package/modules/drive/src/templates/PROJECT.md +219 -0
  67. package/modules/drive/src/templates/RESEARCH.md +130 -0
  68. package/modules/drive/src/templates/ROADMAP.md +328 -0
  69. package/modules/drive/src/templates/SPECIAL-FLOWS.md +70 -0
  70. package/modules/drive/src/templates/STATE.md +210 -0
  71. package/modules/drive/src/templates/SUMMARY.md +221 -0
  72. package/modules/drive/src/templates/UAT-ISSUES.md +139 -0
  73. package/modules/drive/src/templates/codebase/architecture.md +259 -0
  74. package/modules/drive/src/templates/codebase/concerns.md +329 -0
  75. package/modules/drive/src/templates/codebase/conventions.md +311 -0
  76. package/modules/drive/src/templates/codebase/integrations.md +284 -0
  77. package/modules/drive/src/templates/codebase/stack.md +190 -0
  78. package/modules/drive/src/templates/codebase/structure.md +287 -0
  79. package/modules/drive/src/templates/codebase/testing.md +484 -0
  80. package/modules/drive/src/templates/config.md +181 -0
  81. package/modules/drive/src/templates/milestone-archive.md +236 -0
  82. package/modules/drive/src/templates/milestone-context.md +190 -0
  83. package/modules/drive/src/templates/paul-json.md +147 -0
  84. package/modules/drive/src/vector-config/PAUL +26 -0
  85. package/modules/drive/src/vector-config/PAUL.manifest +11 -0
  86. package/modules/drive/src/workflows/apply-phase.md +393 -0
  87. package/modules/drive/src/workflows/audit-plan.md +344 -0
  88. package/modules/drive/src/workflows/complete-milestone.md +479 -0
  89. package/modules/drive/src/workflows/configure-special-flows.md +283 -0
  90. package/modules/drive/src/workflows/consider-issues.md +172 -0
  91. package/modules/drive/src/workflows/create-milestone.md +268 -0
  92. package/modules/drive/src/workflows/debug.md +292 -0
  93. package/modules/drive/src/workflows/discovery.md +187 -0
  94. package/modules/drive/src/workflows/discuss-milestone.md +245 -0
  95. package/modules/drive/src/workflows/discuss-phase.md +231 -0
  96. package/modules/drive/src/workflows/init-project.md +698 -0
  97. package/modules/drive/src/workflows/map-codebase.md +459 -0
  98. package/modules/drive/src/workflows/pause-work.md +259 -0
  99. package/modules/drive/src/workflows/phase-assumptions.md +181 -0
  100. package/modules/drive/src/workflows/plan-phase.md +385 -0
  101. package/modules/drive/src/workflows/quality-gate.md +263 -0
  102. package/modules/drive/src/workflows/register-manifest.md +107 -0
  103. package/modules/drive/src/workflows/research.md +241 -0
  104. package/modules/drive/src/workflows/resume-project.md +200 -0
  105. package/modules/drive/src/workflows/roadmap-management.md +334 -0
  106. package/modules/drive/src/workflows/transition-phase.md +368 -0
  107. package/modules/drive/src/workflows/unify-phase.md +290 -0
  108. package/modules/drive/src/workflows/verify-work.md +241 -0
  109. package/modules/forge/README.md +281 -0
  110. package/modules/forge/bin/install.js +200 -0
  111. package/modules/forge/package.json +32 -0
  112. package/modules/forge/skillsmith/rules/checklists-rules.md +42 -0
  113. package/modules/forge/skillsmith/rules/context-rules.md +43 -0
  114. package/modules/forge/skillsmith/rules/entry-point-rules.md +44 -0
  115. package/modules/forge/skillsmith/rules/frameworks-rules.md +43 -0
  116. package/modules/forge/skillsmith/rules/tasks-rules.md +52 -0
  117. package/modules/forge/skillsmith/rules/templates-rules.md +43 -0
  118. package/modules/forge/skillsmith/skillsmith.md +82 -0
  119. package/modules/forge/skillsmith/tasks/audit.md +277 -0
  120. package/modules/forge/skillsmith/tasks/discover.md +145 -0
  121. package/modules/forge/skillsmith/tasks/distill.md +276 -0
  122. package/modules/forge/skillsmith/tasks/scaffold.md +349 -0
  123. package/modules/forge/specs/checklists.md +193 -0
  124. package/modules/forge/specs/context.md +223 -0
  125. package/modules/forge/specs/entry-point.md +320 -0
  126. package/modules/forge/specs/frameworks.md +228 -0
  127. package/modules/forge/specs/rules.md +245 -0
  128. package/modules/forge/specs/tasks.md +344 -0
  129. package/modules/forge/specs/templates.md +335 -0
  130. package/modules/forge/terminal.svg +70 -0
  131. package/modules/ignition/README.md +245 -0
  132. package/modules/ignition/bin/install.js +184 -0
  133. package/modules/ignition/checklists/planning-quality.md +55 -0
  134. package/modules/ignition/data/application/config.md +21 -0
  135. package/modules/ignition/data/application/guide.md +51 -0
  136. package/modules/ignition/data/application/skill-loadout.md +11 -0
  137. package/modules/ignition/data/campaign/config.md +18 -0
  138. package/modules/ignition/data/campaign/guide.md +36 -0
  139. package/modules/ignition/data/campaign/skill-loadout.md +10 -0
  140. package/modules/ignition/data/client/config.md +18 -0
  141. package/modules/ignition/data/client/guide.md +36 -0
  142. package/modules/ignition/data/client/skill-loadout.md +11 -0
  143. package/modules/ignition/data/utility/config.md +18 -0
  144. package/modules/ignition/data/utility/guide.md +31 -0
  145. package/modules/ignition/data/utility/skill-loadout.md +8 -0
  146. package/modules/ignition/data/workflow/config.md +19 -0
  147. package/modules/ignition/data/workflow/guide.md +41 -0
  148. package/modules/ignition/data/workflow/skill-loadout.md +10 -0
  149. package/modules/ignition/integration.js +54 -0
  150. package/modules/ignition/package.json +35 -0
  151. package/modules/ignition/seed.md +81 -0
  152. package/modules/ignition/tasks/add-type.md +164 -0
  153. package/modules/ignition/tasks/graduate.md +182 -0
  154. package/modules/ignition/tasks/ideate.md +221 -0
  155. package/modules/ignition/tasks/launch.md +137 -0
  156. package/modules/ignition/tasks/status.md +71 -0
  157. package/modules/ignition/templates/planning-application.md +193 -0
  158. package/modules/ignition/templates/planning-campaign.md +138 -0
  159. package/modules/ignition/templates/planning-client.md +149 -0
  160. package/modules/ignition/templates/planning-utility.md +112 -0
  161. package/modules/ignition/templates/planning-workflow.md +125 -0
  162. package/modules/ignition/terminal.svg +74 -0
  163. package/modules/mission-control/CONTEXT-CONTINUITY-SPEC.md +293 -0
  164. package/modules/mission-control/CONTEXT-ENGINEERING-GUIDE.md +282 -0
  165. package/modules/mission-control/README.md +91 -0
  166. package/modules/mission-control/assets/terminal.svg +80 -0
  167. package/modules/mission-control/examples/entities.example.json +133 -0
  168. package/modules/mission-control/examples/projects.example.json +318 -0
  169. package/modules/mission-control/examples/state.example.json +183 -0
  170. package/modules/mission-control/examples/vector.example.json +245 -0
  171. package/modules/mission-control/mission-control/checklists/install-verification.md +46 -0
  172. package/modules/mission-control/mission-control/frameworks/framework-registry.md +83 -0
  173. package/modules/mission-control/mission-control/mission-control.md +83 -0
  174. package/modules/mission-control/mission-control/tasks/insights.md +73 -0
  175. package/modules/mission-control/mission-control/tasks/install.md +194 -0
  176. package/modules/mission-control/mission-control/tasks/status.md +125 -0
  177. package/modules/mission-control/schemas/entities.schema.json +89 -0
  178. package/modules/mission-control/schemas/projects.schema.json +221 -0
  179. package/modules/mission-control/schemas/state.schema.json +108 -0
  180. package/modules/mission-control/schemas/vector.schema.json +200 -0
  181. package/modules/momentum/README.md +678 -0
  182. package/modules/momentum/bin/install.js +563 -0
  183. package/modules/momentum/integration.js +131 -0
  184. package/modules/momentum/package.json +42 -0
  185. package/modules/momentum/schemas/entities.schema.json +89 -0
  186. package/modules/momentum/schemas/projects.schema.json +221 -0
  187. package/modules/momentum/schemas/state.schema.json +108 -0
  188. package/modules/momentum/src/commands/audit-claude-md.md +31 -0
  189. package/modules/momentum/src/commands/audit.md +33 -0
  190. package/modules/momentum/src/commands/groom.md +35 -0
  191. package/modules/momentum/src/commands/history.md +27 -0
  192. package/modules/momentum/src/commands/pulse.md +33 -0
  193. package/modules/momentum/src/commands/scaffold.md +33 -0
  194. package/modules/momentum/src/commands/status.md +28 -0
  195. package/modules/momentum/src/commands/surface-convert.md +35 -0
  196. package/modules/momentum/src/commands/surface-create.md +34 -0
  197. package/modules/momentum/src/commands/surface-list.md +27 -0
  198. package/modules/momentum/src/commands/vector-hygiene.md +33 -0
  199. package/modules/momentum/src/framework/context/momentum-principles.md +71 -0
  200. package/modules/momentum/src/framework/frameworks/audit-strategies.md +53 -0
  201. package/modules/momentum/src/framework/frameworks/satellite-registration.md +44 -0
  202. package/modules/momentum/src/framework/tasks/audit-claude-md.md +68 -0
  203. package/modules/momentum/src/framework/tasks/audit.md +64 -0
  204. package/modules/momentum/src/framework/tasks/groom.md +164 -0
  205. package/modules/momentum/src/framework/tasks/history.md +34 -0
  206. package/modules/momentum/src/framework/tasks/pulse.md +83 -0
  207. package/modules/momentum/src/framework/tasks/scaffold.md +202 -0
  208. package/modules/momentum/src/framework/tasks/status.md +35 -0
  209. package/modules/momentum/src/framework/tasks/surface-convert.md +143 -0
  210. package/modules/momentum/src/framework/tasks/surface-create.md +184 -0
  211. package/modules/momentum/src/framework/tasks/surface-list.md +42 -0
  212. package/modules/momentum/src/framework/tasks/vector-hygiene.md +160 -0
  213. package/modules/momentum/src/framework/templates/workspace-json.md +96 -0
  214. package/modules/momentum/src/hooks/_template.py +129 -0
  215. package/modules/momentum/src/hooks/active-hook.py +178 -0
  216. package/modules/momentum/src/hooks/backlog-hook.py +115 -0
  217. package/modules/momentum/src/hooks/mission-control-insights.py +169 -0
  218. package/modules/momentum/src/hooks/momentum-pulse-check.py +351 -0
  219. package/modules/momentum/src/hooks/operator.py +53 -0
  220. package/modules/momentum/src/hooks/psmm-injector.py +67 -0
  221. package/modules/momentum/src/hooks/satellite-detection.py +248 -0
  222. package/modules/momentum/src/packages/momentum-mcp/index.js +119 -0
  223. package/modules/momentum/src/packages/momentum-mcp/package.json +10 -0
  224. package/modules/momentum/src/packages/momentum-mcp/tools/entities.js +226 -0
  225. package/modules/momentum/src/packages/momentum-mcp/tools/operator.js +106 -0
  226. package/modules/momentum/src/packages/momentum-mcp/tools/projects.js +322 -0
  227. package/modules/momentum/src/packages/momentum-mcp/tools/psmm.js +206 -0
  228. package/modules/momentum/src/packages/momentum-mcp/tools/state.js +199 -0
  229. package/modules/momentum/src/packages/momentum-mcp/tools/surfaces.js +404 -0
  230. package/modules/momentum/src/skill/momentum.md +111 -0
  231. package/modules/momentum/src/tasks/groom.md +164 -0
  232. package/modules/momentum/src/templates/operator.json +66 -0
  233. package/modules/momentum/src/templates/workspace.json +111 -0
  234. package/modules/momentum/terminal.svg +77 -0
  235. package/modules/radar/README.md +1552 -0
  236. package/modules/radar/commands/audit.md +233 -0
  237. package/modules/radar/commands/guardrails.md +194 -0
  238. package/modules/radar/commands/init.md +207 -0
  239. package/modules/radar/commands/playbook.md +176 -0
  240. package/modules/radar/commands/remediate.md +156 -0
  241. package/modules/radar/commands/report.md +172 -0
  242. package/modules/radar/commands/resume.md +176 -0
  243. package/modules/radar/commands/status.md +148 -0
  244. package/modules/radar/commands/transform.md +205 -0
  245. package/modules/radar/commands/validate.md +177 -0
  246. package/modules/radar/docs/ARCHITECTURE.md +336 -0
  247. package/modules/radar/docs/GETTING-STARTED.md +287 -0
  248. package/modules/radar/docs/standards/agents.md +197 -0
  249. package/modules/radar/docs/standards/commands.md +250 -0
  250. package/modules/radar/docs/standards/domains.md +191 -0
  251. package/modules/radar/docs/standards/personas.md +211 -0
  252. package/modules/radar/docs/standards/rules.md +218 -0
  253. package/modules/radar/docs/standards/runtime.md +445 -0
  254. package/modules/radar/docs/standards/schemas.md +269 -0
  255. package/modules/radar/docs/standards/tools.md +273 -0
  256. package/modules/radar/docs/standards/workflows.md +254 -0
  257. package/modules/radar/docs/terminal.svg +72 -0
  258. package/modules/radar/docs/validation/convention-compliance-report.md +183 -0
  259. package/modules/radar/docs/validation/cross-reference-report.md +195 -0
  260. package/modules/radar/docs/validation/validation-summary.md +118 -0
  261. package/modules/radar/docs/validation/version-manifest.yaml +363 -0
  262. package/modules/radar/install.sh +711 -0
  263. package/modules/radar/integration.js +53 -0
  264. package/modules/radar/src/core/agents/architect.md +25 -0
  265. package/modules/radar/src/core/agents/compliance-officer.md +25 -0
  266. package/modules/radar/src/core/agents/data-engineer.md +25 -0
  267. package/modules/radar/src/core/agents/devils-advocate.md +22 -0
  268. package/modules/radar/src/core/agents/performance-engineer.md +25 -0
  269. package/modules/radar/src/core/agents/principal-engineer.md +23 -0
  270. package/modules/radar/src/core/agents/reality-gap-analyst.md +22 -0
  271. package/modules/radar/src/core/agents/security-engineer.md +25 -0
  272. package/modules/radar/src/core/agents/senior-app-engineer.md +25 -0
  273. package/modules/radar/src/core/agents/sre.md +25 -0
  274. package/modules/radar/src/core/agents/staff-engineer.md +23 -0
  275. package/modules/radar/src/core/agents/test-engineer.md +25 -0
  276. package/modules/radar/src/core/personas/architect.md +111 -0
  277. package/modules/radar/src/core/personas/compliance-officer.md +104 -0
  278. package/modules/radar/src/core/personas/data-engineer.md +113 -0
  279. package/modules/radar/src/core/personas/devils-advocate.md +105 -0
  280. package/modules/radar/src/core/personas/performance-engineer.md +119 -0
  281. package/modules/radar/src/core/personas/principal-engineer.md +119 -0
  282. package/modules/radar/src/core/personas/reality-gap-analyst.md +111 -0
  283. package/modules/radar/src/core/personas/security-engineer.md +108 -0
  284. package/modules/radar/src/core/personas/senior-app-engineer.md +111 -0
  285. package/modules/radar/src/core/personas/sre.md +117 -0
  286. package/modules/radar/src/core/personas/staff-engineer.md +109 -0
  287. package/modules/radar/src/core/personas/test-engineer.md +109 -0
  288. package/modules/radar/src/core/workflows/disagreement-resolution.md +183 -0
  289. package/modules/radar/src/core/workflows/phase-0-context.md +148 -0
  290. package/modules/radar/src/core/workflows/phase-1-reconnaissance.md +169 -0
  291. package/modules/radar/src/core/workflows/phase-2-domain-audits.md +190 -0
  292. package/modules/radar/src/core/workflows/phase-3-cross-domain.md +177 -0
  293. package/modules/radar/src/core/workflows/phase-4-adversarial-review.md +165 -0
  294. package/modules/radar/src/core/workflows/phase-5-report.md +189 -0
  295. package/modules/radar/src/core/workflows/phase-checkpoint.md +222 -0
  296. package/modules/radar/src/core/workflows/session-handoff.md +152 -0
  297. package/modules/radar/src/domains/00-context.md +201 -0
  298. package/modules/radar/src/domains/01-architecture.md +248 -0
  299. package/modules/radar/src/domains/02-data.md +224 -0
  300. package/modules/radar/src/domains/03-correctness.md +230 -0
  301. package/modules/radar/src/domains/04-security.md +274 -0
  302. package/modules/radar/src/domains/05-compliance.md +228 -0
  303. package/modules/radar/src/domains/06-testing.md +228 -0
  304. package/modules/radar/src/domains/07-reliability.md +246 -0
  305. package/modules/radar/src/domains/08-performance.md +247 -0
  306. package/modules/radar/src/domains/09-maintainability.md +271 -0
  307. package/modules/radar/src/domains/10-operability.md +250 -0
  308. package/modules/radar/src/domains/11-change-risk.md +246 -0
  309. package/modules/radar/src/domains/12-team-risk.md +221 -0
  310. package/modules/radar/src/domains/13-risk-synthesis.md +202 -0
  311. package/modules/radar/src/rules/agent-boundaries.md +78 -0
  312. package/modules/radar/src/rules/disagreement-protocol.md +76 -0
  313. package/modules/radar/src/rules/epistemic-hygiene.md +78 -0
  314. package/modules/radar/src/schemas/confidence.md +185 -0
  315. package/modules/radar/src/schemas/disagreement.md +238 -0
  316. package/modules/radar/src/schemas/finding.md +287 -0
  317. package/modules/radar/src/schemas/report-section.md +150 -0
  318. package/modules/radar/src/schemas/signal.md +108 -0
  319. package/modules/radar/src/tools/checkov.md +463 -0
  320. package/modules/radar/src/tools/git-history.md +581 -0
  321. package/modules/radar/src/tools/gitleaks.md +447 -0
  322. package/modules/radar/src/tools/grype.md +611 -0
  323. package/modules/radar/src/tools/semgrep.md +378 -0
  324. package/modules/radar/src/tools/sonarqube.md +550 -0
  325. package/modules/radar/src/tools/syft.md +539 -0
  326. package/modules/radar/src/tools/trivy.md +439 -0
  327. package/modules/radar/src/transform/agents/change-risk-modeler.md +24 -0
  328. package/modules/radar/src/transform/agents/execution-validator.md +24 -0
  329. package/modules/radar/src/transform/agents/guardrail-generator.md +24 -0
  330. package/modules/radar/src/transform/agents/pedagogy-agent.md +24 -0
  331. package/modules/radar/src/transform/agents/remediation-architect.md +24 -0
  332. package/modules/radar/src/transform/personas/change-risk-modeler.md +95 -0
  333. package/modules/radar/src/transform/personas/execution-validator.md +95 -0
  334. package/modules/radar/src/transform/personas/guardrail-generator.md +103 -0
  335. package/modules/radar/src/transform/personas/pedagogy-agent.md +105 -0
  336. package/modules/radar/src/transform/personas/remediation-architect.md +95 -0
  337. package/modules/radar/src/transform/rules/change-risk-rules.md +87 -0
  338. package/modules/radar/src/transform/rules/safety-governance.md +87 -0
  339. package/modules/radar/src/transform/schemas/change-risk.md +139 -0
  340. package/modules/radar/src/transform/schemas/intervention-level.md +207 -0
  341. package/modules/radar/src/transform/schemas/playbook.md +205 -0
  342. package/modules/radar/src/transform/schemas/verification-plan.md +134 -0
  343. package/modules/radar/src/transform/workflows/phase-6-remediation.md +148 -0
  344. package/modules/radar/src/transform/workflows/phase-7-risk-validation.md +161 -0
  345. package/modules/radar/src/transform/workflows/phase-8-execution-planning.md +159 -0
  346. package/modules/radar/src/transform/workflows/transform-safety.md +158 -0
  347. package/modules/vector/.vector-template/sessions/.gitkeep +0 -0
  348. package/modules/vector/.vector-template/vector.json +72 -0
  349. package/modules/vector/AUDIT-CLAUDEMD.md +154 -0
  350. package/modules/vector/INSTALL.md +185 -0
  351. package/modules/vector/LICENSE +21 -0
  352. package/modules/vector/README.md +409 -0
  353. package/modules/vector/VECTOR-BLOCK.md +57 -0
  354. package/modules/vector/assets/terminal.svg +68 -0
  355. package/modules/vector/bin/install.js +455 -0
  356. package/modules/vector/bin/migrate-v1-to-v2.sh +492 -0
  357. package/modules/vector/commands/help.md +46 -0
  358. package/modules/vector/hooks/vector-hook.py +775 -0
  359. package/modules/vector/mcp/index.js +118 -0
  360. package/modules/vector/mcp/package.json +10 -0
  361. package/modules/vector/mcp/tools/decisions.js +269 -0
  362. package/modules/vector/mcp/tools/domains.js +361 -0
  363. package/modules/vector/mcp/tools/staging.js +252 -0
  364. package/modules/vector/mcp/tools/vector-json.js +647 -0
  365. package/modules/vector/package.json +38 -0
  366. package/modules/vector/schemas/vector.schema.json +237 -0
  367. package/package.json +39 -0
  368. package/shared/branding/branding.js +70 -0
  369. package/shared/config/defaults.json +59 -0
  370. package/shared/events/README.md +175 -0
  371. package/shared/events/event-bus.js +134 -0
  372. package/shared/events/event_bus.py +255 -0
  373. package/shared/events/integrations.js +161 -0
  374. package/shared/events/schemas/audit-complete.schema.json +21 -0
  375. package/shared/events/schemas/phase-progress.schema.json +23 -0
  376. package/shared/events/schemas/plan-created.schema.json +21 -0
@@ -0,0 +1,711 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # ════════════════════════════════════════
5
+ # Radar Install Script
6
+ # ════════════════════════════════════════
7
+ #
8
+ # Two install modes:
9
+ # Remote: curl -sSL https://raw.githubusercontent.com/OWNER/radar/main/install.sh | bash
10
+ # Local: bash install.sh (from cloned repo)
11
+ #
12
+ # Installs Radar framework, commands, and OSS analysis tools.
13
+
14
+ # ── Configuration ─────────────────────
15
+
16
+ RADAR_REPO="accelerationguy/accelerate"
17
+ RADAR_BRANCH="main"
18
+ RADAR_HOME="$HOME/.accel/radar"
19
+ RADAR_COMMANDS="$HOME/.claude/commands/radar"
20
+ RADAR_VERSION="0.2.0"
21
+
22
+ # ── Color helpers ──────────────────────
23
+
24
+ GREEN='\033[0;32m'
25
+ YELLOW='\033[1;33m'
26
+ RED='\033[0;31m'
27
+ BOLD='\033[1m'
28
+ DIM='\033[2m'
29
+ NC='\033[0m'
30
+
31
+ info() { echo -e "${GREEN}✓${NC} $1"; }
32
+ warn() { echo -e "${YELLOW}⚠${NC} $1"; }
33
+ err() { echo -e "${RED}✗${NC} $1"; }
34
+ bold() { echo -e "${BOLD}$1${NC}"; }
35
+ dim() { echo -e "${DIM}$1${NC}"; }
36
+ header() {
37
+ echo ""
38
+ echo -e "${BOLD}════════════════════════════════════════${NC}"
39
+ echo -e "${BOLD} $1${NC}"
40
+ echo -e "${BOLD}════════════════════════════════════════${NC}"
41
+ echo ""
42
+ }
43
+
44
+ prompt_yn() {
45
+ local msg="$1"
46
+ local default="${2:-n}"
47
+ local reply
48
+ if [[ "$default" == "y" ]]; then
49
+ read -rp "$msg [Y/n]: " reply < /dev/tty
50
+ reply="${reply:-y}"
51
+ else
52
+ read -rp "$msg [y/N]: " reply < /dev/tty
53
+ reply="${reply:-n}"
54
+ fi
55
+ [[ "$reply" =~ ^[Yy]$ ]]
56
+ }
57
+
58
+ # Track tool install results
59
+ declare -a TOOLS_INSTALLED=()
60
+ declare -a TOOLS_SKIPPED=()
61
+ declare -a TOOLS_FAILED=()
62
+ SONARQUBE_MODE=""
63
+
64
+ # ── Detect install mode ───────────────
65
+
66
+ # RADAR_SOURCE will point to the directory containing src/ and commands/
67
+ RADAR_SOURCE=""
68
+ CLEANUP_DIR=""
69
+
70
+ detect_mode() {
71
+ # Check if running from a cloned repo (src/ and commands/ exist relative to script)
72
+ local script_dir
73
+ # When piped via curl|bash, BASH_SOURCE[0] is empty or "bash"
74
+ if [[ -n "${BASH_SOURCE[0]:-}" ]] && [[ "${BASH_SOURCE[0]}" != "bash" ]]; then
75
+ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
76
+ if [[ -d "$script_dir/src" ]] && [[ -d "$script_dir/commands" ]]; then
77
+ RADAR_SOURCE="$script_dir"
78
+ info "Local repo detected — installing from $script_dir"
79
+ return
80
+ fi
81
+ fi
82
+
83
+ # Remote mode — download from GitHub
84
+ echo "Downloading Radar v${RADAR_VERSION} from GitHub..."
85
+ echo ""
86
+
87
+ if ! command -v curl &>/dev/null; then
88
+ err "curl is required but not found."
89
+ exit 1
90
+ fi
91
+
92
+ local tmp_dir
93
+ tmp_dir="$(mktemp -d)"
94
+ CLEANUP_DIR="$tmp_dir"
95
+
96
+ local tarball_url="https://github.com/${RADAR_REPO}/archive/refs/heads/${RADAR_BRANCH}.tar.gz"
97
+
98
+ if ! curl -sSL "$tarball_url" | tar xz -C "$tmp_dir" 2>/dev/null; then
99
+ err "Failed to download Radar from GitHub."
100
+ echo " URL: $tarball_url"
101
+ echo ""
102
+ echo " Alternatives:"
103
+ echo " git clone https://github.com/${RADAR_REPO}.git && cd accelerate && bash modules/radar/install.sh"
104
+ rm -rf "$tmp_dir"
105
+ exit 1
106
+ fi
107
+
108
+ # tar extracts to {repo}-{branch}/ directory
109
+ local extracted_dir
110
+ extracted_dir="$(ls -d "$tmp_dir"/*/ 2>/dev/null | head -1)"
111
+
112
+ if [[ -z "$extracted_dir" ]] || [[ ! -d "$extracted_dir/src" ]]; then
113
+ err "Download succeeded but expected files not found."
114
+ rm -rf "$tmp_dir"
115
+ exit 1
116
+ fi
117
+
118
+ RADAR_SOURCE="$extracted_dir"
119
+ info "Downloaded Radar v${RADAR_VERSION}"
120
+ }
121
+
122
+ cleanup() {
123
+ if [[ -n "$CLEANUP_DIR" ]] && [[ -d "$CLEANUP_DIR" ]]; then
124
+ rm -rf "$CLEANUP_DIR"
125
+ fi
126
+ }
127
+ trap cleanup EXIT
128
+
129
+ # ── 1. Pre-flight checks ──────────────
130
+
131
+ header "Radar Installer v${RADAR_VERSION}"
132
+
133
+ echo "This script installs the Radar codebase auditing framework."
134
+ echo ""
135
+
136
+ # Check Claude Code directory
137
+ if [[ ! -d "$HOME/.claude" ]]; then
138
+ err "~/.claude/ directory not found."
139
+ echo " Claude Code must be installed first."
140
+ echo " Visit: https://claude.ai/code"
141
+ exit 1
142
+ fi
143
+ info "Claude Code directory found"
144
+
145
+ # Detect local vs remote and set RADAR_SOURCE
146
+ detect_mode
147
+
148
+ # Verify source has what we need
149
+ if [[ ! -d "$RADAR_SOURCE/src" ]] || [[ ! -d "$RADAR_SOURCE/commands" ]]; then
150
+ err "Radar source missing src/ or commands/ directory."
151
+ exit 1
152
+ fi
153
+ info "Radar source verified"
154
+
155
+ # Check for existing installation
156
+ SKIP_FRAMEWORK=false
157
+ SKIP_COMMANDS=false
158
+ if [[ -d "$RADAR_HOME" ]] || [[ -d "$RADAR_COMMANDS" ]]; then
159
+ echo ""
160
+ warn "Existing Radar installation detected."
161
+ [[ -d "$RADAR_HOME" ]] && dim " Framework: $RADAR_HOME"
162
+ [[ -d "$RADAR_COMMANDS" ]] && dim " Commands: $RADAR_COMMANDS"
163
+ echo ""
164
+ bold " What would you like to do?"
165
+ echo ""
166
+ echo " [1] Update everything (framework + commands + tool setup)"
167
+ echo " [2] Just run tool setup (skip framework/commands)"
168
+ echo " [3] Cancel"
169
+ echo ""
170
+ read -rp " Choose [1/2/3]: " reinstall_choice < /dev/tty
171
+ case "$reinstall_choice" in
172
+ 1)
173
+ echo ""
174
+ info "Updating framework and commands, then running tool setup."
175
+ ;;
176
+ 2)
177
+ SKIP_FRAMEWORK=true
178
+ SKIP_COMMANDS=true
179
+ echo ""
180
+ info "Skipping framework/commands — jumping to tool setup."
181
+ ;;
182
+ *)
183
+ echo "Installation cancelled."
184
+ exit 0
185
+ ;;
186
+ esac
187
+ echo ""
188
+ fi
189
+
190
+ # ── 2. Framework installation ─────────
191
+
192
+ if [[ "$SKIP_FRAMEWORK" == "false" ]]; then
193
+ header "Installing Framework"
194
+
195
+ mkdir -p "$RADAR_HOME"
196
+ cp -r "$RADAR_SOURCE/src/"* "$RADAR_HOME/"
197
+
198
+ FRAMEWORK_COUNT=$(find "$RADAR_HOME" -type f | wc -l | tr -d ' ')
199
+ info "Copied $FRAMEWORK_COUNT framework files to ~/.accel/radar/"
200
+ else
201
+ FRAMEWORK_COUNT=$(find "$RADAR_HOME" -type f 2>/dev/null | wc -l | tr -d ' ')
202
+ fi
203
+
204
+ # ── 3. Commands installation ──────────
205
+
206
+ if [[ "$SKIP_COMMANDS" == "false" ]]; then
207
+ header "Installing Commands"
208
+
209
+ mkdir -p "$RADAR_COMMANDS"
210
+ cp "$RADAR_SOURCE/commands/"*.md "$RADAR_COMMANDS/"
211
+
212
+ COMMAND_COUNT=$(find "$RADAR_COMMANDS" -name "*.md" -type f | wc -l | tr -d ' ')
213
+ info "Installed $COMMAND_COUNT slash commands to ~/.claude/commands/radar/"
214
+ dim " Commands available: /radar:audit, /radar:resume, /radar:status, /radar:report"
215
+ dim " Transform: /radar:transform, /radar:remediate, /radar:playbook, /radar:guardrails"
216
+ else
217
+ COMMAND_COUNT=$(find "$RADAR_COMMANDS" -name "*.md" -type f 2>/dev/null | wc -l | tr -d ' ')
218
+ fi
219
+
220
+ # ── 4. Tool installation (interactive) ─
221
+
222
+ header "Tool Installation"
223
+
224
+ echo "Radar uses 7 OSS analysis tools for comprehensive auditing."
225
+ echo "Each tool is optional — install what you need now, add more later."
226
+ echo ""
227
+ info "git-history uses built-in git commands — always available."
228
+ echo ""
229
+ echo "────────────────────────────────────────"
230
+ echo ""
231
+
232
+ # ── Helper: try install methods in order ──
233
+
234
+ try_install() {
235
+ local name="$1"
236
+ shift
237
+ local methods=("$@")
238
+
239
+ for method in "${methods[@]}"; do
240
+ local cmd="${method%%:*}"
241
+ local install_cmd="${method#*:}"
242
+
243
+ if command -v "$cmd" &>/dev/null; then
244
+ echo " Installing via $cmd..."
245
+ local output
246
+ if output=$(eval "$install_cmd" 2>&1); then
247
+ echo "$output" | tail -3
248
+ return 0
249
+ else
250
+ echo "$output" | tail -3
251
+ warn " $cmd install failed, trying next method..."
252
+ fi
253
+ fi
254
+ done
255
+
256
+ err " No suitable install method found for $name."
257
+ echo " Try: pipx, brew, or check the tool's documentation."
258
+ return 1
259
+ }
260
+
261
+ # ── SonarQube (special handling) ──
262
+
263
+ # Scanner CLI installer (shared by Docker and Cloud paths)
264
+ install_sonar_scanner() {
265
+ echo " Installing sonar-scanner CLI..."
266
+ if command -v npm &>/dev/null; then
267
+ if npm install -g sonar-scanner 2>&1 | tail -2; then
268
+ info "sonar-scanner installed via npm"
269
+ return 0
270
+ fi
271
+ fi
272
+ if command -v brew &>/dev/null; then
273
+ if brew install sonar-scanner 2>&1 | tail -2; then
274
+ info "sonar-scanner installed via brew"
275
+ return 0
276
+ fi
277
+ fi
278
+ err "Failed to install sonar-scanner CLI. Need npm or brew."
279
+ return 1
280
+ }
281
+
282
+ # Server choice — extracted so "changed mind" path can skip the disclaimer
283
+ sonarqube_server_choice() {
284
+ bold " SonarQube server options:"
285
+ echo ""
286
+ echo " [1] Docker (local)"
287
+ echo " Runs sonarqube:community on localhost:9000"
288
+ echo " Requires Docker installed and running"
289
+ echo " ~800MB image download"
290
+ echo " Server must be running during audits"
291
+ echo ""
292
+ echo " [2] SonarQube Cloud"
293
+ echo " Uses sonarcloud.io (free for public repos)"
294
+ echo " Requires account + authentication token"
295
+ echo " No local server needed"
296
+ echo " Token configuration guided after install"
297
+ echo ""
298
+
299
+ local choice
300
+ read -rp " Choose [1/2]: " choice < /dev/tty
301
+
302
+ case "$choice" in
303
+ 1)
304
+ SONARQUBE_MODE="docker"
305
+ echo ""
306
+ if ! command -v docker &>/dev/null; then
307
+ err "Docker not found. Install Docker first, then re-run install.sh."
308
+ TOOLS_FAILED+=("sonarqube")
309
+ return
310
+ fi
311
+ if ! docker info &>/dev/null 2>&1; then
312
+ err "Docker daemon not running. Start Docker, then re-run install.sh."
313
+ TOOLS_FAILED+=("sonarqube")
314
+ return
315
+ fi
316
+
317
+ echo " Pulling SonarQube Community image..."
318
+ if ! docker pull sonarqube:community; then
319
+ err "Failed to pull SonarQube image."
320
+ TOOLS_FAILED+=("sonarqube")
321
+ return
322
+ fi
323
+ info "SonarQube server image pulled"
324
+
325
+ if ! install_sonar_scanner; then
326
+ TOOLS_FAILED+=("sonarqube")
327
+ return
328
+ fi
329
+
330
+ echo ""
331
+ info "SonarQube (Docker local) installed"
332
+ dim " Start server: docker run -d --name sonarqube -p 9000:9000 sonarqube:community"
333
+ dim " Server must be running before Radar audit."
334
+ dim " Default credentials: admin / admin"
335
+ dim " Dashboard: http://localhost:9000"
336
+ TOOLS_INSTALLED+=("sonarqube")
337
+ ;;
338
+ 2)
339
+ SONARQUBE_MODE="cloud"
340
+ echo ""
341
+ if ! install_sonar_scanner; then
342
+ TOOLS_FAILED+=("sonarqube")
343
+ return
344
+ fi
345
+
346
+ echo ""
347
+ info "SonarQube (Cloud) — scanner CLI installed"
348
+ echo ""
349
+ bold " To configure SonarQube Cloud:"
350
+ echo " 1. Create account at https://sonarcloud.io"
351
+ echo " 2. Generate token at https://sonarcloud.io/account/security"
352
+ echo " 3. Set environment variable: export SONAR_TOKEN=your-token"
353
+ echo " 4. Create sonar-project.properties in your target project"
354
+ dim " Run /radar:validate after setup to verify connection."
355
+ TOOLS_INSTALLED+=("sonarqube")
356
+ ;;
357
+ *)
358
+ warn "Invalid choice. Skipping SonarQube."
359
+ TOOLS_SKIPPED+=("sonarqube")
360
+ ;;
361
+ esac
362
+ }
363
+
364
+ # Main SonarQube flow — disclaimer + install or skip-with-confirmation
365
+ install_sonarqube() {
366
+ # Detect existing SonarQube setup
367
+ local has_scanner=false
368
+ local has_server=false
369
+ # Check for scanner: native CLI or Docker scanner image
370
+ if command -v sonar-scanner &>/dev/null; then
371
+ has_scanner=true
372
+ elif docker image inspect sonarsource/sonar-scanner-cli &>/dev/null 2>&1; then
373
+ has_scanner=true
374
+ fi
375
+ # Check for SonarQube server: Docker container or reachable on localhost:9000
376
+ if docker ps 2>/dev/null | grep -q sonarqube; then
377
+ has_server=true
378
+ elif curl -sf http://localhost:9000/api/system/status &>/dev/null; then
379
+ has_server=true
380
+ fi
381
+
382
+ if [[ "$has_scanner" == "true" ]] && [[ "$has_server" == "true" ]]; then
383
+ info "SonarQube — already installed (scanner + server detected)"
384
+ TOOLS_INSTALLED+=("sonarqube")
385
+ return
386
+ elif [[ "$has_server" == "true" ]] && [[ "$has_scanner" == "false" ]]; then
387
+ echo ""
388
+ info "SonarQube server detected (Docker or localhost:9000)"
389
+ warn "Scanner CLI not found — needed to send code to the server."
390
+ echo ""
391
+ if prompt_yn " Install sonar-scanner CLI?"; then
392
+ echo ""
393
+ if install_sonar_scanner; then
394
+ info "SonarQube ready (server detected + scanner installed)"
395
+ TOOLS_INSTALLED+=("sonarqube")
396
+ else
397
+ TOOLS_FAILED+=("sonarqube")
398
+ fi
399
+ return
400
+ else
401
+ warn "SonarQube server found but scanner CLI missing. Install later or run /radar:validate."
402
+ TOOLS_SKIPPED+=("sonarqube")
403
+ return
404
+ fi
405
+ elif [[ "$has_scanner" == "true" ]] && [[ "$has_server" == "false" ]]; then
406
+ echo ""
407
+ info "sonar-scanner CLI found, but no SonarQube server detected."
408
+ dim " If your server is on a different host/port, Radar can still use it."
409
+ dim " Configure in sonar-project.properties when you run /radar:init."
410
+ TOOLS_INSTALLED+=("sonarqube")
411
+ return
412
+ fi
413
+
414
+ echo -e "${BOLD}┌─────────────────────────────────────────────────────┐${NC}"
415
+ echo -e "${BOLD}│ SONARQUBE — Important Context │${NC}"
416
+ echo -e "${BOLD}│${NC} ${BOLD}│${NC}"
417
+ echo -e "${BOLD}│${NC} Unlike other Radar tools, SonarQube requires TWO ${BOLD}│${NC}"
418
+ echo -e "${BOLD}│${NC} components: ${BOLD}│${NC}"
419
+ echo -e "${BOLD}│${NC} ${BOLD}│${NC}"
420
+ echo -e "${BOLD}│${NC} 1. ${BOLD}Scanner CLI${NC} — analyzes your code ${BOLD}│${NC}"
421
+ echo -e "${BOLD}│${NC} 2. ${BOLD}Server${NC} — stores rules, runs analysis, serves ${BOLD}│${NC}"
422
+ echo -e "${BOLD}│${NC} results via API ${BOLD}│${NC}"
423
+ echo -e "${BOLD}│${NC} ${BOLD}│${NC}"
424
+ echo -e "${BOLD}│${NC} The scanner ${RED}CANNOT${NC} work without a server. ${BOLD}│${NC}"
425
+ echo -e "${BOLD}│${NC} Server options: Docker (local) or SonarQube Cloud. ${BOLD}│${NC}"
426
+ echo -e "${BOLD}│${NC} ${BOLD}│${NC}"
427
+ echo -e "${BOLD}│${NC} SonarQube uniquely provides: ${BOLD}│${NC}"
428
+ echo -e "${BOLD}│${NC} ${GREEN}•${NC} Code complexity metrics (cyclomatic, cognitive) ${BOLD}│${NC}"
429
+ echo -e "${BOLD}│${NC} ${GREEN}•${NC} Duplication detection ${BOLD}│${NC}"
430
+ echo -e "${BOLD}│${NC} ${GREEN}•${NC} Code smell classification ${BOLD}│${NC}"
431
+ echo -e "${BOLD}│${NC} ${GREEN}•${NC} Quality gate enforcement ${BOLD}│${NC}"
432
+ echo -e "${BOLD}│${NC} ${GREEN}•${NC} Technical debt estimation ${BOLD}│${NC}"
433
+ echo -e "${BOLD}│${NC} ${BOLD}│${NC}"
434
+ echo -e "${BOLD}│${NC} These are ${YELLOW}NOT covered${NC} by any other Radar tool. ${BOLD}│${NC}"
435
+ echo -e "${BOLD}│${NC} Semgrep covers security/correctness overlap, but ${BOLD}│${NC}"
436
+ echo -e "${BOLD}│${NC} NOT complexity, duplication, or debt metrics. ${BOLD}│${NC}"
437
+ echo -e "${BOLD}└─────────────────────────────────────────────────────┘${NC}"
438
+ echo ""
439
+
440
+ if prompt_yn "Install SonarQube?"; then
441
+ echo ""
442
+ sonarqube_server_choice
443
+ else
444
+ echo ""
445
+ echo -e " ${YELLOW}⚠ Skipping SonarQube means Radar loses:${NC}"
446
+ echo " • Code complexity analysis (cyclomatic, cognitive)"
447
+ echo " • Duplication detection across codebase"
448
+ echo " • Code smell classification and debt estimation"
449
+ echo " • Quality gate enforcement"
450
+ echo ""
451
+ echo " Domains 01 (Architecture), 03 (Correctness), 06 (Testing),"
452
+ echo " 09 (Maintainability) will have REDUCED signal coverage."
453
+ echo " Semgrep still covers security and pattern-based analysis."
454
+ echo ""
455
+ dim " You can install SonarQube later by re-running install.sh."
456
+ echo ""
457
+
458
+ if prompt_yn " Are you sure you want to skip SonarQube?"; then
459
+ TOOLS_SKIPPED+=("sonarqube")
460
+ dim " SonarQube skipped."
461
+ else
462
+ echo ""
463
+ echo " OK — let's set up SonarQube."
464
+ echo ""
465
+ sonarqube_server_choice
466
+ fi
467
+ fi
468
+ }
469
+
470
+ # ── Standard tool installer ──
471
+
472
+ install_tool() {
473
+ local name="$1"
474
+ local description="$2"
475
+ shift 2
476
+ local methods=("$@")
477
+
478
+ echo ""
479
+ bold " $name"
480
+ dim " $description"
481
+ echo ""
482
+
483
+ # Auto-skip if already installed
484
+ if command -v "$name" &>/dev/null; then
485
+ info "$name — already installed ($(command -v "$name"))"
486
+ TOOLS_INSTALLED+=("$name")
487
+ return
488
+ fi
489
+
490
+ if prompt_yn " Install $name?"; then
491
+ echo ""
492
+ if try_install "$name" "${methods[@]}"; then
493
+ info "$name installed"
494
+ TOOLS_INSTALLED+=("$name")
495
+ else
496
+ TOOLS_FAILED+=("$name")
497
+ fi
498
+ else
499
+ TOOLS_SKIPPED+=("$name")
500
+ dim " $name skipped."
501
+ fi
502
+ }
503
+
504
+ # ── Gitleaks installer (dynamic version + platform detection) ──
505
+
506
+ install_gitleaks() {
507
+ ensure_local_bin
508
+ local version
509
+ version=$(curl -sI "https://github.com/gitleaks/gitleaks/releases/latest" | grep -i "^location:" | grep -oP 'v\K[0-9.]+')
510
+ if [[ -z "$version" ]]; then
511
+ err "Could not detect latest gitleaks version."
512
+ return 1
513
+ fi
514
+ local os="linux"
515
+ local arch="x64"
516
+ if [[ "$(uname -s)" == "Darwin" ]]; then os="darwin"; fi
517
+ if [[ "$(uname -m)" == "arm64" ]] || [[ "$(uname -m)" == "aarch64" ]]; then arch="arm64"; fi
518
+
519
+ local url="https://github.com/gitleaks/gitleaks/releases/download/v${version}/gitleaks_${version}_${os}_${arch}.tar.gz"
520
+ echo " Downloading gitleaks v${version}..."
521
+ if curl -sSfL "$url" -o /tmp/gitleaks.tar.gz && tar xzf /tmp/gitleaks.tar.gz -C "$LOCAL_BIN" gitleaks; then
522
+ rm -f /tmp/gitleaks.tar.gz
523
+ return 0
524
+ fi
525
+ rm -f /tmp/gitleaks.tar.gz
526
+ return 1
527
+ }
528
+
529
+ # ── Run tool installations ──
530
+
531
+ install_sonarqube
532
+
533
+ echo ""
534
+ echo "────────────────────────────────────────"
535
+
536
+ # ── Helper: install Python CLI tool via venv ──
537
+ # Creates ~/.local/share/radar/venvs/{tool}/ with isolated Python env
538
+ # Symlinks the binary to ~/.local/bin/{tool}
539
+ # Works on any system with python3 — no pip, pipx, or special flags needed
540
+
541
+ RADAR_VENVS="$HOME/.local/share/radar/venvs"
542
+ LOCAL_BIN="$HOME/.local/bin"
543
+
544
+ ensure_local_bin() {
545
+ mkdir -p "$LOCAL_BIN"
546
+ if [[ ":$PATH:" != *":$LOCAL_BIN:"* ]]; then
547
+ export PATH="$LOCAL_BIN:$PATH"
548
+ fi
549
+ }
550
+
551
+ install_python_tool() {
552
+ local tool="$1"
553
+ ensure_local_bin
554
+ mkdir -p "$RADAR_VENVS"
555
+
556
+ echo " Creating isolated Python environment..."
557
+ if ! python3 -m venv "$RADAR_VENVS/$tool" 2>&1; then
558
+ err "Failed to create venv. Is python3-venv installed?"
559
+ echo " Try: sudo apt install python3-venv"
560
+ return 1
561
+ fi
562
+
563
+ echo " Installing $tool (this may take a moment)..."
564
+ if "$RADAR_VENVS/$tool/bin/pip" install "$tool" 2>&1 | tail -3; then
565
+ # Symlink the binary to ~/.local/bin
566
+ ln -sf "$RADAR_VENVS/$tool/bin/$tool" "$LOCAL_BIN/$tool"
567
+ if command -v "$tool" &>/dev/null; then
568
+ return 0
569
+ fi
570
+ fi
571
+
572
+ err "Failed to install $tool in venv."
573
+ rm -rf "$RADAR_VENVS/$tool"
574
+ return 1
575
+ }
576
+
577
+ install_tool "semgrep" \
578
+ "Static analysis — security, correctness, code quality patterns (6 domains)" \
579
+ "python3:install_python_tool semgrep" \
580
+ "brew:brew install semgrep"
581
+
582
+ echo ""
583
+ echo "────────────────────────────────────────"
584
+
585
+ install_tool "trivy" \
586
+ "Vulnerability scanner — OS packages, dependencies, containers, IaC (2 domains)" \
587
+ "curl:ensure_local_bin && curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b $LOCAL_BIN" \
588
+ "brew:brew install trivy"
589
+
590
+ echo ""
591
+ echo "────────────────────────────────────────"
592
+
593
+ install_tool "gitleaks" \
594
+ "Secrets detection — API keys, tokens, passwords in code and history (2 domains)" \
595
+ "curl:install_gitleaks" \
596
+ "brew:brew install gitleaks" \
597
+ "go:go install github.com/gitleaks/gitleaks/v8@latest"
598
+
599
+ echo ""
600
+ echo "────────────────────────────────────────"
601
+
602
+ install_tool "checkov" \
603
+ "Infrastructure-as-Code scanner — Terraform, CloudFormation, K8s (2 domains)" \
604
+ "python3:install_python_tool checkov" \
605
+ "brew:brew install checkov"
606
+
607
+ echo ""
608
+ echo "────────────────────────────────────────"
609
+
610
+ install_tool "syft" \
611
+ "SBOM generator — software bill of materials for dependency inventory (2 domains)" \
612
+ "curl:ensure_local_bin && curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b $LOCAL_BIN" \
613
+ "brew:brew install syft"
614
+
615
+ echo ""
616
+ echo "────────────────────────────────────────"
617
+
618
+ install_tool "grype" \
619
+ "Vulnerability scanner — CVE matching against SBOM inventory (2 domains)" \
620
+ "curl:ensure_local_bin && curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b $LOCAL_BIN" \
621
+ "brew:brew install grype"
622
+
623
+ # ── 5. Post-install verification ──────
624
+
625
+ header "Verification"
626
+
627
+ declare -a VERIFY_PASS=()
628
+ declare -a VERIFY_FAIL=()
629
+
630
+ verify_tool() {
631
+ local name="$1"
632
+ local cmd="$2"
633
+
634
+ if eval "$cmd" &>/dev/null 2>&1; then
635
+ info "$name — verified"
636
+ VERIFY_PASS+=("$name")
637
+ else
638
+ err "$name — verification failed"
639
+ VERIFY_FAIL+=("$name")
640
+ fi
641
+ }
642
+
643
+ # Always verify git
644
+ verify_tool "git-history" "git --version"
645
+
646
+ # Verify installed tools
647
+ for tool in "${TOOLS_INSTALLED[@]}"; do
648
+ case "$tool" in
649
+ sonarqube)
650
+ if command -v sonar-scanner &>/dev/null; then
651
+ verify_tool "sonar-scanner" "sonar-scanner --version"
652
+ elif docker image inspect sonarsource/sonar-scanner-cli &>/dev/null 2>&1; then
653
+ verify_tool "sonar-scanner" "docker image inspect sonarsource/sonar-scanner-cli"
654
+ else
655
+ verify_tool "sonar-scanner" "false"
656
+ fi
657
+ if [[ "$SONARQUBE_MODE" == "docker" ]]; then
658
+ verify_tool "sonarqube-server" "docker image inspect sonarqube:community"
659
+ fi
660
+ ;;
661
+ semgrep) verify_tool "semgrep" "semgrep --version" ;;
662
+ trivy) verify_tool "trivy" "trivy --version" ;;
663
+ gitleaks) verify_tool "gitleaks" "gitleaks version" ;;
664
+ checkov) verify_tool "checkov" "checkov --version" ;;
665
+ syft) verify_tool "syft" "syft version" ;;
666
+ grype) verify_tool "grype" "grype version" ;;
667
+ esac
668
+ done
669
+
670
+ # ── 6. Summary ────────────────────────
671
+
672
+ header "Radar Installation Complete"
673
+
674
+ echo -e " ${BOLD}Framework:${NC} ~/.accel/radar/ ($FRAMEWORK_COUNT files)"
675
+ echo -e " ${BOLD}Commands:${NC} ~/.claude/commands/radar/ ($COMMAND_COUNT commands)"
676
+ echo ""
677
+ echo -e " ${BOLD}Tools:${NC}"
678
+
679
+ # Show all tools with status
680
+ show_tool_status() {
681
+ local name="$1"
682
+ if printf '%s\n' "${TOOLS_INSTALLED[@]}" | grep -qx "$name" 2>/dev/null; then
683
+ echo -e " ${GREEN}✓${NC} $name (installed)"
684
+ elif printf '%s\n' "${TOOLS_FAILED[@]}" | grep -qx "$name" 2>/dev/null; then
685
+ echo -e " ${RED}✗${NC} $name (failed)"
686
+ elif printf '%s\n' "${TOOLS_SKIPPED[@]}" | grep -qx "$name" 2>/dev/null; then
687
+ echo -e " ${DIM}–${NC} $name (skipped)"
688
+ fi
689
+ }
690
+
691
+ show_tool_status "sonarqube"
692
+ show_tool_status "semgrep"
693
+ show_tool_status "trivy"
694
+ show_tool_status "gitleaks"
695
+ show_tool_status "checkov"
696
+ show_tool_status "syft"
697
+ show_tool_status "grype"
698
+ echo -e " ${GREEN}✓${NC} git-history (built-in)"
699
+
700
+ echo ""
701
+ echo " Installed: ${#TOOLS_INSTALLED[@]}/7 Skipped: ${#TOOLS_SKIPPED[@]}/7 Failed: ${#TOOLS_FAILED[@]}/7"
702
+
703
+ if [[ ${#VERIFY_FAIL[@]} -gt 0 ]]; then
704
+ echo ""
705
+ warn "Some verifications failed. Run /radar:validate for troubleshooting."
706
+ fi
707
+
708
+ echo ""
709
+ echo -e " ${BOLD}Next:${NC} Run /radar:init in your target project to start auditing."
710
+ echo ""
711
+ echo "════════════════════════════════════════"