atabey 0.0.13 → 0.0.15

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 (282) hide show
  1. package/ATABEY.md +1 -1
  2. package/PRIVACY.md +8 -14
  3. package/README.md +405 -56
  4. package/bin/cli.js +72 -5
  5. package/dist/framework-mcp/src/index.js +988 -63
  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 +10 -9
  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/index.js +7 -8
  15. package/dist/framework-mcp/src/tools/index.js.map +1 -1
  16. package/dist/framework-mcp/src/tools/messaging/approve_operation.d.ts +22 -0
  17. package/dist/framework-mcp/src/tools/messaging/approve_operation.js +81 -0
  18. package/dist/framework-mcp/src/tools/messaging/approve_operation.js.map +1 -0
  19. package/dist/framework-mcp/src/tools/messaging/ask_human.d.ts +15 -0
  20. package/dist/framework-mcp/src/tools/messaging/ask_human.js +89 -20
  21. package/dist/framework-mcp/src/tools/messaging/ask_human.js.map +1 -1
  22. package/dist/framework-mcp/src/tools/observability/check_ports.d.ts +1 -0
  23. package/dist/framework-mcp/src/tools/observability/check_ports.js +24 -8
  24. package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -1
  25. package/dist/framework-mcp/src/tools/quality/analyze_code_quality.js +13 -64
  26. package/dist/framework-mcp/src/tools/quality/analyze_code_quality.js.map +1 -1
  27. package/dist/framework-mcp/src/tools/schemas.d.ts +48 -53
  28. package/dist/framework-mcp/src/tools/schemas.js +18 -22
  29. package/dist/framework-mcp/src/tools/schemas.js.map +1 -1
  30. package/dist/framework-mcp/src/tools/shell/run_command.js +146 -90
  31. package/dist/framework-mcp/src/tools/shell/run_command.js.map +1 -1
  32. package/dist/framework-mcp/src/tools/types.d.ts +11 -105
  33. package/dist/framework-mcp/src/tools/types.js +1 -0
  34. package/dist/framework-mcp/src/tools/types.js.map +1 -1
  35. package/dist/framework-mcp/src/utils/auth.d.ts +36 -0
  36. package/dist/framework-mcp/src/utils/auth.js +79 -0
  37. package/dist/framework-mcp/src/utils/auth.js.map +1 -0
  38. package/dist/framework-mcp/src/utils/auto-rollback.d.ts +71 -0
  39. package/dist/framework-mcp/src/utils/auto-rollback.js +266 -0
  40. package/dist/framework-mcp/src/utils/auto-rollback.js.map +1 -0
  41. package/dist/framework-mcp/src/utils/compliance.js +12 -4
  42. package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
  43. package/dist/framework-mcp/src/utils/context-optimizer.d.ts +69 -0
  44. package/dist/framework-mcp/src/utils/context-optimizer.js +157 -0
  45. package/dist/framework-mcp/src/utils/context-optimizer.js.map +1 -0
  46. package/dist/framework-mcp/src/utils/discipline.d.ts +68 -0
  47. package/dist/framework-mcp/src/utils/discipline.js +218 -0
  48. package/dist/framework-mcp/src/utils/discipline.js.map +1 -0
  49. package/dist/framework-mcp/src/utils/finops.d.ts +143 -0
  50. package/dist/framework-mcp/src/utils/finops.js +326 -0
  51. package/dist/framework-mcp/src/utils/finops.js.map +1 -0
  52. package/dist/framework-mcp/src/utils/human-in-loop.d.ts +95 -0
  53. package/dist/framework-mcp/src/utils/human-in-loop.js +216 -0
  54. package/dist/framework-mcp/src/utils/human-in-loop.js.map +1 -0
  55. package/dist/framework-mcp/src/utils/license-scanner.d.ts +71 -0
  56. package/dist/framework-mcp/src/utils/license-scanner.js +284 -0
  57. package/dist/framework-mcp/src/utils/license-scanner.js.map +1 -0
  58. package/dist/framework-mcp/src/utils/loop-detector.d.ts +105 -0
  59. package/dist/framework-mcp/src/utils/loop-detector.js +362 -0
  60. package/dist/framework-mcp/src/utils/loop-detector.js.map +1 -0
  61. package/dist/framework-mcp/src/utils/quality.d.ts +19 -0
  62. package/dist/framework-mcp/src/utils/quality.js +125 -0
  63. package/dist/framework-mcp/src/utils/quality.js.map +1 -0
  64. package/dist/framework-mcp/src/utils/rules-engine.d.ts +78 -0
  65. package/dist/framework-mcp/src/utils/rules-engine.js +232 -0
  66. package/dist/framework-mcp/src/utils/rules-engine.js.map +1 -0
  67. package/dist/framework-mcp/src/utils/silent-router.d.ts +49 -0
  68. package/dist/framework-mcp/src/utils/silent-router.js +155 -0
  69. package/dist/framework-mcp/src/utils/silent-router.js.map +1 -0
  70. package/dist/framework-mcp/src/utils/storage.d.ts +1 -0
  71. package/dist/framework-mcp/src/utils/storage.js +2 -2
  72. package/dist/framework-mcp/src/utils/storage.js.map +1 -1
  73. package/dist/framework-mcp/src/utils/telemetry-streamer.d.ts +133 -0
  74. package/dist/framework-mcp/src/utils/telemetry-streamer.js +397 -0
  75. package/dist/framework-mcp/src/utils/telemetry-streamer.js.map +1 -0
  76. package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js +2 -2
  77. package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js.map +1 -1
  78. package/dist/framework-mcp/tests/tools/framework/run_tests.test.d.ts +1 -0
  79. package/dist/framework-mcp/tests/tools/framework/run_tests.test.js +49 -0
  80. package/dist/framework-mcp/tests/tools/framework/run_tests.test.js.map +1 -0
  81. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +14 -5
  82. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
  83. package/dist/framework-mcp/tests/tools/observability/check_ports.test.d.ts +1 -0
  84. package/dist/framework-mcp/tests/tools/observability/check_ports.test.js +44 -0
  85. package/dist/framework-mcp/tests/tools/observability/check_ports.test.js.map +1 -0
  86. package/dist/framework-mcp/tests/tools/shell/run_command.test.js +44 -14
  87. package/dist/framework-mcp/tests/tools/shell/run_command.test.js.map +1 -1
  88. package/dist/framework-mcp/tests/utils/auto-rollback.test.d.ts +7 -0
  89. package/dist/framework-mcp/tests/utils/auto-rollback.test.js +178 -0
  90. package/dist/framework-mcp/tests/utils/auto-rollback.test.js.map +1 -0
  91. package/dist/framework-mcp/tests/utils/context-optimizer.test.d.ts +1 -0
  92. package/dist/framework-mcp/tests/utils/context-optimizer.test.js +62 -0
  93. package/dist/framework-mcp/tests/utils/context-optimizer.test.js.map +1 -0
  94. package/dist/framework-mcp/tests/utils/finops.test.d.ts +7 -0
  95. package/dist/framework-mcp/tests/utils/finops.test.js +157 -0
  96. package/dist/framework-mcp/tests/utils/finops.test.js.map +1 -0
  97. package/dist/framework-mcp/tests/utils/human-in-loop.test.d.ts +1 -0
  98. package/dist/framework-mcp/tests/utils/human-in-loop.test.js +59 -0
  99. package/dist/framework-mcp/tests/utils/human-in-loop.test.js.map +1 -0
  100. package/dist/framework-mcp/tests/utils/license-scanner.test.d.ts +7 -0
  101. package/dist/framework-mcp/tests/utils/license-scanner.test.js +131 -0
  102. package/dist/framework-mcp/tests/utils/license-scanner.test.js.map +1 -0
  103. package/dist/framework-mcp/tests/utils/loop-detector.test.d.ts +7 -0
  104. package/dist/framework-mcp/tests/utils/loop-detector.test.js +204 -0
  105. package/dist/framework-mcp/tests/utils/loop-detector.test.js.map +1 -0
  106. package/dist/framework-mcp/tests/utils/rules-engine.test.d.ts +1 -0
  107. package/dist/framework-mcp/tests/utils/rules-engine.test.js +106 -0
  108. package/dist/framework-mcp/tests/utils/rules-engine.test.js.map +1 -0
  109. package/dist/framework-mcp/tests/utils/telemetry-streamer.test.d.ts +7 -0
  110. package/dist/framework-mcp/tests/utils/telemetry-streamer.test.js +201 -0
  111. package/dist/framework-mcp/tests/utils/telemetry-streamer.test.js.map +1 -0
  112. package/dist/src/cli/commands/check.js +16 -1
  113. package/dist/src/cli/commands/check.js.map +1 -1
  114. package/dist/src/cli/commands/dashboard.js +188 -164
  115. package/dist/src/cli/commands/dashboard.js.map +1 -1
  116. package/dist/src/cli/commands/gateway.js +2 -2
  117. package/dist/src/cli/commands/gateway.js.map +1 -1
  118. package/dist/src/cli/commands/init/scaffold-core.d.ts +2 -0
  119. package/dist/src/cli/commands/init/scaffold-core.js +16 -1
  120. package/dist/src/cli/commands/init/scaffold-core.js.map +1 -1
  121. package/dist/src/cli/commands/init/scaffold-ops.js +2 -2
  122. package/dist/src/cli/commands/init/scaffold-ops.js.map +1 -1
  123. package/dist/src/cli/commands/init/scaffold-standards.js +13 -1
  124. package/dist/src/cli/commands/init/scaffold-standards.js.map +1 -1
  125. package/dist/src/cli/commands/init.d.ts +4 -0
  126. package/dist/src/cli/commands/init.js +94 -31
  127. package/dist/src/cli/commands/init.js.map +1 -1
  128. package/dist/src/cli/commands/mcp.js +3 -1
  129. package/dist/src/cli/commands/mcp.js.map +1 -1
  130. package/dist/src/cli/commands/quickstart.d.ts +1 -1
  131. package/dist/src/cli/commands/quickstart.js +12 -24
  132. package/dist/src/cli/commands/quickstart.js.map +1 -1
  133. package/dist/src/cli/commands/script.js +8 -1
  134. package/dist/src/cli/commands/script.js.map +1 -1
  135. package/dist/src/cli/index.js +24 -23
  136. package/dist/src/cli/index.js.map +1 -1
  137. package/dist/src/cli/shims.js +7 -7
  138. package/dist/src/cli/utils/pkg.js +2 -3
  139. package/dist/src/cli/utils/pkg.js.map +1 -1
  140. package/dist/src/cli/utils/quality.d.ts +10 -0
  141. package/dist/src/cli/utils/quality.js +10 -0
  142. package/dist/src/cli/utils/quality.js.map +1 -0
  143. package/dist/src/modules/agents/definitions.js +45 -40
  144. package/dist/src/modules/agents/definitions.js.map +1 -1
  145. package/dist/src/modules/agents/registry/manager.js +6 -1
  146. package/dist/src/modules/agents/registry/manager.js.map +1 -1
  147. package/dist/src/modules/engines/agent-executor.d.ts +6 -10
  148. package/dist/src/modules/engines/agent-executor.js +63 -21
  149. package/dist/src/modules/engines/agent-executor.js.map +1 -1
  150. package/dist/src/modules/engines/agent-loop.d.ts +34 -0
  151. package/dist/src/modules/engines/agent-loop.js +102 -0
  152. package/dist/src/modules/engines/agent-loop.js.map +1 -0
  153. package/dist/src/modules/engines/evaluation-engine.d.ts +12 -2
  154. package/dist/src/modules/engines/evaluation-engine.js +78 -11
  155. package/dist/src/modules/engines/evaluation-engine.js.map +1 -1
  156. package/dist/src/modules/engines/quality-gate.d.ts +13 -5
  157. package/dist/src/modules/engines/quality-gate.js +39 -31
  158. package/dist/src/modules/engines/quality-gate.js.map +1 -1
  159. package/dist/src/modules/engines/routing-engine.d.ts +5 -3
  160. package/dist/src/modules/engines/routing-engine.js +16 -9
  161. package/dist/src/modules/engines/routing-engine.js.map +1 -1
  162. package/dist/src/modules/gateway/cost-tracker.d.ts +5 -0
  163. package/dist/src/modules/gateway/cost-tracker.js +71 -0
  164. package/dist/src/modules/gateway/cost-tracker.js.map +1 -1
  165. package/dist/src/modules/gateway/gateway.d.ts +4 -0
  166. package/dist/src/modules/gateway/gateway.js +8 -0
  167. package/dist/src/modules/gateway/gateway.js.map +1 -1
  168. package/dist/src/shared/audit.js +3 -2
  169. package/dist/src/shared/audit.js.map +1 -1
  170. package/dist/src/shared/pii.d.ts +41 -9
  171. package/dist/src/shared/pii.js +122 -31
  172. package/dist/src/shared/pii.js.map +1 -1
  173. package/dist/src/shared/storage.d.ts +62 -0
  174. package/dist/src/shared/storage.js +47 -7
  175. package/dist/src/shared/storage.js.map +1 -1
  176. package/dist/tests/embedding.test.d.ts +1 -0
  177. package/dist/tests/embedding.test.js +82 -0
  178. package/dist/tests/embedding.test.js.map +1 -0
  179. package/dist/tests/engines/evaluation-engine.test.d.ts +1 -0
  180. package/dist/tests/engines/evaluation-engine.test.js +71 -0
  181. package/dist/tests/engines/evaluation-engine.test.js.map +1 -0
  182. package/dist/tests/engines/planning-engine.test.d.ts +1 -0
  183. package/dist/tests/engines/planning-engine.test.js +100 -0
  184. package/dist/tests/engines/planning-engine.test.js.map +1 -0
  185. package/dist/tests/engines/quality-gate.test.d.ts +1 -0
  186. package/dist/tests/engines/quality-gate.test.js +59 -0
  187. package/dist/tests/engines/quality-gate.test.js.map +1 -0
  188. package/dist/tests/engines/risk-engine.test.d.ts +1 -0
  189. package/dist/tests/engines/risk-engine.test.js +80 -0
  190. package/dist/tests/engines/risk-engine.test.js.map +1 -0
  191. package/dist/tests/engines/routing-engine.test.d.ts +1 -0
  192. package/dist/tests/engines/routing-engine.test.js +78 -0
  193. package/dist/tests/engines/routing-engine.test.js.map +1 -0
  194. package/dist/tests/integration/hermes_locking.test.js +1 -0
  195. package/dist/tests/integration/hermes_locking.test.js.map +1 -1
  196. package/dist/tests/modules/engines/agent-executor.test.js +1 -1
  197. package/dist/tests/modules/engines/agent-executor.test.js.map +1 -1
  198. package/dist/tests/modules/gateway/cost-tracker.test.js +20 -1
  199. package/dist/tests/modules/gateway/cost-tracker.test.js.map +1 -1
  200. package/dist/tests/shared/lock.test.d.ts +1 -0
  201. package/dist/tests/shared/lock.test.js +95 -0
  202. package/dist/tests/shared/lock.test.js.map +1 -0
  203. package/dist/tests/shared/pii.test.d.ts +1 -0
  204. package/dist/tests/shared/pii.test.js +183 -0
  205. package/dist/tests/shared/pii.test.js.map +1 -0
  206. package/framework-mcp/README.md +307 -35
  207. package/framework-mcp/dist/dashboard/assets/index-B_rK57vi.js +1221 -0
  208. package/framework-mcp/dist/dashboard/index.html +1 -1
  209. package/framework-mcp/dist/framework-mcp/src/index.js +988 -63
  210. package/framework-mcp/dist/framework-mcp/src/tools/compliance/mask_pii.js +55 -0
  211. package/framework-mcp/dist/framework-mcp/src/tools/definitions.js +10 -9
  212. package/framework-mcp/dist/framework-mcp/src/tools/framework/run_tests.js +25 -0
  213. package/framework-mcp/dist/framework-mcp/src/tools/index.js +7 -8
  214. package/framework-mcp/dist/framework-mcp/src/tools/messaging/approve_operation.js +80 -0
  215. package/framework-mcp/dist/framework-mcp/src/tools/messaging/ask_human.js +89 -20
  216. package/framework-mcp/dist/framework-mcp/src/tools/observability/check_ports.js +24 -8
  217. package/framework-mcp/dist/framework-mcp/src/tools/quality/analyze_code_quality.js +13 -64
  218. package/framework-mcp/dist/framework-mcp/src/tools/schemas.js +18 -22
  219. package/framework-mcp/dist/framework-mcp/src/tools/shell/run_command.js +146 -90
  220. package/framework-mcp/dist/framework-mcp/src/tools/types.js +1 -0
  221. package/framework-mcp/dist/framework-mcp/src/utils/auth.js +78 -0
  222. package/framework-mcp/dist/framework-mcp/src/utils/auto-rollback.js +265 -0
  223. package/framework-mcp/dist/framework-mcp/src/utils/compliance.js +12 -4
  224. package/framework-mcp/dist/framework-mcp/src/utils/context-optimizer.js +156 -0
  225. package/framework-mcp/dist/framework-mcp/src/utils/discipline.js +217 -0
  226. package/framework-mcp/dist/framework-mcp/src/utils/finops.js +325 -0
  227. package/framework-mcp/dist/framework-mcp/src/utils/human-in-loop.js +215 -0
  228. package/framework-mcp/dist/framework-mcp/src/utils/license-scanner.js +283 -0
  229. package/framework-mcp/dist/framework-mcp/src/utils/loop-detector.js +361 -0
  230. package/framework-mcp/dist/framework-mcp/src/utils/quality.js +124 -0
  231. package/framework-mcp/dist/framework-mcp/src/utils/rules-engine.js +231 -0
  232. package/framework-mcp/dist/framework-mcp/src/utils/silent-router.js +154 -0
  233. package/framework-mcp/dist/framework-mcp/src/utils/storage.js +2 -2
  234. package/framework-mcp/dist/framework-mcp/src/utils/telemetry-streamer.js +396 -0
  235. package/framework-mcp/dist/src/cli/platforms/core.js +72 -0
  236. package/framework-mcp/dist/src/cli/platforms/index.js +5 -0
  237. package/framework-mcp/dist/src/cli/platforms/paths.js +101 -0
  238. package/framework-mcp/dist/src/cli/platforms/scaffold.js +72 -0
  239. package/framework-mcp/dist/src/cli/platforms/utils.js +75 -0
  240. package/framework-mcp/dist/src/cli/utils/claude.js +57 -0
  241. package/framework-mcp/dist/src/cli/utils/compliance.js +12 -0
  242. package/framework-mcp/dist/src/cli/utils/fs.js +138 -0
  243. package/framework-mcp/dist/src/cli/utils/pkg.js +282 -0
  244. package/framework-mcp/dist/src/cli/utils/quality.js +9 -0
  245. package/framework-mcp/dist/src/modules/agents/definitions.js +563 -0
  246. package/framework-mcp/dist/src/modules/agents/registry/analyst.js +39 -0
  247. package/framework-mcp/dist/src/modules/agents/registry/architect.js +42 -0
  248. package/framework-mcp/dist/src/modules/agents/registry/backend.js +50 -0
  249. package/framework-mcp/dist/src/modules/agents/registry/database.js +45 -0
  250. package/framework-mcp/dist/src/modules/agents/registry/devops.js +45 -0
  251. package/framework-mcp/dist/src/modules/agents/registry/explorer.js +37 -0
  252. package/framework-mcp/dist/src/modules/agents/registry/frontend.js +52 -0
  253. package/framework-mcp/dist/src/modules/agents/registry/git.js +36 -0
  254. package/framework-mcp/dist/src/modules/agents/registry/manager.js +64 -0
  255. package/framework-mcp/dist/src/modules/agents/registry/mobile.js +41 -0
  256. package/framework-mcp/dist/src/modules/agents/registry/native.js +41 -0
  257. package/framework-mcp/dist/src/modules/agents/registry/quality.js +43 -0
  258. package/framework-mcp/dist/src/modules/agents/registry/security.js +42 -0
  259. package/framework-mcp/dist/src/modules/agents/types.js +1 -0
  260. package/framework-mcp/dist/src/modules/engines/evaluation-engine.js +169 -0
  261. package/framework-mcp/dist/src/modules/engines/quality-gate.js +92 -0
  262. package/framework-mcp/dist/src/modules/engines/risk-engine.js +105 -0
  263. package/framework-mcp/dist/src/modules/engines/routing-engine.js +408 -0
  264. package/framework-mcp/dist/src/modules/engines/types.js +1 -0
  265. package/framework-mcp/dist/src/modules/providers/definitions.js +140 -0
  266. package/framework-mcp/dist/src/modules/providers/registry.js +18 -0
  267. package/framework-mcp/dist/src/modules/providers/shared.js +104 -0
  268. package/framework-mcp/dist/src/modules/providers/types.js +1 -0
  269. package/framework-mcp/dist/src/modules/skills/adapter-skills.js +449 -0
  270. package/framework-mcp/dist/src/modules/skills/definitions.js +70 -0
  271. package/framework-mcp/dist/src/shared/audit.js +220 -0
  272. package/framework-mcp/dist/src/shared/errors.js +68 -0
  273. package/framework-mcp/dist/src/shared/lock.js +159 -0
  274. package/framework-mcp/dist/src/shared/pii.js +122 -31
  275. package/framework-mcp/dist/src/shared/retention.js +170 -0
  276. package/framework-mcp/dist/src/shared/storage.js +47 -7
  277. package/framework-mcp/dist/src/shared/string.js +29 -0
  278. package/framework-mcp/package.json +8 -2
  279. package/mcp.json +12 -6
  280. package/package.json +11 -5
  281. package/templates/full/ATABEY_FULL.md +1 -1
  282. package/framework-mcp/dist/dashboard/assets/index-BAPGLiWE.js +0 -267
