atabey 0.0.12 → 0.0.14

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 (432) hide show
  1. package/ATABEY.md +45 -499
  2. package/PRIVACY.md +161 -0
  3. package/README.md +553 -88
  4. package/bin/validate-al-registry.js +4 -4
  5. package/dist/framework-mcp/src/index.js +914 -62
  6. package/dist/framework-mcp/src/index.js.map +1 -1
  7. package/dist/framework-mcp/src/tools/compliance/mask_pii.d.ts +17 -0
  8. package/dist/framework-mcp/src/tools/compliance/mask_pii.js +56 -0
  9. package/dist/framework-mcp/src/tools/compliance/mask_pii.js.map +1 -0
  10. package/dist/framework-mcp/src/tools/definitions.js +24 -1
  11. package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
  12. package/dist/framework-mcp/src/tools/framework/run_tests.js +25 -0
  13. package/dist/framework-mcp/src/tools/framework/run_tests.js.map +1 -1
  14. package/dist/framework-mcp/src/tools/gateway/llm_gateway_query.d.ts +19 -0
  15. package/dist/framework-mcp/src/tools/gateway/llm_gateway_query.js +138 -0
  16. package/dist/framework-mcp/src/tools/gateway/llm_gateway_query.js.map +1 -0
  17. package/dist/framework-mcp/src/tools/gateway/llm_gateway_status.d.ts +8 -0
  18. package/dist/framework-mcp/src/tools/gateway/llm_gateway_status.js +91 -0
  19. package/dist/framework-mcp/src/tools/gateway/llm_gateway_status.js.map +1 -0
  20. package/dist/framework-mcp/src/tools/index.d.ts +1 -1
  21. package/dist/framework-mcp/src/tools/index.js +34 -20
  22. package/dist/framework-mcp/src/tools/index.js.map +1 -1
  23. package/dist/framework-mcp/src/tools/messaging/approve_operation.d.ts +22 -0
  24. package/dist/framework-mcp/src/tools/messaging/approve_operation.js +81 -0
  25. package/dist/framework-mcp/src/tools/messaging/approve_operation.js.map +1 -0
  26. package/dist/framework-mcp/src/tools/messaging/ask_human.d.ts +15 -0
  27. package/dist/framework-mcp/src/tools/messaging/ask_human.js +89 -20
  28. package/dist/framework-mcp/src/tools/messaging/ask_human.js.map +1 -1
  29. package/dist/framework-mcp/src/tools/observability/check_ports.js +3 -1
  30. package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -1
  31. package/dist/framework-mcp/src/tools/quality/analyze_code_quality.d.ts +11 -0
  32. package/dist/framework-mcp/src/tools/quality/analyze_code_quality.js +115 -0
  33. package/dist/framework-mcp/src/tools/quality/analyze_code_quality.js.map +1 -0
  34. package/dist/framework-mcp/src/tools/quality/check_architecture_compliance.d.ts +11 -0
  35. package/dist/framework-mcp/src/tools/quality/check_architecture_compliance.js +135 -0
  36. package/dist/framework-mcp/src/tools/quality/check_architecture_compliance.js.map +1 -0
  37. package/dist/framework-mcp/src/tools/schemas.d.ts +90 -15
  38. package/dist/framework-mcp/src/tools/schemas.js +32 -7
  39. package/dist/framework-mcp/src/tools/schemas.js.map +1 -1
  40. package/dist/framework-mcp/src/tools/shell/run_command.js +12 -2
  41. package/dist/framework-mcp/src/tools/shell/run_command.js.map +1 -1
  42. package/dist/framework-mcp/src/tools/types.d.ts +11 -105
  43. package/dist/framework-mcp/src/tools/types.js +1 -0
  44. package/dist/framework-mcp/src/tools/types.js.map +1 -1
  45. package/dist/framework-mcp/src/utils/auth.d.ts +36 -0
  46. package/dist/framework-mcp/src/utils/auth.js +79 -0
  47. package/dist/framework-mcp/src/utils/auth.js.map +1 -0
  48. package/dist/framework-mcp/src/utils/auto-rollback.d.ts +71 -0
  49. package/dist/framework-mcp/src/utils/auto-rollback.js +266 -0
  50. package/dist/framework-mcp/src/utils/auto-rollback.js.map +1 -0
  51. package/dist/framework-mcp/src/utils/compliance.js +12 -4
  52. package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
  53. package/dist/framework-mcp/src/utils/context-optimizer.d.ts +69 -0
  54. package/dist/framework-mcp/src/utils/context-optimizer.js +157 -0
  55. package/dist/framework-mcp/src/utils/context-optimizer.js.map +1 -0
  56. package/dist/framework-mcp/src/utils/discipline.d.ts +68 -0
  57. package/dist/framework-mcp/src/utils/discipline.js +218 -0
  58. package/dist/framework-mcp/src/utils/discipline.js.map +1 -0
  59. package/dist/framework-mcp/src/utils/finops.d.ts +143 -0
  60. package/dist/framework-mcp/src/utils/finops.js +326 -0
  61. package/dist/framework-mcp/src/utils/finops.js.map +1 -0
  62. package/dist/framework-mcp/src/utils/human-in-loop.d.ts +95 -0
  63. package/dist/framework-mcp/src/utils/human-in-loop.js +216 -0
  64. package/dist/framework-mcp/src/utils/human-in-loop.js.map +1 -0
  65. package/dist/framework-mcp/src/utils/license-scanner.d.ts +71 -0
  66. package/dist/framework-mcp/src/utils/license-scanner.js +284 -0
  67. package/dist/framework-mcp/src/utils/license-scanner.js.map +1 -0
  68. package/dist/framework-mcp/src/utils/loop-detector.d.ts +105 -0
  69. package/dist/framework-mcp/src/utils/loop-detector.js +362 -0
  70. package/dist/framework-mcp/src/utils/loop-detector.js.map +1 -0
  71. package/dist/framework-mcp/src/utils/quality.d.ts +19 -0
  72. package/dist/framework-mcp/src/utils/quality.js +124 -0
  73. package/dist/framework-mcp/src/utils/quality.js.map +1 -0
  74. package/dist/framework-mcp/src/utils/rules-engine.d.ts +78 -0
  75. package/dist/framework-mcp/src/utils/rules-engine.js +232 -0
  76. package/dist/framework-mcp/src/utils/rules-engine.js.map +1 -0
  77. package/dist/framework-mcp/src/utils/silent-router.d.ts +47 -0
  78. package/dist/framework-mcp/src/utils/silent-router.js +129 -0
  79. package/dist/framework-mcp/src/utils/silent-router.js.map +1 -0
  80. package/dist/framework-mcp/src/utils/storage.d.ts +1 -0
  81. package/dist/framework-mcp/src/utils/storage.js +2 -2
  82. package/dist/framework-mcp/src/utils/storage.js.map +1 -1
  83. package/dist/framework-mcp/src/utils/telemetry-streamer.d.ts +133 -0
  84. package/dist/framework-mcp/src/utils/telemetry-streamer.js +397 -0
  85. package/dist/framework-mcp/src/utils/telemetry-streamer.js.map +1 -0
  86. package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js +2 -2
  87. package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js.map +1 -1
  88. package/dist/framework-mcp/tests/tools/framework/run_tests.test.d.ts +1 -0
  89. package/dist/framework-mcp/tests/tools/framework/run_tests.test.js +49 -0
  90. package/dist/framework-mcp/tests/tools/framework/run_tests.test.js.map +1 -0
  91. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +14 -5
  92. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
  93. package/dist/framework-mcp/tests/tools/observability/check_ports.test.d.ts +1 -0
  94. package/dist/framework-mcp/tests/tools/observability/check_ports.test.js +30 -0
  95. package/dist/framework-mcp/tests/tools/observability/check_ports.test.js.map +1 -0
  96. package/dist/framework-mcp/tests/tools/shell/run_command.test.js +7 -0
  97. package/dist/framework-mcp/tests/tools/shell/run_command.test.js.map +1 -1
  98. package/dist/framework-mcp/tests/utils/auto-rollback.test.d.ts +7 -0
  99. package/dist/framework-mcp/tests/utils/auto-rollback.test.js +178 -0
  100. package/dist/framework-mcp/tests/utils/auto-rollback.test.js.map +1 -0
  101. package/dist/framework-mcp/tests/utils/context-optimizer.test.d.ts +1 -0
  102. package/dist/framework-mcp/tests/utils/context-optimizer.test.js +62 -0
  103. package/dist/framework-mcp/tests/utils/context-optimizer.test.js.map +1 -0
  104. package/dist/framework-mcp/tests/utils/finops.test.d.ts +7 -0
  105. package/dist/framework-mcp/tests/utils/finops.test.js +157 -0
  106. package/dist/framework-mcp/tests/utils/finops.test.js.map +1 -0
  107. package/dist/framework-mcp/tests/utils/human-in-loop.test.d.ts +1 -0
  108. package/dist/framework-mcp/tests/utils/human-in-loop.test.js +59 -0
  109. package/dist/framework-mcp/tests/utils/human-in-loop.test.js.map +1 -0
  110. package/dist/framework-mcp/tests/utils/license-scanner.test.d.ts +7 -0
  111. package/dist/framework-mcp/tests/utils/license-scanner.test.js +131 -0
  112. package/dist/framework-mcp/tests/utils/license-scanner.test.js.map +1 -0
  113. package/dist/framework-mcp/tests/utils/loop-detector.test.d.ts +7 -0
  114. package/dist/framework-mcp/tests/utils/loop-detector.test.js +204 -0
  115. package/dist/framework-mcp/tests/utils/loop-detector.test.js.map +1 -0
  116. package/dist/framework-mcp/tests/utils/rules-engine.test.d.ts +1 -0
  117. package/dist/framework-mcp/tests/utils/rules-engine.test.js +106 -0
  118. package/dist/framework-mcp/tests/utils/rules-engine.test.js.map +1 -0
  119. package/dist/framework-mcp/tests/utils/telemetry-streamer.test.d.ts +7 -0
  120. package/dist/framework-mcp/tests/utils/telemetry-streamer.test.js +201 -0
  121. package/dist/framework-mcp/tests/utils/telemetry-streamer.test.js.map +1 -0
  122. package/dist/src/cli/commands/check.js +18 -3
  123. package/dist/src/cli/commands/check.js.map +1 -1
  124. package/dist/src/cli/commands/dashboard.d.ts +1 -1
  125. package/dist/src/cli/commands/dashboard.js +343 -96
  126. package/dist/src/cli/commands/dashboard.js.map +1 -1
  127. package/dist/src/cli/commands/gateway.d.ts +1 -0
  128. package/dist/src/cli/commands/gateway.js +172 -0
  129. package/dist/src/cli/commands/gateway.js.map +1 -0
  130. package/dist/src/cli/commands/init/create-agent.js +3 -3
  131. package/dist/src/cli/commands/init/create-agent.js.map +1 -1
  132. package/dist/src/cli/commands/init/scaffold-core.d.ts +3 -1
  133. package/dist/src/cli/commands/init/scaffold-core.js +17 -2
  134. package/dist/src/cli/commands/init/scaffold-core.js.map +1 -1
  135. package/dist/src/cli/commands/init/scaffold-ops.js +2 -2
  136. package/dist/src/cli/commands/init/scaffold-ops.js.map +1 -1
  137. package/dist/src/cli/commands/init/scaffold-standards.js +13 -1
  138. package/dist/src/cli/commands/init/scaffold-standards.js.map +1 -1
  139. package/dist/src/cli/commands/init.d.ts +6 -0
  140. package/dist/src/cli/commands/init.js +163 -25
  141. package/dist/src/cli/commands/init.js.map +1 -1
  142. package/dist/src/cli/commands/mcp.d.ts +7 -0
  143. package/dist/src/cli/commands/mcp.js +45 -22
  144. package/dist/src/cli/commands/mcp.js.map +1 -1
  145. package/dist/src/cli/commands/orchestrate.d.ts +8 -7
  146. package/dist/src/cli/commands/orchestrate.js +2 -1
  147. package/dist/src/cli/commands/orchestrate.js.map +1 -1
  148. package/dist/src/cli/commands/quickstart.d.ts +5 -5
  149. package/dist/src/cli/commands/quickstart.js +30 -42
  150. package/dist/src/cli/commands/quickstart.js.map +1 -1
  151. package/dist/src/cli/index.js +228 -317
  152. package/dist/src/cli/index.js.map +1 -1
  153. package/dist/src/cli/platforms/core.d.ts +12 -0
  154. package/dist/src/cli/platforms/core.js +73 -0
  155. package/dist/src/cli/platforms/core.js.map +1 -0
  156. package/dist/src/cli/platforms/index.d.ts +5 -0
  157. package/dist/src/cli/platforms/index.js +6 -0
  158. package/dist/src/cli/platforms/index.js.map +1 -0
  159. package/dist/src/cli/platforms/paths.d.ts +15 -0
  160. package/dist/src/cli/platforms/paths.js +102 -0
  161. package/dist/src/cli/platforms/paths.js.map +1 -0
  162. package/dist/src/cli/platforms/scaffold.d.ts +2 -0
  163. package/dist/src/cli/platforms/scaffold.js +73 -0
  164. package/dist/src/cli/platforms/scaffold.js.map +1 -0
  165. package/dist/src/cli/platforms/utils.d.ts +4 -0
  166. package/dist/src/cli/platforms/utils.js +76 -0
  167. package/dist/src/cli/platforms/utils.js.map +1 -0
  168. package/dist/src/cli/shims.js +11 -11
  169. package/dist/src/cli/utils/fs.d.ts +1 -1
  170. package/dist/src/cli/utils/fs.js +1 -1
  171. package/dist/src/cli/utils/fs.js.map +1 -1
  172. package/dist/src/cli/utils/pkg.js +2 -3
  173. package/dist/src/cli/utils/pkg.js.map +1 -1
  174. package/dist/src/cli/utils/quality.d.ts +10 -0
  175. package/dist/src/cli/utils/quality.js +10 -0
  176. package/dist/src/cli/utils/quality.js.map +1 -0
  177. package/dist/src/modules/agents/definitions.d.ts +2 -2
  178. package/dist/src/modules/agents/definitions.js +104 -63
  179. package/dist/src/modules/agents/definitions.js.map +1 -1
  180. package/dist/src/modules/agents/registry/manager.js +6 -1
  181. package/dist/src/modules/agents/registry/manager.js.map +1 -1
  182. package/dist/src/modules/contracts/api.d.ts +178 -0
  183. package/dist/src/modules/contracts/api.js +56 -0
  184. package/dist/src/modules/contracts/api.js.map +1 -0
  185. package/dist/src/modules/contracts/index.d.ts +5 -0
  186. package/dist/src/modules/contracts/index.js +6 -0
  187. package/dist/src/modules/contracts/index.js.map +1 -0
  188. package/dist/src/modules/engines/agent-executor.d.ts +25 -30
  189. package/dist/src/modules/engines/agent-executor.js +133 -73
  190. package/dist/src/modules/engines/agent-executor.js.map +1 -1
  191. package/dist/src/modules/engines/agent-loop.d.ts +34 -0
  192. package/dist/src/modules/engines/agent-loop.js +102 -0
  193. package/dist/src/modules/engines/agent-loop.js.map +1 -0
  194. package/dist/src/modules/engines/evaluation-engine.js +2 -2
  195. package/dist/src/modules/engines/evaluation-engine.js.map +1 -1
  196. package/dist/src/modules/engines/quality-gate.d.ts +16 -8
  197. package/dist/src/modules/engines/quality-gate.js +42 -34
  198. package/dist/src/modules/engines/quality-gate.js.map +1 -1
  199. package/dist/src/modules/engines/routing-engine.d.ts +21 -28
  200. package/dist/src/modules/engines/routing-engine.js +83 -50
  201. package/dist/src/modules/engines/routing-engine.js.map +1 -1
  202. package/dist/src/modules/gateway/circuit-breaker.d.ts +40 -0
  203. package/dist/src/modules/gateway/circuit-breaker.js +163 -0
  204. package/dist/src/modules/gateway/circuit-breaker.js.map +1 -0
  205. package/dist/src/modules/gateway/cost-tracker.d.ts +60 -0
  206. package/dist/src/modules/gateway/cost-tracker.js +198 -0
  207. package/dist/src/modules/gateway/cost-tracker.js.map +1 -0
  208. package/dist/src/modules/gateway/gateway.d.ts +72 -0
  209. package/dist/src/modules/gateway/gateway.js +243 -0
  210. package/dist/src/modules/gateway/gateway.js.map +1 -0
  211. package/dist/src/modules/gateway/index.d.ts +19 -0
  212. package/dist/src/modules/gateway/index.js +19 -0
  213. package/dist/src/modules/gateway/index.js.map +1 -0
  214. package/dist/src/modules/gateway/load-balancer.d.ts +86 -0
  215. package/dist/src/modules/gateway/load-balancer.js +230 -0
  216. package/dist/src/modules/gateway/load-balancer.js.map +1 -0
  217. package/dist/src/modules/gateway/providers/anthropic.d.ts +14 -0
  218. package/dist/src/modules/gateway/providers/anthropic.js +169 -0
  219. package/dist/src/modules/gateway/providers/anthropic.js.map +1 -0
  220. package/dist/src/modules/gateway/providers/base.d.ts +38 -0
  221. package/dist/src/modules/gateway/providers/base.js +42 -0
  222. package/dist/src/modules/gateway/providers/base.js.map +1 -0
  223. package/dist/src/modules/gateway/providers/google.d.ts +18 -0
  224. package/dist/src/modules/gateway/providers/google.js +176 -0
  225. package/dist/src/modules/gateway/providers/google.js.map +1 -0
  226. package/dist/src/modules/gateway/providers/grok.d.ts +14 -0
  227. package/dist/src/modules/gateway/providers/grok.js +166 -0
  228. package/dist/src/modules/gateway/providers/grok.js.map +1 -0
  229. package/dist/src/modules/gateway/providers/index.d.ts +21 -0
  230. package/dist/src/modules/gateway/providers/index.js +38 -0
  231. package/dist/src/modules/gateway/providers/index.js.map +1 -0
  232. package/dist/src/modules/gateway/providers/ollama.d.ts +23 -0
  233. package/dist/src/modules/gateway/providers/ollama.js +187 -0
  234. package/dist/src/modules/gateway/providers/ollama.js.map +1 -0
  235. package/dist/src/modules/gateway/providers/openai.d.ts +14 -0
  236. package/dist/src/modules/gateway/providers/openai.js +170 -0
  237. package/dist/src/modules/gateway/providers/openai.js.map +1 -0
  238. package/dist/src/modules/gateway/rate-limiter.d.ts +41 -0
  239. package/dist/src/modules/gateway/rate-limiter.js +119 -0
  240. package/dist/src/modules/gateway/rate-limiter.js.map +1 -0
  241. package/dist/src/modules/gateway/types.d.ts +114 -0
  242. package/dist/src/modules/gateway/types.js +8 -0
  243. package/dist/src/modules/gateway/types.js.map +1 -0
  244. package/dist/src/modules/memory/core.d.ts +4 -12
  245. package/dist/src/modules/memory/core.js +10 -17
  246. package/dist/src/modules/memory/core.js.map +1 -1
  247. package/dist/src/modules/memory/embedding.d.ts +28 -0
  248. package/dist/src/modules/memory/embedding.js +131 -0
  249. package/dist/src/modules/memory/embedding.js.map +1 -0
  250. package/dist/src/modules/providers/definitions.d.ts +9 -0
  251. package/dist/src/modules/providers/definitions.js +141 -0
  252. package/dist/src/modules/providers/definitions.js.map +1 -0
  253. package/dist/src/modules/providers/registry.d.ts +12 -0
  254. package/dist/src/modules/providers/registry.js +19 -0
  255. package/dist/src/modules/providers/registry.js.map +1 -0
  256. package/dist/src/modules/providers/shared.d.ts +1 -0
  257. package/dist/src/modules/providers/shared.js +105 -0
  258. package/dist/src/modules/providers/shared.js.map +1 -0
  259. package/dist/src/modules/providers/types.d.ts +14 -0
  260. package/dist/src/modules/providers/types.js +2 -0
  261. package/dist/src/modules/providers/types.js.map +1 -0
  262. package/dist/src/modules/skills/adapter-skills.d.ts +68 -0
  263. package/dist/src/modules/skills/adapter-skills.js +450 -0
  264. package/dist/src/modules/skills/adapter-skills.js.map +1 -0
  265. package/dist/src/shared/audit.d.ts +105 -0
  266. package/dist/src/shared/audit.js +221 -0
  267. package/dist/src/shared/audit.js.map +1 -0
  268. package/dist/src/shared/fs.js +4 -2
  269. package/dist/src/shared/fs.js.map +1 -1
  270. package/dist/src/shared/lock.d.ts +82 -0
  271. package/dist/src/shared/lock.js +160 -0
  272. package/dist/src/shared/lock.js.map +1 -0
  273. package/dist/src/shared/logger.d.ts +2 -0
  274. package/dist/src/shared/logger.js +15 -5
  275. package/dist/src/shared/logger.js.map +1 -1
  276. package/dist/src/shared/pii.d.ts +69 -0
  277. package/dist/src/shared/pii.js +213 -0
  278. package/dist/src/shared/pii.js.map +1 -0
  279. package/dist/src/shared/retention.d.ts +63 -0
  280. package/dist/src/shared/retention.js +171 -0
  281. package/dist/src/shared/retention.js.map +1 -0
  282. package/dist/src/shared/storage.d.ts +22 -1
  283. package/dist/src/shared/storage.js +49 -7
  284. package/dist/src/shared/storage.js.map +1 -1
  285. package/dist/tests/adapter.test.js +1 -1
  286. package/dist/tests/adapter.test.js.map +1 -1
  287. package/dist/tests/adapters/paths.test.js +4 -4
  288. package/dist/tests/adapters/paths.test.js.map +1 -1
  289. package/dist/tests/cli/commands/dashboard-coverage.test.d.ts +1 -0
  290. package/dist/tests/cli/commands/dashboard-coverage.test.js +88 -0
  291. package/dist/tests/cli/commands/dashboard-coverage.test.js.map +1 -0
  292. package/dist/tests/cli/init/adapter_init.test.js +4 -5
  293. package/dist/tests/cli/init/adapter_init.test.js.map +1 -1
  294. package/dist/tests/cli/init/unified_init.test.js +5 -7
  295. package/dist/tests/cli/init/unified_init.test.js.map +1 -1
  296. package/dist/tests/embedding.test.d.ts +1 -0
  297. package/dist/tests/embedding.test.js +82 -0
  298. package/dist/tests/embedding.test.js.map +1 -0
  299. package/dist/tests/engines/evaluation-engine.test.d.ts +1 -0
  300. package/dist/tests/engines/evaluation-engine.test.js +71 -0
  301. package/dist/tests/engines/evaluation-engine.test.js.map +1 -0
  302. package/dist/tests/engines/planning-engine.test.d.ts +1 -0
  303. package/dist/tests/engines/planning-engine.test.js +100 -0
  304. package/dist/tests/engines/planning-engine.test.js.map +1 -0
  305. package/dist/tests/engines/quality-gate.test.d.ts +1 -0
  306. package/dist/tests/engines/quality-gate.test.js +59 -0
  307. package/dist/tests/engines/quality-gate.test.js.map +1 -0
  308. package/dist/tests/engines/risk-engine.test.d.ts +1 -0
  309. package/dist/tests/engines/risk-engine.test.js +80 -0
  310. package/dist/tests/engines/risk-engine.test.js.map +1 -0
  311. package/dist/tests/engines/routing-engine.test.d.ts +1 -0
  312. package/dist/tests/engines/routing-engine.test.js +78 -0
  313. package/dist/tests/engines/routing-engine.test.js.map +1 -0
  314. package/dist/tests/integration/agent_flow.test.js +14 -8
  315. package/dist/tests/integration/agent_flow.test.js.map +1 -1
  316. package/dist/tests/integration/hermes_locking.test.js +1 -0
  317. package/dist/tests/integration/hermes_locking.test.js.map +1 -1
  318. package/dist/tests/modules/adapters/adapters.test.js +2 -2
  319. package/dist/tests/modules/adapters/adapters.test.js.map +1 -1
  320. package/dist/tests/modules/contracts/contracts.test.d.ts +1 -0
  321. package/dist/tests/modules/contracts/contracts.test.js +73 -0
  322. package/dist/tests/modules/contracts/contracts.test.js.map +1 -0
  323. package/dist/tests/modules/engines/agent-executor.test.js +30 -23
  324. package/dist/tests/modules/engines/agent-executor.test.js.map +1 -1
  325. package/dist/tests/modules/gateway/circuit-breaker.test.d.ts +1 -0
  326. package/dist/tests/modules/gateway/circuit-breaker.test.js +124 -0
  327. package/dist/tests/modules/gateway/circuit-breaker.test.js.map +1 -0
  328. package/dist/tests/modules/gateway/cost-tracker.test.d.ts +1 -0
  329. package/dist/tests/modules/gateway/cost-tracker.test.js +93 -0
  330. package/dist/tests/modules/gateway/cost-tracker.test.js.map +1 -0
  331. package/dist/tests/modules/gateway/load-balancer.test.d.ts +1 -0
  332. package/dist/tests/modules/gateway/load-balancer.test.js +70 -0
  333. package/dist/tests/modules/gateway/load-balancer.test.js.map +1 -0
  334. package/dist/tests/modules/gateway/rate-limiter.test.d.ts +1 -0
  335. package/dist/tests/modules/gateway/rate-limiter.test.js +62 -0
  336. package/dist/tests/modules/gateway/rate-limiter.test.js.map +1 -0
  337. package/dist/tests/orchestrator-dependencies.test.js +23 -6
  338. package/dist/tests/orchestrator-dependencies.test.js.map +1 -1
  339. package/dist/tests/shared/audit.test.d.ts +1 -0
  340. package/dist/tests/shared/audit.test.js +53 -0
  341. package/dist/tests/shared/audit.test.js.map +1 -0
  342. package/dist/tests/shared/lock.test.d.ts +1 -0
  343. package/dist/tests/shared/lock.test.js +95 -0
  344. package/dist/tests/shared/lock.test.js.map +1 -0
  345. package/dist/tests/shared/pii.test.d.ts +1 -0
  346. package/dist/tests/shared/pii.test.js +183 -0
  347. package/dist/tests/shared/pii.test.js.map +1 -0
  348. package/dist/tests/storage-operations.test.d.ts +1 -0
  349. package/dist/tests/storage-operations.test.js +116 -0
  350. package/dist/tests/storage-operations.test.js.map +1 -0
  351. package/framework-mcp/README.md +596 -77
  352. package/framework-mcp/dist/dashboard/assets/index-B2mYld0c.js +1221 -0
  353. package/framework-mcp/dist/dashboard/index.html +15 -0
  354. package/framework-mcp/dist/framework-mcp/src/index.js +914 -62
  355. package/framework-mcp/dist/framework-mcp/src/tools/compliance/mask_pii.js +55 -0
  356. package/framework-mcp/dist/framework-mcp/src/tools/definitions.js +24 -1
  357. package/framework-mcp/dist/framework-mcp/src/tools/framework/run_tests.js +25 -0
  358. package/framework-mcp/dist/framework-mcp/src/tools/gateway/llm_gateway_query.js +137 -0
  359. package/framework-mcp/dist/framework-mcp/src/tools/gateway/llm_gateway_status.js +90 -0
  360. package/framework-mcp/dist/framework-mcp/src/tools/index.js +34 -20
  361. package/framework-mcp/dist/framework-mcp/src/tools/messaging/approve_operation.js +80 -0
  362. package/framework-mcp/dist/framework-mcp/src/tools/messaging/ask_human.js +89 -20
  363. package/framework-mcp/dist/framework-mcp/src/tools/observability/check_ports.js +3 -1
  364. package/framework-mcp/dist/framework-mcp/src/tools/quality/analyze_code_quality.js +114 -0
  365. package/framework-mcp/dist/framework-mcp/src/tools/quality/check_architecture_compliance.js +134 -0
  366. package/framework-mcp/dist/framework-mcp/src/tools/schemas.js +32 -7
  367. package/framework-mcp/dist/framework-mcp/src/tools/shell/run_command.js +12 -2
  368. package/framework-mcp/dist/framework-mcp/src/tools/types.js +1 -0
  369. package/framework-mcp/dist/framework-mcp/src/utils/auth.js +78 -0
  370. package/framework-mcp/dist/framework-mcp/src/utils/auto-rollback.js +265 -0
  371. package/framework-mcp/dist/framework-mcp/src/utils/compliance.js +12 -4
  372. package/framework-mcp/dist/framework-mcp/src/utils/context-optimizer.js +156 -0
  373. package/framework-mcp/dist/framework-mcp/src/utils/discipline.js +217 -0
  374. package/framework-mcp/dist/framework-mcp/src/utils/finops.js +325 -0
  375. package/framework-mcp/dist/framework-mcp/src/utils/human-in-loop.js +215 -0
  376. package/framework-mcp/dist/framework-mcp/src/utils/license-scanner.js +283 -0
  377. package/framework-mcp/dist/framework-mcp/src/utils/loop-detector.js +361 -0
  378. package/framework-mcp/dist/framework-mcp/src/utils/quality.js +123 -0
  379. package/framework-mcp/dist/framework-mcp/src/utils/rules-engine.js +231 -0
  380. package/framework-mcp/dist/framework-mcp/src/utils/silent-router.js +128 -0
  381. package/framework-mcp/dist/framework-mcp/src/utils/storage.js +2 -2
  382. package/framework-mcp/dist/framework-mcp/src/utils/telemetry-streamer.js +396 -0
  383. package/framework-mcp/dist/src/cli/platforms/core.js +72 -0
  384. package/framework-mcp/dist/src/cli/platforms/index.js +5 -0
  385. package/framework-mcp/dist/src/cli/platforms/paths.js +101 -0
  386. package/framework-mcp/dist/src/cli/platforms/scaffold.js +72 -0
  387. package/framework-mcp/dist/src/cli/platforms/utils.js +75 -0
  388. package/framework-mcp/dist/src/cli/utils/claude.js +57 -0
  389. package/framework-mcp/dist/src/cli/utils/compliance.js +12 -0
  390. package/framework-mcp/dist/src/cli/utils/fs.js +138 -0
  391. package/framework-mcp/dist/src/cli/utils/pkg.js +282 -0
  392. package/framework-mcp/dist/src/cli/utils/quality.js +9 -0
  393. package/framework-mcp/dist/src/modules/agents/definitions.js +563 -0
  394. package/framework-mcp/dist/src/modules/agents/registry/analyst.js +39 -0
  395. package/framework-mcp/dist/src/modules/agents/registry/architect.js +42 -0
  396. package/framework-mcp/dist/src/modules/agents/registry/backend.js +50 -0
  397. package/framework-mcp/dist/src/modules/agents/registry/database.js +45 -0
  398. package/framework-mcp/dist/src/modules/agents/registry/devops.js +45 -0
  399. package/framework-mcp/dist/src/modules/agents/registry/explorer.js +37 -0
  400. package/framework-mcp/dist/src/modules/agents/registry/frontend.js +52 -0
  401. package/framework-mcp/dist/src/modules/agents/registry/git.js +36 -0
  402. package/framework-mcp/dist/src/modules/agents/registry/manager.js +64 -0
  403. package/framework-mcp/dist/src/modules/agents/registry/mobile.js +41 -0
  404. package/framework-mcp/dist/src/modules/agents/registry/native.js +41 -0
  405. package/framework-mcp/dist/src/modules/agents/registry/quality.js +43 -0
  406. package/framework-mcp/dist/src/modules/agents/registry/security.js +42 -0
  407. package/framework-mcp/dist/src/modules/agents/types.js +1 -0
  408. package/framework-mcp/dist/src/modules/engines/quality-gate.js +92 -0
  409. package/framework-mcp/dist/src/modules/engines/risk-engine.js +105 -0
  410. package/framework-mcp/dist/src/modules/engines/routing-engine.js +408 -0
  411. package/framework-mcp/dist/src/modules/engines/types.js +1 -0
  412. package/framework-mcp/dist/src/modules/memory/core.js +10 -17
  413. package/framework-mcp/dist/src/modules/memory/embedding.js +130 -0
  414. package/framework-mcp/dist/src/modules/providers/definitions.js +140 -0
  415. package/framework-mcp/dist/src/modules/providers/registry.js +18 -0
  416. package/framework-mcp/dist/src/modules/providers/shared.js +104 -0
  417. package/framework-mcp/dist/src/modules/providers/types.js +1 -0
  418. package/framework-mcp/dist/src/modules/skills/adapter-skills.js +449 -0
  419. package/framework-mcp/dist/src/modules/skills/definitions.js +70 -0
  420. package/framework-mcp/dist/src/shared/audit.js +220 -0
  421. package/framework-mcp/dist/src/shared/errors.js +68 -0
  422. package/framework-mcp/dist/src/shared/fs.js +4 -2
  423. package/framework-mcp/dist/src/shared/lock.js +159 -0
  424. package/framework-mcp/dist/src/shared/logger.js +15 -5
  425. package/framework-mcp/dist/src/shared/pii.js +212 -0
  426. package/framework-mcp/dist/src/shared/retention.js +170 -0
  427. package/framework-mcp/dist/src/shared/storage.js +49 -7
  428. package/framework-mcp/dist/src/shared/string.js +29 -0
  429. package/framework-mcp/package.json +8 -2
  430. package/mcp.json +11 -6
  431. package/package.json +22 -9
  432. package/templates/full/ATABEY_FULL.md +515 -0
