@dragonflymcp/plugin 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 (666) hide show
  1. package/.claude-plugin/plugin.json +26 -0
  2. package/LICENSE +21 -0
  3. package/README.md +126 -0
  4. package/dist/core/annotations.d.ts +71 -0
  5. package/dist/core/annotations.d.ts.map +1 -0
  6. package/dist/core/annotations.js +61 -0
  7. package/dist/core/annotations.js.map +1 -0
  8. package/dist/core/config.d.ts +66 -0
  9. package/dist/core/config.d.ts.map +1 -0
  10. package/dist/core/config.js +131 -0
  11. package/dist/core/config.js.map +1 -0
  12. package/dist/core/dispatcher.d.ts +77 -0
  13. package/dist/core/dispatcher.d.ts.map +1 -0
  14. package/dist/core/dispatcher.js +132 -0
  15. package/dist/core/dispatcher.js.map +1 -0
  16. package/dist/core/server.d.ts +24 -0
  17. package/dist/core/server.d.ts.map +1 -0
  18. package/dist/core/server.js +41 -0
  19. package/dist/core/server.js.map +1 -0
  20. package/dist/core/store.d.ts +91 -0
  21. package/dist/core/store.d.ts.map +1 -0
  22. package/dist/core/store.js +157 -0
  23. package/dist/core/store.js.map +1 -0
  24. package/dist/core/types.d.ts +128 -0
  25. package/dist/core/types.d.ts.map +1 -0
  26. package/dist/core/types.js +5 -0
  27. package/dist/core/types.js.map +1 -0
  28. package/dist/index.d.ts +22 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +81 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/test-utils/store-harness.d.ts +41 -0
  33. package/dist/test-utils/store-harness.d.ts.map +1 -0
  34. package/dist/test-utils/store-harness.js +61 -0
  35. package/dist/test-utils/store-harness.js.map +1 -0
  36. package/dist/tools/analytics/aggregators.d.ts +18 -0
  37. package/dist/tools/analytics/aggregators.d.ts.map +1 -0
  38. package/dist/tools/analytics/aggregators.js +260 -0
  39. package/dist/tools/analytics/aggregators.js.map +1 -0
  40. package/dist/tools/analytics/aggregators.test.d.ts +2 -0
  41. package/dist/tools/analytics/aggregators.test.d.ts.map +1 -0
  42. package/dist/tools/analytics/aggregators.test.js +177 -0
  43. package/dist/tools/analytics/aggregators.test.js.map +1 -0
  44. package/dist/tools/analytics/drift.d.ts +15 -0
  45. package/dist/tools/analytics/drift.d.ts.map +1 -0
  46. package/dist/tools/analytics/drift.js +135 -0
  47. package/dist/tools/analytics/drift.js.map +1 -0
  48. package/dist/tools/analytics/drift.test.d.ts +2 -0
  49. package/dist/tools/analytics/drift.test.d.ts.map +1 -0
  50. package/dist/tools/analytics/drift.test.js +99 -0
  51. package/dist/tools/analytics/drift.test.js.map +1 -0
  52. package/dist/tools/analytics/index.d.ts +10 -0
  53. package/dist/tools/analytics/index.d.ts.map +1 -0
  54. package/dist/tools/analytics/index.js +192 -0
  55. package/dist/tools/analytics/index.js.map +1 -0
  56. package/dist/tools/analytics/learner.d.ts +29 -0
  57. package/dist/tools/analytics/learner.d.ts.map +1 -0
  58. package/dist/tools/analytics/learner.js +135 -0
  59. package/dist/tools/analytics/learner.js.map +1 -0
  60. package/dist/tools/analytics/learner.test.d.ts +2 -0
  61. package/dist/tools/analytics/learner.test.d.ts.map +1 -0
  62. package/dist/tools/analytics/learner.test.js +118 -0
  63. package/dist/tools/analytics/learner.test.js.map +1 -0
  64. package/dist/tools/analytics/observe.d.ts +22 -0
  65. package/dist/tools/analytics/observe.d.ts.map +1 -0
  66. package/dist/tools/analytics/observe.js +143 -0
  67. package/dist/tools/analytics/observe.js.map +1 -0
  68. package/dist/tools/analytics/observe.test.d.ts +2 -0
  69. package/dist/tools/analytics/observe.test.d.ts.map +1 -0
  70. package/dist/tools/analytics/observe.test.js +95 -0
  71. package/dist/tools/analytics/observe.test.js.map +1 -0
  72. package/dist/tools/analytics/store.d.ts +29 -0
  73. package/dist/tools/analytics/store.d.ts.map +1 -0
  74. package/dist/tools/analytics/store.js +192 -0
  75. package/dist/tools/analytics/store.js.map +1 -0
  76. package/dist/tools/analytics/types.d.ts +290 -0
  77. package/dist/tools/analytics/types.d.ts.map +1 -0
  78. package/dist/tools/analytics/types.js +7 -0
  79. package/dist/tools/analytics/types.js.map +1 -0
  80. package/dist/tools/ast/index.d.ts +8 -0
  81. package/dist/tools/ast/index.d.ts.map +1 -0
  82. package/dist/tools/ast/index.js +242 -0
  83. package/dist/tools/ast/index.js.map +1 -0
  84. package/dist/tools/ast/indexer.d.ts +41 -0
  85. package/dist/tools/ast/indexer.d.ts.map +1 -0
  86. package/dist/tools/ast/indexer.js +617 -0
  87. package/dist/tools/ast/indexer.js.map +1 -0
  88. package/dist/tools/ast/store.d.ts +87 -0
  89. package/dist/tools/ast/store.d.ts.map +1 -0
  90. package/dist/tools/ast/store.js +280 -0
  91. package/dist/tools/ast/store.js.map +1 -0
  92. package/dist/tools/ast/store.test.d.ts +6 -0
  93. package/dist/tools/ast/store.test.d.ts.map +1 -0
  94. package/dist/tools/ast/store.test.js +257 -0
  95. package/dist/tools/ast/store.test.js.map +1 -0
  96. package/dist/tools/bridge/bridge.d.ts +37 -0
  97. package/dist/tools/bridge/bridge.d.ts.map +1 -0
  98. package/dist/tools/bridge/bridge.js +82 -0
  99. package/dist/tools/bridge/bridge.js.map +1 -0
  100. package/dist/tools/bridge/bridge.test.d.ts +2 -0
  101. package/dist/tools/bridge/bridge.test.d.ts.map +1 -0
  102. package/dist/tools/bridge/bridge.test.js +119 -0
  103. package/dist/tools/bridge/bridge.test.js.map +1 -0
  104. package/dist/tools/bridge/index.d.ts +8 -0
  105. package/dist/tools/bridge/index.d.ts.map +1 -0
  106. package/dist/tools/bridge/index.js +153 -0
  107. package/dist/tools/bridge/index.js.map +1 -0
  108. package/dist/tools/bridge/store.d.ts +45 -0
  109. package/dist/tools/bridge/store.d.ts.map +1 -0
  110. package/dist/tools/bridge/store.js +307 -0
  111. package/dist/tools/bridge/store.js.map +1 -0
  112. package/dist/tools/bridge/store.test.d.ts +2 -0
  113. package/dist/tools/bridge/store.test.d.ts.map +1 -0
  114. package/dist/tools/bridge/store.test.js +180 -0
  115. package/dist/tools/bridge/store.test.js.map +1 -0
  116. package/dist/tools/bridge/types.d.ts +44 -0
  117. package/dist/tools/bridge/types.d.ts.map +1 -0
  118. package/dist/tools/bridge/types.js +6 -0
  119. package/dist/tools/bridge/types.js.map +1 -0
  120. package/dist/tools/evolve/algorithm.d.ts +33 -0
  121. package/dist/tools/evolve/algorithm.d.ts.map +1 -0
  122. package/dist/tools/evolve/algorithm.js +64 -0
  123. package/dist/tools/evolve/algorithm.js.map +1 -0
  124. package/dist/tools/evolve/algorithm.test.d.ts +6 -0
  125. package/dist/tools/evolve/algorithm.test.d.ts.map +1 -0
  126. package/dist/tools/evolve/algorithm.test.js +138 -0
  127. package/dist/tools/evolve/algorithm.test.js.map +1 -0
  128. package/dist/tools/evolve/index.d.ts +11 -0
  129. package/dist/tools/evolve/index.d.ts.map +1 -0
  130. package/dist/tools/evolve/index.js +300 -0
  131. package/dist/tools/evolve/index.js.map +1 -0
  132. package/dist/tools/evolve/store.d.ts +27 -0
  133. package/dist/tools/evolve/store.d.ts.map +1 -0
  134. package/dist/tools/evolve/store.js +147 -0
  135. package/dist/tools/evolve/store.js.map +1 -0
  136. package/dist/tools/evolve/store.test.d.ts +6 -0
  137. package/dist/tools/evolve/store.test.d.ts.map +1 -0
  138. package/dist/tools/evolve/store.test.js +162 -0
  139. package/dist/tools/evolve/store.test.js.map +1 -0
  140. package/dist/tools/evolve/types.d.ts +38 -0
  141. package/dist/tools/evolve/types.d.ts.map +1 -0
  142. package/dist/tools/evolve/types.js +6 -0
  143. package/dist/tools/evolve/types.js.map +1 -0
  144. package/dist/tools/framework/content-loader.d.ts +45 -0
  145. package/dist/tools/framework/content-loader.d.ts.map +1 -0
  146. package/dist/tools/framework/content-loader.js +258 -0
  147. package/dist/tools/framework/content-loader.js.map +1 -0
  148. package/dist/tools/framework/content-loader.test.d.ts +5 -0
  149. package/dist/tools/framework/content-loader.test.d.ts.map +1 -0
  150. package/dist/tools/framework/content-loader.test.js +262 -0
  151. package/dist/tools/framework/content-loader.test.js.map +1 -0
  152. package/dist/tools/framework/index.d.ts +30 -0
  153. package/dist/tools/framework/index.d.ts.map +1 -0
  154. package/dist/tools/framework/index.js +517 -0
  155. package/dist/tools/framework/index.js.map +1 -0
  156. package/dist/tools/framework/session.d.ts +85 -0
  157. package/dist/tools/framework/session.d.ts.map +1 -0
  158. package/dist/tools/framework/session.js +311 -0
  159. package/dist/tools/framework/session.js.map +1 -0
  160. package/dist/tools/framework/session.test.d.ts +5 -0
  161. package/dist/tools/framework/session.test.d.ts.map +1 -0
  162. package/dist/tools/framework/session.test.js +291 -0
  163. package/dist/tools/framework/session.test.js.map +1 -0
  164. package/dist/tools/framework/sync-evaluator.d.ts +41 -0
  165. package/dist/tools/framework/sync-evaluator.d.ts.map +1 -0
  166. package/dist/tools/framework/sync-evaluator.js +298 -0
  167. package/dist/tools/framework/sync-evaluator.js.map +1 -0
  168. package/dist/tools/framework/sync-evaluator.test.d.ts +5 -0
  169. package/dist/tools/framework/sync-evaluator.test.d.ts.map +1 -0
  170. package/dist/tools/framework/sync-evaluator.test.js +288 -0
  171. package/dist/tools/framework/sync-evaluator.test.js.map +1 -0
  172. package/dist/tools/framework/types.d.ts +279 -0
  173. package/dist/tools/framework/types.d.ts.map +1 -0
  174. package/dist/tools/framework/types.js +6 -0
  175. package/dist/tools/framework/types.js.map +1 -0
  176. package/dist/tools/framework/workflow-intelligence.d.ts +55 -0
  177. package/dist/tools/framework/workflow-intelligence.d.ts.map +1 -0
  178. package/dist/tools/framework/workflow-intelligence.js +199 -0
  179. package/dist/tools/framework/workflow-intelligence.js.map +1 -0
  180. package/dist/tools/framework/workflow-intelligence.test.d.ts +6 -0
  181. package/dist/tools/framework/workflow-intelligence.test.d.ts.map +1 -0
  182. package/dist/tools/framework/workflow-intelligence.test.js +257 -0
  183. package/dist/tools/framework/workflow-intelligence.test.js.map +1 -0
  184. package/dist/tools/framework/workflow-planner.d.ts +10 -0
  185. package/dist/tools/framework/workflow-planner.d.ts.map +1 -0
  186. package/dist/tools/framework/workflow-planner.js +214 -0
  187. package/dist/tools/framework/workflow-planner.js.map +1 -0
  188. package/dist/tools/framework/workflow-planner.test.d.ts +5 -0
  189. package/dist/tools/framework/workflow-planner.test.d.ts.map +1 -0
  190. package/dist/tools/framework/workflow-planner.test.js +137 -0
  191. package/dist/tools/framework/workflow-planner.test.js.map +1 -0
  192. package/dist/tools/knowledge/bridge.d.ts +34 -0
  193. package/dist/tools/knowledge/bridge.d.ts.map +1 -0
  194. package/dist/tools/knowledge/bridge.js +249 -0
  195. package/dist/tools/knowledge/bridge.js.map +1 -0
  196. package/dist/tools/knowledge/bridge.test.d.ts +5 -0
  197. package/dist/tools/knowledge/bridge.test.d.ts.map +1 -0
  198. package/dist/tools/knowledge/bridge.test.js +221 -0
  199. package/dist/tools/knowledge/bridge.test.js.map +1 -0
  200. package/dist/tools/knowledge/extractor.d.ts +22 -0
  201. package/dist/tools/knowledge/extractor.d.ts.map +1 -0
  202. package/dist/tools/knowledge/extractor.js +154 -0
  203. package/dist/tools/knowledge/extractor.js.map +1 -0
  204. package/dist/tools/knowledge/index.d.ts +12 -0
  205. package/dist/tools/knowledge/index.d.ts.map +1 -0
  206. package/dist/tools/knowledge/index.js +505 -0
  207. package/dist/tools/knowledge/index.js.map +1 -0
  208. package/dist/tools/knowledge/retrieval.d.ts +28 -0
  209. package/dist/tools/knowledge/retrieval.d.ts.map +1 -0
  210. package/dist/tools/knowledge/retrieval.js +164 -0
  211. package/dist/tools/knowledge/retrieval.js.map +1 -0
  212. package/dist/tools/knowledge/store.d.ts +96 -0
  213. package/dist/tools/knowledge/store.d.ts.map +1 -0
  214. package/dist/tools/knowledge/store.js +562 -0
  215. package/dist/tools/knowledge/store.js.map +1 -0
  216. package/dist/tools/knowledge/store.test.d.ts +6 -0
  217. package/dist/tools/knowledge/store.test.d.ts.map +1 -0
  218. package/dist/tools/knowledge/store.test.js +385 -0
  219. package/dist/tools/knowledge/store.test.js.map +1 -0
  220. package/dist/tools/knowledge/types.d.ts +168 -0
  221. package/dist/tools/knowledge/types.d.ts.map +1 -0
  222. package/dist/tools/knowledge/types.js +6 -0
  223. package/dist/tools/knowledge/types.js.map +1 -0
  224. package/dist/tools/memory/evolution.d.ts +31 -0
  225. package/dist/tools/memory/evolution.d.ts.map +1 -0
  226. package/dist/tools/memory/evolution.js +130 -0
  227. package/dist/tools/memory/evolution.js.map +1 -0
  228. package/dist/tools/memory/index.d.ts +11 -0
  229. package/dist/tools/memory/index.d.ts.map +1 -0
  230. package/dist/tools/memory/index.js +239 -0
  231. package/dist/tools/memory/index.js.map +1 -0
  232. package/dist/tools/memory/store.d.ts +75 -0
  233. package/dist/tools/memory/store.d.ts.map +1 -0
  234. package/dist/tools/memory/store.js +398 -0
  235. package/dist/tools/memory/store.js.map +1 -0
  236. package/dist/tools/memory/store.test.d.ts +6 -0
  237. package/dist/tools/memory/store.test.d.ts.map +1 -0
  238. package/dist/tools/memory/store.test.js +429 -0
  239. package/dist/tools/memory/store.test.js.map +1 -0
  240. package/dist/tools/memory/types.d.ts +171 -0
  241. package/dist/tools/memory/types.d.ts.map +1 -0
  242. package/dist/tools/memory/types.js +6 -0
  243. package/dist/tools/memory/types.js.map +1 -0
  244. package/dist/tools/pipeline/composer.d.ts +29 -0
  245. package/dist/tools/pipeline/composer.d.ts.map +1 -0
  246. package/dist/tools/pipeline/composer.js +225 -0
  247. package/dist/tools/pipeline/composer.js.map +1 -0
  248. package/dist/tools/pipeline/composer.test.d.ts +2 -0
  249. package/dist/tools/pipeline/composer.test.d.ts.map +1 -0
  250. package/dist/tools/pipeline/composer.test.js +162 -0
  251. package/dist/tools/pipeline/composer.test.js.map +1 -0
  252. package/dist/tools/pipeline/index.d.ts +8 -0
  253. package/dist/tools/pipeline/index.d.ts.map +1 -0
  254. package/dist/tools/pipeline/index.js +102 -0
  255. package/dist/tools/pipeline/index.js.map +1 -0
  256. package/dist/tools/pipeline/planner.d.ts +10 -0
  257. package/dist/tools/pipeline/planner.d.ts.map +1 -0
  258. package/dist/tools/pipeline/planner.js +147 -0
  259. package/dist/tools/pipeline/planner.js.map +1 -0
  260. package/dist/tools/pipeline/planner.test.d.ts +2 -0
  261. package/dist/tools/pipeline/planner.test.d.ts.map +1 -0
  262. package/dist/tools/pipeline/planner.test.js +96 -0
  263. package/dist/tools/pipeline/planner.test.js.map +1 -0
  264. package/dist/tools/pipeline/preconditions.d.ts +14 -0
  265. package/dist/tools/pipeline/preconditions.d.ts.map +1 -0
  266. package/dist/tools/pipeline/preconditions.js +65 -0
  267. package/dist/tools/pipeline/preconditions.js.map +1 -0
  268. package/dist/tools/pipeline/preconditions.test.d.ts +2 -0
  269. package/dist/tools/pipeline/preconditions.test.d.ts.map +1 -0
  270. package/dist/tools/pipeline/preconditions.test.js +74 -0
  271. package/dist/tools/pipeline/preconditions.test.js.map +1 -0
  272. package/dist/tools/pipeline/types.d.ts +105 -0
  273. package/dist/tools/pipeline/types.d.ts.map +1 -0
  274. package/dist/tools/pipeline/types.js +6 -0
  275. package/dist/tools/pipeline/types.js.map +1 -0
  276. package/dist/tools/repair/index.d.ts +8 -0
  277. package/dist/tools/repair/index.d.ts.map +1 -0
  278. package/dist/tools/repair/index.js +384 -0
  279. package/dist/tools/repair/index.js.map +1 -0
  280. package/dist/tools/repair/repairer.d.ts +67 -0
  281. package/dist/tools/repair/repairer.d.ts.map +1 -0
  282. package/dist/tools/repair/repairer.js +257 -0
  283. package/dist/tools/repair/repairer.js.map +1 -0
  284. package/dist/tools/repair/repairer.test.d.ts +6 -0
  285. package/dist/tools/repair/repairer.test.d.ts.map +1 -0
  286. package/dist/tools/repair/repairer.test.js +159 -0
  287. package/dist/tools/repair/repairer.test.js.map +1 -0
  288. package/dist/tools/semantic/chunker.d.ts +23 -0
  289. package/dist/tools/semantic/chunker.d.ts.map +1 -0
  290. package/dist/tools/semantic/chunker.js +244 -0
  291. package/dist/tools/semantic/chunker.js.map +1 -0
  292. package/dist/tools/semantic/embedder.d.ts +16 -0
  293. package/dist/tools/semantic/embedder.d.ts.map +1 -0
  294. package/dist/tools/semantic/embedder.js +88 -0
  295. package/dist/tools/semantic/embedder.js.map +1 -0
  296. package/dist/tools/semantic/index.d.ts +8 -0
  297. package/dist/tools/semantic/index.d.ts.map +1 -0
  298. package/dist/tools/semantic/index.js +144 -0
  299. package/dist/tools/semantic/index.js.map +1 -0
  300. package/dist/tools/semantic/store.d.ts +31 -0
  301. package/dist/tools/semantic/store.d.ts.map +1 -0
  302. package/dist/tools/semantic/store.js +168 -0
  303. package/dist/tools/semantic/store.js.map +1 -0
  304. package/dist/tools/semantic/store.test.d.ts +6 -0
  305. package/dist/tools/semantic/store.test.d.ts.map +1 -0
  306. package/dist/tools/semantic/store.test.js +240 -0
  307. package/dist/tools/semantic/store.test.js.map +1 -0
  308. package/dist/tools/spec/generator.d.ts +32 -0
  309. package/dist/tools/spec/generator.d.ts.map +1 -0
  310. package/dist/tools/spec/generator.js +278 -0
  311. package/dist/tools/spec/generator.js.map +1 -0
  312. package/dist/tools/spec/generator.test.d.ts +6 -0
  313. package/dist/tools/spec/generator.test.d.ts.map +1 -0
  314. package/dist/tools/spec/generator.test.js +208 -0
  315. package/dist/tools/spec/generator.test.js.map +1 -0
  316. package/dist/tools/spec/index.d.ts +11 -0
  317. package/dist/tools/spec/index.d.ts.map +1 -0
  318. package/dist/tools/spec/index.js +426 -0
  319. package/dist/tools/spec/index.js.map +1 -0
  320. package/dist/tools/spec/store.d.ts +24 -0
  321. package/dist/tools/spec/store.d.ts.map +1 -0
  322. package/dist/tools/spec/store.js +104 -0
  323. package/dist/tools/spec/store.js.map +1 -0
  324. package/dist/tools/spec/store.test.d.ts +6 -0
  325. package/dist/tools/spec/store.test.d.ts.map +1 -0
  326. package/dist/tools/spec/store.test.js +173 -0
  327. package/dist/tools/spec/store.test.js.map +1 -0
  328. package/dist/tools/spec/types.d.ts +61 -0
  329. package/dist/tools/spec/types.d.ts.map +1 -0
  330. package/dist/tools/spec/types.js +6 -0
  331. package/dist/tools/spec/types.js.map +1 -0
  332. package/dist/tools/state/index.d.ts +11 -0
  333. package/dist/tools/state/index.d.ts.map +1 -0
  334. package/dist/tools/state/index.js +386 -0
  335. package/dist/tools/state/index.js.map +1 -0
  336. package/dist/tools/state/migrate.d.ts +39 -0
  337. package/dist/tools/state/migrate.d.ts.map +1 -0
  338. package/dist/tools/state/migrate.js +242 -0
  339. package/dist/tools/state/migrate.js.map +1 -0
  340. package/dist/tools/state/migrate.test.d.ts +2 -0
  341. package/dist/tools/state/migrate.test.d.ts.map +1 -0
  342. package/dist/tools/state/migrate.test.js +265 -0
  343. package/dist/tools/state/migrate.test.js.map +1 -0
  344. package/dist/tools/state/store.d.ts +107 -0
  345. package/dist/tools/state/store.d.ts.map +1 -0
  346. package/dist/tools/state/store.js +365 -0
  347. package/dist/tools/state/store.js.map +1 -0
  348. package/dist/tools/state/store.test.d.ts +5 -0
  349. package/dist/tools/state/store.test.d.ts.map +1 -0
  350. package/dist/tools/state/store.test.js +293 -0
  351. package/dist/tools/state/store.test.js.map +1 -0
  352. package/dist/tools/state/types.d.ts +90 -0
  353. package/dist/tools/state/types.d.ts.map +1 -0
  354. package/dist/tools/state/types.js +6 -0
  355. package/dist/tools/state/types.js.map +1 -0
  356. package/dist/tools/testing/analyzer.d.ts +44 -0
  357. package/dist/tools/testing/analyzer.d.ts.map +1 -0
  358. package/dist/tools/testing/analyzer.js +280 -0
  359. package/dist/tools/testing/analyzer.js.map +1 -0
  360. package/dist/tools/testing/generator.d.ts +57 -0
  361. package/dist/tools/testing/generator.d.ts.map +1 -0
  362. package/dist/tools/testing/generator.js +478 -0
  363. package/dist/tools/testing/generator.js.map +1 -0
  364. package/dist/tools/testing/generator.test.d.ts +6 -0
  365. package/dist/tools/testing/generator.test.d.ts.map +1 -0
  366. package/dist/tools/testing/generator.test.js +285 -0
  367. package/dist/tools/testing/generator.test.js.map +1 -0
  368. package/dist/tools/testing/index.d.ts +8 -0
  369. package/dist/tools/testing/index.d.ts.map +1 -0
  370. package/dist/tools/testing/index.js +373 -0
  371. package/dist/tools/testing/index.js.map +1 -0
  372. package/dist/utils/embedder.d.ts +7 -0
  373. package/dist/utils/embedder.d.ts.map +1 -0
  374. package/dist/utils/embedder.js +13 -0
  375. package/dist/utils/embedder.js.map +1 -0
  376. package/dist/utils/execution.d.ts +68 -0
  377. package/dist/utils/execution.d.ts.map +1 -0
  378. package/dist/utils/execution.js +467 -0
  379. package/dist/utils/execution.js.map +1 -0
  380. package/dist/utils/graph.d.ts +26 -0
  381. package/dist/utils/graph.d.ts.map +1 -0
  382. package/dist/utils/graph.js +32 -0
  383. package/dist/utils/graph.js.map +1 -0
  384. package/dist/utils/guards.d.ts +32 -0
  385. package/dist/utils/guards.d.ts.map +1 -0
  386. package/dist/utils/guards.js +40 -0
  387. package/dist/utils/guards.js.map +1 -0
  388. package/dist/utils/ids.d.ts +5 -0
  389. package/dist/utils/ids.d.ts.map +1 -0
  390. package/dist/utils/ids.js +7 -0
  391. package/dist/utils/ids.js.map +1 -0
  392. package/dist/utils/languages.d.ts +34 -0
  393. package/dist/utils/languages.d.ts.map +1 -0
  394. package/dist/utils/languages.js +153 -0
  395. package/dist/utils/languages.js.map +1 -0
  396. package/dist/utils/lazy.d.ts +17 -0
  397. package/dist/utils/lazy.d.ts.map +1 -0
  398. package/dist/utils/lazy.js +35 -0
  399. package/dist/utils/lazy.js.map +1 -0
  400. package/dist/utils/project.d.ts +41 -0
  401. package/dist/utils/project.d.ts.map +1 -0
  402. package/dist/utils/project.js +82 -0
  403. package/dist/utils/project.js.map +1 -0
  404. package/dist/utils/responses.d.ts +27 -0
  405. package/dist/utils/responses.d.ts.map +1 -0
  406. package/dist/utils/responses.js +72 -0
  407. package/dist/utils/responses.js.map +1 -0
  408. package/dist/utils/vectors.d.ts +33 -0
  409. package/dist/utils/vectors.d.ts.map +1 -0
  410. package/dist/utils/vectors.js +80 -0
  411. package/dist/utils/vectors.js.map +1 -0
  412. package/dist/utils/vectors.test.d.ts +6 -0
  413. package/dist/utils/vectors.test.d.ts.map +1 -0
  414. package/dist/utils/vectors.test.js +96 -0
  415. package/dist/utils/vectors.test.js.map +1 -0
  416. package/package.json +69 -0
  417. package/scripts/init.js +142 -0
  418. package/templates/CLAUDE.md.template +96 -0
  419. package/templates/agents/architecture-concept.md +237 -0
  420. package/templates/agents/checkpoint-concept.md +218 -0
  421. package/templates/agents/code-analysis-concept.md +171 -0
  422. package/templates/agents/compete-control.md +44 -0
  423. package/templates/agents/compete-evaluator.md +87 -0
  424. package/templates/agents/compete-treatment.md +55 -0
  425. package/templates/agents/context-concept.md +254 -0
  426. package/templates/agents/debate-advocate.md +127 -0
  427. package/templates/agents/debate-critic.md +119 -0
  428. package/templates/agents/debate-synthesis.md +160 -0
  429. package/templates/agents/documentation-concept.md +294 -0
  430. package/templates/agents/implementation-concept.md +165 -0
  431. package/templates/agents/quality-concept.md +299 -0
  432. package/templates/agents/research-concept.md +169 -0
  433. package/templates/agents/security-concept.md +255 -0
  434. package/templates/agents/story-concept.md +207 -0
  435. package/templates/agents/verification-concept.md +456 -0
  436. package/templates/agents/version-concept.md +163 -0
  437. package/templates/anchors/directory.anchor.yaml.template +53 -0
  438. package/templates/anchors/rules.anchor.yaml.template +70 -0
  439. package/templates/anchors/safety.anchor.yaml.template +96 -0
  440. package/templates/claude-md-managed.template +105 -0
  441. package/templates/commands/cache.md.template +439 -0
  442. package/templates/commands/checkpoint.md.template +121 -0
  443. package/templates/commands/classify.md.template +138 -0
  444. package/templates/commands/compete.md.template +90 -0
  445. package/templates/commands/costs.md.template +111 -0
  446. package/templates/commands/estimate.md.template +196 -0
  447. package/templates/commands/explore.md.template +186 -0
  448. package/templates/commands/feature.md.template +216 -0
  449. package/templates/commands/forget.md.template +104 -0
  450. package/templates/commands/global-recall.md.template +250 -0
  451. package/templates/commands/global-remember.md.template +187 -0
  452. package/templates/commands/health.md.template +107 -0
  453. package/templates/commands/help.md.template +253 -0
  454. package/templates/commands/observe.md.template +211 -0
  455. package/templates/commands/pr-review.md.template +164 -0
  456. package/templates/commands/predict-cost.md.template +251 -0
  457. package/templates/commands/profile.md.template +142 -0
  458. package/templates/commands/reasoning.md.template +228 -0
  459. package/templates/commands/recall.md.template +197 -0
  460. package/templates/commands/remember.md.template +148 -0
  461. package/templates/commands/replay.md.template +449 -0
  462. package/templates/commands/restore.md.template +87 -0
  463. package/templates/commands/retrospective.md.template +47 -0
  464. package/templates/commands/slo.md.template +286 -0
  465. package/templates/commands/spec.md.template +164 -0
  466. package/templates/commands/status.md.template +53 -0
  467. package/templates/commands/sync.md.template +321 -0
  468. package/templates/commands/task.md.template +86 -0
  469. package/templates/commands/trace.md.template +86 -0
  470. package/templates/commands/visualize.md.template +216 -0
  471. package/templates/commands/workflow.md.template +375 -0
  472. package/templates/concepts/README.md +329 -0
  473. package/templates/concepts/architecture.md.template +74 -0
  474. package/templates/concepts/code-analysis.md.template +186 -0
  475. package/templates/concepts/context-compactor.md.template +393 -0
  476. package/templates/concepts/context.md.template +62 -0
  477. package/templates/concepts/documentation.md.template +452 -0
  478. package/templates/concepts/estimator.md.template +214 -0
  479. package/templates/concepts/exploration.md.template +257 -0
  480. package/templates/concepts/global-memory.md.template +222 -0
  481. package/templates/concepts/implementation.md.template +62 -0
  482. package/templates/concepts/pr-review.md.template +277 -0
  483. package/templates/concepts/project-profile.md.template +358 -0
  484. package/templates/concepts/quality.md.template +63 -0
  485. package/templates/concepts/react-fallback.md.template +286 -0
  486. package/templates/concepts/research.md.template +221 -0
  487. package/templates/concepts/retrospective.md.template +93 -0
  488. package/templates/concepts/security.md.template +442 -0
  489. package/templates/concepts/slo.md.template +274 -0
  490. package/templates/concepts/spec.md.template +71 -0
  491. package/templates/concepts/story.md.template +50 -0
  492. package/templates/concepts/tool-router.md.template +289 -0
  493. package/templates/concepts/verification-synthesizer.md.template +279 -0
  494. package/templates/concepts/version.md.template +61 -0
  495. package/templates/config.yaml.template +347 -0
  496. package/templates/examples/README.md +77 -0
  497. package/templates/examples/architecture/api-design.yaml.template +286 -0
  498. package/templates/examples/architecture/oauth-authentication.yaml.template +305 -0
  499. package/templates/health/status.yaml.template +120 -0
  500. package/templates/hooks/concept-complete.sh.template +45 -0
  501. package/templates/hooks/lib/common.sh.template +160 -0
  502. package/templates/hooks/post-commit.sh.template +37 -0
  503. package/templates/hooks/post-concept-action.template +39 -0
  504. package/templates/hooks/post-tool-structure-check.sh.template +138 -0
  505. package/templates/hooks/post-tool-use.sh.template +51 -0
  506. package/templates/hooks/pre-compact.sh.template +48 -0
  507. package/templates/hooks/pre-tool-grounding.template +148 -0
  508. package/templates/hooks/session-exit-checkpoint.sh.template +35 -0
  509. package/templates/hooks/session-start.sh.template +67 -0
  510. package/templates/hooks/statusline.sh.template +148 -0
  511. package/templates/hooks/stop.sh.template +45 -0
  512. package/templates/hooks/subagent-stop.sh.template +40 -0
  513. package/templates/hooks/sync-blocked.sh.template +45 -0
  514. package/templates/hooks/timeout.sh.template +48 -0
  515. package/templates/hooks/user-prompt-submit.sh.template +68 -0
  516. package/templates/koan/README.md +58 -0
  517. package/templates/memory/index.yaml.template +48 -0
  518. package/templates/memory/procedural/debugging.yaml.template +24 -0
  519. package/templates/memory/procedural/workflows.yaml.template +22 -0
  520. package/templates/memory/semantic/architecture.yaml.template +21 -0
  521. package/templates/memory/semantic/conventions.yaml.template +18 -0
  522. package/templates/memory/semantic/patterns.yaml.template +21 -0
  523. package/templates/memory/semantic/preferences.yaml.template +18 -0
  524. package/templates/prompts/architecture.yaml.template +349 -0
  525. package/templates/prompts/context.yaml.template +384 -0
  526. package/templates/prompts/implementation.yaml.template +365 -0
  527. package/templates/prompts/planning.yaml.template +303 -0
  528. package/templates/prompts/quality.yaml.template +345 -0
  529. package/templates/prompts/retrospective.yaml.template +231 -0
  530. package/templates/prompts/slo.yaml.template +360 -0
  531. package/templates/prompts/story.yaml.template +236 -0
  532. package/templates/prompts/tree-of-thoughts.yaml.template +299 -0
  533. package/templates/prompts/verification.yaml.template +286 -0
  534. package/templates/prompts/version.yaml.template +279 -0
  535. package/templates/schemas/agent-schema.json +98 -0
  536. package/templates/schemas/architecture.schema.json +69 -0
  537. package/templates/schemas/config-schema.json +165 -0
  538. package/templates/schemas/implementation.schema.json +75 -0
  539. package/templates/schemas/planning.schema.json +243 -0
  540. package/templates/schemas/provenance.schema.json +111 -0
  541. package/templates/schemas/retrospective.schema.json +174 -0
  542. package/templates/schemas/review.schema.json +284 -0
  543. package/templates/schemas/slo.schema.json +443 -0
  544. package/templates/schemas/story.schema.json +68 -0
  545. package/templates/schemas/sync-schema.json +196 -0
  546. package/templates/schemas/task.schema.json +127 -0
  547. package/templates/schemas/tree-of-thoughts.schema.json +175 -0
  548. package/templates/schemas/verification.schema.json +106 -0
  549. package/templates/settings.full.json.template +135 -0
  550. package/templates/settings.minimal.json.template +68 -0
  551. package/templates/settings.standard.json.template +135 -0
  552. package/templates/skills/acceptance-criteria-generation.md.template +330 -0
  553. package/templates/skills/accessibility-checking.md.template +341 -0
  554. package/templates/skills/api-design-patterns.md.template +395 -0
  555. package/templates/skills/batch-processing.md.template +605 -0
  556. package/templates/skills/branch-strategy.md.template +362 -0
  557. package/templates/skills/changelog-generation.md.template +403 -0
  558. package/templates/skills/code-coverage-analysis.md.template +362 -0
  559. package/templates/skills/code-style-enforcement.md.template +294 -0
  560. package/templates/skills/code-template-patterns.md.template +419 -0
  561. package/templates/skills/concept-development.md.template +159 -0
  562. package/templates/skills/context-prioritization.md.template +306 -0
  563. package/templates/skills/cost-optimization.md.template +482 -0
  564. package/templates/skills/cross-project-knowledge.md.template +316 -0
  565. package/templates/skills/dependency-impact-analysis.md.template +263 -0
  566. package/templates/skills/documentation-generation.md.template +409 -0
  567. package/templates/skills/effort-estimation.md.template +350 -0
  568. package/templates/skills/error-classification.md.template +709 -0
  569. package/templates/skills/error-messages.md.template +339 -0
  570. package/templates/skills/ide-diagnostics.md.template +480 -0
  571. package/templates/skills/incremental-loading.md.template +574 -0
  572. package/templates/skills/output-caching.md.template +524 -0
  573. package/templates/skills/performance-estimation.md.template +325 -0
  574. package/templates/skills/performance-testing-patterns.md.template +341 -0
  575. package/templates/skills/phase2-optimizations-summary.md.template +458 -0
  576. package/templates/skills/progressive-disclosure-pattern.md.template +190 -0
  577. package/templates/skills/project-structure.md.template +372 -0
  578. package/templates/skills/provenance-analysis.md.template +609 -0
  579. package/templates/skills/react-executor.md.template +366 -0
  580. package/templates/skills/refactoring-patterns.md.template +422 -0
  581. package/templates/skills/release-management.md.template +373 -0
  582. package/templates/skills/requirement-prioritization.md.template +357 -0
  583. package/templates/skills/schema-validation.md.template +321 -0
  584. package/templates/skills/security-design-patterns.md.template +692 -0
  585. package/templates/skills/security-vulnerability-scanning.md.template +663 -0
  586. package/templates/skills/semantic-memory.md.template +266 -0
  587. package/templates/skills/semantic-versioning.md.template +371 -0
  588. package/templates/skills/smart-retry.md.template +676 -0
  589. package/templates/skills/smart-summarization.md.template +358 -0
  590. package/templates/skills/story-decomposition.md.template +278 -0
  591. package/templates/skills/synchronization-patterns.md.template +303 -0
  592. package/templates/skills/test-generation-strategy.md.template +247 -0
  593. package/templates/skills/workflow-replay.md.template +478 -0
  594. package/templates/skills/wysiwid-principles.md.template +364 -0
  595. package/templates/skills-manifest.yaml.template +526 -0
  596. package/templates/stubs/agents/architecture-concept.md +20 -0
  597. package/templates/stubs/agents/checkpoint-concept.md +19 -0
  598. package/templates/stubs/agents/code-analysis-concept.md +36 -0
  599. package/templates/stubs/agents/context-concept.md +37 -0
  600. package/templates/stubs/agents/debate-advocate.md +12 -0
  601. package/templates/stubs/agents/debate-critic.md +12 -0
  602. package/templates/stubs/agents/debate-synthesis.md +12 -0
  603. package/templates/stubs/agents/documentation-concept.md +39 -0
  604. package/templates/stubs/agents/implementation-concept.md +41 -0
  605. package/templates/stubs/agents/quality-concept.md +41 -0
  606. package/templates/stubs/agents/research-concept.md +35 -0
  607. package/templates/stubs/agents/security-concept.md +40 -0
  608. package/templates/stubs/agents/spec-concept.md +35 -0
  609. package/templates/stubs/agents/story-concept.md +36 -0
  610. package/templates/stubs/agents/verification-concept.md +39 -0
  611. package/templates/stubs/agents/version-concept.md +37 -0
  612. package/templates/stubs/commands/cache.md.template +2 -0
  613. package/templates/stubs/commands/checkpoint.md.template +2 -0
  614. package/templates/stubs/commands/classify.md.template +2 -0
  615. package/templates/stubs/commands/compete.md.template +2 -0
  616. package/templates/stubs/commands/costs.md.template +2 -0
  617. package/templates/stubs/commands/estimate.md.template +2 -0
  618. package/templates/stubs/commands/explore.md.template +2 -0
  619. package/templates/stubs/commands/feature.md.template +2 -0
  620. package/templates/stubs/commands/forget.md.template +2 -0
  621. package/templates/stubs/commands/global-recall.md.template +2 -0
  622. package/templates/stubs/commands/global-remember.md.template +2 -0
  623. package/templates/stubs/commands/health.md.template +2 -0
  624. package/templates/stubs/commands/help.md.template +2 -0
  625. package/templates/stubs/commands/observe.md.template +2 -0
  626. package/templates/stubs/commands/pr-review.md.template +2 -0
  627. package/templates/stubs/commands/predict-cost.md.template +2 -0
  628. package/templates/stubs/commands/profile.md.template +2 -0
  629. package/templates/stubs/commands/reasoning.md.template +2 -0
  630. package/templates/stubs/commands/recall.md.template +2 -0
  631. package/templates/stubs/commands/remember.md.template +2 -0
  632. package/templates/stubs/commands/replay.md.template +2 -0
  633. package/templates/stubs/commands/restore.md.template +2 -0
  634. package/templates/stubs/commands/retrospective.md.template +2 -0
  635. package/templates/stubs/commands/slo.md.template +2 -0
  636. package/templates/stubs/commands/spec.md.template +2 -0
  637. package/templates/stubs/commands/sync.md.template +2 -0
  638. package/templates/stubs/commands/task.md.template +2 -0
  639. package/templates/stubs/commands/trace.md.template +2 -0
  640. package/templates/stubs/commands/visualize.md.template +2 -0
  641. package/templates/stubs/commands/workflow.md.template +2 -0
  642. package/templates/synchronizations/archive/adaptive-learning.yaml.template +595 -0
  643. package/templates/synchronizations/archive/code-understanding-flow.yaml.template +533 -0
  644. package/templates/synchronizations/archive/collaboration-flow.yaml.template +521 -0
  645. package/templates/synchronizations/archive/context-folding.yaml.template +353 -0
  646. package/templates/synchronizations/archive/dead-letter-queue.yaml.template +530 -0
  647. package/templates/synchronizations/archive/documentation-flow.yaml.template +560 -0
  648. package/templates/synchronizations/archive/error-recovery-flow.yaml.template +1031 -0
  649. package/templates/synchronizations/archive/execution-loop.yaml.template +336 -0
  650. package/templates/synchronizations/archive/exploration-flow.yaml.template +369 -0
  651. package/templates/synchronizations/archive/feature-development.yaml.template +2145 -0
  652. package/templates/synchronizations/archive/learning-loop.yaml.template +657 -0
  653. package/templates/synchronizations/archive/multi-verify.yaml.template +346 -0
  654. package/templates/synchronizations/archive/planning-flow.yaml.template +312 -0
  655. package/templates/synchronizations/archive/retrospective-flow.yaml.template +277 -0
  656. package/templates/synchronizations/archive/security-flow.yaml.template +477 -0
  657. package/templates/synchronizations/archive/slo-monitoring.yaml.template +209 -0
  658. package/templates/synchronizations/archive/task-routing.yaml.template +489 -0
  659. package/templates/synchronizations/archive/test-driven.yaml.template +291 -0
  660. package/templates/synchronizations/archive/tool-routing.yaml.template +326 -0
  661. package/templates/synchronizations/archive/verification-flow.yaml.template +407 -0
  662. package/templates/synchronizations/error-policy.yaml.template +188 -0
  663. package/templates/synchronizations/main.sync.template +319 -0
  664. package/templates/synchronizations/slo-registry.yaml.template +229 -0
  665. package/templates/tasks/task.yaml.template +67 -0
  666. package/templates/zen-profile.yaml.template +14 -0