@@ -2,46 +2,79 @@
2
2
  * [PII] Personally Identifiable Information Masking Service
3
3
  *
4
4
  * Detects and masks sensitive data in compliance with KVKK/GDPR.
5
- * Used in audit log, logger, and storage layers.
5
+ * Used in audit log, logger, storage layers, and MCP middleware.
6
6
  *
7
7
  * Supported patterns:
8
8
  * - Email addresses
9
- * - Phone numbers
10
- * - TC Identification number
11
- * - API keys / tokens
12
- * - IP addresses
13
- * - Credit card numbers
14
- * - Custom names (optional)
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)
15
19
  */
16
20
  // Sensitive patterns to detect and mask
21
+ // IMPORTANT: More specific patterns MUST come before generic ones
17
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: "***********" },
18
42
  // Email
19
43
  { pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, replacement: "***@***" },
20
- // Phone (international and Turkish)
44
+ // Phone (Turkish: +90 5xx xxx xx xx) - specific before generic
21
45
  { pattern: /(\+90|0)?\s?[0-9]{3}\s?[0-9]{3}\s?[0-9]{2}\s?[0-9]{2}/g, replacement: "***-***-****" },
22
- // TC Kimlik (11 digits starting with 1-9)
23
- { pattern: /\b[1-9][0-9]{10}\b/g, replacement: "***********" },
24
- // API keys (common formats: sk-..., pk-..., xai-..., etc.)
25
- { 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,})\b/g, replacement: "***-REDACTED-***" },
26
- // Bearer tokens in Authorization headers
27
- { pattern: /Bearer\s+[a-zA-Z0-9._-]+/g, replacement: "Bearer ***-REDACTED-***" },
28
- // IP addresses
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)
29
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: "****:****:****" },
30
54
  // Credit card (16 digits, optional spaces/dashes)
