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 @@
1
+ {"version":3,"file":"adapter-skills.js","sourceRoot":"","sources":["../../../../src/modules/skills/adapter-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * [AUDIT] Structured Audit Log Service
3
+ *
4
+ * Records all critical operations in structured JSON format to SQLite.
5
+ * Queryable, filterable, and traceable.
6
+ *
7
+ * [KVKK/GDPR] GDPR and KVKK Art. 4, 5, 11, 12 compliant:
8
+ * - Sensitive data automatically masked (PII masking)
9
+ * - Data retention limited (TTL)
10
+ * - Data subject rights supported (erasure, query)
11
+ *
12
+ * Usage:
13
+ * Audit.log("user.create", "SUCCESS", { userId: "usr_123" });
14
+ * Audit.query({ action: "user.create", status: "FAILED" });
15
+ */
16
+ export type AuditStatus = "SUCCESS" | "FAILED" | "BLOCKED" | "APPROVED" | "REJECTED";
17
+ export type DataCategory = "OPERATIONAL" | "USER_DATA" | "API_CALL" | "SECURITY" | "COMPLIANCE";
18
+ export interface AuditEntry {
19
+ id?: number;
20
+ timestamp: string;
21
+ action: string;
22
+ status: AuditStatus;
23
+ agent: string;
24
+ traceId?: string;
25
+ details?: Record<string, unknown>;
26
+ errorMessage?: string;
27
+ durationMs?: number;
28
+ dataCategory?: DataCategory;
29
+ /** [KVKK] Data retention period (days). null = unlimited (not recommended) */
30
+ retentionDays?: number;
31
+ }
32
+ export declare class Audit {
33
+ private static TABLE;
34
+ /** [KVKK] Default data retention period: 30 days */
35
+ private static DEFAULT_RETENTION_DAYS;
36
+ /** [KVKK] Maximum retention for sensitive categories: 90 days */
37
+ private static MAX_RETENTION_DAYS;
38
+ static initialize(): void;
39
+ /**
40
+ * Logs a structured audit entry.
41
+ * [KVKK] Sensitive data is automatically masked.
42
+ */
43
+ static log(action: string, status: AuditStatus, options?: {
44
+ agent?: string;
45
+ traceId?: string;
46
+ details?: Record<string, unknown>;
47
+ errorMessage?: string;
48
+ durationMs?: number;
49
+ dataCategory?: DataCategory;
50
+ /** [KVKK] Custom retention period (days). Default: 30 */
51
+ retentionDays?: number;
52
+ }): void;
53
+ /**
54
+ * Queries audit logs with filters.
55
+ */
56
+ static query(options?: {
57
+ action?: string;
58
+ status?: AuditStatus;
59
+ agent?: string;
60
+ traceId?: string;
61
+ dataCategory?: DataCategory;
62
+ limit?: number;
63
+ offset?: number;
64
+ since?: string;
65
+ until?: string;
66
+ }): AuditEntry[];
67
+ /**
68
+ * [KVKK Art. 11] Deletes records upon data subject request.
69
+ * Clears all records matching a given traceId or agent.
70
+ *
71
+ * @param filter Which records to delete
72
+ * @returns Number of deleted records
73
+ */
74
+ static deleteByFilter(filter: {
75
+ traceId?: string;
76
+ agent?: string;
77
+ action?: string;
78
+ olderThanDays?: number;
79
+ }): number;
80
+ /**
81
+ * [KVKK/GDPR] Cleans expired records.
82
+ * Operates based on each audit record's retentionDays field.
83
+ * Can be auto-triggered by cron job or each Audit.log() call.
84
+ *
85
+ * @returns Number of cleaned records
86
+ */
87
+ static cleanExpired(): number;
88
+ /**
89
+ * Returns audit statistics.
90
+ */
91
+ static getStats(): {
92
+ total: number;
93
+ byStatus: Record<string, number>;
94
+ byAction: Record<string, number>;
95
+ byCategory: Record<string, number>;
96
+ recentErrors: AuditEntry[];
97
+ expiredCount: number;
98
+ };
99
+ /**
100
+ * [KVKK Art. 7] Clears all audit records.
101
+ * Used under the "Right to Erasure" provision.
102
+ * Only authorized users may call this.
103
+ */
104
+ static clearAll(confirmationCode: string): number;
105
+ }
@@ -0,0 +1,221 @@
1
+ /**
2
+ * [AUDIT] Structured Audit Log Service
3
+ *
4
+ * Records all critical operations in structured JSON format to SQLite.
5
+ * Queryable, filterable, and traceable.
6
+ *
7
+ * [KVKK/GDPR] GDPR and KVKK Art. 4, 5, 11, 12 compliant:
8
+ * - Sensitive data automatically masked (PII masking)
9
+ * - Data retention limited (TTL)
10
+ * - Data subject rights supported (erasure, query)
11
+ *
12
+ * Usage:
13
+ * Audit.log("user.create", "SUCCESS", { userId: "usr_123" });
14
+ * Audit.query({ action: "user.create", status: "FAILED" });
15
+ */
16
+ import { maskObject, maskText } from "./pii.js";
17
+ import { Storage } from "./storage.js";
18
+ import { logger } from "./logger.js";
19
+ export class Audit {
20
+ static TABLE = "audit_log";
21
+ /** [KVKK] Default data retention period: 30 days */
22
+ static DEFAULT_RETENTION_DAYS = parseInt(process.env.ATABEY_DATA_RETENTION_DAYS || "30", 10);
23
+ /** [KVKK] Maximum retention for sensitive categories: 90 days */
24
+ static MAX_RETENTION_DAYS = 90;
25
+ static initialize() {
26
+ const db = Storage.getDB();
27
+ db.exec(`
28
+ CREATE TABLE IF NOT EXISTS ${this.TABLE} (
29
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
30
+ timestamp TEXT NOT NULL,
31
+ action TEXT NOT NULL,
32
+ status TEXT NOT NULL,
33
+ agent TEXT NOT NULL,
34
+ traceId TEXT,
35
+ details TEXT,
36
+ errorMessage TEXT,
37
+ durationMs INTEGER,
38
+ dataCategory TEXT DEFAULT 'OPERATIONAL',
39
+ retentionDays INTEGER DEFAULT ${this.DEFAULT_RETENTION_DAYS}
40
+ )
41
+ `);
42
+ // Indexes for performance
43
+ db.exec(`
44
+ CREATE INDEX IF NOT EXISTS idx_audit_action ON ${this.TABLE}(action);
45
+ CREATE INDEX IF NOT EXISTS idx_audit_status ON ${this.TABLE}(status);
46
+ CREATE INDEX IF NOT EXISTS idx_audit_trace ON ${this.TABLE}(traceId);
47
+ CREATE INDEX IF NOT EXISTS idx_audit_timestamp ON ${this.TABLE}(timestamp);
48
+ CREATE INDEX IF NOT EXISTS idx_audit_category ON ${this.TABLE}(dataCategory);
49
+ `);
50
+ }
51
+ /**
52
+ * Logs a structured audit entry.
53
+ * [KVKK] Sensitive data is automatically masked.
54
+ */
55
+ static log(action, status, options = {}) {
56
+ const db = Storage.getDB();
57
+ const retentionDays = Math.min(options.retentionDays || this.DEFAULT_RETENTION_DAYS, this.MAX_RETENTION_DAYS);
58
+ // [KVKK] PII Masking — mask sensitive data in the details field
59
+ const maskedDetails = options.details
60
+ ? maskObject(options.details)
61
+ : undefined;
62
+ const maskedError = options.errorMessage
63
+ ? maskText(options.errorMessage)
64
+ : undefined;
65
+ const entry = {
66
+ timestamp: new Date().toISOString(),
67
+ action,
68
+ status,
69
+ agent: options.agent || "@manager",
70
+ traceId: options.traceId,
71
+ details: maskedDetails,
72
+ errorMessage: maskedError,
73
+ durationMs: options.durationMs,
74
+ dataCategory: options.dataCategory || "OPERATIONAL",
75
+ retentionDays,
76
+ };
77
+ db.prepare(`
78
+ INSERT INTO ${this.TABLE}
79
+ (timestamp, action, status, agent, traceId, details, errorMessage, durationMs, dataCategory, retentionDays)
80
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
81
+ `).run(entry.timestamp, entry.action, entry.status, entry.agent, entry.traceId || null, entry.details ? JSON.stringify(entry.details) : null, entry.errorMessage || null, entry.durationMs || null, entry.dataCategory, entry.retentionDays);
82
+ }
83
+ /**
84
+ * Queries audit logs with filters.
85
+ */
86
+ static query(options = {}) {
87
+ const db = Storage.getDB();
88
+ const conditions = [];
89
+ const params = [];
90
+ if (options.action) {
91
+ conditions.push("action = ?");
92
+ params.push(options.action);
93
+ }
94
+ if (options.status) {
95
+ conditions.push("status = ?");
96
+ params.push(options.status);
97
+ }
98
+ if (options.agent) {
99
+ conditions.push("agent = ?");
100
+ params.push(options.agent);
101
+ }
102
+ if (options.traceId) {
103
+ conditions.push("traceId = ?");
104
+ params.push(options.traceId);
105
+ }
106
+ if (options.dataCategory) {
107
+ conditions.push("dataCategory = ?");
108
+ params.push(options.dataCategory);
109
+ }
110
+ if (options.since) {
111
+ conditions.push("timestamp >= ?");
112
+ params.push(options.since);
113
+ }
114
+ if (options.until) {
115
+ conditions.push("timestamp <= ?");
116
+ params.push(options.until);
117
+ }
118
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
119
+ const limit = options.limit || 50;
120
+ const offset = options.offset || 0;
121
+ const rows = db.prepare(`SELECT * FROM ${this.TABLE} ${where} ORDER BY timestamp DESC LIMIT ? OFFSET ?`).all(...params, limit, offset);
122
+ return rows.map(row => ({
123
+ ...row,
124
+ details: row.details ? JSON.parse(row.details) : undefined,
125
+ }));
126
+ }
127
+ /**
128
+ * [KVKK Art. 11] Deletes records upon data subject request.
129
+ * Clears all records matching a given traceId or agent.
130
+ *
131
+ * @param filter Which records to delete
132
+ * @returns Number of deleted records
133
+ */
134
+ static deleteByFilter(filter) {
135
+ const db = Storage.getDB();
136
+ const conditions = [];
137
+ const params = [];
138
+ if (filter.traceId) {
139
+ conditions.push("traceId = ?");
140
+ params.push(filter.traceId);
141
+ }
142
+ if (filter.agent) {
143
+ conditions.push("agent = ?");
144
+ params.push(filter.agent);
145
+ }
146
+ if (filter.action) {
147
+ conditions.push("action = ?");
148
+ params.push(filter.action);
149
+ }
150
+ if (filter.olderThanDays) {
151
+ conditions.push("timestamp < datetime('now', ? || ' days')");
152
+ params.push(`-${filter.olderThanDays}`);
153
+ }
154
+ if (conditions.length === 0)
155
+ return 0;
156
+ const result = db.prepare(`DELETE FROM ${this.TABLE} WHERE ${conditions.join(" AND ")}`).run(...params);
157
+ return result.changes;
158
+ }
159
+ /**
160
+ * [KVKK/GDPR] Cleans expired records.
161
+ * Operates based on each audit record's retentionDays field.
162
+ * Can be auto-triggered by cron job or each Audit.log() call.
163
+ *
164
+ * @returns Number of cleaned records
165
+ */
166
+ static cleanExpired() {
167
+ const db = Storage.getDB();
168
+ const result = db.prepare(`
169
+ DELETE FROM ${this.TABLE}
170
+ WHERE retentionDays IS NOT NULL
171
+ AND timestamp < datetime('now', '-' || retentionDays || ' days')
172
+ `).run();
173
+ if (result.changes > 0) {
174
+ logger.info(`[AUDIT] Expired records cleaned: ${result.changes}`);
175
+ }
176
+ return result.changes;
177
+ }
178
+ /**
179
+ * Returns audit statistics.
180
+ */
181
+ static getStats() {
182
+ const db = Storage.getDB();
183
+ this.cleanExpired();
184
+ const total = db.prepare(`SELECT COUNT(*) as count FROM ${this.TABLE}`).get().count;
185
+ const byStatusRows = db.prepare(`SELECT status, COUNT(*) as count FROM ${this.TABLE} GROUP BY status`).all();
186
+ const byActionRows = db.prepare(`SELECT action, COUNT(*) as count FROM ${this.TABLE} GROUP BY action ORDER BY count DESC LIMIT 10`).all();
187
+ const byCategoryRows = db.prepare(`SELECT dataCategory, COUNT(*) as count FROM ${this.TABLE} GROUP BY dataCategory`).all();
188
+ const errors = db.prepare(`SELECT * FROM ${this.TABLE} WHERE status IN ('FAILED', 'BLOCKED') ORDER BY timestamp DESC LIMIT 10`).all();
189
+ const expiredCount = db.prepare(`
190
+ SELECT COUNT(*) as count FROM ${this.TABLE}
191
+ WHERE retentionDays IS NOT NULL
192
+ AND timestamp < datetime('now', '-' || retentionDays || ' days')
193
+ `).get().count;
194
+ return {
195
+ total,
196
+ byStatus: Object.fromEntries(byStatusRows.map(r => [r.status, r.count])),
197
+ byAction: Object.fromEntries(byActionRows.map(r => [r.action, r.count])),
198
+ byCategory: Object.fromEntries(byCategoryRows.map(r => [r.dataCategory, r.count])),
199
+ recentErrors: errors.map(row => ({
200
+ ...row,
201
+ details: row.details ? JSON.parse(row.details) : undefined,
202
+ })),
203
+ expiredCount,
204
+ };
205
+ }
206
+ /**
207
+ * [KVKK Art. 7] Clears all audit records.
208
+ * Used under the "Right to Erasure" provision.
209
+ * Only authorized users may call this.
210
+ */
211
+ static clearAll(confirmationCode) {
212
+ if (confirmationCode !== "KVKK-RIGHT-TO-ERASURE") {
213
+ throw new Error("[AUDIT] Invalid confirmation code for data erasure");
214
+ }
215
+ const db = Storage.getDB();
216
+ const result = db.prepare(`DELETE FROM ${this.TABLE}`).run();
217
+ logger.info(`[AUDIT] All records cleared (${result.changes} records). KVKK Article 7 compliance.`);
218
+ return result.changes;
219
+ }
220
+ }
221
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/shared/audit.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
+ import { execFileSync } from "child_process";
1
2
  import fs from "fs";
2
3
  import path from "path";
3
- import { execFileSync } from "child_process";
4
4
  import { logger } from "./logger.js";
5
5
  export function ensureDir(dirPath, dryRun = false) {
6
6
  if (!fs.existsSync(dirPath)) {
@@ -41,7 +41,9 @@ export function appendFile(filePath, content, dryRun = false) {
41
41
  return;
42
42
  }
43
43
  ensureDir(path.dirname(filePath));
44
- fs.appendFileSync(filePath, content, "utf8");
44
+ // Atomic append: oku → ekle → atomic yaz
45
+ const existing = fs.existsSync(filePath) ? fs.readFileSync(filePath, "utf8") : "";
46
+ writeTextFile(filePath, existing + content);
45
47
  }
46
48
  export function writeJsonFile(filePath, value, dryRun = false) {
47
49
  writeTextFile(filePath, JSON.stringify(value, null, 2), dryRun);
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/shared/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,MAAM,GAAG,KAAK;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACJ,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAe,EAAE,MAAM,GAAG,KAAK;IAC3E,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;QACvD,OAAO;IACX,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC;IAEvE,IAAI,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACjD,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,GAAG,CAAC;IACd,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,OAAe,EAAE,MAAM,GAAG,KAAK;IACxE,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAC3D,OAAO;IACX,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,KAAc,EAAE,MAAM,GAAG,KAAK;IAC1E,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,IAAc,EAAE,GAAW;IACxE,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/shared/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,MAAM,GAAG,KAAK;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACJ,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAe,EAAE,MAAM,GAAG,KAAK;IAC3E,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;QACvD,OAAO;IACX,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC;IAEvE,IAAI,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACjD,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,GAAG,CAAC;IACd,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,OAAe,EAAE,MAAM,GAAG,KAAK;IACxE,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAC3D,OAAO;IACX,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,yCAAyC;IACzC,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,KAAc,EAAE,MAAM,GAAG,KAAK;IAC1E,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,IAAc,EAAE,GAAW;IACxE,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * [LOCK] Multi-user Distributed Lock Mechanism
3
+ *
4
+ * Git-based lock system. Enables team members to work on the same
5
+ * files/resources without conflicts.
6
+ *
7
+ * Usage:
8
+ * const lock = new DistributedLock("database/schema.sql");
9
+ * if (lock.acquire("user-123", 60000)) {
10
+ * // Apply changes
11
+ * lock.release("user-123");
12
+ * }
13
+ */
14
+ export type LockStatus = "LOCKED" | "AVAILABLE" | "STALE" | "EXPIRED";
15
+ export interface LockInfo {
16
+ resource: string;
17
+ ownerId: string;
18
+ ownerName: string;
19
+ acquiredAt: string;
20
+ expiresAt: string;
21
+ reason: string;
22
+ traceId?: string;
23
+ }
24
+ export declare class DistributedLock {
25
+ private static TABLE;
26
+ /**
27
+ * Initialize the locks table (run once at startup).
28
+ */
29
+ static initialize(): void;
30
+ /**
31
+ * Attempts to acquire a lock on a resource.
32
+ *
33
+ * @param resource - Lock resource name (e.g., "apps/backend/src/types/user.ts")
34
+ * @param ownerId - Unique owner identifier (e.g., "yusuf", "ci-bot-01")
35
+ * @param options - Optional parameters
36
+ * @returns true if lock acquired, false if already locked
37
+ */
38
+ static acquire(resource: string, ownerId: string, options?: {
39
+ ownerName?: string;
40
+ ttlMs?: number;
41
+ reason?: string;
42
+ traceId?: string;
43
+ force?: boolean;
44
+ }): boolean;
45
+ /**
46
+ * Releases a lock. Only the lock owner can release.
47
+ *
48
+ * @param resource - Lock resource name
49
+ * @param ownerId - Owner identifier for verification
50
+ * @returns true if released successfully
51
+ */
52
+ static release(resource: string, ownerId: string): boolean;
53
+ /**
54
+ * Checks if a resource is locked.
55
+ */
56
+ static isLocked(resource: string): boolean;
57
+ /**
58
+ * Gets lock information for a resource.
59
+ */
60
+ static getLock(resource: string): LockInfo | null;
61
+ /**
62
+ * Lists all active locks.
63
+ */
64
+ static listActiveLocks(): LockInfo[];
65
+ /**
66
+ * Lists all locks owned by a specific owner.
67
+ */
68
+ static listOwnerLocks(ownerId: string): LockInfo[];
69
+ /**
70
+ * Releases all locks owned by a specific owner (e.g., on disconnect).
71
+ */
72
+ static releaseAllByOwner(ownerId: string): number;
73
+ /**
74
+ * Releases all expired/stale locks.
75
+ */
76
+ private static releaseStaleLocks;
77
+ /**
78
+ * Generates a unique owner ID for the current user/machine.
79
+ * Uses git config user.name or hostname as fallback.
80
+ */
81
+ static getLocalOwnerId(): string;
82
+ }
@@ -0,0 +1,160 @@
1
+ /**
2
+ * [LOCK] Multi-user Distributed Lock Mechanism
3
+ *
4
+ * Git-based lock system. Enables team members to work on the same
5
+ * files/resources without conflicts.
6
+ *
7
+ * Usage:
8
+ * const lock = new DistributedLock("database/schema.sql");
9
+ * if (lock.acquire("user-123", 60000)) {
10
+ * // Apply changes
11
+ * lock.release("user-123");
12
+ * }
13
+ */
14
+ import { execSync } from "child_process";
15
+ import os from "os";
16
+ import { Storage } from "./storage.js";
17
+ export class DistributedLock {
18
+ static TABLE = "distributed_locks";
19
+ /**
20
+ * Initialize the locks table (run once at startup).
21
+ */
22
+ static initialize() {
23
+ const db = Storage.getDB();
24
+ db.exec(`
25
+ CREATE TABLE IF NOT EXISTS ${this.TABLE} (
26
+ resource TEXT PRIMARY KEY,
27
+ ownerId TEXT NOT NULL,
28
+ ownerName TEXT NOT NULL,
29
+ acquiredAt TEXT NOT NULL,
30
+ expiresAt TEXT NOT NULL,
31
+ reason TEXT,
32
+ traceId TEXT
33
+ )
34
+ `);
35
+ }
36
+ /**
37
+ * Attempts to acquire a lock on a resource.
38
+ *
39
+ * @param resource - Lock resource name (e.g., "apps/backend/src/types/user.ts")
40
+ * @param ownerId - Unique owner identifier (e.g., "yusuf", "ci-bot-01")
41
+ * @param options - Optional parameters
42
+ * @returns true if lock acquired, false if already locked
43
+ */
44
+ static acquire(resource, ownerId, options = {}) {
45
+ const db = Storage.getDB();
46
+ const now = new Date();
47
+ const expiresAt = new Date(now.getTime() + (options.ttlMs || 60000)).toISOString();
48
+ const ownerName = options.ownerName || ownerId;
49
+ const reason = options.reason || "No reason provided";
50
+ // Clean up stale locks first
51
+ this.releaseStaleLocks();
52
+ // Check current lock status
53
+ const existing = db.prepare(`SELECT * FROM ${this.TABLE} WHERE resource = ?`).get(resource);
54
+ if (existing) {
55
+ // If force=true, override existing lock
56
+ if (options.force) {
57
+ db.prepare(`
58
+ INSERT OR REPLACE INTO ${this.TABLE} (resource, ownerId, ownerName, acquiredAt, expiresAt, reason, traceId)
59
+ VALUES (?, ?, ?, ?, ?, ?, ?)
60
+ `).run(resource, ownerId, ownerName, now.toISOString(), expiresAt, reason, options.traceId || null);
61
+ return true;
62
+ }
63
+ return false; // Already locked
64
+ }
65
+ // Acquire new lock
66
+ db.prepare(`
67
+ INSERT INTO ${this.TABLE} (resource, ownerId, ownerName, acquiredAt, expiresAt, reason, traceId)
68
+ VALUES (?, ?, ?, ?, ?, ?, ?)
69
+ `).run(resource, ownerId, ownerName, now.toISOString(), expiresAt, reason, options.traceId || null);
70
+ return true;
71
+ }
72
+ /**
73
+ * Releases a lock. Only the lock owner can release.
74
+ *
75
+ * @param resource - Lock resource name
76
+ * @param ownerId - Owner identifier for verification
77
+ * @returns true if released successfully
78
+ */
79
+ static release(resource, ownerId) {
80
+ const db = Storage.getDB();
81
+ const result = db.prepare(`DELETE FROM ${this.TABLE} WHERE resource = ? AND ownerId = ?`).run(resource, ownerId);
82
+ return result.changes > 0;
83
+ }
84
+ /**
85
+ * Checks if a resource is locked.
86
+ */
87
+ static isLocked(resource) {
88
+ const db = Storage.getDB();
89
+ const lock = db.prepare(`SELECT * FROM ${this.TABLE} WHERE resource = ? AND expiresAt > datetime('now')`).get(resource);
90
+ return !!lock;
91
+ }
92
+ /**
93
+ * Gets lock information for a resource.
94
+ */
95
+ static getLock(resource) {
96
+ const db = Storage.getDB();
97
+ this.releaseStaleLocks();
98
+ const lock = db.prepare(`SELECT * FROM ${this.TABLE} WHERE resource = ?`).get(resource);
99
+ return lock || null;
100
+ }
101
+ /**
102
+ * Lists all active locks.
103
+ */
104
+ static listActiveLocks() {
105
+ const db = Storage.getDB();
106
+ this.releaseStaleLocks();
107
+ return db.prepare(`SELECT * FROM ${this.TABLE} WHERE expiresAt > datetime('now') ORDER BY acquiredAt DESC`).all();
108
+ }
109
+ /**
110
+ * Lists all locks owned by a specific owner.
111
+ */
112
+ static listOwnerLocks(ownerId) {
113
+ const db = Storage.getDB();
114
+ return db.prepare(`SELECT * FROM ${this.TABLE} WHERE ownerId = ? ORDER BY acquiredAt DESC`).all(ownerId);
115
+ }
116
+ /**
117
+ * Releases all locks owned by a specific owner (e.g., on disconnect).
118
+ */
119
+ static releaseAllByOwner(ownerId) {
120
+ const db = Storage.getDB();
121
+ const result = db.prepare(`DELETE FROM ${this.TABLE} WHERE ownerId = ?`).run(ownerId);
122
+ return result.changes;
123
+ }
124
+ /**
125
+ * Releases all expired/stale locks.
126
+ */
127
+ static releaseStaleLocks() {
128
+ const db = Storage.getDB();
129
+ const result = db.prepare(`DELETE FROM ${this.TABLE} WHERE expiresAt < datetime('now')`).run();
130
+ return result.changes;
131
+ }
132
+ /**
133
+ * Generates a unique owner ID for the current user/machine.
134
+ * Uses git config user.name or hostname as fallback.
135
+ */
136
+ static getLocalOwnerId() {
137
+ // Try git config
138
+ try {
139
+ const name = execSync("git config user.name", { encoding: "utf8" }).trim();
140
+ if (name)
141
+ return name;
142
+ }
143
+ catch {
144
+ // Fallback
145
+ }
146
+ // Try environment
147
+ if (process.env.USER)
148
+ return process.env.USER;
149
+ if (process.env.USERNAME)
150
+ return process.env.USERNAME;
151
+ // Fallback to hostname
152
+ try {
153
+ return os.hostname();
154
+ }
155
+ catch {
156
+ return "unknown-user";
157
+ }
158
+ }
159
+ }
160
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/shared/lock.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,8 @@ export interface LoggerConfig {
10
10
  enableColors: boolean;
11
11
  jsonFormat: boolean;
12
12
  logFile?: string;
13
+ enablePiiMasking: boolean;
14
+ piiWarning: boolean;
13
15
  }
14
16
  export declare class EnterpriseLogger {
15
17
  private config;