@@ -0,0 +1,663 @@
1
+ ---
2
+ name: Security Vulnerability Scanning
3
+ description: Detect common security vulnerabilities in generated code during quality review
4
+ version: 1.0.0
5
+ trigger_keywords: [security, vulnerability, CVE, injection, XSS, CSRF, scan, audit]
6
+ author: Zen Architecture
7
+ applies_to: [quality-concept]
8
+ priority: P0
9
+ impact: critical
10
+ ---
11
+
12
+ # Security Vulnerability Scanning - Expert Skill
13
+
14
+ Detect common security vulnerabilities in generated code before they reach production.
15
+
16
+ ## Purpose
17
+
18
+ Security vulnerability scanning provides:
19
+ - **Early detection**: Catch vulnerabilities at review time, not in production
20
+ - **Automated checks**: Consistent security review across all code
21
+ - **OWASP coverage**: Check for industry-standard vulnerability patterns
22
+ - **Actionable feedback**: Specific remediation guidance for each issue
23
+
24
+ ## When to Use
25
+
26
+ Use security scanning during quality review when code involves:
27
+ - ✅ User input handling
28
+ - ✅ Database queries
29
+ - ✅ Authentication/authorization
30
+ - ✅ File operations
31
+ - ✅ External API calls
32
+ - ✅ HTML/template rendering
33
+ - ✅ Cryptographic operations
34
+ - ✅ Session management
35
+
36
+ ## Vulnerability Detection Patterns
37
+
38
+ ### 1. SQL Injection (CWE-89)
39
+
40
+ **Detection Patterns**:
41
+ ```javascript
42
+ // VULNERABLE: String concatenation in query
43
+ const query = `SELECT * FROM users WHERE id = ${userId}`;
44
+ const query = "SELECT * FROM users WHERE id = " + userId;
45
+ const query = `SELECT * FROM users WHERE name = '${name}'`;
46
+
47
+ // SAFE: Parameterized queries
48
+ const query = 'SELECT * FROM users WHERE id = $1';
49
+ await db.query(query, [userId]);
50
+ ```
51
+
52
+ **Scan Rules**:
53
+ ```yaml
54
+ sql_injection:
55
+ patterns:
56
+ - regex: 'SELECT.*FROM.*WHERE.*\$\{.*\}'
57
+ severity: critical
58
+ message: "Potential SQL injection: String interpolation in query"
59
+
60
+ - regex: '"SELECT.*".*\+.*[a-zA-Z]+'
61
+ severity: critical
62
+ message: "Potential SQL injection: String concatenation in query"
63
+
64
+ - regex: "query\\(['\"].*\\$\\{"
65
+ severity: critical
66
+ message: "Potential SQL injection: Template literal in query"
67
+
68
+ safe_patterns:
69
+ - 'query($1, $2)'
70
+ - 'query(?, ?)'
71
+ - 'where({ id: })'
72
+ - 'findById('
73
+ ```
74
+
75
+ ### 2. Cross-Site Scripting (XSS) (CWE-79)
76
+
77
+ **Detection Patterns**:
78
+ ```javascript
79
+ // VULNERABLE: Unescaped user input in HTML
80
+ element.innerHTML = userInput;
81
+ document.write(userInput);
82
+ `<div>${userInput}</div>`;
83
+
84
+ // SAFE: Escaped output
85
+ element.textContent = userInput;
86
+ escapeHtml(userInput);
87
+ DOMPurify.sanitize(userInput);
88
+ ```
89
+
90
+ **Scan Rules**:
91
+ ```yaml
92
+ xss:
93
+ patterns:
94
+ - regex: 'innerHTML\s*=\s*[a-zA-Z]+'
95
+ severity: high
96
+ message: "Potential XSS: Unescaped assignment to innerHTML"
97
+
98
+ - regex: 'document\.write\('
99
+ severity: high
100
+ message: "Potential XSS: document.write with user input"
101
+
102
+ - regex: 'dangerouslySetInnerHTML'
103
+ severity: medium
104
+ message: "React dangerouslySetInnerHTML - ensure input is sanitized"
105
+
106
+ - regex: '\{\{\{.*\}\}\}'
107
+ severity: medium
108
+ message: "Handlebars unescaped output - ensure input is sanitized"
109
+
110
+ safe_patterns:
111
+ - 'textContent'
112
+ - 'escapeHtml('
113
+ - 'DOMPurify.sanitize('
114
+ - 'sanitizeHtml('
115
+ ```
116
+
117
+ ### 3. Command Injection (CWE-78)
118
+
119
+ **Detection Patterns**:
120
+ ```javascript
121
+ // VULNERABLE: User input in shell commands
122
+ exec(`ls ${userInput}`);
123
+ spawn('bash', ['-c', userInput]);
124
+ system(userInput);
125
+
126
+ // SAFE: Validated input, no shell
127
+ execFile('ls', [validatedPath]);
128
+ spawn('ls', ['-la', validatedPath], { shell: false });
129
+ ```
130
+
131
+ **Scan Rules**:
132
+ ```yaml
133
+ command_injection:
134
+ patterns:
135
+ - regex: 'exec\([`"\'].*\$\{'
136
+ severity: critical
137
+ message: "Potential command injection: User input in exec()"
138
+
139
+ - regex: 'spawn\([^,]+,.*shell:\s*true'
140
+ severity: high
141
+ message: "Potential command injection: spawn with shell: true"
142
+
143
+ - regex: 'child_process.*\+.*[a-zA-Z]+'
144
+ severity: critical
145
+ message: "Potential command injection: String concatenation in command"
146
+
147
+ safe_patterns:
148
+ - 'execFile('
149
+ - 'shell: false'
150
+ - 'spawnSync(cmd, args)'
151
+ ```
152
+
153
+ ### 4. Path Traversal (CWE-22)
154
+
155
+ **Detection Patterns**:
156
+ ```javascript
157
+ // VULNERABLE: User input in file paths
158
+ fs.readFile(userInput);
159
+ path.join(baseDir, userInput); // if userInput contains ../
160
+
161
+ // SAFE: Validated and normalized paths
162
+ const safePath = path.resolve(baseDir, userInput);
163
+ if (!safePath.startsWith(baseDir)) throw new Error('Invalid path');
164
+ ```
165
+
166
+ **Scan Rules**:
167
+ ```yaml
168
+ path_traversal:
169
+ patterns:
170
+ - regex: 'readFile\([a-zA-Z]+\)'
171
+ severity: high
172
+ message: "Potential path traversal: Unvalidated path in readFile"
173
+
174
+ - regex: 'path\.join\(.*,\s*req\.'
175
+ severity: high
176
+ message: "Potential path traversal: Request input in path.join"
177
+
178
+ - regex: '__dirname.*\+.*req\.'
179
+ severity: high
180
+ message: "Potential path traversal: Request input concatenated to path"
181
+
182
+ safe_patterns:
183
+ - 'path.resolve('
184
+ - 'startsWith(baseDir)'
185
+ - 'path.normalize('
186
+ ```
187
+
188
+ ### 5. Insecure Deserialization (CWE-502)
189
+
190
+ **Detection Patterns**:
191
+ ```javascript
192
+ // VULNERABLE: Deserializing untrusted data
193
+ eval(userInput);
194
+ new Function(userInput);
195
+ JSON.parse(userInput); // Only dangerous if result is used unsafely
196
+
197
+ // SAFE: Validated deserialization
198
+ const data = JSON.parse(userInput);
199
+ const validated = schema.validate(data);
200
+ ```
201
+
202
+ **Scan Rules**:
203
+ ```yaml
204
+ insecure_deserialization:
205
+ patterns:
206
+ - regex: 'eval\('
207
+ severity: critical
208
+ message: "Critical: eval() with potential user input"
209
+
210
+ - regex: 'new Function\('
211
+ severity: critical
212
+ message: "Critical: new Function() with potential user input"
213
+
214
+ - regex: 'serialize-javascript.*uneval'
215
+ severity: high
216
+ message: "Potential insecure deserialization"
217
+
218
+ safe_patterns:
219
+ - 'JSON.parse' # With validation
220
+ - 'schema.validate'
221
+ ```
222
+
223
+ ### 6. Hardcoded Secrets (CWE-798)
224
+
225
+ **Detection Patterns**:
226
+ ```javascript
227
+ // VULNERABLE: Hardcoded credentials
228
+ const password = "secretpassword123";
229
+ const apiKey = "sk-1234567890abcdef";
230
+ const token = "eyJhbGciOiJIUzI1NiIs...";
231
+
232
+ // SAFE: Environment variables
233
+ const password = process.env.DB_PASSWORD;
234
+ const apiKey = process.env.API_KEY;
235
+ ```
236
+
237
+ **Scan Rules**:
238
+ ```yaml
239
+ hardcoded_secrets:
240
+ patterns:
241
+ - regex: '(password|passwd|pwd)\s*[=:]\s*["\'][^"\']{8,}'
242
+ severity: critical
243
+ message: "Hardcoded password detected"
244
+
245
+ - regex: '(api[_-]?key|apikey)\s*[=:]\s*["\'][a-zA-Z0-9]{16,}'
246
+ severity: critical
247
+ message: "Hardcoded API key detected"
248
+
249
+ - regex: '(secret|token)\s*[=:]\s*["\'][a-zA-Z0-9+/=]{20,}'
250
+ severity: critical
251
+ message: "Hardcoded secret/token detected"
252
+
253
+ - regex: 'Bearer\s+[a-zA-Z0-9._-]{20,}'
254
+ severity: high
255
+ message: "Hardcoded bearer token detected"
256
+
257
+ - regex: '-----BEGIN (RSA |EC )?PRIVATE KEY-----'
258
+ severity: critical
259
+ message: "Private key in source code"
260
+
261
+ safe_patterns:
262
+ - 'process.env.'
263
+ - 'config.get('
264
+ - 'secrets.get('
265
+ ```
266
+
267
+ ### 7. Insecure Random (CWE-330)
268
+
269
+ **Detection Patterns**:
270
+ ```javascript
271
+ // VULNERABLE: Weak randomness for security
272
+ const token = Math.random().toString(36);
273
+ const id = Math.floor(Math.random() * 1000000);
274
+
275
+ // SAFE: Cryptographically secure random
276
+ const token = crypto.randomBytes(32).toString('hex');
277
+ const id = crypto.randomUUID();
278
+ ```
279
+
280
+ **Scan Rules**:
281
+ ```yaml
282
+ insecure_random:
283
+ patterns:
284
+ - regex: 'Math\.random\(\).*token'
285
+ severity: high
286
+ message: "Insecure random for token generation"
287
+
288
+ - regex: 'Math\.random\(\).*password'
289
+ severity: critical
290
+ message: "Insecure random for password generation"
291
+
292
+ - regex: 'Math\.random\(\).*secret'
293
+ severity: critical
294
+ message: "Insecure random for secret generation"
295
+
296
+ safe_patterns:
297
+ - 'crypto.randomBytes'
298
+ - 'crypto.randomUUID'
299
+ - 'crypto.getRandomValues'
300
+ - 'uuid.v4()'
301
+ ```
302
+
303
+ ### 8. Missing Authentication (CWE-306)
304
+
305
+ **Detection Patterns**:
306
+ ```javascript
307
+ // VULNERABLE: Unprotected routes
308
+ app.post('/api/admin/users', createUser);
309
+ router.delete('/api/items/:id', deleteItem);
310
+
311
+ // SAFE: Authentication middleware
312
+ app.post('/api/admin/users', authMiddleware, createUser);
313
+ router.delete('/api/items/:id', authenticate, authorize, deleteItem);
314
+ ```
315
+
316
+ **Scan Rules**:
317
+ ```yaml
318
+ missing_authentication:
319
+ patterns:
320
+ - regex: 'app\.(post|put|delete|patch)\([^,]+,\s*[a-zA-Z]+\)'
321
+ context: "Check if route needs authentication"
322
+ severity: medium
323
+ message: "Route may be missing authentication middleware"
324
+
325
+ - regex: '/api/(admin|user|account)'
326
+ context: "Sensitive routes"
327
+ severity: medium
328
+ message: "Sensitive route - verify authentication is in place"
329
+
330
+ safe_patterns:
331
+ - 'authMiddleware'
332
+ - 'authenticate'
333
+ - 'requireAuth'
334
+ - 'isAuthenticated'
335
+ - 'passport.authenticate'
336
+ ```
337
+
338
+ ### 9. CSRF Vulnerabilities (CWE-352)
339
+
340
+ **Detection Patterns**:
341
+ ```javascript
342
+ // VULNERABLE: State-changing without CSRF protection
343
+ app.post('/api/transfer', handleTransfer);
344
+
345
+ // SAFE: CSRF token validation
346
+ app.post('/api/transfer', csrfProtection, handleTransfer);
347
+ ```
348
+
349
+ **Scan Rules**:
350
+ ```yaml
351
+ csrf:
352
+ patterns:
353
+ - regex: 'app\.post\([^,]+,\s*(?!.*csrf)'
354
+ severity: medium
355
+ message: "POST route may need CSRF protection"
356
+
357
+ safe_patterns:
358
+ - 'csrf'
359
+ - 'csurf'
360
+ - 'csrfProtection'
361
+ - 'verifyCsrfToken'
362
+ ```
363
+
364
+ ### 10. Insecure Cookie Settings (CWE-614)
365
+
366
+ **Detection Patterns**:
367
+ ```javascript
368
+ // VULNERABLE: Insecure cookie
369
+ res.cookie('session', value);
370
+ res.cookie('token', value, { httpOnly: false });
371
+
372
+ // SAFE: Secure cookie settings
373
+ res.cookie('session', value, {
374
+ httpOnly: true,
375
+ secure: true,
376
+ sameSite: 'strict'
377
+ });
378
+ ```
379
+
380
+ **Scan Rules**:
381
+ ```yaml
382
+ insecure_cookies:
383
+ patterns:
384
+ - regex: 'cookie\([^)]+\)(?!.*httpOnly)'
385
+ severity: medium
386
+ message: "Cookie missing httpOnly flag"
387
+
388
+ - regex: 'cookie\([^)]+\)(?!.*secure)'
389
+ severity: medium
390
+ message: "Cookie missing secure flag"
391
+
392
+ - regex: 'httpOnly:\s*false'
393
+ severity: high
394
+ message: "Cookie explicitly set httpOnly: false"
395
+
396
+ safe_patterns:
397
+ - 'httpOnly: true'
398
+ - 'secure: true'
399
+ - "sameSite: 'strict'"
400
+ ```
401
+
402
+ ## Scan Process
403
+
404
+ ### 1. Pre-Scan Setup
405
+
406
+ ```yaml
407
+ scan_configuration:
408
+ enabled_checks:
409
+ - sql_injection
410
+ - xss
411
+ - command_injection
412
+ - path_traversal
413
+ - hardcoded_secrets
414
+ - insecure_random
415
+ - missing_authentication
416
+ - csrf
417
+ - insecure_cookies
418
+
419
+ severity_threshold: medium # Report medium and above
420
+
421
+ file_patterns:
422
+ include:
423
+ - "**/*.js"
424
+ - "**/*.ts"
425
+ - "**/*.jsx"
426
+ - "**/*.tsx"
427
+ - "**/*.py"
428
+ - "**/*.java"
429
+ exclude:
430
+ - "node_modules/**"
431
+ - "**/*.test.*"
432
+ - "**/*.spec.*"
433
+ ```
434
+
435
+ ### 2. Scan Execution
436
+
437
+ ```python
438
+ def scan_for_vulnerabilities(files, rules):
439
+ """
440
+ Scan files for security vulnerabilities.
441
+
442
+ Args:
443
+ files: List of file paths to scan
444
+ rules: Security scan rules
445
+
446
+ Returns:
447
+ List of findings with severity and remediation
448
+ """
449
+ findings = []
450
+
451
+ for file_path in files:
452
+ content = read_file(file_path)
453
+
454
+ for rule_category, rule_config in rules.items():
455
+ for pattern in rule_config['patterns']:
456
+ matches = re.findall(pattern['regex'], content)
457
+
458
+ for match in matches:
459
+ # Check if safe pattern present
460
+ is_safe = any(
461
+ safe in content[match.start-100:match.end+100]
462
+ for safe in rule_config.get('safe_patterns', [])
463
+ )
464
+
465
+ if not is_safe:
466
+ findings.append({
467
+ 'file': file_path,
468
+ 'line': get_line_number(content, match),
469
+ 'category': rule_category,
470
+ 'severity': pattern['severity'],
471
+ 'message': pattern['message'],
472
+ 'code': get_code_snippet(content, match),
473
+ 'remediation': get_remediation(rule_category)
474
+ })
475
+
476
+ return sorted(findings, key=lambda x: severity_order[x['severity']])
477
+ ```
478
+
479
+ ### 3. Report Generation
480
+
481
+ ```yaml
482
+ # koan/reviews/security-scan-{id}.yaml
483
+
484
+ scan_id: "security-scan-001"
485
+ timestamp: "2025-11-11T10:00:00Z"
486
+ implementation_id: "impl-001"
487
+ status: "findings_detected"
488
+
489
+ summary:
490
+ total_findings: 5
491
+ critical: 1
492
+ high: 2
493
+ medium: 2
494
+ low: 0
495
+
496
+ findings:
497
+ - id: "finding-001"
498
+ severity: critical
499
+ category: "sql_injection"
500
+ file: "src/services/user.service.ts"
501
+ line: 45
502
+ message: "Potential SQL injection: String interpolation in query"
503
+ code: |
504
+ const query = `SELECT * FROM users WHERE id = ${userId}`;
505
+ remediation: |
506
+ Use parameterized queries:
507
+ const query = 'SELECT * FROM users WHERE id = $1';
508
+ await db.query(query, [userId]);
509
+
510
+ - id: "finding-002"
511
+ severity: high
512
+ category: "hardcoded_secrets"
513
+ file: "src/config/database.ts"
514
+ line: 12
515
+ message: "Hardcoded password detected"
516
+ code: |
517
+ const password = "db_password_123";
518
+ remediation: |
519
+ Use environment variables:
520
+ const password = process.env.DB_PASSWORD;
521
+
522
+ blocked: true # Critical findings block merge
523
+ ```
524
+
525
+ ## Integration with Quality Concept
526
+
527
+ ### In Quality Review Action
528
+
529
+ ```yaml
530
+ # Add to quality.review process
531
+
532
+ quality_review:
533
+ steps:
534
+ - name: "Code Style Check"
535
+ tool: "eslint"
536
+
537
+ - name: "Security Vulnerability Scan"
538
+ tool: "security-scanner"
539
+ config:
540
+ severity_threshold: "medium"
541
+ block_on_critical: true
542
+ block_on_high: true
543
+
544
+ - name: "Type Check"
545
+ tool: "tsc"
546
+
547
+ blocking_conditions:
548
+ - "security.critical > 0"
549
+ - "security.high > 0"
550
+ ```
551
+
552
+ ### Scan Output in Review
553
+
554
+ ```yaml
555
+ # koan/reviews/review-{id}.yaml
556
+
557
+ review_id: "review-001"
558
+ implementation_id: "impl-001"
559
+ status: "needs_changes" # Blocked by security findings
560
+
561
+ security_scan:
562
+ status: "failed"
563
+ critical: 1
564
+ high: 2
565
+ findings:
566
+ - "SQL injection in user.service.ts:45"
567
+ - "Hardcoded password in database.ts:12"
568
+ - "Missing CSRF protection on /api/transfer"
569
+
570
+ remediation_required:
571
+ - file: "src/services/user.service.ts"
572
+ action: "Use parameterized queries"
573
+
574
+ - file: "src/config/database.ts"
575
+ action: "Move password to environment variable"
576
+
577
+ - file: "src/routes/transfer.ts"
578
+ action: "Add CSRF middleware"
579
+
580
+ code_review:
581
+ status: "approved"
582
+ # Security issues override code approval
583
+ ```
584
+
585
+ ## Remediation Guidance
586
+
587
+ ### For Each Vulnerability Type
588
+
589
+ ```yaml
590
+ remediation_guides:
591
+ sql_injection:
592
+ title: "Fix SQL Injection"
593
+ steps:
594
+ - "Replace string concatenation with parameterized queries"
595
+ - "Use ORM methods instead of raw SQL where possible"
596
+ - "Validate input types before query construction"
597
+ examples:
598
+ before: |
599
+ const query = `SELECT * FROM users WHERE id = ${userId}`;
600
+ after: |
601
+ const query = 'SELECT * FROM users WHERE id = $1';
602
+ await db.query(query, [userId]);
603
+
604
+ xss:
605
+ title: "Fix Cross-Site Scripting"
606
+ steps:
607
+ - "Use textContent instead of innerHTML for plain text"
608
+ - "Sanitize HTML with DOMPurify before rendering"
609
+ - "Use framework's built-in escaping (React, Vue, etc.)"
610
+ examples:
611
+ before: |
612
+ element.innerHTML = userInput;
613
+ after: |
614
+ element.textContent = userInput;
615
+ // Or if HTML is needed:
616
+ element.innerHTML = DOMPurify.sanitize(userInput);
617
+
618
+ hardcoded_secrets:
619
+ title: "Fix Hardcoded Secrets"
620
+ steps:
621
+ - "Move secrets to environment variables"
622
+ - "Use a secret manager (Vault, AWS Secrets Manager)"
623
+ - "Add secret patterns to .gitignore"
624
+ examples:
625
+ before: |
626
+ const apiKey = "sk-1234567890";
627
+ after: |
628
+ const apiKey = process.env.API_KEY;
629
+ // In .env (not committed):
630
+ // API_KEY=sk-1234567890
631
+ ```
632
+
633
+ ## SLO Expectations
634
+
635
+ ```yaml
636
+ security_scan_slo:
637
+ expected_duration_ms: 5000
638
+ max_duration_ms: 30000
639
+
640
+ blocking_policy:
641
+ critical: "always_block"
642
+ high: "always_block"
643
+ medium: "warn_and_continue"
644
+ low: "log_only"
645
+
646
+ metrics:
647
+ target_false_positive_rate: "< 10%"
648
+ target_coverage: "> 95% of OWASP Top 10"
649
+ ```
650
+
651
+ ## Best Practices
652
+
653
+ 1. ✅ **Run on every code change** - Security scan in CI/CD pipeline
654
+ 2. ✅ **Block critical/high findings** - Don't merge vulnerable code
655
+ 3. ✅ **Provide clear remediation** - Actionable fix guidance
656
+ 4. ✅ **Track metrics** - False positive rate, time to remediate
657
+ 5. ✅ **Update rules regularly** - New vulnerability patterns emerge
658
+ 6. ✅ **Context-aware scanning** - Reduce false positives with context
659
+ 7. ✅ **Developer education** - Help developers understand why
660
+
661
+ ---
662
+
663
+ **Use this skill when**: Reviewing any code that handles user input, authentication, data storage, or external communication. Security scanning should be automatic in the quality review phase.