31
55
  { pattern: /\b(?:\d[ -]*?){13,16}\b/g, replacement: "****-****-****-****" },
32
- // JWT tokens
33
- { pattern: /eyJ[a-zA-Z0-9_-]+\.eyJ[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+/g, replacement: "***-JWT-REDACTED-***" },
56
+ // AMEX (15 digits, starts with 34/37)
57
+ { pattern: /\b3[47][0-9\s-]{13,14}\b/g, replacement: "****-****-***" },
34
58
  // Password fields in JSON
35
- { pattern: /"(password|passwd|secret|api_key|apiKey|apikey)"\s*:\s*"[^"]+"/gi, replacement: "\"$1\": \"***-REDACTED-***\"" },
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: ****" },
36
62
  ];
37
63
  // Fields that are considered sensitive and should always be redacted in structured data
38
64
  const SENSITIVE_FIELDS = [
39
65
  "password", "passwd", "secret", "apiKey", "api_key", "apikey",
40
- "token", "accessToken", "refreshToken", "authToken",
41
- "authorization", "Authorization",
42
- "email", "phone", "phoneNumber", "telephone",
43
- "creditCard", "cvv", "ssn", "tcKimlik", "identityNumber",
44
- "ipAddress",
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",
45
78
  ];
46
79
  /**
47
80
  * Mask sensitive data in a text string.
@@ -58,8 +91,10 @@ export function maskText(text) {
58
91
  /**
59
92
  * Recursively mask sensitive fields in an object.
60
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).
61
96
  */
