@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,692 @@
1
+ ---
2
+ name: Security Design Patterns
3
+ description: Apply OWASP-aligned security patterns during architecture design to prevent vulnerabilities from the start
4
+ version: 1.0.0
5
+ trigger_keywords: [security, auth, authorization, encryption, OWASP, vulnerability, authentication, password, token, session]
6
+ author: Zen Architecture
7
+ applies_to: [architecture-concept]
8
+ priority: P0
9
+ impact: critical
10
+ ---
11
+
12
+ # Security Design Patterns - Expert Skill
13
+
14
+ Apply security best practices during architecture design to prevent vulnerabilities before they're implemented.
15
+
16
+ ## Purpose
17
+
18
+ Security design patterns provide:
19
+ - **Prevention over detection**: Catch security issues at design time, not production
20
+ - **OWASP alignment**: Industry-standard security checklist
21
+ - **Cost savings**: Security retrofits are 10x more expensive than design-time fixes
22
+ - **Compliance readiness**: Meet security audit requirements from the start
23
+
24
+ ## When to Use
25
+
26
+ Use security design patterns when:
27
+ - ✅ Designing authentication or authorization systems
28
+ - ✅ Handling sensitive data (PII, credentials, financial)
29
+ - ✅ Creating API endpoints exposed to users
30
+ - ✅ Integrating with third-party services
31
+ - ✅ Processing user input of any kind
32
+ - ✅ Storing or transmitting secrets
33
+
34
+ ## OWASP Top 10 Checklist
35
+
36
+ ### A01: Broken Access Control
37
+
38
+ **Design Checklist**:
39
+ ```yaml
40
+ access_control:
41
+ - principle: "Deny by default"
42
+ implementation: "All endpoints require explicit authorization"
43
+ pattern: |
44
+ // Middleware-first authorization
45
+ router.use(authMiddleware);
46
+ router.use(authzMiddleware);
47
+
48
+ - principle: "Least privilege"
49
+ implementation: "Users get minimum permissions needed"
50
+ pattern: |
51
+ // Role-based with minimal grants
52
+ const permissions = {
53
+ viewer: ['read'],
54
+ editor: ['read', 'write'],
55
+ admin: ['read', 'write', 'delete', 'admin']
56
+ };
57
+
58
+ - principle: "Ownership verification"
59
+ implementation: "Verify user owns resource before access"
60
+ pattern: |
61
+ // Always check ownership
62
+ async function getResource(userId, resourceId) {
63
+ const resource = await db.find(resourceId);
64
+ if (resource.ownerId !== userId) {
65
+ throw new ForbiddenError();
66
+ }
67
+ return resource;
68
+ }
69
+ ```
70
+
71
+ ### A02: Cryptographic Failures
72
+
73
+ **Design Checklist**:
74
+ ```yaml
75
+ cryptography:
76
+ - principle: "Encrypt sensitive data at rest"
77
+ implementation: "Use AES-256 for data at rest"
78
+ pattern: |
79
+ // Encrypt before storing
80
+ const encrypted = await encrypt(sensitiveData, key);
81
+ await db.store({ data: encrypted, iv: iv });
82
+
83
+ - principle: "TLS everywhere"
84
+ implementation: "HTTPS only, no HTTP fallback"
85
+ pattern: |
86
+ // Force HTTPS in production
87
+ if (process.env.NODE_ENV === 'production') {
88
+ app.use(helmet.hsts());
89
+ app.use(redirectToHttps());
90
+ }
91
+
92
+ - principle: "No hardcoded secrets"
93
+ implementation: "Use environment variables or secret managers"
94
+ pattern: |
95
+ // Load from environment
96
+ const config = {
97
+ dbPassword: process.env.DB_PASSWORD,
98
+ apiKey: process.env.API_KEY,
99
+ jwtSecret: process.env.JWT_SECRET
100
+ };
101
+
102
+ - principle: "Secure password storage"
103
+ implementation: "bcrypt with cost factor >= 12"
104
+ pattern: |
105
+ // Hash passwords properly
106
+ const BCRYPT_ROUNDS = 12;
107
+ const hash = await bcrypt.hash(password, BCRYPT_ROUNDS);
108
+ ```
109
+
110
+ ### A03: Injection
111
+
112
+ **Design Checklist**:
113
+ ```yaml
114
+ injection_prevention:
115
+ - principle: "Parameterized queries only"
116
+ implementation: "Never concatenate user input into queries"
117
+ pattern: |
118
+ // GOOD: Parameterized
119
+ const result = await db.query(
120
+ 'SELECT * FROM users WHERE id = $1',
121
+ [userId]
122
+ );
123
+
124
+ // BAD: Concatenation (NEVER DO THIS)
125
+ // const result = await db.query(
126
+ // `SELECT * FROM users WHERE id = ${userId}`
127
+ // );
128
+
129
+ - principle: "Input validation"
130
+ implementation: "Validate and sanitize all input"
131
+ pattern: |
132
+ // Validate with schema
133
+ const schema = Joi.object({
134
+ email: Joi.string().email().required(),
135
+ age: Joi.number().integer().min(0).max(150)
136
+ });
137
+ const validated = await schema.validateAsync(input);
138
+
139
+ - principle: "Output encoding"
140
+ implementation: "Encode output based on context"
141
+ pattern: |
142
+ // HTML context
143
+ const safeHtml = escapeHtml(userInput);
144
+
145
+ // URL context
146
+ const safeUrl = encodeURIComponent(userInput);
147
+
148
+ // JavaScript context
149
+ const safeJs = JSON.stringify(userInput);
150
+ ```
151
+
152
+ ### A04: Insecure Design
153
+
154
+ **Design Checklist**:
155
+ ```yaml
156
+ secure_design:
157
+ - principle: "Threat modeling"
158
+ implementation: "Identify threats during design"
159
+ questions:
160
+ - "What data is sensitive?"
161
+ - "Who should access what?"
162
+ - "What could an attacker try?"
163
+ - "What's the blast radius of a breach?"
164
+
165
+ - principle: "Defense in depth"
166
+ implementation: "Multiple layers of security"
167
+ layers:
168
+ - "Network: Firewall, VPN"
169
+ - "Application: Auth, authz, validation"
170
+ - "Data: Encryption, access controls"
171
+ - "Monitoring: Logging, alerting"
172
+
173
+ - principle: "Fail securely"
174
+ implementation: "Errors don't leak information"
175
+ pattern: |
176
+ // Don't reveal internal details
177
+ catch (error) {
178
+ logger.error('Internal error', { error, userId });
179
+ return res.status(500).json({
180
+ error: 'An error occurred',
181
+ // NOT: error.message, error.stack
182
+ });
183
+ }
184
+ ```
185
+
186
+ ### A05: Security Misconfiguration
187
+
188
+ **Design Checklist**:
189
+ ```yaml
190
+ configuration:
191
+ - principle: "Secure defaults"
192
+ implementation: "Default to most secure option"
193
+ examples:
194
+ - "CORS: Deny all origins by default"
195
+ - "Headers: Enable security headers"
196
+ - "Permissions: No access by default"
197
+
198
+ - principle: "Remove unnecessary features"
199
+ implementation: "Disable unused endpoints, methods, features"
200
+ pattern: |
201
+ // Only enable needed HTTP methods
202
+ router.route('/users/:id')
203
+ .get(getUser)
204
+ .put(updateUser);
205
+ // DELETE not enabled unless needed
206
+
207
+ - principle: "Security headers"
208
+ implementation: "Use helmet.js or equivalent"
209
+ pattern: |
210
+ app.use(helmet({
211
+ contentSecurityPolicy: true,
212
+ crossOriginEmbedderPolicy: true,
213
+ crossOriginOpenerPolicy: true,
214
+ crossOriginResourcePolicy: true,
215
+ dnsPrefetchControl: true,
216
+ frameguard: true,
217
+ hidePoweredBy: true,
218
+ hsts: true,
219
+ ieNoOpen: true,
220
+ noSniff: true,
221
+ originAgentCluster: true,
222
+ permittedCrossDomainPolicies: true,
223
+ referrerPolicy: true,
224
+ xssFilter: true
225
+ }));
226
+ ```
227
+
228
+ ### A06: Vulnerable Components
229
+
230
+ **Design Checklist**:
231
+ ```yaml
232
+ dependencies:
233
+ - principle: "Minimal dependencies"
234
+ implementation: "Only add necessary packages"
235
+
236
+ - principle: "Regular updates"
237
+ implementation: "Automated dependency updates"
238
+ tools:
239
+ - "Dependabot"
240
+ - "Renovate"
241
+ - "npm audit"
242
+
243
+ - principle: "Vulnerability scanning"
244
+ implementation: "CI/CD security scanning"
245
+ pattern: |
246
+ # In CI pipeline
247
+ - name: Security audit
248
+ run: npm audit --audit-level=high
249
+ ```
250
+
251
+ ### A07: Authentication Failures
252
+
253
+ **Design Checklist**:
254
+ ```yaml
255
+ authentication:
256
+ - principle: "Strong password policy"
257
+ implementation: "Minimum requirements + breach check"
258
+ pattern: |
259
+ const passwordPolicy = {
260
+ minLength: 12,
261
+ requireUppercase: true,
262
+ requireLowercase: true,
263
+ requireNumber: true,
264
+ requireSpecial: true,
265
+ checkBreached: true // Check haveibeenpwned
266
+ };
267
+
268
+ - principle: "Rate limiting"
269
+ implementation: "Limit auth attempts"
270
+ pattern: |
271
+ const loginLimiter = rateLimit({
272
+ windowMs: 15 * 60 * 1000, // 15 minutes
273
+ max: 5, // 5 attempts
274
+ message: 'Too many login attempts'
275
+ });
276
+ app.post('/login', loginLimiter, loginHandler);
277
+
278
+ - principle: "Multi-factor authentication"
279
+ implementation: "MFA for sensitive operations"
280
+ triggers:
281
+ - "New device login"
282
+ - "Password change"
283
+ - "Financial transactions"
284
+ - "Admin operations"
285
+
286
+ - principle: "Secure session management"
287
+ implementation: "HTTP-only, secure cookies"
288
+ pattern: |
289
+ app.use(session({
290
+ cookie: {
291
+ httpOnly: true,
292
+ secure: true,
293
+ sameSite: 'strict',
294
+ maxAge: 3600000 // 1 hour
295
+ },
296
+ resave: false,
297
+ saveUninitialized: false
298
+ }));
299
+ ```
300
+
301
+ ### A08: Software and Data Integrity
302
+
303
+ **Design Checklist**:
304
+ ```yaml
305
+ integrity:
306
+ - principle: "Verify dependencies"
307
+ implementation: "Lock files and integrity checks"
308
+ pattern: |
309
+ # package-lock.json with integrity hashes
310
+ npm ci # Use ci, not install
311
+
312
+ - principle: "Code signing"
313
+ implementation: "Sign releases and verify signatures"
314
+
315
+ - principle: "CI/CD security"
316
+ implementation: "Secure pipeline configuration"
317
+ checks:
318
+ - "Protected branches"
319
+ - "Required reviews"
320
+ - "Signed commits"
321
+ ```
322
+
323
+ ### A09: Security Logging and Monitoring
324
+
325
+ **Design Checklist**:
326
+ ```yaml
327
+ logging:
328
+ - principle: "Log security events"
329
+ implementation: "Audit trail for sensitive operations"
330
+ events_to_log:
331
+ - "Login success/failure"
332
+ - "Password changes"
333
+ - "Permission changes"
334
+ - "Data access"
335
+ - "Admin operations"
336
+
337
+ - principle: "Don't log sensitive data"
338
+ implementation: "Redact PII and secrets"
339
+ pattern: |
340
+ function sanitizeForLog(data) {
341
+ return {
342
+ ...data,
343
+ password: '[REDACTED]',
344
+ ssn: '[REDACTED]',
345
+ creditCard: '[REDACTED]'
346
+ };
347
+ }
348
+
349
+ - principle: "Alerting"
350
+ implementation: "Alert on suspicious patterns"
351
+ triggers:
352
+ - "Multiple failed logins"
353
+ - "Unusual access patterns"
354
+ - "Privilege escalation attempts"
355
+ ```
356
+
357
+ ### A10: Server-Side Request Forgery (SSRF)
358
+
359
+ **Design Checklist**:
360
+ ```yaml
361
+ ssrf_prevention:
362
+ - principle: "URL validation"
363
+ implementation: "Whitelist allowed destinations"
364
+ pattern: |
365
+ const allowedHosts = ['api.trusted.com', 'cdn.trusted.com'];
366
+
367
+ function validateUrl(url) {
368
+ const parsed = new URL(url);
369
+ if (!allowedHosts.includes(parsed.host)) {
370
+ throw new Error('URL not allowed');
371
+ }
372
+ return parsed;
373
+ }
374
+
375
+ - principle: "No internal access"
376
+ implementation: "Block requests to internal IPs"
377
+ blocked:
378
+ - "127.0.0.0/8"
379
+ - "10.0.0.0/8"
380
+ - "172.16.0.0/12"
381
+ - "192.168.0.0/16"
382
+ - "169.254.0.0/16"
383
+ ```
384
+
385
+ ## Authentication Pattern Selection
386
+
387
+ ### Pattern: OAuth 2.0 / OIDC
388
+
389
+ **When to Use**:
390
+ - Third-party identity provider integration
391
+ - "Sign in with Google/GitHub/etc"
392
+ - Delegated authorization
393
+
394
+ **Architecture**:
395
+ ```yaml
396
+ oauth_architecture:
397
+ components:
398
+ - name: "OAuth Client"
399
+ purpose: "Initiate auth flow, handle callbacks"
400
+
401
+ - name: "Token Store"
402
+ purpose: "Secure storage of access/refresh tokens"
403
+ encryption: "AES-256"
404
+
405
+ - name: "Token Refresh Service"
406
+ purpose: "Automatic token refresh before expiry"
407
+
408
+ flow:
409
+ 1. "User clicks 'Sign in with Provider'"
410
+ 2. "Redirect to provider with client_id, scope, state"
411
+ 3. "User authenticates with provider"
412
+ 4. "Provider redirects back with authorization code"
413
+ 5. "Exchange code for tokens (server-side)"
414
+ 6. "Store tokens securely"
415
+ 7. "Create local session"
416
+ ```
417
+
418
+ ### Pattern: JWT Authentication
419
+
420
+ **When to Use**:
421
+ - Stateless authentication
422
+ - Microservices architecture
423
+ - Mobile app backends
424
+
425
+ **Architecture**:
426
+ ```yaml
427
+ jwt_architecture:
428
+ token_structure:
429
+ header: "Algorithm, type"
430
+ payload: "Claims (sub, exp, iat, custom)"
431
+ signature: "HMAC or RSA signature"
432
+
433
+ best_practices:
434
+ - algorithm: "RS256 (asymmetric) or HS256 (symmetric)"
435
+ - expiry: "Short-lived (15-60 minutes)"
436
+ - refresh: "Separate refresh token with longer life"
437
+ - storage: "HTTP-only cookie (web) or secure storage (mobile)"
438
+ - revocation: "Token blacklist or short expiry + refresh"
439
+
440
+ pattern: |
441
+ // Generate token
442
+ const token = jwt.sign(
443
+ { sub: userId, role: userRole },
444
+ privateKey,
445
+ { algorithm: 'RS256', expiresIn: '15m' }
446
+ );
447
+
448
+ // Verify token
449
+ const decoded = jwt.verify(token, publicKey, {
450
+ algorithms: ['RS256']
451
+ });
452
+ ```
453
+
454
+ ### Pattern: Session-Based Authentication
455
+
456
+ **When to Use**:
457
+ - Traditional web applications
458
+ - When server state is acceptable
459
+ - Simpler security model needed
460
+
461
+ **Architecture**:
462
+ ```yaml
463
+ session_architecture:
464
+ storage: "Redis or database"
465
+
466
+ best_practices:
467
+ - "Regenerate session ID on login"
468
+ - "Set appropriate expiry"
469
+ - "Use secure, HTTP-only cookies"
470
+ - "Implement session fixation protection"
471
+
472
+ pattern: |
473
+ // Session configuration
474
+ app.use(session({
475
+ store: new RedisStore({ client: redisClient }),
476
+ secret: process.env.SESSION_SECRET,
477
+ name: 'sessionId',
478
+ resave: false,
479
+ saveUninitialized: false,
480
+ cookie: {
481
+ secure: true,
482
+ httpOnly: true,
483
+ sameSite: 'strict',
484
+ maxAge: 3600000
485
+ }
486
+ }));
487
+ ```
488
+
489
+ ## Authorization Model Selection
490
+
491
+ ### Model: Role-Based Access Control (RBAC)
492
+
493
+ **When to Use**:
494
+ - Simple permission structure
495
+ - Users fit into clear roles
496
+ - Permissions don't vary by resource
497
+
498
+ **Architecture**:
499
+ ```yaml
500
+ rbac_architecture:
501
+ structure:
502
+ roles:
503
+ - admin: [create, read, update, delete, manage_users]
504
+ - editor: [create, read, update]
505
+ - viewer: [read]
506
+
507
+ implementation: |
508
+ function hasPermission(user, permission) {
509
+ const rolePermissions = permissions[user.role];
510
+ return rolePermissions.includes(permission);
511
+ }
512
+ ```
513
+
514
+ ### Model: Attribute-Based Access Control (ABAC)
515
+
516
+ **When to Use**:
517
+ - Complex permission rules
518
+ - Permissions depend on resource attributes
519
+ - Context-aware access control
520
+
521
+ **Architecture**:
522
+ ```yaml
523
+ abac_architecture:
524
+ attributes:
525
+ subject: [role, department, clearance]
526
+ resource: [owner, classification, type]
527
+ action: [read, write, delete]
528
+ environment: [time, location, ip]
529
+
530
+ policy_example: |
531
+ // User can edit if:
532
+ // - They are the owner, OR
533
+ // - They are an editor AND resource is not confidential
534
+ function canEdit(user, resource) {
535
+ if (resource.ownerId === user.id) return true;
536
+ if (user.role === 'editor' && !resource.confidential) return true;
537
+ return false;
538
+ }
539
+ ```
540
+
541
+ ## Data Protection Patterns
542
+
543
+ ### Pattern: Encryption at Rest
544
+
545
+ ```yaml
546
+ encryption_at_rest:
547
+ database:
548
+ method: "Transparent Data Encryption (TDE) or application-level"
549
+ algorithm: "AES-256"
550
+ key_management: "AWS KMS, HashiCorp Vault, or equivalent"
551
+
552
+ files:
553
+ method: "Encrypt before storage"
554
+ pattern: |
555
+ async function storeSecurely(data) {
556
+ const key = await kms.getKey('data-encryption-key');
557
+ const iv = crypto.randomBytes(16);
558
+ const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
559
+ const encrypted = Buffer.concat([
560
+ cipher.update(data),
561
+ cipher.final()
562
+ ]);
563
+ const tag = cipher.getAuthTag();
564
+ return { encrypted, iv, tag };
565
+ }
566
+ ```
567
+
568
+ ### Pattern: Data Masking
569
+
570
+ ```yaml
571
+ data_masking:
572
+ purposes:
573
+ - "Display in UI"
574
+ - "Logging"
575
+ - "Non-production environments"
576
+
577
+ patterns:
578
+ email: "j***@example.com"
579
+ phone: "***-***-1234"
580
+ ssn: "***-**-1234"
581
+ credit_card: "****-****-****-1234"
582
+
583
+ implementation: |
584
+ function maskEmail(email) {
585
+ const [local, domain] = email.split('@');
586
+ return `${local[0]}***@${domain}`;
587
+ }
588
+
589
+ function maskCreditCard(cc) {
590
+ return `****-****-****-${cc.slice(-4)}`;
591
+ }
592
+ ```
593
+
594
+ ## Security Architecture Decision Template
595
+
596
+ When designing security for a feature, use this template:
597
+
598
+ ```yaml
599
+ security_design:
600
+ feature: "${feature_name}"
601
+
602
+ threat_model:
603
+ assets:
604
+ - description: "What sensitive data is involved?"
605
+ data_types: []
606
+ sensitivity: "low|medium|high|critical"
607
+
608
+ threats:
609
+ - threat: "What could an attacker try?"
610
+ likelihood: "low|medium|high"
611
+ impact: "low|medium|high|critical"
612
+ mitigations: []
613
+
614
+ authentication:
615
+ method: "oauth|jwt|session|api_key"
616
+ mfa_required: true|false
617
+ session_duration: ""
618
+
619
+ authorization:
620
+ model: "rbac|abac|acl"
621
+ permissions: []
622
+ ownership_checks: []
623
+
624
+ data_protection:
625
+ encryption_at_rest: true|false
626
+ encryption_in_transit: true|false
627
+ pii_fields: []
628
+ masking_required: []
629
+
630
+ input_validation:
631
+ schemas: []
632
+ sanitization: []
633
+
634
+ logging:
635
+ security_events: []
636
+ pii_redaction: []
637
+
638
+ compliance:
639
+ requirements: [] # GDPR, HIPAA, PCI-DSS, etc.
640
+ ```
641
+
642
+ ## Integration with Architecture Concept
643
+
644
+ When the architecture concept designs a feature with security implications:
645
+
646
+ 1. **Identify Security Requirements**
647
+ - What data is sensitive?
648
+ - Who needs access?
649
+ - What regulations apply?
650
+
651
+ 2. **Apply OWASP Checklist**
652
+ - Review each of the Top 10
653
+ - Document mitigations
654
+
655
+ 3. **Select Patterns**
656
+ - Choose authentication method
657
+ - Choose authorization model
658
+ - Design data protection
659
+
660
+ 4. **Document in Architecture Output**
661
+ ```yaml
662
+ architecture:
663
+ # ... other sections ...
664
+
665
+ security_considerations:
666
+ authentication: "OAuth 2.0 with Google provider"
667
+ authorization: "RBAC with viewer/editor/admin roles"
668
+ data_protection:
669
+ - "PII encrypted at rest with AES-256"
670
+ - "All traffic over TLS 1.3"
671
+ owasp_mitigations:
672
+ - "A01: Middleware-based authorization on all routes"
673
+ - "A03: Parameterized queries, Joi validation"
674
+ - "A07: Rate limiting on auth endpoints"
675
+ ```
676
+
677
+ ## Best Practices Summary
678
+
679
+ 1. ✅ **Design security in, don't bolt it on**
680
+ 2. ✅ **Apply principle of least privilege**
681
+ 3. ✅ **Validate all input, encode all output**
682
+ 4. ✅ **Use parameterized queries exclusively**
683
+ 5. ✅ **Encrypt sensitive data at rest and in transit**
684
+ 6. ✅ **Implement proper authentication and session management**
685
+ 7. ✅ **Log security events, but never log sensitive data**
686
+ 8. ✅ **Keep dependencies updated and audited**
687
+ 9. ✅ **Fail securely - don't leak information in errors**
688
+ 10. ✅ **Defense in depth - multiple layers of protection**
689
+
690
+ ---
691
+
692
+ **Use this skill when**: Designing any feature that handles user data, authentication, authorization, or external input. Security should be considered at architecture time, not as an afterthought.