@@ -0,0 +1,212 @@
1
+ /**
2
+ * [PII] Personally Identifiable Information Masking Service
3
+ *
4
+ * Detects and masks sensitive data in compliance with KVKK/GDPR.
5
+ * Used in audit log, logger, storage layers, and MCP middleware.
6
+ *
7
+ * Supported patterns:
8
+ * - Email addresses
9
+ * - Phone numbers (international, Turkish, US, UK)
10
+ * - TC Identification number (11 digits)
11
+ * - API keys / tokens (OpenAI, Anthropic, Google, GitHub, generic)
12
+ * - Bearer tokens / JWTs
13
+ * - IP addresses (IPv4, IPv6)
14
+ * - Credit card numbers (AMEX, Visa, Mastercard, etc.)
15
+ * - Password / secret fields in structured data
16
+ * - Bank account / IBAN
17
+ * - Date of birth / full address patterns
18
+ * - Custom names (configurable)
19
+ */
20
+ // Sensitive patterns to detect and mask
21
+ // IMPORTANT: More specific patterns MUST come before generic ones
22
+ const SENSITIVE_PATTERNS = [
23
+ // JWT tokens (complete JWT format) - must be before Bearer
24
+ { pattern: /eyJ[a-zA-Z0-9_-]+\.eyJ[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+/g, replacement: "***-JWT-REDACTED-***" },
25
+ // Bearer tokens in Authorization headers
26
+ { pattern: /Bearer\s+[a-zA-Z0-9._-]+/g, replacement: "Bearer ***-REDACTED-***" },
27
+ // Basic auth in Authorization headers
28
+ { pattern: /Basic\s+[a-zA-Z0-9=+/]+/g, replacement: "Basic ***-REDACTED-***" },
29
+ // API keys (common formats) - must be before generic patterns
30
+ // Note: ghp_ tokens can contain digits that look like phone numbers, so we mask the entire prefix + suffix
31
+ { pattern: /\b(sk-[a-zA-Z0-9]{20,}|pk-[a-zA-Z0-9]{20,}|xai-[a-zA-Z0-9]{20,}|AIza[0-9A-Za-z_-]{35}|ghp_[a-zA-Z0-9]{36,}|gho_[a-zA-Z0-9]{36,}|ghu_[a-zA-Z0-9]{36,}|ghb_[a-zA-Z0-9]{36,}|github_pat_[a-zA-Z0-9]{36,}|sk-[a-zA-Z0-9_-]{32,}|sk-[a-zA-Z0-9]{48,}|whsec_[a-zA-Z0-9]{16,})\b/g, replacement: "***-REDACTED-***" },
32
+ // Social Security Number (US SSN: XXX-XX-XXXX) - must be before generic phone
33
+ { pattern: /\b(?!000|666|9[0-9]{2})\d{3}-(?!00)\d{2}-(?!0000)\d{4}\b/g, replacement: "***-**-****" },
34
+ // Date of birth patterns - must be before generic phone
35
+ { pattern: /\b(0[1-9]|[12][0-9]|3[01])[/.-](0[1-9]|1[0-2])[/.-](19[0-9]{2}|20[0-9]{2})\b/g, replacement: "**/**/****" },
36
+ // IBAN (international bank account) - must be before generic alphanumeric patterns
37
+ // Only matches valid IBAN format: 2 letters + 2 digits + 4-30 alphanumeric chars
38
+ // More specific: requires minimum 8 chars total, starts with country code
39
+ { pattern: /\b[A-Z]{2}[0-9]{2}[A-Z0-9]{4,30}\b/g, replacement: "****-IBAN-REDACTED-****" },
40
+ // TC Kimlik (11 digits starting with 1-9, isolated word boundary) - must be before phone
41
+ { pattern: /\b[1-9][0-9]{10}\b/g, replacement: "***********" },
42
+ // Email
43
+ { pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, replacement: "***@***" },
44
+ // Phone (Turkish: +90 5xx xxx xx xx) - specific before generic
45
+ { pattern: /(\+90|0)?\s?[0-9]{3}\s?[0-9]{3}\s?[0-9]{2}\s?[0-9]{2}/g, replacement: "***-***-****" },
46
+ // Phone (international: +90, +1, +44, +49, +33, etc.) - generic, keep last among phones
47
+ { pattern: /(\+\d{1,2}[\s-]?)?\(?\d{2,4}\)?[\s-]?\d{2,4}[\s-]?\d{2,4}[\s-]?\d{2,4}/g, replacement: "***-***-****" },
48
+ // IP addresses (IPv4)
49
+ { pattern: /\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/g, replacement: "***.***.***.***" },
50
+ // IP addresses (IPv6 - simplified)
51
+ { pattern: /\b(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\b/g, replacement: "****:****:****:****" },
52
+ // IPv6 compressed
53
+ { pattern: /\b(?:[0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}\b/g, replacement: "****:****:****" },
54
+ // Credit card (16 digits, optional spaces/dashes)
55
+ { pattern: /\b(?:\d[ -]*?){13,16}\b/g, replacement: "****-****-****-****" },
56
+ // AMEX (15 digits, starts with 34/37)
57
+ { pattern: /\b3[47][0-9\s-]{13,14}\b/g, replacement: "****-****-***" },
58
+ // Password fields in JSON
59
+ { pattern: /"(password|passwd|secret|api_key|apiKey|apikey|auth_token|refresh_token|access_token)"\s*:\s*"[^"]+"/gi, replacement: "\"$1\": \"***-REDACTED-***\"" },
60
+ // Turkish address patterns (optional - sokak, cadde, mahalle, no:)
61
+ { pattern: /(?:no|no:|numara)[:\s]*\d+/gi, replacement: "no: ****" },
62
+ ];
63
+ // Fields that are considered sensitive and should always be redacted in structured data
64
+ const SENSITIVE_FIELDS = [
65
+ "password", "passwd", "secret", "apiKey", "api_key", "apikey",
66
+ "token", "accessToken", "access_token", "refreshToken", "refresh_token", "authToken", "auth_token",
67
+ "authorization", "Authorization", "bearer",
68
+ "email", "e_mail", "eMail",
69
+ "phone", "phoneNumber", "phone_number", "telephone", "telephoneNumber", "mobile", "mobilePhone", "cellPhone",
70
+ "creditCard", "credit_card", "ccNumber", "cc_number", "ccn", "cvv", "cvv2", "cvc",
71
+ "ssn", "socialSecurity", "social_security",
72
+ "tcKimlik", "tc_kimlik", "identityNumber", "identity_number", "idNumber", "id_number", "nationalId",
73
+ "ipAddress", "ip_address", "ip",
74
+ "dob", "dateOfBirth", "date_of_birth", "birthDate", "birth_date",
75
+ "iban", "IBAN", "bankAccount", "bank_account",
76
+ "address", "homeAddress", "workAddress", "billingAddress", "shippingAddress",
77
+ "fullName", "firstName", "lastName", "surname", "middleName",
78
+ ];
79
+ /**
80
+ * Mask sensitive data in a text string.
81
+ */
82
+ export function maskText(text) {
83
+ if (!text || typeof text !== "string")
84
+ return text;
85
+ let masked = text;
86
+ for (const { pattern, replacement } of SENSITIVE_PATTERNS) {
87
+ masked = masked.replace(pattern, replacement);
88
+ }
89
+ return masked;
90
+ }
91
+ /**
92
+ * Recursively mask sensitive fields in an object.
93
+ * Returns a new object with sensitive values redacted.
94
+ * Strict mode: when true, also masks values in objects even if the key
95
+ * is not a known sensitive field name (catches data passed to unknown schemas).
96
+ */
97
+ export function maskObject(obj, depth = 0, strictMode = false) {
98
+ if (depth > 10)
99
+ return obj; // Prevent infinite recursion
100
+ if (obj === null || obj === undefined)
101
+ return obj;
102
+ if (typeof obj === "string")
103
+ return maskText(obj);
104
+ if (typeof obj !== "object")
105
+ return obj;
106
+ if (Array.isArray(obj)) {
107
+ return obj.map(item => maskObject(item, depth + 1, strictMode));
108
+ }
109
+ const result = {};
110
+ for (const [key, value] of Object.entries(obj)) {
111
+ // Check if the key itself is a sensitive field
112
+ if (SENSITIVE_FIELDS.includes(key)) {
113
+ result[key] = typeof value === "string" ? "***-REDACTED-***" : maskObject(value, depth + 1, strictMode);
114
+ }
115
+ else if (typeof value === "string") {
116
+ result[key] = maskText(value);
117
+ }
118
+ else if (typeof value === "object") {
119
+ result[key] = maskObject(value, depth + 1, strictMode);
120
+ }
121
+ else {
122
+ result[key] = value;
123
+ }
124
+ }
125
+ return result;
126
+ }
127
+ /**
128
+ * Check if a string contains potential PII.
129
+ * Useful for warning before sending data to external APIs.
130
+ */
131
+ export function containsPII(text) {
132
+ for (const { pattern } of SENSITIVE_PATTERNS) {
133
+ if (pattern.test(text))
134
+ return true;
135
+ }
136
+ return false;
137
+ }
138
+ /**
139
+ * Check if an object contains PII in any of its string values (recursive).
140
+ */
141
+ export function containsPIIInObject(obj, depth = 0) {
142
+ if (depth > 10)
143
+ return false;
144
+ if (obj === null || obj === undefined)
145
+ return false;
146
+ if (typeof obj === "string")
147
+ return containsPII(obj);
148
+ if (typeof obj !== "object")
149
+ return false;
150
+ if (Array.isArray(obj)) {
151
+ return obj.some(item => containsPIIInObject(item, depth + 1));
152
+ }
153
+ for (const [_key, value] of Object.entries(obj)) {
154
+ if (typeof value === "string") {
155
+ if (containsPII(value))
156
+ return true;
157
+ }
158
+ else if (typeof value === "object") {
159
+ if (containsPIIInObject(value, depth + 1))
160
+ return true;
161
+ }
162
+ }
163
+ return false;
164
+ }
165
+ /**
166
+ * Classify a piece of data based on content analysis.
167
+ */
168
+ export function classifyData(text) {
169
+ if (!text)
170
+ return "public";
171
+ // Check for highly sensitive / critical data
172
+ if (/\b(sk-[a-zA-Z0-9]{20,}|Bearer\s+|eyJ[a-zA-Z0-9_-]+\.)/.test(text) ||
173
+ /\b[1-9][0-9]{10}\b/.test(text) ||
174
+ /"(password|secret|apiKey)"/i.test(text) ||
175
+ /\b[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}\b/.test(text) // IBAN
176
+ ) {
177
+ return "restricted";
178
+ }
179
+ // Check for personally identifiable / confidential data
180
+ if (/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/.test(text) ||
181
+ /(\+90|0)?\s?[0-9]{3}\s?[0-9]{3}\s?[0-9]{2}\s?[0-9]{2}/.test(text) ||
182
+ /\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/.test(text) ||
183
+ /\b(0[1-9]|[12][0-9]|3[01])[/.-](0[1-9]|1[0-2])[/.-](19[0-9]{2}|20[0-9]{2})\b/.test(text)) {
184
+ return "confidential";
185
+ }
186
+ return "internal";
187
+ }
188
+ /**
189
+ * Mask the content field of an MCP tool result.
190
+ * This is used by the MCP middleware layer to automatically
191
+ * sanitize all tool outputs before they reach the AI.
192
+ */
193
+ export function maskToolResult(result) {
194
+ if (!result || !result.content)
195
+ return result;
196
+ return {
197
+ ...result,
198
+ content: result.content.map(block => ({
199
+ ...block,
200
+ text: block.type === "text" ? maskText(block.text) : block.text,
201
+ })),
202
+ };
203
+ }
204
+ /**
205
+ * Mask sensitive arguments in an MCP tool call.
206
+ * This is applied BEFORE the tool handler executes, ensuring
207
+ * PII never reaches any processing layer unnecessarily.
208
+ */
209
+ export function maskToolArgs(args) {
210
+ const masked = maskObject(args, 0, true);
211
+ return masked;
212
+ }
@@ -0,0 +1,170 @@
1
+ /**
2
+ * [KVKK/GDPR] Data Retention & Privacy Service
3
+ *
4
+ * KVKK Art. 4, 5, 7, 11 and GDPR Art. 5, 17 compliant data retention management.
5
+ *
6
+ * Features:
7
+ * - Automatic expired record cleanup
8
+ * - Data categorization (operational, user_data, api_call, security, compliance)
9
+ * - "Right to Erasure" support
10
+ * - Configurable retention policies
11
+ * - Periodic cleanup cron job
12
+ */
13
+ import { Audit } from "./audit.js";
14
+ import { logger } from "./logger.js";
15
+ import { Storage } from "./storage.js";
16
+ /**
17
+ * Data retention categories and default durations (days)
18
+ */
19
+ export const RETENTION_POLICIES = {
20
+ OPERATIONAL: 30, // Operational logs: 30 days
21
+ USER_DATA: 90, // User data: 90 days (KVKK Art. 5)
22
+ API_CALL: 180, // API call records: 180 days
23
+ SECURITY: 365, // Security logs: 1 year
24
+ COMPLIANCE: 730, // Compliance records: 2 years
25
+ };
26
+ /**
27
+ * [KVKK/GDPR] Data Retention Manager
28
+ */
29
+ export class DataRetention {
30
+ static cleanupInterval = null;
31
+ /**
32
+ * Initialize data retention with automatic cleanup.
33
+ * Starts a periodic cleanup job.
34
+ *
35
+ * @param intervalMs Cleanup interval in milliseconds (default: 1 hour)
36
+ */
37
+ static initialize(intervalMs = 3600000) {
38
+ // Run initial cleanup
39
+ this.runCleanup();
40
+ // Schedule periodic cleanup
41
+ if (this.cleanupInterval) {
42
+ clearInterval(this.cleanupInterval);
43
+ }
44
+ this.cleanupInterval = setInterval(() => this.runCleanup(), intervalMs);
45
+ logger.info("[RETENTION] Data retention initialized. " +
46
+ `Cleanup interval: ${intervalMs / 60000}min. ` +
47
+ `Policies: ${Object.entries(RETENTION_POLICIES).map(([k, v]) => `${k}=${v}d`).join(", ")}`);
48
+ }
49
+ /**
50
+ * Run cleanup for all data stores.
51
+ * Cleans audit logs, messages, and logs based on retention policies.
52
+ */
53
+ static runCleanup() {
54
+ const result = { audit: 0, messages: 0, logs: 0 };
55
+ try {
56
+ // 1. Clean audit logs
57
+ result.audit = Audit.cleanExpired();
58
+ // 2. Clean old messages (Hermes message queue)
59
+ result.messages = this.cleanOldMessages();
60
+ // 3. Clean old logs
61
+ result.logs = this.cleanOldLogs();
62
+ if (result.audit > 0 || result.messages > 0 || result.logs > 0) {
63
+ logger.info("[RETENTION] Cleanup complete: " +
64
+ `${result.audit} audit, ${result.messages} messages, ${result.logs} logs`);
65
+ }
66
+ }
67
+ catch (error) {
68
+ logger.error(`[RETENTION] Cleanup failed: ${error.message}`);
69
+ }
70
+ return result;
71
+ }
72
+ /**
73
+ * [KVKK Art. 7] "Right to Erasure" — Deletes all data for a given trace ID.
74
+ * Cleans audit records, messages, logs, and tasks.
75
+ *
76
+ * @param traceId Trace ID to erase
77
+ * @returns Total number of deleted records
78
+ */
79
+ static eraseTraceData(traceId) {
80
+ let total = 0;
81
+ // Audit logs
82
+ total += Audit.deleteByFilter({ traceId });
83
+ // Messages
84
+ const db = Storage.getDB();
85
+ const msgResult = db.prepare("DELETE FROM messages WHERE trace_id = ?").run(traceId);
86
+ total += msgResult.changes;
87
+ // Tasks
88
+ const taskResult = db.prepare("DELETE FROM tasks WHERE trace_id = ?").run(traceId);
89
+ total += taskResult.changes;
90
+ // Logs
91
+ const logResult = db.prepare("DELETE FROM logs WHERE trace_id = ?").run(traceId);
92
+ total += logResult.changes;
93
+ logger.info(`[RETENTION] Trace ${traceId} erased: ${total} records deleted (KVKK Article 7)`);
94
+ return total;
95
+ }
96
+ /**
97
+ * [KVKK Art. 11] Erases all data.
98
+ * Only works with the confirmation code.
99
+ */
100
+ static eraseAllData(confirmationCode) {
101
+ if (confirmationCode !== "KVKK-RIGHT-TO-ERASURE") {
102
+ throw new Error("[RETENTION] Invalid confirmation code. Use 'KVKK-RIGHT-TO-ERASURE'");
103
+ }
104
+ let total = 0;
105
+ const db = Storage.getDB();
106
+ total += Audit.clearAll(confirmationCode);
107
+ total += db.prepare("DELETE FROM messages").run().changes;
108
+ total += db.prepare("DELETE FROM tasks").run().changes;
109
+ total += db.prepare("DELETE FROM logs").run().changes;
110
+ total += db.prepare("DELETE FROM agents").run().changes;
111
+ total += db.prepare("DELETE FROM metadata").run().changes;
112
+ logger.warn(`[RETENTION] ALL DATA ERASED: ${total} records (KVKK Article 7 - Right to Erasure)`);
113
+ return total;
114
+ }
115
+ /**
116
+ * Get retention statistics.
117
+ */
118
+ static getStats() {
119
+ const db = Storage.getDB();
120
+ const auditExpired = db.prepare(`
121
+ SELECT COUNT(*) as count FROM audit_log
122
+ WHERE retentionDays IS NOT NULL
123
+ AND timestamp < datetime('now', '-' || retentionDays || ' days')
124
+ `).get().count;
125
+ const messageCount = db.prepare("SELECT COUNT(*) as count FROM messages").get().count;
126
+ const logCount = db.prepare("SELECT COUNT(*) as count FROM logs").get().count;
127
+ const taskCount = db.prepare("SELECT COUNT(*) as count FROM tasks").get().count;
128
+ return {
129
+ auditExpired,
130
+ messageCount,
131
+ logCount,
132
+ taskCount,
133
+ policies: { ...RETENTION_POLICIES },
134
+ };
135
+ }
136
+ /**
137
+ * Stop the periodic cleanup job.
138
+ */
139
+ static shutdown() {
140
+ if (this.cleanupInterval) {
141
+ clearInterval(this.cleanupInterval);
142
+ this.cleanupInterval = null;
143
+ logger.info("[RETENTION] Cleanup job stopped");
144
+ }
145
+ }
146
+ /**
147
+ * Clean old messages from the Hermes queue.
148
+ * Messages older than 30 days are removed.
149
+ */
150
+ static cleanOldMessages() {
151
+ const db = Storage.getDB();
152
+ const result = db.prepare(`
153
+ DELETE FROM messages
154
+ WHERE timestamp < datetime('now', '-30 days')
155
+ `).run();
156
+ return result.changes;
157
+ }
158
+ /**
159
+ * Clean old logs.
160
+ * Logs older than 30 days are removed.
161
+ */
162
+ static cleanOldLogs() {
163
+ const db = Storage.getDB();
164
+ const result = db.prepare(`
165
+ DELETE FROM logs
166
+ WHERE timestamp < datetime('now', '-30 days')
167
+ `).run();
168
+ return result.changes;
169
+ }
170
+ }
@@ -3,12 +3,13 @@ import fs from "fs";
3
3
  import path from "path";
4
4
  import { getFrameworkDir } from "../cli/utils/memory.js";
5
5
  import { logger } from "./logger.js";
6
+ import { maskText } from "./pii.js";
6
7
  import { asAgentID, asLogID, asMessageID, asTaskID } from "./types.js";
7
8
  /**
8
9
  * [DB] Atabey Storage Engine
9
10
  * Central SQLite database for enterprise-scale agent state management.
10
11
  */
11
- export class Storage {
12
+ export class AtabeyStorage {
12
13
  static db = null;
13
14
  static getDB() {
14
15
  if (!this.db) {
@@ -18,6 +19,7 @@ export class Storage {
18
19
  }
19
20
  const dbPath = path.join(frameworkDir, "atabey.db");
20
21
  this.db = new Database(dbPath);
22
+ this.db.pragma("journal_mode = WAL");
21
23
  this.initializeSchema();
22
24
  }
23
25
  return this.db;
@@ -82,12 +84,47 @@ export class Storage {
82
84
  value TEXT
83
85
  )
84
86
  `);
87
+ // Costs Table
88
+ db.exec(`
89
+ CREATE TABLE IF NOT EXISTS costs (
90
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
91
+ provider TEXT,
92
+ model TEXT,
93
+ input_tokens INTEGER,
94
+ output_tokens INTEGER,
95
+ cost REAL,
96
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
97
+ trace_id TEXT
98
+ )
99
+ `);
100
+ }
101
+ // --- Cost Operations ---
102
+ static saveCost(cost) {
103
+ const db = this.getDB();
104
+ db.prepare(`
105
+ INSERT INTO costs (provider, model, input_tokens, output_tokens, cost, timestamp, trace_id)
106
+ VALUES (?, ?, ?, ?, ?, ?, ?)
107
+ `).run(cost.provider, cost.model, cost.inputTokens, cost.outputTokens, cost.cost, cost.timestamp, cost.traceId || null);
108
+ }
109
+ static getAllCosts() {
110
+ const rows = this.getDB().prepare("SELECT * FROM costs ORDER BY timestamp ASC").all();
111
+ return rows.map(r => ({
112
+ provider: r.provider,
113
+ model: r.model,
114
+ inputTokens: r.input_tokens,
115
+ outputTokens: r.output_tokens,
116
+ cost: r.cost,
117
+ timestamp: r.timestamp,
118
+ traceId: r.trace_id || undefined
119
+ }));
85
120
  }
86
121
  // --- Agent Operations ---
87
122
  static updateAgentStatus(name, state, task, lastUpdated) {
88
123
  const db = this.getDB();
89
124
  const cleanName = name.replace("@", "");
90
125
  const timestamp = lastUpdated || new Date().toISOString();
126
+ // [KVKK/GDPR] Mask PII in task description before storing
127
+ const maskedTask = maskText(task);
91
128
  db.prepare(`
92
129
  INSERT INTO agents (name, state, task, last_updated)
93
130
  VALUES (?, ?, ?, ?)
@@ -95,7 +132,7 @@ export class Storage {
95
132
  state = excluded.state,
96
133
  task = excluded.task,
97
134
  last_updated = excluded.last_updated
98
- `).run(cleanName, state, task, timestamp);
135
+ `).run(cleanName, state, maskedTask, timestamp);
99
136
  }
100
137
  static getAllAgents() {
101
138
  return this.getDB().prepare("SELECT * FROM agents").all();
@@ -103,10 +140,12 @@ export class Storage {
103
140
  // --- Message Operations ---
104
141
  static saveMessage(msg) {
105
142
  const db = this.getDB();
143
+ // [KVKK/GDPR] Mask PII in message content before storing
144
+ const maskedContent = maskText(msg.content);
106
145
  db.prepare(`
107
146
  INSERT INTO messages (sender, receiver, category, content, trace_id, parent_id, status, priority, requires_approval)
108
147
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
109
- `).run(msg.from, msg.to, msg.category, msg.content, msg.traceId, msg.parentId || null, msg.status || "PENDING", msg.priority || "NORMAL", msg.requiresApproval ? 1 : 0);
148
+ `).run(msg.from, msg.to, msg.category, maskedContent, msg.traceId, msg.parentId || null, msg.status || "PENDING", msg.priority || "NORMAL", msg.requiresApproval ? 1 : 0);
110
149
  }
111
150
  static getPendingMessages() {
112
151
  const rows = this.getDB().prepare("SELECT * FROM messages WHERE status IN ('PENDING', 'APPROVED') ORDER BY priority DESC, timestamp ASC").all();
@@ -151,7 +190,6 @@ export class Storage {
151
190
  let deps = [];
152
191
  try {
153
192
  const parsed = JSON.parse(r.dependencies || "[]");
154
- // Handle cases where dependencies might be double-stringified or are raw JSON strings
155
193
  deps = Array.isArray(parsed) ? parsed : JSON.parse(parsed);
156
194
  }
157
195
  catch (err) {
@@ -164,7 +202,8 @@ export class Storage {
164
202
  agent: asAgentID(r.agent),
165
203
  status: r.status,
166
204
  priority: r.priority,
167
- dependencies: deps
205
+ dependencies: deps,
206
+ createdAt: r.created_at
168
207
  };
169
208
  });
170
209
  }
@@ -185,8 +224,9 @@ export class Storage {
185
224
  action: r.action,
186
225
  trace_id: r.trace_id || undefined,
187
226
  status: r.status,
188
- summary: r.summary,
189
- findings: r.findings || undefined
227
+ // [KVKK/GDPR] Mask PII in log summaries before returning
228
+ summary: maskText(r.summary),
229
+ findings: r.findings ? maskText(r.findings) : undefined
190
230
  }));
191
231
  }
192
232
  // --- Metadata Operations ---
@@ -207,3 +247,5 @@ export class Storage {
207
247
  }
208
248
  }
209
249
  }
250
+ /** @deprecated Use AtabeyStorage instead. Kept for backward compatibility. */
251
+ export const Storage = AtabeyStorage;
@@ -0,0 +1,29 @@
1
+ export function stripMarkdownCodeBlocks(text) {
2
+ // Regex to find markdown code blocks (```lang ... ```) and extract their content.
3
+ // Handles cases where LLMs might wrap JSON in such blocks.
4
+ const markdownCodeBlockRegex = /```(?:\w+)?\s*([\s\S]*?)\s*```/g;
5
+ // Attempt to extract content from a single markdown code block.
6
+ const cleanedText = text.replace(markdownCodeBlockRegex, "$1").trim();
7
+ // If after stripping, it looks like JSON, return it.
8
+ if ((cleanedText.startsWith("{") && cleanedText.endsWith("}")) || (cleanedText.startsWith("[") && cleanedText.endsWith("]"))) {
9
+ return cleanedText;
10
+ }
11
+ // Fallback: If the original text itself was valid JSON (without being in a code block)
12
+ // or if the stripping made it valid, this check helps.
13
+ try {
14
+ JSON.parse(text.trim());
15
+ return text.trim(); // Original text was valid JSON
16
+ }
17
+ catch {
18
+ // Continue if original text wasn't valid JSON
19
+ }
20
+ // Try a more specific JSON code block extraction if the generic one didn't yield valid JSON
21
+ const specificJsonCodeBlockRegex = /```json\s*(\{[\s\S]*?\}|\[[\s\S]*?\])\s*```/g;
22
+ const specificMatch = text.match(specificJsonCodeBlockRegex);
23
+ if (specificMatch && specificMatch[1]) {
24
+ return specificMatch[1].trim();
25
+ }
26
+ // If all else fails, return the most aggressively stripped version.
27
+ // JSON.parse will fail if it's not valid, which is the expected behavior.
28
+ return cleanedText;
29
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atabey-mcp",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "Agent Atabey Model Context Protocol (MCP) Server",
5
5
  "author": "Yusuf BEKAR",
6
6
  "license": "MIT",
@@ -22,7 +22,12 @@
22
22
  "scripts": {
23
23
  "build": "npx tsc",
24
24
  "start": "node dist/index.js",
25
- "dev": "tsx src/index.ts"
25
+ "dev": "tsx src/index.ts",
26
+ "test": "vitest run",
27
+ "test:watch": "vitest"
28
+ },
29
+ "vitest": {
30
+ "include": ["tests/**/*.test.ts"]
26
31
  },
27
32
  "dependencies": {
28
33
  "@modelcontextprotocol/sdk": "^1.29.0",
@@ -32,6 +37,7 @@
32
37
  "devDependencies": {
33
38
  "@types/better-sqlite3": "^7.6.13",
34
39
  "@types/node": "^25.9.1",
40
+ "tsx": "^4.22.3",
35
41
  "typescript": "^5.9.3"
36
42
  }
37
43
  }
package/mcp.json CHANGED
@@ -2,13 +2,18 @@
2
2
  "mcpServers": {
3
3
  "atabey": {
4
4
  "command": "atabey",
5
- "args": [
6
- "mcp",
7
- "start"
8
- ],
5
+ "args": ["mcp", "start"],
9
6
  "env": {
10
7
  "ATABEY_PROJECT_ROOT": "/Users/ybekar/Desktop/Projeler/atabey"
11
- }
8
+ },
9
+ "description": "Stdio mode: her kullanici kendi IDE'sinden baglanir."
10
+ },
11
+ "atabey-sse": {
12
+ "url": "http://localhost:5858/mcp/sse",
13
+ "env": {
14
+ "ATABEY_PROJECT_ROOT": "/Users/ybekar/Desktop/Projeler/atabey"
15
+ },
16
+ "description": "Unified mode: Tek port 5858'de MCP + Dashboard birlikte. Dashboard: http://localhost:5858"
12
17
  }
13
18
  }
14
- }
19
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "atabey",
3
- "version": "0.0.12",
4
- "description": "The Supreme AI Governance & Autonomous Orchestration Framework for Enterprise Development. Supports Polyglot Backends (Go, Java, Python, .NET, Node.js) and Multi-Language Communication (TR/EN).",
3
+ "version": "0.0.14",
4
+ "description": "MCP-Powered AI Governance & Autonomous Orchestration Framework. Plugs into Claude Code, Gemini CLI, and Cursor as an MCP server.",
5
5
  "author": "Yusuf BEKAR",
6
6
  "license": "MIT",
7
7
  "readme": "README.md",
@@ -21,7 +21,10 @@
21
21
  "agents",
22
22
  "mcp",
23
23
  "typescript",
24
- "framework"
24
+ "framework",
25
+ "kvkk",
26
+ "gdpr",
27
+ "privacy"
25
28
  ],
26
29
  "workspaces": [
27
30
  "framework-mcp"
@@ -38,6 +41,7 @@
38
41
  "LICENSE",
39
42
  "mcp.json",
40
43
  "ATABEY.md",
44
+ "PRIVACY.md",
41
45
  "framework-mcp/dist",
42
46
  "framework-mcp/package.json"
43
47
  ],
@@ -48,13 +52,20 @@
48
52
  "build": "npm run build:core && npm run build:mcp && npm run build:ui",
49
53
  "build:core": "tsc",
50
54
  "build:mcp": "npm run build --prefix framework-mcp",
51
- "build:ui": "npm run build --prefix src/dashboard",
55
+ "build:ui": "npm run build --prefix framework-mcp/dashboard",
52
56
  "lint": "eslint .",
53
57
  "test": "vitest run",
54
58
  "test:watch": "vitest",
55
59
  "test:coverage": "vitest run --coverage",
56
60
  "prepublishOnly": "npm run build",
57
- "clean": "rm -rf dist node_modules framework-mcp/node_modules framework-mcp/dist"
61
+ "clean": "rm -rf dist node_modules framework-mcp/node_modules framework-mcp/dist",
62
+ "atabey:status": "atabey status",
63
+ "atabey:trace": "atabey trace:new",
64
+ "atabey:verify": "atabey verify-contract",
65
+ "atabey:check": "atabey check",
66
+ "atabey:test": "vitest run",
67
+ "atabey:test:watch": "vitest",
68
+ "atabey:build": "npm run build --prefix framework-mcp"
58
69
  },
59
70
  "publishConfig": {
60
71
  "access": "public"
@@ -65,22 +76,24 @@
65
76
  "chalk": "^5.6.2",
66
77
  "js-yaml": "^4.2.0",
67
78
  "typescript": "^5.9.3",
79
+ "ws": "^8.21.0",
68
80
  "zod": "^3.24.2"
69
81
  },
70
82
  "devDependencies": {
71
83
  "@eslint/js": "^10.0.1",
72
- "@pandacss/dev": "^1.11.1",
73
84
  "@types/better-sqlite3": "^7.6.13",
74
85
  "@types/node": "^25.9.1",
86
+ "@types/ws": "^8.18.1",
75
87
  "@vitest/coverage-v8": "^3.2.6",
76
88
  "eslint": "^10.4.0",
77
89
  "globals": "^17.6.0",
78
90
  "tsx": "^4.22.3",
79
91
  "typescript-eslint": "^8.0.0",
80
- "vitest": "^3.0.0"
92
+ "vitest": "^3.0.0",
93
+ "atabey": "^0.0.14"
81
94
  },
82
95
  "atabey": {
83
- "version": "0.0.12",
84
- "initializedAt": "2026-06-17T12:23:33.114Z"
96
+ "version": "0.0.14",
97
+ "initializedAt": "2026-06-20T15:11:43.308Z"
85
98
  }
86
99
  }