62
- export function maskObject(obj, depth = 0) {
97
+ export function maskObject(obj, depth = 0, strictMode = false) {
63
98
  if (depth > 10)
64
99
  return obj; // Prevent infinite recursion
65
100
  if (obj === null || obj === undefined)
@@ -69,19 +104,19 @@ export function maskObject(obj, depth = 0) {
69
104
  if (typeof obj !== "object")
70
105
  return obj;
71
106
  if (Array.isArray(obj)) {
72
- return obj.map(item => maskObject(item, depth + 1));
107
+ return obj.map(item => maskObject(item, depth + 1, strictMode));
73
108
  }
74
109
  const result = {};
75
110
  for (const [key, value] of Object.entries(obj)) {
76
111
  // Check if the key itself is a sensitive field
77
112
  if (SENSITIVE_FIELDS.includes(key)) {
78
- result[key] = typeof value === "string" ? "***-REDACTED-***" : maskObject(value, depth + 1);
113
+ result[key] = typeof value === "string" ? "***-REDACTED-***" : maskObject(value, depth + 1, strictMode);
79
114
  }
80
115
  else if (typeof value === "string") {
81
116
  result[key] = maskText(value);
82
117
  }
83
118
  else if (typeof value === "object") {
84
- result[key] = maskObject(value, depth + 1);
119
+ result[key] = maskObject(value, depth + 1, strictMode);
85
120
  }
86
121
  else {
87
122
  result[key] = value;
@@ -100,23 +135,79 @@ export function containsPII(text) {
100
135
  }
101
136
  return false;
102
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 [, 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
+ }
103
165
  /**
104
166
  * Classify a piece of data based on content analysis.
105
167
  */
106
168
  export function classifyData(text) {
107
169
  if (!text)
108
170
  return "public";
109
- // Check for highly sensitive data
171
+ // Check for highly sensitive / critical data
110
172
  if (/\b(sk-[a-zA-Z0-9]{20,}|Bearer\s+|eyJ[a-zA-Z0-9_-]+\.)/.test(text) ||
111
173
  /\b[1-9][0-9]{10}\b/.test(text) ||
112
- /"(password|secret|apiKey)"/i.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
+ ) {
113
177
  return "restricted";
114
178
  }
115
- // Check for moderately sensitive data
179
+ // Check for personally identifiable / confidential data
116
180
  if (/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/.test(text) ||
117
- /(\+90|0)?\s?[0-9]{3}\s?[0-9]{3}\s?[0-9]{2}\s?[0-9]{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)) {
118
184
  return "confidential";
119
185
  }
120
186
  return "internal";
121
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
+ }
122
213
  //# sourceMappingURL=pii.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pii.js","sourceRoot":"","sources":["../../../src/shared/pii.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pii.js","sourceRoot":"","sources":["../../../src/shared/pii.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ export interface TaskRow {
27
27
  status: string;
28
28
  priority: string;
29
29
  dependencies: string[];
30
+ createdAt?: string;
30
31
  }
31
32
  export interface LogRow {
32
33
  id?: LogID;
@@ -38,6 +39,49 @@ export interface LogRow {
38
39
  summary: string;
39
40
  findings?: string;
40
41
  }
42
+ export interface CostDbRow {
43
+ id: number;
44
+ provider: string;
45
+ model: string;
46
+ input_tokens: number;
47
+ output_tokens: number;
48
+ cost: number;
49
+ timestamp: string;
50
+ trace_id: string | null;
51
+ }
52
+ export interface MessageDbRow {
53
+ id: number;
54
+ timestamp: string;
55
+ sender: string;
56
+ receiver: string;
57
+ category: string;
58
+ content: string;
59
+ trace_id: string;
60
+ parent_id: string | null;
61
+ status: string;
62
+ priority: string;
63
+ requires_approval: number;
64
+ }
65
+ export interface TaskDbRow {
66
+ id: string;
67
+ trace_id: string;
68
+ description: string;
69
+ agent: string;
70
+ status: string;
71
+ priority: string;
72
+ dependencies: string;
73
+ created_at: string;
74
+ }
75
+ export interface LogDbRow {
76
+ id: number;
77
+ timestamp: string;
78
+ agent: string;
79
+ action: string;
80
+ trace_id: string | null;
81
+ status: string;
82
+ summary: string;
83
+ findings: string | null;
84
+ }
41
85
  /**
42
86
  * [DB] Atabey Storage Engine
43
87
  * Central SQLite database for enterprise-scale agent state management.
@@ -46,6 +90,24 @@ export declare class AtabeyStorage {
46
90
  private static db;
47
91
  static getDB(): Database.Database;
48
92
  private static initializeSchema;
93
+ static saveCost(cost: {
94
+ provider: string;
95
+ model: string;
96
+ inputTokens: number;
97
+ outputTokens: number;
98
+ cost: number;
99
+ timestamp: string;
100
+ traceId?: string;
101
+ }): void;
102
+ static getAllCosts(): Array<{
103
+ provider: string;
104
+ model: string;
105
+ inputTokens: number;
106
+ outputTokens: number;
107
+ cost: number;
108
+ timestamp: string;
109
+ traceId?: string;
110
+ }>;
49
111
  static updateAgentStatus(name: string, state: string, task: string, lastUpdated?: string): void;
50
112
  static getAllAgents(): AgentRow[];
51
113
  static saveMessage(msg: MessageRow): void;
@@ -3,6 +3,7 @@ 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
@@ -17,7 +18,8 @@ export class AtabeyStorage {
17
18
  fs.mkdirSync(frameworkDir, { recursive: true });
18
19
  }
19
20
  const dbPath = path.join(frameworkDir, "atabey.db");
20
- this.db = new Database(dbPath);
21
+ this.db = new Database(dbPath, { timeout: 5000 });
22
+ this.db.pragma("journal_mode = WAL");
21
23
  this.initializeSchema();
22
24
  }
23
25
  return this.db;
@@ -82,12 +84,47 @@ export class AtabeyStorage {
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 AtabeyStorage {
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 AtabeyStorage {
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 AtabeyStorage {
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 AtabeyStorage {
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 AtabeyStorage {
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 ---
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/shared/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/shared/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,82 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { generateEmbedding, generateEmbeddings, isOpenAIEmbedding } from "../src/modules/memory/embedding.js";
3
+ describe("Embedding Service", () => {
4
+ const originalEnv = process.env;
5
+ beforeEach(() => {
6
+ process.env = { ...originalEnv };
7
+ vi.stubGlobal("fetch", vi.fn());
8
+ });
9
+ afterEach(() => {
10
+ process.env = originalEnv;
11
+ vi.unstubAllGlobals();
12
+ vi.restoreAllMocks();
13
+ });
14
+ it("should correctly identify OpenAI embeddings by dimension", () => {
15
+ const openAIVector = new Array(1536).fill(0.1);
16
+ const tfidfVector = new Array(384).fill(0.1);
17
+ const invalidVector = new Array(100).fill(0.1);
18
+ expect(isOpenAIEmbedding(openAIVector)).toBe(true);
19
+ expect(isOpenAIEmbedding(tfidfVector)).toBe(false);
20
+ expect(isOpenAIEmbedding(invalidVector)).toBe(false);
21
+ });
22
+ it("should fallback to TF-IDF (padded to 1536) when no API key is provided", async () => {
23
+ delete process.env.OPENAI_API_KEY;
24
+ const text = "sample query text";
25
+ const vector = await generateEmbedding(text);
26
+ expect(vector).toBeDefined();
27
+ expect(vector.length).toBe(1536);
28
+ // Padded part (dimensions 384 to 1535) should be all 0
29
+ const paddedPart = vector.slice(384);
30
+ expect(paddedPart.every(val => val === 0)).toBe(true);
31
+ });
32
+ it("should use OpenAI API when API key is set and call succeeds", async () => {
33
+ process.env.OPENAI_API_KEY = "sk-test-key-12345";
34
+ const mockEmbedding = new Array(1536).fill(0.5);
35
+ const mockFetch = vi.mocked(fetch).mockResolvedValue({
36
+ ok: true,
37
+ status: 200,
38
+ json: async () => ({
39
+ data: [{ embedding: mockEmbedding }]
40
+ })
41
+ });
42
+ const vector = await generateEmbedding("hello world");
43
+ expect(mockFetch).toHaveBeenCalled();
44
+ expect(vector).toEqual(mockEmbedding);
45
+ });
46
+ it("should fallback to TF-IDF when OpenAI API call fails", async () => {
47
+ process.env.OPENAI_API_KEY = "sk-test-key-12345";
48
+ // Mock API failure
49
+ const mockFetch = vi.mocked(fetch).mockResolvedValue({
50
+ ok: false,
51
+ status: 500,
52
+ json: async () => ({ error: "Internal Server Error" })
53
+ });
54
+ const vector = await generateEmbedding("hello world");
55
+ expect(mockFetch).toHaveBeenCalled();
56
+ expect(vector.length).toBe(1536);
57
+ // Should have fallen back to TF-IDF (first 384 dimensions contain non-zero data, rest are 0)
58
+ const paddedPart = vector.slice(384);
59
+ expect(paddedPart.every(val => val === 0)).toBe(true);
60
+ });
61
+ it("should support batch embedding generation", async () => {
62
+ process.env.OPENAI_API_KEY = "sk-test-key-12345";
63
+ const mockEmbeddings = [
64
+ new Array(1536).fill(0.1),
65
+ new Array(1536).fill(0.2)
66
+ ];
67
+ const mockFetch = vi.mocked(fetch).mockResolvedValue({
68
+ ok: true,
69
+ status: 200,
70
+ json: async () => ({
71
+ data: [
72
+ { embedding: mockEmbeddings[0] },
73
+ { embedding: mockEmbeddings[1] }
74
+ ]
75
+ })
76
+ });
77
+ const vectors = await generateEmbeddings(["doc1", "doc2"]);
78
+ expect(mockFetch).toHaveBeenCalled();
79
+ expect(vectors).toEqual(mockEmbeddings);
80
+ });
81
+ });
82
+ //# sourceMappingURL=embedding.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.test.js","sourceRoot":"","sources":["../../tests/embedding.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,71 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import * as memoryUtils from "../../src/cli/utils/memory.js";
3
+ import { EvaluationEngine } from "../../src/modules/engines/evaluation-engine.js";
4
+ import * as fsUtils from "../../src/shared/fs.js";
5
+ // Mock fs to prevent real command execution
6
+ vi.mock("fs", () => ({
7
+ default: {
8
+ existsSync: vi.fn().mockReturnValue(false),
9
+ readFileSync: vi.fn().mockReturnValue(""),
10
+ writeFileSync: vi.fn(),
11
+ mkdirSync: vi.fn(),
12
+ readdirSync: vi.fn().mockReturnValue([]),
13
+ statSync: vi.fn(),
14
+ },
15
+ existsSync: vi.fn().mockReturnValue(false),
16
+ readFileSync: vi.fn().mockReturnValue(""),
17
+ writeFileSync: vi.fn(),
18
+ mkdirSync: vi.fn(),
19
+ readdirSync: vi.fn().mockReturnValue([]),
20
+ statSync: vi.fn(),
21
+ }));
22
+ describe("EvaluationEngine", () => {
23
+ beforeEach(() => {
24
+ vi.spyOn(memoryUtils, "getFrameworkDir").mockReturnValue("/tmp/test-atabey");
25
+ vi.spyOn(fsUtils, "ensureDir").mockImplementation(() => { });
26
+ vi.spyOn(fsUtils, "writeTextFile").mockImplementation(() => { });
27
+ vi.spyOn(fsUtils, "appendFile").mockImplementation(() => { });
28
+ vi.spyOn(fsUtils, "runCommandQuiet").mockImplementation(() => { });
29
+ });
30
+ describe("evaluateTask", () => {
31
+ it("should return an EvaluationResult with correct structure", () => {
32
+ const result = EvaluationEngine.evaluateTask("T-001", "@backend", 1000);
33
+ expect(result).toHaveProperty("traceId");
34
+ expect(result).toHaveProperty("agent");
35
+ expect(result).toHaveProperty("score");
36
+ expect(result).toHaveProperty("metrics");
37
+ expect(result).toHaveProperty("durationMs");
38
+ expect(result).toHaveProperty("timestamp");
39
+ });
40
+ it("should set agent name without @ prefix", () => {
41
+ const result = EvaluationEngine.evaluateTask("T-001", "@backend", 1000);
42
+ expect(result.agent).toBe("backend");
43
+ });
44
+ it("should return a score between 0 and 100", () => {
45
+ const result = EvaluationEngine.evaluateTask("T-001", "@backend", 1000);
46
+ expect(result.score).toBeGreaterThanOrEqual(0);
47
+ expect(result.score).toBeLessThanOrEqual(100);
48
+ });
49
+ it("should record durationMs correctly", () => {
50
+ const result = EvaluationEngine.evaluateTask("T-001", "@backend", 5000);
51
+ expect(result.durationMs).toBe(5000);
52
+ });
53
+ it("should have metrics object with all required fields", () => {
54
+ const result = EvaluationEngine.evaluateTask("T-001", "@backend", 1000);
55
+ expect(result.metrics).toHaveProperty("compilation");
56
+ expect(result.metrics).toHaveProperty("lint");
57
+ expect(result.metrics).toHaveProperty("tests");
58
+ expect(result.metrics).toHaveProperty("compliance");
59
+ });
60
+ it("should penalize long-running tasks", () => {
61
+ const fastResult = EvaluationEngine.evaluateTask("T-001", "@backend", 1000);
62
+ const slowResult = EvaluationEngine.evaluateTask("T-002", "@backend", 130000);
63
+ expect(slowResult.score).toBeLessThanOrEqual(fastResult.score);
64
+ });
65
+ it("should handle different agent names", () => {
66
+ const result = EvaluationEngine.evaluateTask("T-003", "@frontend", 2000);
67
+ expect(result.agent).toBe("frontend");
68
+ });
69
+ });
70
+ });
71
+ //# sourceMappingURL=evaluation-engine.test.js.map