atabey 0.0.37 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/ATABEY.md +1 -1
  2. package/PRIVACY.md +2 -2
  3. package/README.md +58 -46
  4. package/bin/completion.sh +1 -1
  5. package/dist/atabey/src/cli/commands/api.d.ts +1 -0
  6. package/dist/atabey/src/cli/commands/api.js +90 -0
  7. package/dist/atabey/src/cli/commands/api.js.map +1 -0
  8. package/dist/atabey/src/cli/commands/audit.d.ts +9 -0
  9. package/dist/atabey/src/cli/commands/audit.js +73 -0
  10. package/dist/atabey/src/cli/commands/audit.js.map +1 -0
  11. package/dist/atabey/src/cli/commands/check.js +15 -6
  12. package/dist/atabey/src/cli/commands/check.js.map +1 -1
  13. package/dist/atabey/src/cli/commands/contract.js +51 -8
  14. package/dist/atabey/src/cli/commands/contract.js.map +1 -1
  15. package/dist/atabey/src/cli/commands/coverage.js +17 -12
  16. package/dist/atabey/src/cli/commands/coverage.js.map +1 -1
  17. package/dist/atabey/src/cli/commands/dashboard.js +101 -16
  18. package/dist/atabey/src/cli/commands/dashboard.js.map +1 -1
  19. package/dist/atabey/src/cli/commands/db.d.ts +1 -0
  20. package/dist/atabey/src/cli/commands/db.js +58 -0
  21. package/dist/atabey/src/cli/commands/db.js.map +1 -0
  22. package/dist/atabey/src/cli/commands/hitl.js +2 -1
  23. package/dist/atabey/src/cli/commands/hitl.js.map +1 -1
  24. package/dist/atabey/src/cli/commands/index-codebase.js +10 -0
  25. package/dist/atabey/src/cli/commands/index-codebase.js.map +1 -1
  26. package/dist/atabey/src/cli/commands/init/scaffold-app.js +82 -7
  27. package/dist/atabey/src/cli/commands/init/scaffold-app.js.map +1 -1
  28. package/dist/atabey/src/cli/commands/init/scaffold-core.js +3 -3
  29. package/dist/atabey/src/cli/commands/init/scaffold-core.js.map +1 -1
  30. package/dist/atabey/src/cli/commands/init/scaffold-docs.js +1 -1
  31. package/dist/atabey/src/cli/commands/init/scaffold-docs.js.map +1 -1
  32. package/dist/atabey/src/cli/commands/init/scaffold-ops.js +47 -7
  33. package/dist/atabey/src/cli/commands/init/scaffold-ops.js.map +1 -1
  34. package/dist/atabey/src/cli/commands/init/scaffold-standards.js +8 -15
  35. package/dist/atabey/src/cli/commands/init/scaffold-standards.js.map +1 -1
  36. package/dist/atabey/src/cli/commands/init.js +28 -62
  37. package/dist/atabey/src/cli/commands/init.js.map +1 -1
  38. package/dist/atabey/src/cli/commands/lint.d.ts +2 -1
  39. package/dist/atabey/src/cli/commands/lint.js +20 -1
  40. package/dist/atabey/src/cli/commands/lint.js.map +1 -1
  41. package/dist/atabey/src/cli/commands/mcp.js +71 -33
  42. package/dist/atabey/src/cli/commands/mcp.js.map +1 -1
  43. package/dist/atabey/src/cli/commands/orchestrate.d.ts +4 -4
  44. package/dist/atabey/src/cli/commands/orchestrate.js +1 -1
  45. package/dist/atabey/src/cli/commands/orchestrate.js.map +1 -1
  46. package/dist/atabey/src/cli/commands/plan.d.ts +1 -1
  47. package/dist/atabey/src/cli/commands/plan.js +10 -0
  48. package/dist/atabey/src/cli/commands/plan.js.map +1 -1
  49. package/dist/atabey/src/cli/commands/quickstart.js +1 -1
  50. package/dist/atabey/src/cli/commands/quickstart.js.map +1 -1
  51. package/dist/atabey/src/cli/commands/script.js +4 -0
  52. package/dist/atabey/src/cli/commands/script.js.map +1 -1
  53. package/dist/atabey/src/cli/commands/secrets.d.ts +1 -0
  54. package/dist/atabey/src/cli/commands/secrets.js +146 -0
  55. package/dist/atabey/src/cli/commands/secrets.js.map +1 -0
  56. package/dist/atabey/src/cli/commands/worktree.d.ts +10 -0
  57. package/dist/atabey/src/cli/commands/worktree.js +90 -0
  58. package/dist/atabey/src/cli/commands/worktree.js.map +1 -0
  59. package/dist/atabey/src/cli/index.js +75 -16
  60. package/dist/atabey/src/cli/index.js.map +1 -1
  61. package/dist/atabey/src/cli/platforms/core.d.ts +0 -1
  62. package/dist/atabey/src/cli/platforms/core.js +0 -14
  63. package/dist/atabey/src/cli/platforms/core.js.map +1 -1
  64. package/dist/atabey/src/cli/platforms/index.d.ts +2 -2
  65. package/dist/atabey/src/cli/platforms/index.js +1 -1
  66. package/dist/atabey/src/cli/platforms/index.js.map +1 -1
  67. package/dist/atabey/src/cli/platforms/paths.d.ts +0 -2
  68. package/dist/atabey/src/cli/platforms/paths.js +1 -8
  69. package/dist/atabey/src/cli/platforms/paths.js.map +1 -1
  70. package/dist/atabey/src/cli/platforms/scaffold.js +1 -1
  71. package/dist/atabey/src/cli/platforms/scaffold.js.map +1 -1
  72. package/dist/atabey/src/cli/utils/claude.js +6 -0
  73. package/dist/atabey/src/cli/utils/claude.js.map +1 -1
  74. package/dist/atabey/src/cli/utils/compliance.d.ts +1 -1
  75. package/dist/atabey/src/cli/utils/compliance.js +33 -20
  76. package/dist/atabey/src/cli/utils/compliance.js.map +1 -1
  77. package/dist/atabey/src/cli/utils/fs.js +1 -1
  78. package/dist/atabey/src/cli/utils/fs.js.map +1 -1
  79. package/dist/atabey/src/cli/utils/i18n.js +2 -2
  80. package/dist/atabey/src/cli/utils/i18n.js.map +1 -1
  81. package/dist/atabey/src/cli/utils/memory.js +27 -16
  82. package/dist/atabey/src/cli/utils/memory.js.map +1 -1
  83. package/dist/atabey/src/cli/utils/pkg.js +5 -2
  84. package/dist/atabey/src/cli/utils/pkg.js.map +1 -1
  85. package/dist/atabey/src/cli/utils/quality.d.ts +1 -1
  86. package/dist/atabey/src/cli/utils/ui.d.ts +1 -1
  87. package/dist/atabey/src/cli/utils/ui.js +1 -1
  88. package/dist/atabey/src/modules/agents/definitions.d.ts +1 -1
  89. package/dist/atabey/src/modules/agents/definitions.js +13 -9
  90. package/dist/atabey/src/modules/agents/definitions.js.map +1 -1
  91. package/dist/atabey/src/modules/agents/registry/analyst.js +0 -2
  92. package/dist/atabey/src/modules/agents/registry/analyst.js.map +1 -1
  93. package/dist/atabey/src/modules/agents/registry/architect.js +0 -2
  94. package/dist/atabey/src/modules/agents/registry/architect.js.map +1 -1
  95. package/dist/atabey/src/modules/agents/registry/backend.js +0 -2
  96. package/dist/atabey/src/modules/agents/registry/backend.js.map +1 -1
  97. package/dist/atabey/src/modules/agents/registry/database.js +0 -2
  98. package/dist/atabey/src/modules/agents/registry/database.js.map +1 -1
  99. package/dist/atabey/src/modules/agents/registry/devops.js +0 -2
  100. package/dist/atabey/src/modules/agents/registry/devops.js.map +1 -1
  101. package/dist/atabey/src/modules/agents/registry/explorer.js +0 -2
  102. package/dist/atabey/src/modules/agents/registry/explorer.js.map +1 -1
  103. package/dist/atabey/src/modules/agents/registry/frontend.js +0 -2
  104. package/dist/atabey/src/modules/agents/registry/frontend.js.map +1 -1
  105. package/dist/atabey/src/modules/agents/registry/git.js +0 -2
  106. package/dist/atabey/src/modules/agents/registry/git.js.map +1 -1
  107. package/dist/atabey/src/modules/agents/registry/manager.js +0 -3
  108. package/dist/atabey/src/modules/agents/registry/manager.js.map +1 -1
  109. package/dist/atabey/src/modules/agents/registry/mobile.js +0 -2
  110. package/dist/atabey/src/modules/agents/registry/mobile.js.map +1 -1
  111. package/dist/atabey/src/modules/agents/registry/native.js +0 -2
  112. package/dist/atabey/src/modules/agents/registry/native.js.map +1 -1
  113. package/dist/atabey/src/modules/agents/registry/quality.js +3 -5
  114. package/dist/atabey/src/modules/agents/registry/quality.js.map +1 -1
  115. package/dist/atabey/src/modules/agents/registry/security.js +0 -2
  116. package/dist/atabey/src/modules/agents/registry/security.js.map +1 -1
  117. package/dist/atabey/src/modules/agents/types.d.ts +0 -1
  118. package/dist/atabey/src/modules/audit/export.d.ts +22 -0
  119. package/dist/atabey/src/modules/audit/export.js +58 -0
  120. package/dist/atabey/src/modules/audit/export.js.map +1 -0
  121. package/dist/atabey/src/modules/contracts/api.d.ts +2 -2
  122. package/dist/atabey/src/modules/engines/agent-executor.js +37 -0
  123. package/dist/atabey/src/modules/engines/agent-executor.js.map +1 -1
  124. package/dist/atabey/src/modules/engines/evaluation-engine.js +10 -0
  125. package/dist/atabey/src/modules/engines/evaluation-engine.js.map +1 -1
  126. package/dist/atabey/src/modules/engines/quality-gate.js +2 -2
  127. package/dist/atabey/src/modules/engines/quality-gate.js.map +1 -1
  128. package/dist/atabey/src/modules/engines/routing-engine.js +1 -1
  129. package/dist/atabey/src/modules/engines/routing-engine.js.map +1 -1
  130. package/dist/atabey/src/modules/memory/code-graph.d.ts +44 -0
  131. package/dist/atabey/src/modules/memory/code-graph.js +180 -0
  132. package/dist/atabey/src/modules/memory/code-graph.js.map +1 -0
  133. package/dist/atabey/src/modules/memory/context-assembler.d.ts +50 -0
  134. package/dist/atabey/src/modules/memory/context-assembler.js +146 -0
  135. package/dist/atabey/src/modules/memory/context-assembler.js.map +1 -0
  136. package/dist/atabey/src/modules/providers/definitions.js +78 -41
  137. package/dist/atabey/src/modules/providers/definitions.js.map +1 -1
  138. package/dist/atabey/src/modules/providers/shared.d.ts +1 -1
  139. package/dist/atabey/src/modules/providers/shared.js +34 -15
  140. package/dist/atabey/src/modules/providers/shared.js.map +1 -1
  141. package/dist/atabey/src/modules/providers/types.d.ts +0 -4
  142. package/dist/atabey/src/modules/runtime/adapters/headless-cli.d.ts +35 -0
  143. package/dist/atabey/src/modules/runtime/adapters/headless-cli.js +115 -0
  144. package/dist/atabey/src/modules/runtime/adapters/headless-cli.js.map +1 -0
  145. package/dist/atabey/src/modules/runtime/adapters/index.d.ts +2 -0
  146. package/dist/atabey/src/modules/runtime/adapters/index.js +3 -0
  147. package/dist/atabey/src/modules/runtime/adapters/index.js.map +1 -0
  148. package/dist/atabey/src/modules/runtime/adapters/types.d.ts +48 -0
  149. package/dist/atabey/src/modules/runtime/adapters/types.js +12 -0
  150. package/dist/atabey/src/modules/runtime/adapters/types.js.map +1 -0
  151. package/dist/atabey/src/modules/runtime/agent-runtime.d.ts +54 -0
  152. package/dist/atabey/src/modules/runtime/agent-runtime.js +203 -0
  153. package/dist/atabey/src/modules/runtime/agent-runtime.js.map +1 -0
  154. package/dist/atabey/src/modules/runtime/dispatcher.d.ts +75 -0
  155. package/dist/atabey/src/modules/runtime/dispatcher.js +255 -0
  156. package/dist/atabey/src/modules/runtime/dispatcher.js.map +1 -0
  157. package/dist/atabey/src/modules/runtime/evidence.d.ts +39 -0
  158. package/dist/atabey/src/modules/runtime/evidence.js +53 -0
  159. package/dist/atabey/src/modules/runtime/evidence.js.map +1 -0
  160. package/dist/atabey/src/modules/runtime/worktree.d.ts +44 -0
  161. package/dist/atabey/src/modules/runtime/worktree.js +259 -0
  162. package/dist/atabey/src/modules/runtime/worktree.js.map +1 -0
  163. package/dist/atabey/src/modules/skills/adapter-skills.d.ts +0 -29
  164. package/dist/atabey/src/modules/skills/adapter-skills.js +0 -61
  165. package/dist/atabey/src/modules/skills/adapter-skills.js.map +1 -1
  166. package/dist/atabey/src/modules/skills/definitions.d.ts +1 -1
  167. package/dist/atabey/src/modules/skills/definitions.js +8 -8
  168. package/dist/atabey/src/schema/agent-lifecycle.d.ts +36 -0
  169. package/dist/atabey/src/schema/agent-lifecycle.js +96 -0
  170. package/dist/atabey/src/schema/agent-lifecycle.js.map +1 -0
  171. package/dist/atabey-mcp/src/mcp/utils/ast-scan.d.ts +21 -0
  172. package/dist/atabey-mcp/src/mcp/utils/ast-scan.js +64 -0
  173. package/dist/atabey-mcp/src/mcp/utils/ast-scan.js.map +1 -0
  174. package/dist/atabey-mcp/src/mcp/utils/auth.d.ts +73 -0
  175. package/dist/atabey-mcp/src/mcp/utils/auth.js +316 -0
  176. package/dist/atabey-mcp/src/mcp/utils/auth.js.map +1 -0
  177. package/dist/atabey-mcp/src/mcp/utils/auto-rollback.d.ts +83 -0
  178. package/dist/atabey-mcp/src/mcp/utils/auto-rollback.js +418 -0
  179. package/dist/atabey-mcp/src/mcp/utils/auto-rollback.js.map +1 -0
  180. package/dist/atabey-mcp/src/mcp/utils/context-optimizer.d.ts +85 -0
  181. package/dist/atabey-mcp/src/mcp/utils/context-optimizer.js +296 -0
  182. package/dist/atabey-mcp/src/mcp/utils/context-optimizer.js.map +1 -0
  183. package/dist/atabey-mcp/src/mcp/utils/discipline.d.ts +72 -0
  184. package/dist/atabey-mcp/src/mcp/utils/discipline.js +385 -0
  185. package/dist/atabey-mcp/src/mcp/utils/discipline.js.map +1 -0
  186. package/dist/atabey-mcp/src/mcp/utils/finops.d.ts +81 -0
  187. package/dist/atabey-mcp/src/mcp/utils/finops.js +274 -0
  188. package/dist/atabey-mcp/src/mcp/utils/finops.js.map +1 -0
  189. package/dist/atabey-mcp/src/mcp/utils/loop-detector.d.ts +106 -0
  190. package/dist/atabey-mcp/src/mcp/utils/loop-detector.js +419 -0
  191. package/dist/atabey-mcp/src/mcp/utils/loop-detector.js.map +1 -0
  192. package/dist/atabey-mcp/src/mcp/utils/rules-engine.d.ts +80 -0
  193. package/dist/atabey-mcp/src/mcp/utils/rules-engine.js +296 -0
  194. package/dist/atabey-mcp/src/mcp/utils/rules-engine.js.map +1 -0
  195. package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.d.ts +133 -0
  196. package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.js +400 -0
  197. package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.js.map +1 -0
  198. package/dist/atabey-mcp/src/shared/logger.d.ts +1 -0
  199. package/dist/atabey-mcp/src/shared/logger.js +2 -0
  200. package/dist/atabey-mcp/src/shared/logger.js.map +1 -0
  201. package/dist/atabey-mcp/src/shared/pii.d.ts +1 -0
  202. package/dist/atabey-mcp/src/shared/pii.js +2 -0
  203. package/dist/atabey-mcp/src/shared/pii.js.map +1 -0
  204. package/dist/atabey-mcp/src/shared/storage.d.ts +2 -0
  205. package/dist/atabey-mcp/src/shared/storage.js +3 -0
  206. package/dist/atabey-mcp/src/shared/storage.js.map +1 -0
  207. package/dist/shared/src/agent-identity.d.ts +1 -0
  208. package/dist/shared/src/agent-identity.js +2 -0
  209. package/dist/shared/src/agent-identity.js.map +1 -0
  210. package/dist/shared/src/api-catalog.d.ts +1 -0
  211. package/dist/shared/src/api-catalog.js +2 -0
  212. package/dist/shared/src/api-catalog.js.map +1 -0
  213. package/dist/shared/src/audit-chain.d.ts +1 -51
  214. package/dist/shared/src/audit-chain.js +1 -84
  215. package/dist/shared/src/audit-chain.js.map +1 -1
  216. package/dist/shared/src/audit.d.ts +1 -113
  217. package/dist/shared/src/audit.js +1 -284
  218. package/dist/shared/src/audit.js.map +1 -1
  219. package/dist/shared/src/constants.d.ts +1 -152
  220. package/dist/shared/src/constants.js +1 -215
  221. package/dist/shared/src/constants.js.map +1 -1
  222. package/dist/shared/src/database.d.ts +1 -5
  223. package/dist/shared/src/database.js +1 -12
  224. package/dist/shared/src/database.js.map +1 -1
  225. package/dist/shared/src/errors.d.ts +1 -46
  226. package/dist/shared/src/errors.js +1 -68
  227. package/dist/shared/src/errors.js.map +1 -1
  228. package/dist/shared/src/file-lock.d.ts +1 -88
  229. package/dist/shared/src/file-lock.js +1 -250
  230. package/dist/shared/src/file-lock.js.map +1 -1
  231. package/dist/shared/src/fs.d.ts +1 -9
  232. package/dist/shared/src/fs.js +1 -53
  233. package/dist/shared/src/fs.js.map +1 -1
  234. package/dist/shared/src/index.d.ts +2 -22
  235. package/dist/shared/src/index.js +2 -22
  236. package/dist/shared/src/index.js.map +1 -1
  237. package/dist/shared/src/job-queue.d.ts +1 -53
  238. package/dist/shared/src/job-queue.js +1 -126
  239. package/dist/shared/src/job-queue.js.map +1 -1
  240. package/dist/shared/src/lock.d.ts +1 -82
  241. package/dist/shared/src/lock.js +1 -158
  242. package/dist/shared/src/lock.js.map +1 -1
  243. package/dist/shared/src/logger.d.ts +1 -30
  244. package/dist/shared/src/logger.js +1 -126
  245. package/dist/shared/src/logger.js.map +1 -1
  246. package/dist/shared/src/memory-prune.d.ts +1 -0
  247. package/dist/shared/src/memory-prune.js +2 -0
  248. package/dist/shared/src/memory-prune.js.map +1 -0
  249. package/dist/shared/src/migrations.d.ts +1 -0
  250. package/dist/shared/src/migrations.js +2 -0
  251. package/dist/shared/src/migrations.js.map +1 -0
  252. package/dist/shared/src/modules/agent/agent-identity.d.ts +34 -0
  253. package/dist/shared/src/modules/agent/agent-identity.js +77 -0
  254. package/dist/shared/src/modules/agent/agent-identity.js.map +1 -0
  255. package/dist/shared/src/modules/agent/api-catalog.d.ts +57 -0
  256. package/dist/shared/src/modules/agent/api-catalog.js +254 -0
  257. package/dist/shared/src/modules/agent/api-catalog.js.map +1 -0
  258. package/dist/shared/src/modules/agent/index.d.ts +3 -0
  259. package/dist/shared/src/modules/agent/index.js +4 -0
  260. package/dist/shared/src/modules/agent/index.js.map +1 -0
  261. package/dist/shared/src/modules/agent/tokenizer.d.ts +54 -0
  262. package/dist/shared/src/modules/agent/tokenizer.js +272 -0
  263. package/dist/shared/src/modules/agent/tokenizer.js.map +1 -0
  264. package/dist/shared/src/modules/concurrency/file-lock.d.ts +93 -0
  265. package/dist/shared/src/modules/concurrency/file-lock.js +240 -0
  266. package/dist/shared/src/modules/concurrency/file-lock.js.map +1 -0
  267. package/dist/shared/src/modules/concurrency/index.d.ts +6 -0
  268. package/dist/shared/src/modules/concurrency/index.js +7 -0
  269. package/dist/shared/src/modules/concurrency/index.js.map +1 -0
  270. package/dist/shared/src/modules/concurrency/job-queue.d.ts +76 -0
  271. package/dist/shared/src/modules/concurrency/job-queue.js +200 -0
  272. package/dist/shared/src/modules/concurrency/job-queue.js.map +1 -0
  273. package/dist/shared/src/modules/concurrency/lock.d.ts +82 -0
  274. package/dist/shared/src/modules/concurrency/lock.js +159 -0
  275. package/dist/shared/src/modules/concurrency/lock.js.map +1 -0
  276. package/dist/shared/src/modules/concurrency/resilience.d.ts +84 -0
  277. package/dist/shared/src/modules/concurrency/resilience.js +217 -0
  278. package/dist/shared/src/modules/concurrency/resilience.js.map +1 -0
  279. package/dist/shared/src/modules/concurrency/worker-pool.d.ts +52 -0
  280. package/dist/shared/src/modules/concurrency/worker-pool.js +229 -0
  281. package/dist/shared/src/modules/concurrency/worker-pool.js.map +1 -0
  282. package/dist/shared/src/modules/concurrency/worker-thread.d.ts +21 -0
  283. package/dist/shared/src/modules/concurrency/worker-thread.js +67 -0
  284. package/dist/shared/src/modules/concurrency/worker-thread.js.map +1 -0
  285. package/dist/shared/src/modules/index.d.ts +14 -0
  286. package/dist/shared/src/modules/index.js +15 -0
  287. package/dist/shared/src/modules/index.js.map +1 -0
  288. package/dist/shared/src/modules/observability/audit-chain.d.ts +80 -0
  289. package/dist/shared/src/modules/observability/audit-chain.js +262 -0
  290. package/dist/shared/src/modules/observability/audit-chain.js.map +1 -0
  291. package/dist/shared/src/modules/observability/audit.d.ts +121 -0
  292. package/dist/shared/src/modules/observability/audit.js +322 -0
  293. package/dist/shared/src/modules/observability/audit.js.map +1 -0
  294. package/dist/shared/src/modules/observability/index.d.ts +4 -0
  295. package/dist/shared/src/modules/observability/index.js +5 -0
  296. package/dist/shared/src/modules/observability/index.js.map +1 -0
  297. package/dist/shared/src/modules/observability/logger.d.ts +31 -0
  298. package/dist/shared/src/modules/observability/logger.js +153 -0
  299. package/dist/shared/src/modules/observability/logger.js.map +1 -0
  300. package/dist/shared/src/modules/observability/otel.d.ts +39 -0
  301. package/dist/shared/src/modules/observability/otel.js +93 -0
  302. package/dist/shared/src/modules/observability/otel.js.map +1 -0
  303. package/dist/shared/src/modules/primitives/constants.d.ts +150 -0
  304. package/dist/shared/src/modules/primitives/constants.js +212 -0
  305. package/dist/shared/src/modules/primitives/constants.js.map +1 -0
  306. package/dist/shared/src/modules/primitives/errors.d.ts +46 -0
  307. package/dist/shared/src/modules/primitives/errors.js +69 -0
  308. package/dist/shared/src/modules/primitives/errors.js.map +1 -0
  309. package/dist/shared/src/modules/primitives/fs.d.ts +9 -0
  310. package/dist/shared/src/modules/primitives/fs.js +54 -0
  311. package/dist/shared/src/modules/primitives/fs.js.map +1 -0
  312. package/dist/shared/src/modules/primitives/index.d.ts +7 -0
  313. package/dist/shared/src/modules/primitives/index.js +8 -0
  314. package/dist/shared/src/modules/primitives/index.js.map +1 -0
  315. package/dist/shared/src/modules/primitives/outbound-http.d.ts +32 -0
  316. package/dist/shared/src/modules/primitives/outbound-http.js +88 -0
  317. package/dist/shared/src/modules/primitives/outbound-http.js.map +1 -0
  318. package/dist/shared/src/modules/primitives/string.d.ts +1 -0
  319. package/dist/shared/src/modules/primitives/string.js +30 -0
  320. package/dist/shared/src/modules/primitives/string.js.map +1 -0
  321. package/dist/shared/src/modules/primitives/time.d.ts +5 -0
  322. package/dist/shared/src/modules/primitives/time.js +35 -0
  323. package/dist/shared/src/modules/primitives/time.js.map +1 -0
  324. package/dist/shared/src/modules/primitives/types.d.ts +27 -0
  325. package/dist/shared/src/modules/primitives/types.js +17 -0
  326. package/dist/shared/src/modules/primitives/types.js.map +1 -0
  327. package/dist/shared/src/modules/sandbox/index.d.ts +3 -0
  328. package/dist/shared/src/modules/sandbox/index.js +4 -0
  329. package/dist/shared/src/modules/sandbox/index.js.map +1 -0
  330. package/dist/shared/src/modules/sandbox/sandbox-fs.d.ts +28 -0
  331. package/dist/shared/src/modules/sandbox/sandbox-fs.js +143 -0
  332. package/dist/shared/src/modules/sandbox/sandbox-fs.js.map +1 -0
  333. package/dist/shared/src/modules/sandbox/sandbox-runtime.d.ts +78 -0
  334. package/dist/shared/src/modules/sandbox/sandbox-runtime.js +282 -0
  335. package/dist/shared/src/modules/sandbox/sandbox-runtime.js.map +1 -0
  336. package/dist/shared/src/modules/sandbox/sandbox.d.ts +54 -0
  337. package/dist/shared/src/modules/sandbox/sandbox.js +179 -0
  338. package/dist/shared/src/modules/sandbox/sandbox.js.map +1 -0
  339. package/dist/shared/src/modules/security/index.d.ts +5 -0
  340. package/dist/shared/src/modules/security/index.js +6 -0
  341. package/dist/shared/src/modules/security/index.js.map +1 -0
  342. package/dist/shared/src/modules/security/pii.d.ts +70 -0
  343. package/dist/shared/src/modules/security/pii.js +276 -0
  344. package/dist/shared/src/modules/security/pii.js.map +1 -0
  345. package/dist/shared/src/modules/security/policy-gate.d.ts +42 -0
  346. package/dist/shared/src/modules/security/policy-gate.js +172 -0
  347. package/dist/shared/src/modules/security/policy-gate.js.map +1 -0
  348. package/dist/shared/src/modules/security/retention.d.ts +68 -0
  349. package/dist/shared/src/modules/security/retention.js +218 -0
  350. package/dist/shared/src/modules/security/retention.js.map +1 -0
  351. package/dist/shared/src/modules/security/secrets.d.ts +99 -0
  352. package/dist/shared/src/modules/security/secrets.js +371 -0
  353. package/dist/shared/src/modules/security/secrets.js.map +1 -0
  354. package/dist/shared/src/modules/security/tls.d.ts +87 -0
  355. package/dist/shared/src/modules/security/tls.js +154 -0
  356. package/dist/shared/src/modules/security/tls.js.map +1 -0
  357. package/dist/shared/src/modules/storage/database.d.ts +6 -0
  358. package/dist/shared/src/modules/storage/database.js +16 -0
  359. package/dist/shared/src/modules/storage/database.js.map +1 -0
  360. package/dist/shared/src/modules/storage/index.d.ts +4 -0
  361. package/dist/shared/src/modules/storage/index.js +5 -0
  362. package/dist/shared/src/modules/storage/index.js.map +1 -0
  363. package/dist/shared/src/modules/storage/memory-prune.d.ts +18 -0
  364. package/dist/shared/src/modules/storage/memory-prune.js +48 -0
  365. package/dist/shared/src/modules/storage/memory-prune.js.map +1 -0
  366. package/dist/shared/src/modules/storage/migrations.d.ts +69 -0
  367. package/dist/shared/src/modules/storage/migrations.js +394 -0
  368. package/dist/shared/src/modules/storage/migrations.js.map +1 -0
  369. package/dist/shared/src/modules/storage/storage.d.ts +341 -0
  370. package/dist/shared/src/modules/storage/storage.js +1004 -0
  371. package/dist/shared/src/modules/storage/storage.js.map +1 -0
  372. package/dist/shared/src/otel.d.ts +1 -0
  373. package/dist/shared/src/otel.js +2 -0
  374. package/dist/shared/src/otel.js.map +1 -0
  375. package/dist/shared/src/outbound-http.d.ts +1 -0
  376. package/dist/shared/src/outbound-http.js +2 -0
  377. package/dist/shared/src/outbound-http.js.map +1 -0
  378. package/dist/shared/src/pii.d.ts +1 -69
  379. package/dist/shared/src/pii.js +1 -219
  380. package/dist/shared/src/pii.js.map +1 -1
  381. package/dist/shared/src/policy-gate.d.ts +1 -42
  382. package/dist/shared/src/policy-gate.js +1 -147
  383. package/dist/shared/src/policy-gate.js.map +1 -1
  384. package/dist/shared/src/resilience.d.ts +1 -84
  385. package/dist/shared/src/resilience.js +1 -216
  386. package/dist/shared/src/resilience.js.map +1 -1
  387. package/dist/shared/src/retention.d.ts +1 -63
  388. package/dist/shared/src/retention.js +1 -170
  389. package/dist/shared/src/retention.js.map +1 -1
  390. package/dist/shared/src/sandbox-fs.d.ts +1 -28
  391. package/dist/shared/src/sandbox-fs.js +1 -149
  392. package/dist/shared/src/sandbox-fs.js.map +1 -1
  393. package/dist/shared/src/sandbox-runtime.d.ts +1 -85
  394. package/dist/shared/src/sandbox-runtime.js +1 -249
  395. package/dist/shared/src/sandbox-runtime.js.map +1 -1
  396. package/dist/shared/src/sandbox.d.ts +1 -54
  397. package/dist/shared/src/sandbox.js +1 -178
  398. package/dist/shared/src/sandbox.js.map +1 -1
  399. package/dist/shared/src/secrets.d.ts +1 -0
  400. package/dist/shared/src/secrets.js +2 -0
  401. package/dist/shared/src/secrets.js.map +1 -0
  402. package/dist/shared/src/storage.d.ts +1 -274
  403. package/dist/shared/src/storage.js +1 -723
  404. package/dist/shared/src/storage.js.map +1 -1
  405. package/dist/shared/src/string.d.ts +1 -1
  406. package/dist/shared/src/string.js +1 -29
  407. package/dist/shared/src/string.js.map +1 -1
  408. package/dist/shared/src/time.d.ts +1 -5
  409. package/dist/shared/src/time.js +1 -30
  410. package/dist/shared/src/time.js.map +1 -1
  411. package/dist/shared/src/tls.d.ts +1 -0
  412. package/dist/shared/src/tls.js +2 -0
  413. package/dist/shared/src/tls.js.map +1 -0
  414. package/dist/shared/src/tokenizer.d.ts +1 -0
  415. package/dist/shared/src/tokenizer.js +2 -0
  416. package/dist/shared/src/tokenizer.js.map +1 -0
  417. package/dist/shared/src/types.d.ts +1 -27
  418. package/dist/shared/src/types.js +1 -16
  419. package/dist/shared/src/types.js.map +1 -1
  420. package/dist/shared/src/worker-pool.d.ts +1 -52
  421. package/dist/shared/src/worker-pool.js +1 -209
  422. package/dist/shared/src/worker-pool.js.map +1 -1
  423. package/dist/shared/src/worker-thread.d.ts +1 -21
  424. package/dist/shared/src/worker-thread.js +1 -66
  425. package/dist/shared/src/worker-thread.js.map +1 -1
  426. package/package.json +4 -6
  427. package/templates/docs/tech-stack.md +21 -0
  428. package/templates/full/ATABEY_FULL.md +38 -50
  429. package/templates/prompts/security-audit-recipe.md +1 -1
  430. package/templates/standards/architecture-standards.md +6 -4
  431. package/templates/standards/crud-governance.md +1 -1
  432. package/templates/standards/deployment-standards.md +1 -1
  433. package/templates/standards/enterprise-systems-standards.md +5 -1
  434. package/templates/standards/eslint-standards.md +10 -0
  435. package/templates/standards/frontend-standards.md +2 -2
  436. package/templates/standards/governance-standards.md +2 -2
  437. package/templates/standards/i18n-standards.md +1 -1
  438. package/templates/standards/logging-and-secrets.md +1 -1
  439. package/templates/standards/native-standards.md +1 -1
  440. package/templates/standards/quality-standards.md +1 -1
  441. package/templates/standards/security-audit-standards.md +1 -1
  442. package/templates/standards/security-standards.md +1 -1
  443. package/templates/standards/testing-standards.md +1 -1
  444. package/templates/standards/token-economy.md +27 -0
  445. package/dist/atabey/src/cli/commands/init/create-agent.d.ts +0 -4
  446. package/dist/atabey/src/cli/commands/init/create-agent.js +0 -59
  447. package/dist/atabey/src/cli/commands/init/create-agent.js.map +0 -1
  448. package/dist/atabey/src/cli/utils/config-schema.d.ts +0 -213
  449. package/dist/atabey/src/cli/utils/config-schema.js +0 -58
  450. package/dist/atabey/src/cli/utils/config-schema.js.map +0 -1
  451. package/dist/atabey/src/cli/utils/schemas.d.ts +0 -49
  452. package/dist/atabey/src/cli/utils/schemas.js +0 -20
  453. package/dist/atabey/src/cli/utils/schemas.js.map +0 -1
  454. package/dist/atabey/src/contracts/index.d.ts +0 -1
  455. package/dist/atabey/src/contracts/index.js +0 -2
  456. package/dist/atabey/src/contracts/index.js.map +0 -1
  457. package/dist/atabey/src/contracts/tasks.d.ts +0 -44
  458. package/dist/atabey/src/contracts/tasks.js +0 -21
  459. package/dist/atabey/src/contracts/tasks.js.map +0 -1
  460. package/dist/atabey/src/modules/contracts/index.d.ts +0 -5
  461. package/dist/atabey/src/modules/contracts/index.js +0 -6
  462. package/dist/atabey/src/modules/contracts/index.js.map +0 -1
  463. package/dist/atabey/src/modules/engines/contract-engine.d.ts +0 -46
  464. package/dist/atabey/src/modules/engines/contract-engine.js +0 -116
  465. package/dist/atabey/src/modules/engines/contract-engine.js.map +0 -1
  466. package/dist/atabey/src/modules/engines/discovery-engine.d.ts +0 -42
  467. package/dist/atabey/src/modules/engines/discovery-engine.js +0 -161
  468. package/dist/atabey/src/modules/engines/discovery-engine.js.map +0 -1
  469. package/dist/atabey/src/modules/engines/file-lock.d.ts +0 -56
  470. package/dist/atabey/src/modules/engines/file-lock.js +0 -171
  471. package/dist/atabey/src/modules/engines/file-lock.js.map +0 -1
  472. package/dist/atabey/src/modules/engines/phase-engine.d.ts +0 -82
  473. package/dist/atabey/src/modules/engines/phase-engine.js +0 -204
  474. package/dist/atabey/src/modules/engines/phase-engine.js.map +0 -1
  475. package/dist/atabey/src/modules/engines/policy-engine.d.ts +0 -63
  476. package/dist/atabey/src/modules/engines/policy-engine.js +0 -188
  477. package/dist/atabey/src/modules/engines/policy-engine.js.map +0 -1
  478. package/dist/atabey/src/modules/engines/sandbox.d.ts +0 -31
  479. package/dist/atabey/src/modules/engines/sandbox.js +0 -57
  480. package/dist/atabey/src/modules/engines/sandbox.js.map +0 -1
  481. package/dist/atabey/src/modules/engines/session-engine.d.ts +0 -68
  482. package/dist/atabey/src/modules/engines/session-engine.js +0 -141
  483. package/dist/atabey/src/modules/engines/session-engine.js.map +0 -1
  484. package/dist/atabey/src/modules/engines/worker-pool.d.ts +0 -8
  485. package/dist/atabey/src/modules/engines/worker-pool.js +0 -9
  486. package/dist/atabey/src/modules/engines/worker-pool.js.map +0 -1
  487. package/dist/atabey/src/modules/providers/llm-provider.d.ts +0 -87
  488. package/dist/atabey/src/modules/providers/llm-provider.js +0 -242
  489. package/dist/atabey/src/modules/providers/llm-provider.js.map +0 -1
  490. package/dist/atabey/src/shared/file-lock.d.ts +0 -1
  491. package/dist/atabey/src/shared/file-lock.js +0 -2
  492. package/dist/atabey/src/shared/file-lock.js.map +0 -1
  493. package/dist/atabey/src/shared/job-queue.d.ts +0 -1
  494. package/dist/atabey/src/shared/job-queue.js +0 -2
  495. package/dist/atabey/src/shared/job-queue.js.map +0 -1
  496. package/dist/atabey/src/shared/lock.d.ts +0 -1
  497. package/dist/atabey/src/shared/lock.js +0 -2
  498. package/dist/atabey/src/shared/lock.js.map +0 -1
  499. package/dist/atabey/src/shared/resilience.d.ts +0 -1
  500. package/dist/atabey/src/shared/resilience.js +0 -2
  501. package/dist/atabey/src/shared/resilience.js.map +0 -1
  502. package/dist/atabey/src/shared/retention.d.ts +0 -1
  503. package/dist/atabey/src/shared/retention.js +0 -2
  504. package/dist/atabey/src/shared/retention.js.map +0 -1
  505. package/dist/atabey/src/shared/sandbox-runtime.d.ts +0 -1
  506. package/dist/atabey/src/shared/sandbox-runtime.js +0 -2
  507. package/dist/atabey/src/shared/sandbox-runtime.js.map +0 -1
  508. package/dist/atabey/src/shared/sandbox.d.ts +0 -1
  509. package/dist/atabey/src/shared/sandbox.js +0 -2
  510. package/dist/atabey/src/shared/sandbox.js.map +0 -1
  511. package/dist/atabey/src/shared/worker-pool.d.ts +0 -1
  512. package/dist/atabey/src/shared/worker-pool.js +0 -2
  513. package/dist/atabey/src/shared/worker-pool.js.map +0 -1
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Real AST scanning using the TypeScript Compiler API (no regex heuristics).
3
+ *
4
+ * Detects:
5
+ * - `any` keyword types (AnyKeyword)
6
+ * - console.log/error/warn/debug/info property-access calls
7
+ * - `debugger` statements
8
+ * - TypeScript suppression directives (ts-ignore / ts-nocheck)
9
+ *
10
+ * Used by the rules engine to replace the fragile `:\s*any\b` regex so that
11
+ * comments/strings containing "any" no longer trigger false positives and
12
+ * type aliases / generic `any` are caught.
13
+ */
14
+ export type AstRuleId = "no-any-types" | "no-console-log" | "no-ts-directives" | "no-debugger";
15
+ export interface AstViolation {
16
+ ruleId: AstRuleId;
17
+ line: number;
18
+ column: number;
19
+ text: string;
20
+ }
21
+ export declare function scanSourceForViolations(filePath: string, content: string): AstViolation[];
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Real AST scanning using the TypeScript Compiler API (no regex heuristics).
3
+ *
4
+ * Detects:
5
+ * - `any` keyword types (AnyKeyword)
6
+ * - console.log/error/warn/debug/info property-access calls
7
+ * - `debugger` statements
8
+ * - TypeScript suppression directives (ts-ignore / ts-nocheck)
9
+ *
10
+ * Used by the rules engine to replace the fragile `:\s*any\b` regex so that
11
+ * comments/strings containing "any" no longer trigger false positives and
12
+ * type aliases / generic `any` are caught.
13
+ */
14
+ import ts from "typescript";
15
+ const CONSOLE_METHODS = new Set(["log", "error", "warn", "debug", "info", "trace"]);
16
+ export function scanSourceForViolations(filePath, content) {
17
+ const scriptKind = /\.tsx$/i.test(filePath)
18
+ ? ts.ScriptKind.TSX
19
+ : /\.jsx$/i.test(filePath)
20
+ ? ts.ScriptKind.JSX
21
+ : /\.js$/i.test(filePath)
22
+ ? ts.ScriptKind.JS
23
+ : ts.ScriptKind.TS;
24
+ let sourceFile;
25
+ try {
26
+ sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true, scriptKind);
27
+ }
28
+ catch {
29
+ return [];
30
+ }
31
+ const violations = [];
32
+ const at = (node, ruleId, text) => {
33
+ const start = node.getStart(sourceFile);
34
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(start);
35
+ violations.push({ ruleId, line: line + 1, column: character + 1, text });
36
+ };
37
+ const visit = (node) => {
38
+ // `any` keyword type
39
+ if (node.kind === ts.SyntaxKind.AnyKeyword) {
40
+ at(node, "no-any-types", "any");
41
+ }
42
+ // console.* calls
43
+ if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "console") {
44
+ const method = node.name.text;
45
+ if (CONSOLE_METHODS.has(method))
46
+ at(node, "no-console-log", `console.${method}`);
47
+ }
48
+ // debugger
49
+ if (node.kind === ts.SyntaxKind.DebuggerStatement) {
50
+ at(node, "no-debugger", "debugger");
51
+ }
52
+ ts.forEachChild(node, visit);
53
+ };
54
+ visit(sourceFile);
55
+ // TypeScript suppression directives (comment-based)
56
+ const lines = content.split(/\r?\n/);
57
+ for (let i = 0; i < lines.length; i++) {
58
+ if (/@ts-(ignore|nocheck|expect-error)\b/.test(lines[i])) {
59
+ violations.push({ ruleId: "no-ts-directives", line: i + 1, column: 1, text: lines[i].trim().slice(0, 80) });
60
+ }
61
+ }
62
+ return violations;
63
+ }
64
+ //# sourceMappingURL=ast-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-scan.js","sourceRoot":"","sources":["../../../../../../atabey-mcp/src/mcp/utils/ast-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ export interface AuthResult {
2
+ authenticated: boolean;
3
+ user: string;
4
+ reason?: string;
5
+ method?: "none" | "master" | "user" | "db" | "anonymous" | "denied";
6
+ }
7
+ export interface AuthStatus {
8
+ enabled: boolean;
9
+ required: boolean;
10
+ masterConfigured: boolean;
11
+ userCount: number;
12
+ dbUserCount: number;
13
+ openAccess: boolean;
14
+ }
15
+ /** Paths that never require a bearer token (health + login only by default). */
16
+ export declare const DEFAULT_PUBLIC_API_PATHS: Set<string>;
17
+ /**
18
+ * Initialize authentication from environment variables.
19
+ * Safe to call multiple times (re-reads env).
20
+ */
21
+ export declare function initAuth(): void;
22
+ /**
23
+ * Whether auth is mandatory (fail closed).
24
+ */
25
+ export declare function isAuthRequired(): boolean;
26
+ /**
27
+ * Whether any credential mechanism is configured.
28
+ */
29
+ export declare function isAuthEnabled(): boolean;
30
+ /**
31
+ * Authenticate a request using the Authorization header.
32
+ */
33
+ export declare function authenticate(req: {
34
+ headers: Record<string, string | string[] | undefined>;
35
+ }): AuthResult;
36
+ /**
37
+ * Authenticate using a raw token string.
38
+ */
39
+ export declare function authenticateToken(token: string): AuthResult;
40
+ /**
41
+ * Whether this path may be accessed without a valid token.
42
+ */
43
+ export declare function isPublicPath(pathname: string): boolean;
44
+ /**
45
+ * Require auth for a path. Returns 401 payload or null if allowed.
46
+ */
47
+ export declare function requireAuthForPath(pathname: string, req: {
48
+ headers: Record<string, string | string[] | undefined>;
49
+ }): {
50
+ allowed: true;
51
+ user: string;
52
+ } | {
53
+ allowed: false;
54
+ status: 401;
55
+ error: string;
56
+ };
57
+ /**
58
+ * True when the request may perform admin-only operations.
59
+ * Open local mode (no auth configured) is treated as admin; otherwise the
60
+ * master token or a DB user with role "admin" is required.
61
+ */
62
+ export declare function isAdminRequest(req: {
63
+ headers: Record<string, string | string[] | undefined>;
64
+ }): boolean;
65
+ /**
66
+ * Stdio mode user identity (not HTTP).
67
+ */
68
+ export declare function getCurrentUser(): string;
69
+ export declare function getAuthHeader(user: string, token: string): string;
70
+ export declare function getConfiguredUsers(): string[];
71
+ export declare function getAuthStatus(): AuthStatus;
72
+ /** Test helper */
73
+ export declare function resetAuthForTests(): void;
@@ -0,0 +1,316 @@
1
+ import { execSync } from "child_process";
2
+ import crypto from "crypto";
3
+ import { AtabeyStorage } from "../../shared/storage.js";
4
+ let authUsers = [];
5
+ let masterToken = null;
6
+ let authRequired = false;
7
+ let initialized = false;
8
+ /** Paths that never require a bearer token (health + login only by default). */
9
+ export const DEFAULT_PUBLIC_API_PATHS = new Set([
10
+ "/api/health",
11
+ "/mcp/health",
12
+ "/api/auth/login",
13
+ ]);
14
+ function timingSafeTokenEqual(a, b) {
15
+ try {
16
+ const ba = Buffer.from(a, "utf8");
17
+ const bb = Buffer.from(b, "utf8");
18
+ if (ba.length !== bb.length || ba.length === 0) {
19
+ // Still do a compare to reduce timing signal on length
20
+ const dummy = Buffer.alloc(ba.length || 1);
21
+ crypto.timingSafeEqual(dummy, dummy);
22
+ return false;
23
+ }
24
+ return crypto.timingSafeEqual(ba, bb);
25
+ }
26
+ catch {
27
+ return false;
28
+ }
29
+ }
30
+ function hasCredentialStore() {
31
+ let dbUsers;
32
+ try {
33
+ dbUsers = AtabeyStorage.hasUsers();
34
+ }
35
+ catch {
36
+ dbUsers = false;
37
+ }
38
+ return !!masterToken || authUsers.length > 0 || dbUsers;
39
+ }
40
+ /**
41
+ * Initialize authentication from environment variables.
42
+ * Safe to call multiple times (re-reads env).
43
+ */
44
+ export function initAuth() {
45
+ masterToken = process.env.MCP_AUTH_TOKEN?.trim() || null;
46
+ authRequired =
47
+ process.env.MCP_AUTH_REQUIRED === "true" ||
48
+ process.env.MCP_AUTH_REQUIRED === "1" ||
49
+ process.env.ATABEY_AUTH_REQUIRED === "true" ||
50
+ process.env.ATABEY_AUTH_REQUIRED === "1";
51
+ const usersStr = process.env.MCP_AUTH_USERS || "";
52
+ if (usersStr) {
53
+ authUsers = usersStr.split(",").map((pair) => {
54
+ const idx = pair.indexOf(":");
55
+ if (idx <= 0)
56
+ return { name: "unknown", token: "" };
57
+ return {
58
+ name: pair.slice(0, idx).trim() || "unknown",
59
+ token: pair.slice(idx + 1).trim() || "",
60
+ };
61
+ }).filter((u) => u.token);
62
+ }
63
+ else {
64
+ authUsers = [];
65
+ }
66
+ if (masterToken) {
67
+ process.stderr.write(`[AUTH] Master token configured (${masterToken.length} chars)\n`);
68
+ }
69
+ if (authUsers.length > 0) {
70
+ process.stderr.write(`[AUTH] ${authUsers.length} user(s) configured: ${authUsers.map((u) => u.name).join(", ")}\n`);
71
+ }
72
+ try {
73
+ if (AtabeyStorage.hasUsers()) {
74
+ const dbUsers = AtabeyStorage.getUsers();
75
+ process.stderr.write(`[AUTH] Database authentication active (${dbUsers.length} users)\n`);
76
+ }
77
+ }
78
+ catch {
79
+ // storage not ready
80
+ }
81
+ if (authRequired) {
82
+ process.stderr.write("[AUTH] REQUIRED mode ON — unauthenticated API/MCP HTTP access denied\n");
83
+ if (!hasCredentialStore()) {
84
+ process.stderr.write("[AUTH] WARNING: Auth required but no MCP_AUTH_TOKEN / MCP_AUTH_USERS / DB users configured. All requests will be denied.\n");
85
+ }
86
+ }
87
+ else if (!hasCredentialStore()) {
88
+ process.stderr.write("[AUTH] No authentication configured — OPEN ACCESS (anonymous)\n");
89
+ process.stderr.write("[AUTH] Set MCP_AUTH_REQUIRED=true and MCP_AUTH_TOKEN=<key> to require token authentication\n");
90
+ }
91
+ initialized = true;
92
+ }
93
+ /**
94
+ * Whether auth is mandatory (fail closed).
95
+ */
96
+ export function isAuthRequired() {
97
+ if (!initialized)
98
+ initAuth();
99
+ return authRequired;
100
+ }
101
+ /**
102
+ * Whether any credential mechanism is configured.
103
+ */
104
+ export function isAuthEnabled() {
105
+ if (!initialized)
106
+ initAuth();
107
+ return hasCredentialStore();
108
+ }
109
+ /**
110
+ * Authenticate a request using the Authorization header.
111
+ */
112
+ export function authenticate(req) {
113
+ if (!initialized)
114
+ initAuth();
115
+ const credentials = hasCredentialStore();
116
+ // Open access only when not required and no credentials
117
+ if (!authRequired && !credentials) {
118
+ return { authenticated: true, user: "anonymous", method: "anonymous" };
119
+ }
120
+ // Required but no credentials configured → fail closed
121
+ if (authRequired && !credentials) {
122
+ return {
123
+ authenticated: false,
124
+ user: "",
125
+ method: "denied",
126
+ reason: "Auth required but no tokens configured",
127
+ };
128
+ }
129
+ const authHeader = req.headers["authorization"];
130
+ const headerVal = Array.isArray(authHeader) ? authHeader[0] : authHeader;
131
+ if (!headerVal) {
132
+ return {
133
+ authenticated: false,
134
+ user: "",
135
+ method: "denied",
136
+ reason: "Missing Authorization header",
137
+ };
138
+ }
139
+ const token = headerVal.startsWith("Bearer ") ? headerVal.slice(7).trim() : headerVal.trim();
140
+ if (!token) {
141
+ return { authenticated: false, user: "", method: "denied", reason: "Empty bearer token" };
142
+ }
143
+ return authenticateToken(token);
144
+ }
145
+ /**
146
+ * Authenticate using a raw token string.
147
+ */
148
+ export function authenticateToken(token) {
149
+ if (!initialized)
150
+ initAuth();
151
+ const credentials = hasCredentialStore();
152
+ if (!authRequired && !credentials) {
153
+ return { authenticated: true, user: "anonymous", method: "anonymous" };
154
+ }
155
+ if (authRequired && !credentials) {
156
+ return {
157
+ authenticated: false,
158
+ user: "",
159
+ method: "denied",
160
+ reason: "Auth required but no tokens configured",
161
+ };
162
+ }
163
+ if (masterToken && timingSafeTokenEqual(token, masterToken)) {
164
+ return { authenticated: true, user: "admin", method: "master" };
165
+ }
166
+ for (const user of authUsers) {
167
+ if (timingSafeTokenEqual(token, user.token)) {
168
+ return { authenticated: true, user: user.name, method: "user" };
169
+ }
170
+ }
171
+ try {
172
+ const dbUser = AtabeyStorage.getUserByToken(token);
173
+ if (dbUser) {
174
+ return { authenticated: true, user: dbUser.name, method: "db" };
175
+ }
176
+ }
177
+ catch {
178
+ /* ignore */
179
+ }
180
+ return { authenticated: false, user: "", method: "denied", reason: "Invalid token" };
181
+ }
182
+ /**
183
+ * Whether this path may be accessed without a valid token.
184
+ */
185
+ export function isPublicPath(pathname) {
186
+ if (DEFAULT_PUBLIC_API_PATHS.has(pathname))
187
+ return true;
188
+ if (pathname === "/")
189
+ return true;
190
+ return false;
191
+ }
192
+ /**
193
+ * Require auth for a path. Returns 401 payload or null if allowed.
194
+ */
195
+ export function requireAuthForPath(pathname, req) {
196
+ if (isPublicPath(pathname)) {
197
+ const auth = authenticate(req);
198
+ return { allowed: true, user: auth.authenticated ? auth.user : "anonymous" };
199
+ }
200
+ // When auth not required and open access, allow
201
+ if (!isAuthRequired() && !isAuthEnabled()) {
202
+ return { allowed: true, user: "anonymous" };
203
+ }
204
+ // When credentials configured OR required → enforce
205
+ if (isAuthRequired() || isAuthEnabled()) {
206
+ const auth = authenticate(req);
207
+ if (!auth.authenticated) {
208
+ return {
209
+ allowed: false,
210
+ status: 401,
211
+ error: auth.reason ||
212
+ "Unauthorized. Provide Authorization: Bearer <token> header.",
213
+ };
214
+ }
215
+ return { allowed: true, user: auth.user };
216
+ }
217
+ return { allowed: true, user: "anonymous" };
218
+ }
219
+ /**
220
+ * True when the request may perform admin-only operations.
221
+ * Open local mode (no auth configured) is treated as admin; otherwise the
222
+ * master token or a DB user with role "admin" is required.
223
+ */
224
+ export function isAdminRequest(req) {
225
+ if (!initialized)
226
+ initAuth();
227
+ if (!isAuthRequired() && !isAuthEnabled())
228
+ return true; // open local mode
229
+ const auth = authenticate(req);
230
+ if (!auth.authenticated)
231
+ return false;
232
+ if (auth.method === "master" || auth.user === "admin")
233
+ return true;
234
+ try {
235
+ const header = req.headers["authorization"];
236
+ const hv = Array.isArray(header) ? header[0] : header;
237
+ const token = hv ? (hv.startsWith("Bearer ") ? hv.slice(7).trim() : hv.trim()) : "";
238
+ if (token) {
239
+ const u = AtabeyStorage.getUserByToken(token);
240
+ if (u?.role === "admin")
241
+ return true;
242
+ }
243
+ }
244
+ catch {
245
+ /* fall through → not admin */
246
+ }
247
+ return false;
248
+ }
249
+ /**
250
+ * Stdio mode user identity (not HTTP).
251
+ */
252
+ export function getCurrentUser() {
253
+ const envUser = process.env.MCP_USER;
254
+ if (envUser)
255
+ return envUser;
256
+ try {
257
+ const gitUser = execSync("git config user.name", { encoding: "utf8" }).trim();
258
+ if (gitUser)
259
+ return gitUser;
260
+ }
261
+ catch {
262
+ /* ignore */
263
+ }
264
+ const systemUser = process.env.USER || process.env.USERNAME;
265
+ if (systemUser)
266
+ return systemUser;
267
+ return "anonymous";
268
+ }
269
+ export function getAuthHeader(user, token) {
270
+ return `Bearer ${token}`;
271
+ }
272
+ export function getConfiguredUsers() {
273
+ const list = new Set();
274
+ if (masterToken)
275
+ list.add("admin");
276
+ authUsers.forEach((u) => list.add(u.name));
277
+ try {
278
+ AtabeyStorage.getUsers().forEach((u) => list.add(u.name));
279
+ }
280
+ catch {
281
+ /* ignore */
282
+ }
283
+ if (list.size === 0)
284
+ return ["anonymous"];
285
+ return Array.from(list);
286
+ }
287
+ export function getAuthStatus() {
288
+ if (!initialized)
289
+ initAuth();
290
+ let dbUserCount;
291
+ try {
292
+ dbUserCount = AtabeyStorage.getUsers().length;
293
+ }
294
+ catch {
295
+ dbUserCount = 0;
296
+ }
297
+ const enabled = isAuthEnabled();
298
+ return {
299
+ enabled,
300
+ required: authRequired,
301
+ masterConfigured: !!masterToken,
302
+ userCount: authUsers.length,
303
+ dbUserCount,
304
+ openAccess: !authRequired && !hasCredentialStore(),
305
+ };
306
+ }
307
+ /** Test helper */
308
+ export function resetAuthForTests() {
309
+ authUsers = [];
310
+ masterToken = null;
311
+ authRequired = false;
312
+ initialized = false;
313
+ }
314
+ // Auto-initialize on load
315
+ initAuth();
316
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../../../atabey-mcp/src/mcp/utils/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAwCxD,IAAI,SAAS,GAAe,EAAE,CAAC;AAC/B,IAAI,WAAW,GAAkB,IAAI,CAAC;AACtC,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,gFAAgF;AAChF,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IAC5C,aAAa;IACb,aAAa;IACb,iBAAiB;CACpB,CAAC,CAAC;AAEH,SAAS,oBAAoB,CAAC,CAAS,EAAE,CAAS;IAC9C,IAAI,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAClC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,uDAAuD;YACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB;IACvB,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACD,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,GAAG,KAAK,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,CAAC,WAAW,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ;IACpB,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IACzD,YAAY;QACR,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM;YACxC,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG;YACrC,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM;YAC3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG,CAAC;IAE7C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;IAClD,IAAI,QAAQ,EAAE,CAAC;QACX,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACpD,OAAO;gBACH,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS;gBAC5C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE;aAC1C,CAAC;QACN,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACJ,SAAS,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,WAAW,CAAC,MAAM,WAAW,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,UAAU,SAAS,CAAC,MAAM,wBAAwB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAChG,CAAC;IACN,CAAC;IACD,IAAI,CAAC;QACD,IAAI,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;YACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;QAC9F,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,oBAAoB;IACxB,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC/F,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,4HAA4H,CAC/H,CAAC;QACN,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACxF,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,8FAA8F,CACjG,CAAC;IACN,CAAC;IAED,WAAW,GAAG,IAAI,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC1B,IAAI,CAAC,WAAW;QAAE,QAAQ,EAAE,CAAC;IAC7B,OAAO,YAAY,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IACzB,IAAI,CAAC,WAAW;QAAE,QAAQ,EAAE,CAAC;IAC7B,OAAO,kBAAkB,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CACxB,GAA+D;IAE/D,IAAI,CAAC,WAAW;QAAE,QAAQ,EAAE,CAAC;IAE7B,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IAEzC,wDAAwD;IACxD,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC3E,CAAC;IAED,uDAAuD;IACvD,IAAI,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO;YACH,aAAa,EAAE,KAAK;YACpB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,wCAAwC;SACnD,CAAC;IACN,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACzE,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO;YACH,aAAa,EAAE,KAAK;YACpB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,8BAA8B;SACzC,CAAC;IACN,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC7F,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC9F,CAAC;IAED,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC3C,IAAI,CAAC,WAAW;QAAE,QAAQ,EAAE,CAAC;IAE7B,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO;YACH,aAAa,EAAE,KAAK;YACpB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,wCAAwC;SACnD,CAAC;IACN,CAAC;IAED,IAAI,WAAW,IAAI,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;QAC1D,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC3B,IAAI,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACpE,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACpE,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,YAAY;IAChB,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACzF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IACzC,IAAI,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,QAAQ,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAC9B,QAAgB,EAChB,GAA+D;IAE/D,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACjF,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAChD,CAAC;IAED,oDAAoD;IACpD,IAAI,cAAc,EAAE,IAAI,aAAa,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,GAAG;gBACX,KAAK,EACD,IAAI,CAAC,MAAM;oBACX,6DAA6D;aACpE,CAAC;QACN,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAE9B;IACG,IAAI,CAAC,WAAW;QAAE,QAAQ,EAAE,CAAC;IAC7B,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE;QAAE,OAAO,IAAI,CAAC,CAAC,kBAAkB;IAE1E,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAEnE,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACtD,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;QACzC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,8BAA8B;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9E,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACL,YAAY;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC5D,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,OAAO,WAAW,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAa;IACrD,OAAO,UAAU,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB;IAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,WAAW;QAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC;QACD,aAAa,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACL,YAAY;IAChB,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,aAAa;IACzB,IAAI,CAAC,WAAW;QAAE,QAAQ,EAAE,CAAC;IAC7B,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACD,WAAW,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACL,WAAW,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO;QACH,OAAO;QACP,QAAQ,EAAE,YAAY;QACtB,gBAAgB,EAAE,CAAC,CAAC,WAAW;QAC/B,SAAS,EAAE,SAAS,CAAC,MAAM;QAC3B,WAAW;QACX,UAAU,EAAE,CAAC,YAAY,IAAI,CAAC,kBAAkB,EAAE;KACrD,CAAC;AACN,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,iBAAiB;IAC7B,SAAS,GAAG,EAAE,CAAC;IACf,WAAW,GAAG,IAAI,CAAC;IACnB,YAAY,GAAG,KAAK,CAAC;IACrB,WAAW,GAAG,KAAK,CAAC;AACxB,CAAC;AAED,0BAA0B;AAC1B,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * ─── AUTO-ROLLBACK + REGENERATE ───────────────────────────────────
3
+ *
4
+ * When the AI generates code that violates governance rules (e.g., `any` type,
5
+ * console.log, copyleft license), this module:
6
+ * 1. Captures the file content before the write
7
+ * 2. Validates the new content against governance rules
8
+ * 3. If violation found: blocks the write, restores original, and sends
9
+ * a regenerate instruction back to the AI via MCP notification
10
+ *
11
+ * Flow:
12
+ * [Pre-Write Snapshot] → [Validate Content] → [Violation?] ─yes→ [Rollback] → [Notify AI]
13
+ * └─no─→ [Allow Write]
14
+ *
15
+ * Key Innovation: Unlike simple blocking, this tells the AI WHY it was
16
+ * blocked and gives it specific instructions to self-correct.
17
+ */
18
+ /** Set the project root used for durable rollback snapshots. */
19
+ export declare function setAutoRollbackRoot(projectRoot: string): void;
20
+ export interface ViolationRecord {
21
+ rule: string;
22
+ severity: "CRITICAL" | "HIGH" | "MEDIUM" | "LOW";
23
+ filePath: string;
24
+ line: number;
25
+ detail: string;
26
+ regenerateInstruction: string;
27
+ }
28
+ export declare class AutoRollback {
29
+ private static snapshots;
30
+ /**
31
+ * Initialize the auto-rollback system.
32
+ * Sets up file watcher cleanup.
33
+ */
34
+ static initialize(): void;
35
+ /**
36
+ * Prepare for a file write by capturing the current state.
37
+ * Call this BEFORE the tool handler writes to the file.
38
+ */
39
+ static prepareWrite(filePath: string, traceId: string): void;
40
+ /**
41
+ * Validate content and rollback if violations are found.
42
+ * This is called after the tool handler writes the file, but
43
+ * BEFORE the response is returned to the AI.
44
+ *
45
+ * Returns:
46
+ * - null if content is clean
47
+ * - ViolationRecord[] if violations were found and rolled back
48
+ */
49
+ static validateAndRollback(filePath: string, content: string, violations: ViolationRecord[]): ViolationRecord[] | null;
50
+ /**
51
+ * Restore a set of files to their pre-write snapshots (atomic multi-file
52
+ * rollback). Files without a snapshot are skipped.
53
+ */
54
+ static restoreFiles(filePaths: string[]): number;
55
+ /**
56
+ * Restore every snapshot captured under a given trace id (task-level
57
+ * transaction rollback).
58
+ */
59
+ static restoreTrace(traceId: string): number;
60
+ /**
61
+ * Build a regenerate instruction for the AI.
62
+ * This is what gets sent back to the AI to tell it to fix its output.
63
+ */
64
+ static buildRegenerateInstruction(violations: ViolationRecord[], toolName: string): string;
65
+ /**
66
+ * Validate tool response content against governance rules.
67
+ * Used by the MCP middleware to check file write content before returning.
68
+ */
69
+ static checkWriteContent(filePath: string, content: string, traceId: string): {
70
+ allowed: boolean;
71
+ violations: ViolationRecord[];
72
+ instruction: string | null;
73
+ };
74
+ /**
75
+ * Get snapshot stats.
76
+ */
77
+ static getSnapshotStats(): {
78
+ total: number;
79
+ restored: number;
80
+ pending: number;
81
+ };
82
+ }
83
+ export { AutoRollback as AutoRollbackEngine };