atabey 0.0.32 → 0.0.33

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 (440) hide show
  1. package/bin/cli.js +5 -5
  2. package/dist/atabey/src/cli/commands/check.js +4 -1
  3. package/dist/atabey/src/cli/commands/check.js.map +1 -1
  4. package/dist/atabey/src/cli/commands/dashboard.js +60 -21
  5. package/dist/atabey/src/cli/commands/dashboard.js.map +1 -1
  6. package/dist/atabey/src/cli/commands/hitl.d.ts +16 -0
  7. package/dist/atabey/src/cli/commands/hitl.js +152 -0
  8. package/dist/atabey/src/cli/commands/hitl.js.map +1 -0
  9. package/dist/atabey/src/cli/commands/init/languages.d.ts +33 -0
  10. package/dist/atabey/src/cli/commands/init/languages.js +114 -0
  11. package/dist/atabey/src/cli/commands/init/languages.js.map +1 -0
  12. package/dist/atabey/src/cli/commands/init/scaffold-app.d.ts +26 -0
  13. package/dist/atabey/src/cli/commands/init/scaffold-app.js +555 -0
  14. package/dist/atabey/src/cli/commands/init/scaffold-app.js.map +1 -0
  15. package/dist/atabey/src/cli/commands/init/scaffold-core.d.ts +1 -0
  16. package/dist/atabey/src/cli/commands/init/scaffold-core.js +1 -0
  17. package/dist/atabey/src/cli/commands/init/scaffold-core.js.map +1 -1
  18. package/dist/atabey/src/cli/commands/init/scaffold-standards.js +1 -0
  19. package/dist/atabey/src/cli/commands/init/scaffold-standards.js.map +1 -1
  20. package/dist/atabey/src/cli/commands/init.d.ts +3 -0
  21. package/dist/atabey/src/cli/commands/init.js +49 -20
  22. package/dist/atabey/src/cli/commands/init.js.map +1 -1
  23. package/dist/atabey/src/cli/commands/knowledge.js +37 -5
  24. package/dist/atabey/src/cli/commands/knowledge.js.map +1 -1
  25. package/dist/atabey/src/cli/commands/log.d.ts +4 -0
  26. package/dist/atabey/src/cli/commands/log.js +33 -1
  27. package/dist/atabey/src/cli/commands/log.js.map +1 -1
  28. package/dist/atabey/src/cli/commands/orchestrate.d.ts +6 -6
  29. package/dist/atabey/src/cli/index.js +68 -10
  30. package/dist/atabey/src/cli/index.js.map +1 -1
  31. package/dist/atabey/src/cli/platforms/core.d.ts +1 -1
  32. package/dist/atabey/src/cli/platforms/core.js +1 -0
  33. package/dist/atabey/src/cli/platforms/core.js.map +1 -1
  34. package/dist/atabey/src/cli/platforms/scaffold.js +4 -1
  35. package/dist/atabey/src/cli/platforms/scaffold.js.map +1 -1
  36. package/dist/atabey/src/cli/platforms/utils.js +7 -1
  37. package/dist/atabey/src/cli/platforms/utils.js.map +1 -1
  38. package/dist/atabey/src/cli/shims.js +10 -0
  39. package/dist/atabey/src/cli/shims.js.map +1 -1
  40. package/dist/atabey/src/cli/utils/config-schema.d.ts +1 -1
  41. package/dist/atabey/src/cli/utils/pkg.js +3 -4
  42. package/dist/atabey/src/cli/utils/pkg.js.map +1 -1
  43. package/dist/atabey/src/cli/utils/schemas.d.ts +10 -10
  44. package/dist/atabey/src/contracts/tasks.d.ts +2 -2
  45. package/dist/atabey/src/modules/agents/definitions.d.ts +2 -1
  46. package/dist/atabey/src/modules/agents/definitions.js +18 -0
  47. package/dist/atabey/src/modules/agents/definitions.js.map +1 -1
  48. package/dist/atabey/src/modules/agents/registry/native.js +14 -8
  49. package/dist/atabey/src/modules/agents/registry/native.js.map +1 -1
  50. package/dist/atabey/src/modules/contracts/api.d.ts +6 -6
  51. package/dist/atabey/src/modules/engines/quality-gate.js +4 -4
  52. package/dist/atabey/src/modules/engines/quality-gate.js.map +1 -1
  53. package/dist/atabey/src/modules/engines/risk-engine.js +10 -0
  54. package/dist/atabey/src/modules/engines/risk-engine.js.map +1 -1
  55. package/dist/atabey/src/modules/engines/routing-engine.js +8 -0
  56. package/dist/atabey/src/modules/engines/routing-engine.js.map +1 -1
  57. package/dist/atabey/src/modules/memory/core.js +12 -3
  58. package/dist/atabey/src/modules/memory/core.js.map +1 -1
  59. package/dist/atabey/src/modules/providers/definitions.js +51 -0
  60. package/dist/atabey/src/modules/providers/definitions.js.map +1 -1
  61. package/dist/atabey/src/modules/providers/types.d.ts +1 -1
  62. package/dist/atabey/src/modules/providers/types.js +1 -1
  63. package/dist/atabey/src/modules/providers/types.js.map +1 -1
  64. package/dist/atabey/src/modules/skills/adapter-skills.js +81 -0
  65. package/dist/atabey/src/modules/skills/adapter-skills.js.map +1 -1
  66. package/dist/atabey/src/shared/storage.d.ts +2 -149
  67. package/dist/atabey/src/shared/storage.js +2 -342
  68. package/dist/atabey/src/shared/storage.js.map +1 -1
  69. package/dist/shared/src/constants.d.ts +5 -2
  70. package/dist/shared/src/constants.js +5 -0
  71. package/dist/shared/src/constants.js.map +1 -1
  72. package/dist/shared/src/index.d.ts +1 -0
  73. package/dist/shared/src/index.js +1 -0
  74. package/dist/shared/src/index.js.map +1 -1
  75. package/dist/shared/src/lock.js +6 -3
  76. package/dist/shared/src/lock.js.map +1 -1
  77. package/dist/shared/src/pii.js +16 -12
  78. package/dist/shared/src/pii.js.map +1 -1
  79. package/dist/{atabey-mcp/src/shared → shared/src}/storage.d.ts +98 -0
  80. package/dist/shared/src/storage.js +724 -0
  81. package/dist/shared/src/storage.js.map +1 -0
  82. package/package.json +7 -7
  83. package/templates/standards/llm-governance.md +1 -0
  84. package/templates/standards/native-standards.md +67 -0
  85. package/dist/atabey/src/modules/engines/worker-script.d.ts +0 -8
  86. package/dist/atabey/src/modules/engines/worker-script.js +0 -99
  87. package/dist/atabey/src/modules/engines/worker-script.js.map +0 -1
  88. package/dist/atabey-mcp/src/mcp/utils/auth.d.ts +0 -40
  89. package/dist/atabey-mcp/src/mcp/utils/auth.js +0 -154
  90. package/dist/atabey-mcp/src/mcp/utils/auth.js.map +0 -1
  91. package/dist/atabey-mcp/src/mcp/utils/auto-rollback.d.ts +0 -71
  92. package/dist/atabey-mcp/src/mcp/utils/auto-rollback.js +0 -375
  93. package/dist/atabey-mcp/src/mcp/utils/auto-rollback.js.map +0 -1
  94. package/dist/atabey-mcp/src/mcp/utils/context-optimizer.d.ts +0 -110
  95. package/dist/atabey-mcp/src/mcp/utils/context-optimizer.js +0 -391
  96. package/dist/atabey-mcp/src/mcp/utils/context-optimizer.js.map +0 -1
  97. package/dist/atabey-mcp/src/mcp/utils/discipline.d.ts +0 -69
  98. package/dist/atabey-mcp/src/mcp/utils/discipline.js +0 -257
  99. package/dist/atabey-mcp/src/mcp/utils/discipline.js.map +0 -1
  100. package/dist/atabey-mcp/src/mcp/utils/finops.d.ts +0 -139
  101. package/dist/atabey-mcp/src/mcp/utils/finops.js +0 -324
  102. package/dist/atabey-mcp/src/mcp/utils/finops.js.map +0 -1
  103. package/dist/atabey-mcp/src/mcp/utils/license-scanner.d.ts +0 -71
  104. package/dist/atabey-mcp/src/mcp/utils/license-scanner.js +0 -284
  105. package/dist/atabey-mcp/src/mcp/utils/license-scanner.js.map +0 -1
  106. package/dist/atabey-mcp/src/mcp/utils/loop-detector.d.ts +0 -106
  107. package/dist/atabey-mcp/src/mcp/utils/loop-detector.js +0 -413
  108. package/dist/atabey-mcp/src/mcp/utils/loop-detector.js.map +0 -1
  109. package/dist/atabey-mcp/src/mcp/utils/memory.d.ts +0 -3
  110. package/dist/atabey-mcp/src/mcp/utils/memory.js +0 -75
  111. package/dist/atabey-mcp/src/mcp/utils/memory.js.map +0 -1
  112. package/dist/atabey-mcp/src/mcp/utils/rules-engine.d.ts +0 -78
  113. package/dist/atabey-mcp/src/mcp/utils/rules-engine.js +0 -232
  114. package/dist/atabey-mcp/src/mcp/utils/rules-engine.js.map +0 -1
  115. package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.d.ts +0 -133
  116. package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.js +0 -397
  117. package/dist/atabey-mcp/src/mcp/utils/telemetry-streamer.js.map +0 -1
  118. package/dist/atabey-mcp/src/shared/logger.d.ts +0 -1
  119. package/dist/atabey-mcp/src/shared/logger.js +0 -2
  120. package/dist/atabey-mcp/src/shared/logger.js.map +0 -1
  121. package/dist/atabey-mcp/src/shared/pii.d.ts +0 -1
  122. package/dist/atabey-mcp/src/shared/pii.js +0 -2
  123. package/dist/atabey-mcp/src/shared/pii.js.map +0 -1
  124. package/dist/atabey-mcp/src/shared/storage.js +0 -346
  125. package/dist/atabey-mcp/src/shared/storage.js.map +0 -1
  126. package/dist/atabey-mcp/src/shared/types.d.ts +0 -1
  127. package/dist/atabey-mcp/src/shared/types.js +0 -2
  128. package/dist/atabey-mcp/src/shared/types.js.map +0 -1
  129. package/dist/src/cli/commands/approve.d.ts +0 -1
  130. package/dist/src/cli/commands/approve.js +0 -64
  131. package/dist/src/cli/commands/approve.js.map +0 -1
  132. package/dist/src/cli/commands/check.d.ts +0 -1
  133. package/dist/src/cli/commands/check.js +0 -339
  134. package/dist/src/cli/commands/check.js.map +0 -1
  135. package/dist/src/cli/commands/compliance.d.ts +0 -5
  136. package/dist/src/cli/commands/compliance.js +0 -43
  137. package/dist/src/cli/commands/compliance.js.map +0 -1
  138. package/dist/src/cli/commands/contract.d.ts +0 -10
  139. package/dist/src/cli/commands/contract.js +0 -52
  140. package/dist/src/cli/commands/contract.js.map +0 -1
  141. package/dist/src/cli/commands/coverage.d.ts +0 -1
  142. package/dist/src/cli/commands/coverage.js +0 -121
  143. package/dist/src/cli/commands/coverage.js.map +0 -1
  144. package/dist/src/cli/commands/dashboard.d.ts +0 -5
  145. package/dist/src/cli/commands/dashboard.js +0 -753
  146. package/dist/src/cli/commands/dashboard.js.map +0 -1
  147. package/dist/src/cli/commands/explorer.d.ts +0 -2
  148. package/dist/src/cli/commands/explorer.js +0 -44
  149. package/dist/src/cli/commands/explorer.js.map +0 -1
  150. package/dist/src/cli/commands/git.d.ts +0 -2
  151. package/dist/src/cli/commands/git.js +0 -40
  152. package/dist/src/cli/commands/git.js.map +0 -1
  153. package/dist/src/cli/commands/index-codebase.d.ts +0 -4
  154. package/dist/src/cli/commands/index-codebase.js +0 -63
  155. package/dist/src/cli/commands/index-codebase.js.map +0 -1
  156. package/dist/src/cli/commands/init/create-agent.d.ts +0 -4
  157. package/dist/src/cli/commands/init/create-agent.js +0 -59
  158. package/dist/src/cli/commands/init/create-agent.js.map +0 -1
  159. package/dist/src/cli/commands/init/scaffold-core.d.ts +0 -13
  160. package/dist/src/cli/commands/init/scaffold-core.js +0 -188
  161. package/dist/src/cli/commands/init/scaffold-core.js.map +0 -1
  162. package/dist/src/cli/commands/init/scaffold-docs.d.ts +0 -4
  163. package/dist/src/cli/commands/init/scaffold-docs.js +0 -36
  164. package/dist/src/cli/commands/init/scaffold-docs.js.map +0 -1
  165. package/dist/src/cli/commands/init/scaffold-ops.d.ts +0 -1
  166. package/dist/src/cli/commands/init/scaffold-ops.js +0 -81
  167. package/dist/src/cli/commands/init/scaffold-ops.js.map +0 -1
  168. package/dist/src/cli/commands/init/scaffold-standards.d.ts +0 -2
  169. package/dist/src/cli/commands/init/scaffold-standards.js +0 -84
  170. package/dist/src/cli/commands/init/scaffold-standards.js.map +0 -1
  171. package/dist/src/cli/commands/init.d.ts +0 -11
  172. package/dist/src/cli/commands/init.js +0 -371
  173. package/dist/src/cli/commands/init.js.map +0 -1
  174. package/dist/src/cli/commands/knowledge.d.ts +0 -2
  175. package/dist/src/cli/commands/knowledge.js +0 -16
  176. package/dist/src/cli/commands/knowledge.js.map +0 -1
  177. package/dist/src/cli/commands/lint.d.ts +0 -4
  178. package/dist/src/cli/commands/lint.js +0 -24
  179. package/dist/src/cli/commands/lint.js.map +0 -1
  180. package/dist/src/cli/commands/log.d.ts +0 -10
  181. package/dist/src/cli/commands/log.js +0 -14
  182. package/dist/src/cli/commands/log.js.map +0 -1
  183. package/dist/src/cli/commands/mcp.d.ts +0 -11
  184. package/dist/src/cli/commands/mcp.js +0 -128
  185. package/dist/src/cli/commands/mcp.js.map +0 -1
  186. package/dist/src/cli/commands/memory.d.ts +0 -1
  187. package/dist/src/cli/commands/memory.js +0 -5
  188. package/dist/src/cli/commands/memory.js.map +0 -1
  189. package/dist/src/cli/commands/orchestrate.d.ts +0 -62
  190. package/dist/src/cli/commands/orchestrate.js +0 -263
  191. package/dist/src/cli/commands/orchestrate.js.map +0 -1
  192. package/dist/src/cli/commands/plan.d.ts +0 -11
  193. package/dist/src/cli/commands/plan.js +0 -120
  194. package/dist/src/cli/commands/plan.js.map +0 -1
  195. package/dist/src/cli/commands/quickstart.d.ts +0 -9
  196. package/dist/src/cli/commands/quickstart.js +0 -60
  197. package/dist/src/cli/commands/quickstart.js.map +0 -1
  198. package/dist/src/cli/commands/script.d.ts +0 -1
  199. package/dist/src/cli/commands/script.js +0 -28
  200. package/dist/src/cli/commands/script.js.map +0 -1
  201. package/dist/src/cli/commands/security.d.ts +0 -1
  202. package/dist/src/cli/commands/security.js +0 -34
  203. package/dist/src/cli/commands/security.js.map +0 -1
  204. package/dist/src/cli/commands/status.d.ts +0 -4
  205. package/dist/src/cli/commands/status.js +0 -122
  206. package/dist/src/cli/commands/status.js.map +0 -1
  207. package/dist/src/cli/commands/trace.d.ts +0 -10
  208. package/dist/src/cli/commands/trace.js +0 -108
  209. package/dist/src/cli/commands/trace.js.map +0 -1
  210. package/dist/src/cli/index.d.ts +0 -2
  211. package/dist/src/cli/index.js +0 -289
  212. package/dist/src/cli/index.js.map +0 -1
  213. package/dist/src/cli/platforms/core.d.ts +0 -16
  214. package/dist/src/cli/platforms/core.js +0 -77
  215. package/dist/src/cli/platforms/core.js.map +0 -1
  216. package/dist/src/cli/platforms/index.d.ts +0 -5
  217. package/dist/src/cli/platforms/index.js +0 -6
  218. package/dist/src/cli/platforms/index.js.map +0 -1
  219. package/dist/src/cli/platforms/paths.d.ts +0 -15
  220. package/dist/src/cli/platforms/paths.js +0 -102
  221. package/dist/src/cli/platforms/paths.js.map +0 -1
  222. package/dist/src/cli/platforms/scaffold.d.ts +0 -2
  223. package/dist/src/cli/platforms/scaffold.js +0 -73
  224. package/dist/src/cli/platforms/scaffold.js.map +0 -1
  225. package/dist/src/cli/platforms/utils.d.ts +0 -4
  226. package/dist/src/cli/platforms/utils.js +0 -76
  227. package/dist/src/cli/platforms/utils.js.map +0 -1
  228. package/dist/src/cli/shims.d.ts +0 -1
  229. package/dist/src/cli/shims.js +0 -67
  230. package/dist/src/cli/shims.js.map +0 -1
  231. package/dist/src/cli/utils/claude.d.ts +0 -8
  232. package/dist/src/cli/utils/claude.js +0 -58
  233. package/dist/src/cli/utils/claude.js.map +0 -1
  234. package/dist/src/cli/utils/compliance.d.ts +0 -42
  235. package/dist/src/cli/utils/compliance.js +0 -150
  236. package/dist/src/cli/utils/compliance.js.map +0 -1
  237. package/dist/src/cli/utils/config-schema.d.ts +0 -256
  238. package/dist/src/cli/utils/config-schema.js +0 -67
  239. package/dist/src/cli/utils/config-schema.js.map +0 -1
  240. package/dist/src/cli/utils/fs.d.ts +0 -10
  241. package/dist/src/cli/utils/fs.js +0 -139
  242. package/dist/src/cli/utils/fs.js.map +0 -1
  243. package/dist/src/cli/utils/i18n.d.ts +0 -21
  244. package/dist/src/cli/utils/i18n.js +0 -36
  245. package/dist/src/cli/utils/i18n.js.map +0 -1
  246. package/dist/src/cli/utils/memory.d.ts +0 -45
  247. package/dist/src/cli/utils/memory.js +0 -339
  248. package/dist/src/cli/utils/memory.js.map +0 -1
  249. package/dist/src/cli/utils/pkg.d.ts +0 -42
  250. package/dist/src/cli/utils/pkg.js +0 -281
  251. package/dist/src/cli/utils/pkg.js.map +0 -1
  252. package/dist/src/cli/utils/quality.d.ts +0 -25
  253. package/dist/src/cli/utils/quality.js +0 -61
  254. package/dist/src/cli/utils/quality.js.map +0 -1
  255. package/dist/src/cli/utils/schemas.d.ts +0 -49
  256. package/dist/src/cli/utils/schemas.js +0 -20
  257. package/dist/src/cli/utils/schemas.js.map +0 -1
  258. package/dist/src/cli/utils/string.d.ts +0 -7
  259. package/dist/src/cli/utils/string.js +0 -50
  260. package/dist/src/cli/utils/string.js.map +0 -1
  261. package/dist/src/cli/utils/time.d.ts +0 -2
  262. package/dist/src/cli/utils/time.js +0 -28
  263. package/dist/src/cli/utils/time.js.map +0 -1
  264. package/dist/src/cli/utils/ui.d.ts +0 -53
  265. package/dist/src/cli/utils/ui.js +0 -101
  266. package/dist/src/cli/utils/ui.js.map +0 -1
  267. package/dist/src/cli/utils/validate-registry.d.ts +0 -4
  268. package/dist/src/cli/utils/validate-registry.js +0 -130
  269. package/dist/src/cli/utils/validate-registry.js.map +0 -1
  270. package/dist/src/contracts/index.d.ts +0 -1
  271. package/dist/src/contracts/index.js +0 -2
  272. package/dist/src/contracts/index.js.map +0 -1
  273. package/dist/src/contracts/tasks.d.ts +0 -44
  274. package/dist/src/contracts/tasks.js +0 -21
  275. package/dist/src/contracts/tasks.js.map +0 -1
  276. package/dist/src/modules/agents/definitions.d.ts +0 -26
  277. package/dist/src/modules/agents/definitions.js +0 -559
  278. package/dist/src/modules/agents/definitions.js.map +0 -1
  279. package/dist/src/modules/agents/registry/analyst.d.ts +0 -2
  280. package/dist/src/modules/agents/registry/analyst.js +0 -40
  281. package/dist/src/modules/agents/registry/analyst.js.map +0 -1
  282. package/dist/src/modules/agents/registry/architect.d.ts +0 -2
  283. package/dist/src/modules/agents/registry/architect.js +0 -43
  284. package/dist/src/modules/agents/registry/architect.js.map +0 -1
  285. package/dist/src/modules/agents/registry/backend.d.ts +0 -2
  286. package/dist/src/modules/agents/registry/backend.js +0 -51
  287. package/dist/src/modules/agents/registry/backend.js.map +0 -1
  288. package/dist/src/modules/agents/registry/database.d.ts +0 -2
  289. package/dist/src/modules/agents/registry/database.js +0 -46
  290. package/dist/src/modules/agents/registry/database.js.map +0 -1
  291. package/dist/src/modules/agents/registry/devops.d.ts +0 -2
  292. package/dist/src/modules/agents/registry/devops.js +0 -46
  293. package/dist/src/modules/agents/registry/devops.js.map +0 -1
  294. package/dist/src/modules/agents/registry/explorer.d.ts +0 -2
  295. package/dist/src/modules/agents/registry/explorer.js +0 -38
  296. package/dist/src/modules/agents/registry/explorer.js.map +0 -1
  297. package/dist/src/modules/agents/registry/frontend.d.ts +0 -2
  298. package/dist/src/modules/agents/registry/frontend.js +0 -53
  299. package/dist/src/modules/agents/registry/frontend.js.map +0 -1
  300. package/dist/src/modules/agents/registry/git.d.ts +0 -2
  301. package/dist/src/modules/agents/registry/git.js +0 -37
  302. package/dist/src/modules/agents/registry/git.js.map +0 -1
  303. package/dist/src/modules/agents/registry/manager.d.ts +0 -2
  304. package/dist/src/modules/agents/registry/manager.js +0 -65
  305. package/dist/src/modules/agents/registry/manager.js.map +0 -1
  306. package/dist/src/modules/agents/registry/mobile.d.ts +0 -2
  307. package/dist/src/modules/agents/registry/mobile.js +0 -42
  308. package/dist/src/modules/agents/registry/mobile.js.map +0 -1
  309. package/dist/src/modules/agents/registry/native.d.ts +0 -2
  310. package/dist/src/modules/agents/registry/native.js +0 -42
  311. package/dist/src/modules/agents/registry/native.js.map +0 -1
  312. package/dist/src/modules/agents/registry/quality.d.ts +0 -2
  313. package/dist/src/modules/agents/registry/quality.js +0 -44
  314. package/dist/src/modules/agents/registry/quality.js.map +0 -1
  315. package/dist/src/modules/agents/registry/security.d.ts +0 -2
  316. package/dist/src/modules/agents/registry/security.js +0 -43
  317. package/dist/src/modules/agents/registry/security.js.map +0 -1
  318. package/dist/src/modules/agents/types.d.ts +0 -33
  319. package/dist/src/modules/agents/types.js +0 -2
  320. package/dist/src/modules/agents/types.js.map +0 -1
  321. package/dist/src/modules/contracts/api.d.ts +0 -178
  322. package/dist/src/modules/contracts/api.js +0 -56
  323. package/dist/src/modules/contracts/api.js.map +0 -1
  324. package/dist/src/modules/contracts/index.d.ts +0 -5
  325. package/dist/src/modules/contracts/index.js +0 -6
  326. package/dist/src/modules/contracts/index.js.map +0 -1
  327. package/dist/src/modules/engines/agent-executor.d.ts +0 -46
  328. package/dist/src/modules/engines/agent-executor.js +0 -241
  329. package/dist/src/modules/engines/agent-executor.js.map +0 -1
  330. package/dist/src/modules/engines/agent-loop.d.ts +0 -34
  331. package/dist/src/modules/engines/agent-loop.js +0 -102
  332. package/dist/src/modules/engines/agent-loop.js.map +0 -1
  333. package/dist/src/modules/engines/contract-engine.d.ts +0 -46
  334. package/dist/src/modules/engines/contract-engine.js +0 -116
  335. package/dist/src/modules/engines/contract-engine.js.map +0 -1
  336. package/dist/src/modules/engines/crud-governance.d.ts +0 -66
  337. package/dist/src/modules/engines/crud-governance.js +0 -219
  338. package/dist/src/modules/engines/crud-governance.js.map +0 -1
  339. package/dist/src/modules/engines/discovery-engine.d.ts +0 -42
  340. package/dist/src/modules/engines/discovery-engine.js +0 -161
  341. package/dist/src/modules/engines/discovery-engine.js.map +0 -1
  342. package/dist/src/modules/engines/evaluation-engine.d.ts +0 -18
  343. package/dist/src/modules/engines/evaluation-engine.js +0 -171
  344. package/dist/src/modules/engines/evaluation-engine.js.map +0 -1
  345. package/dist/src/modules/engines/file-lock.d.ts +0 -41
  346. package/dist/src/modules/engines/file-lock.js +0 -168
  347. package/dist/src/modules/engines/file-lock.js.map +0 -1
  348. package/dist/src/modules/engines/health-engine.d.ts +0 -22
  349. package/dist/src/modules/engines/health-engine.js +0 -127
  350. package/dist/src/modules/engines/health-engine.js.map +0 -1
  351. package/dist/src/modules/engines/phase-engine.d.ts +0 -82
  352. package/dist/src/modules/engines/phase-engine.js +0 -211
  353. package/dist/src/modules/engines/phase-engine.js.map +0 -1
  354. package/dist/src/modules/engines/planning-engine.d.ts +0 -25
  355. package/dist/src/modules/engines/planning-engine.js +0 -80
  356. package/dist/src/modules/engines/planning-engine.js.map +0 -1
  357. package/dist/src/modules/engines/policy-engine.d.ts +0 -63
  358. package/dist/src/modules/engines/policy-engine.js +0 -186
  359. package/dist/src/modules/engines/policy-engine.js.map +0 -1
  360. package/dist/src/modules/engines/quality-gate.d.ts +0 -31
  361. package/dist/src/modules/engines/quality-gate.js +0 -95
  362. package/dist/src/modules/engines/quality-gate.js.map +0 -1
  363. package/dist/src/modules/engines/risk-engine.d.ts +0 -34
  364. package/dist/src/modules/engines/risk-engine.js +0 -201
  365. package/dist/src/modules/engines/risk-engine.js.map +0 -1
  366. package/dist/src/modules/engines/routing-engine.d.ts +0 -96
  367. package/dist/src/modules/engines/routing-engine.js +0 -505
  368. package/dist/src/modules/engines/routing-engine.js.map +0 -1
  369. package/dist/src/modules/engines/session-engine.d.ts +0 -68
  370. package/dist/src/modules/engines/session-engine.js +0 -141
  371. package/dist/src/modules/engines/session-engine.js.map +0 -1
  372. package/dist/src/modules/engines/types.d.ts +0 -51
  373. package/dist/src/modules/engines/types.js +0 -2
  374. package/dist/src/modules/engines/types.js.map +0 -1
  375. package/dist/src/modules/memory/core.d.ts +0 -42
  376. package/dist/src/modules/memory/core.js +0 -100
  377. package/dist/src/modules/memory/core.js.map +0 -1
  378. package/dist/src/modules/memory/embedding.d.ts +0 -28
  379. package/dist/src/modules/memory/embedding.js +0 -131
  380. package/dist/src/modules/memory/embedding.js.map +0 -1
  381. package/dist/src/modules/memory/types.d.ts +0 -18
  382. package/dist/src/modules/memory/types.js +0 -2
  383. package/dist/src/modules/memory/types.js.map +0 -1
  384. package/dist/src/modules/memory/vector-store.d.ts +0 -13
  385. package/dist/src/modules/memory/vector-store.js +0 -75
  386. package/dist/src/modules/memory/vector-store.js.map +0 -1
  387. package/dist/src/modules/providers/definitions.d.ts +0 -9
  388. package/dist/src/modules/providers/definitions.js +0 -141
  389. package/dist/src/modules/providers/definitions.js.map +0 -1
  390. package/dist/src/modules/providers/llm-provider.d.ts +0 -87
  391. package/dist/src/modules/providers/llm-provider.js +0 -242
  392. package/dist/src/modules/providers/llm-provider.js.map +0 -1
  393. package/dist/src/modules/providers/registry.d.ts +0 -12
  394. package/dist/src/modules/providers/registry.js +0 -19
  395. package/dist/src/modules/providers/registry.js.map +0 -1
  396. package/dist/src/modules/providers/shared.d.ts +0 -1
  397. package/dist/src/modules/providers/shared.js +0 -104
  398. package/dist/src/modules/providers/shared.js.map +0 -1
  399. package/dist/src/modules/providers/types.d.ts +0 -14
  400. package/dist/src/modules/providers/types.js +0 -2
  401. package/dist/src/modules/providers/types.js.map +0 -1
  402. package/dist/src/modules/skills/adapter-skills.d.ts +0 -70
  403. package/dist/src/modules/skills/adapter-skills.js +0 -450
  404. package/dist/src/modules/skills/adapter-skills.js.map +0 -1
  405. package/dist/src/modules/skills/definitions.d.ts +0 -48
  406. package/dist/src/modules/skills/definitions.js +0 -71
  407. package/dist/src/modules/skills/definitions.js.map +0 -1
  408. package/dist/src/shared/audit.d.ts +0 -1
  409. package/dist/src/shared/audit.js +0 -2
  410. package/dist/src/shared/audit.js.map +0 -1
  411. package/dist/src/shared/constants.d.ts +0 -1
  412. package/dist/src/shared/constants.js +0 -2
  413. package/dist/src/shared/constants.js.map +0 -1
  414. package/dist/src/shared/errors.d.ts +0 -1
  415. package/dist/src/shared/errors.js +0 -2
  416. package/dist/src/shared/errors.js.map +0 -1
  417. package/dist/src/shared/fs.d.ts +0 -1
  418. package/dist/src/shared/fs.js +0 -2
  419. package/dist/src/shared/fs.js.map +0 -1
  420. package/dist/src/shared/lock.d.ts +0 -1
  421. package/dist/src/shared/lock.js +0 -2
  422. package/dist/src/shared/lock.js.map +0 -1
  423. package/dist/src/shared/logger.d.ts +0 -1
  424. package/dist/src/shared/logger.js +0 -2
  425. package/dist/src/shared/logger.js.map +0 -1
  426. package/dist/src/shared/pii.d.ts +0 -1
  427. package/dist/src/shared/pii.js +0 -2
  428. package/dist/src/shared/pii.js.map +0 -1
  429. package/dist/src/shared/retention.d.ts +0 -1
  430. package/dist/src/shared/retention.js +0 -2
  431. package/dist/src/shared/retention.js.map +0 -1
  432. package/dist/src/shared/storage.d.ts +0 -141
  433. package/dist/src/shared/storage.js +0 -332
  434. package/dist/src/shared/storage.js.map +0 -1
  435. package/dist/src/shared/string.d.ts +0 -1
  436. package/dist/src/shared/string.js +0 -2
  437. package/dist/src/shared/string.js.map +0 -1
  438. package/dist/src/shared/types.d.ts +0 -1
  439. package/dist/src/shared/types.js +0 -2
  440. package/dist/src/shared/types.js.map +0 -1
@@ -0,0 +1,724 @@
1
+ import Database from "better-sqlite3";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ import { AUDIT_CHAIN_GENESIS, buildAgentLogChainPayload, sha256Hex, verifyHashChain } from "./audit-chain.js";
5
+ import { databaseHolder } from "./database.js";
6
+ import { logger } from "./logger.js";
7
+ import { maskText } from "./pii.js";
8
+ import { asAgentID, asLogID, asMessageID, asTaskID, } from "./types.js";
9
+ /**
10
+ * Resolves the framework directory (.atabey) intelligently by ascending the directory tree,
11
+ * preventing subpackages and test runners from spraying databases in random subfolders.
12
+ */
13
+ export function resolveFrameworkDir() {
14
+ const testDir = process.env.ATABEY_TEST_DIR || process.env.ATABEY_FRAMEWORK_DIR;
15
+ if (testDir)
16
+ return testDir;
17
+ let cur = process.cwd();
18
+ while (cur !== path.parse(cur).root) {
19
+ const candidate = path.join(cur, ".atabey");
20
+ if (fs.existsSync(candidate))
21
+ return candidate;
22
+ const pkgJson = path.join(cur, "package.json");
23
+ if (fs.existsSync(pkgJson)) {
24
+ try {
25
+ const pkg = JSON.parse(fs.readFileSync(pkgJson, "utf8"));
26
+ if (pkg.name === "atabey-monorepo" || (pkg.workspaces && Array.isArray(pkg.workspaces))) {
27
+ return path.join(cur, ".atabey");
28
+ }
29
+ }
30
+ catch { /* ignore */ }
31
+ }
32
+ cur = path.dirname(cur);
33
+ }
34
+ return path.join(process.cwd(), ".atabey");
35
+ }
36
+ /**
37
+ * [DB] Canonical Atabey Storage Engine (Single Source of Truth)
38
+ * Central SQLite database for enterprise-scale multi-agent state management.
39
+ */
40
+ export class AtabeyStorage {
41
+ static db = null;
42
+ static getDB() {
43
+ if (!this.db) {
44
+ const frameworkDir = resolveFrameworkDir();
45
+ if (!fs.existsSync(frameworkDir)) {
46
+ fs.mkdirSync(frameworkDir, { recursive: true });
47
+ }
48
+ const dbPath = path.join(frameworkDir, "atabey.db");
49
+ this.db = new Database(dbPath, { timeout: 5000 });
50
+ this.db.pragma("journal_mode = WAL");
51
+ databaseHolder.setDB(this.db);
52
+ this.initializeSchema();
53
+ }
54
+ return this.db;
55
+ }
56
+ static initializeSchema() {
57
+ const db = this.db;
58
+ db.exec(`
59
+ CREATE TABLE IF NOT EXISTS agents (
60
+ name TEXT PRIMARY KEY,
61
+ state TEXT DEFAULT 'READY',
62
+ task TEXT DEFAULT 'Idle',
63
+ description TEXT DEFAULT '',
64
+ skills TEXT DEFAULT '[]',
65
+ last_updated DATETIME DEFAULT CURRENT_TIMESTAMP
66
+ )
67
+ `);
68
+ db.exec(`
69
+ CREATE TABLE IF NOT EXISTS messages (
70
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
71
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
72
+ sender TEXT,
73
+ receiver TEXT,
74
+ category TEXT,
75
+ content TEXT,
76
+ trace_id TEXT,
77
+ parent_id TEXT,
78
+ status TEXT DEFAULT 'PENDING',
79
+ priority TEXT DEFAULT 'NORMAL',
80
+ requires_approval BOOLEAN DEFAULT 0
81
+ )
82
+ `);
83
+ db.exec(`
84
+ CREATE TABLE IF NOT EXISTS tasks (
85
+ id TEXT PRIMARY KEY,
86
+ trace_id TEXT,
87
+ description TEXT,
88
+ agent TEXT,
89
+ status TEXT DEFAULT 'PENDING',
90
+ priority TEXT DEFAULT 'NORMAL',
91
+ dependencies TEXT,
92
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
93
+ )
94
+ `);
95
+ db.exec(`
96
+ CREATE TABLE IF NOT EXISTS logs (
97
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
98
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
99
+ agent TEXT,
100
+ action TEXT,
101
+ trace_id TEXT,
102
+ status TEXT,
103
+ summary TEXT,
104
+ findings TEXT,
105
+ prev_hash TEXT,
106
+ hash TEXT
107
+ )
108
+ `);
109
+ try {
110
+ const tableInfo = db.prepare("PRAGMA table_info(logs)").all();
111
+ const columnNames = tableInfo.map(c => c.name);
112
+ if (!columnNames.includes("prev_hash"))
113
+ db.exec("ALTER TABLE logs ADD COLUMN prev_hash TEXT");
114
+ if (!columnNames.includes("hash"))
115
+ db.exec("ALTER TABLE logs ADD COLUMN hash TEXT");
116
+ }
117
+ catch (err) {
118
+ logger.error(`Failed to migrate logs table schema: ${err.message}`);
119
+ }
120
+ db.exec(`
121
+ CREATE TABLE IF NOT EXISTS metadata (
122
+ key TEXT PRIMARY KEY,
123
+ value TEXT
124
+ )
125
+ `);
126
+ db.exec(`
127
+ CREATE TABLE IF NOT EXISTS costs (
128
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
129
+ provider TEXT,
130
+ model TEXT,
131
+ input_tokens INTEGER,
132
+ output_tokens INTEGER,
133
+ cost REAL,
134
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
135
+ trace_id TEXT
136
+ )
137
+ `);
138
+ db.exec(`
139
+ CREATE TABLE IF NOT EXISTS knowledge (
140
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
141
+ filename TEXT UNIQUE,
142
+ content TEXT,
143
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
144
+ )
145
+ `);
146
+ db.exec(`
147
+ CREATE TABLE IF NOT EXISTS users (
148
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
149
+ name TEXT UNIQUE,
150
+ token TEXT UNIQUE,
151
+ role TEXT DEFAULT 'user',
152
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
153
+ )
154
+ `);
155
+ db.exec(`
156
+ CREATE TABLE IF NOT EXISTS loop_cooldowns (
157
+ agent TEXT PRIMARY KEY,
158
+ cooldown_until INTEGER NOT NULL,
159
+ detail TEXT,
160
+ cooldown_count INTEGER DEFAULT 1,
161
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
162
+ )
163
+ `);
164
+ db.exec(`
165
+ CREATE TABLE IF NOT EXISTS approvals (
166
+ trace_id TEXT PRIMARY KEY,
167
+ tool_name TEXT NOT NULL,
168
+ agent TEXT NOT NULL,
169
+ risk_score INTEGER NOT NULL,
170
+ risk_level TEXT NOT NULL,
171
+ reason TEXT NOT NULL,
172
+ args TEXT NOT NULL,
173
+ created_at INTEGER NOT NULL,
174
+ expires_at INTEGER NOT NULL,
175
+ status TEXT DEFAULT 'PENDING',
176
+ passcode TEXT
177
+ )
178
+ `);
179
+ db.exec(`
180
+ CREATE TABLE IF NOT EXISTS discipline (
181
+ agent TEXT PRIMARY KEY,
182
+ total_calls INTEGER DEFAULT 0,
183
+ violations INTEGER DEFAULT 0,
184
+ last_violation TEXT,
185
+ cooldown_until INTEGER DEFAULT 0,
186
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
187
+ )
188
+ `);
189
+ }
190
+ // === KNOWLEDGE PERSISTENCE ===
191
+ static getKnowledgeList() {
192
+ try {
193
+ return this.getDB().prepare("SELECT filename, updated_at FROM knowledge ORDER BY updated_at DESC").all();
194
+ }
195
+ catch (err) {
196
+ logger.debug(`Failed to get knowledge list: ${err.message}`);
197
+ return [];
198
+ }
199
+ }
200
+ static getKnowledgeFile(filename) {
201
+ try {
202
+ const row = this.getDB().prepare("SELECT * FROM knowledge WHERE filename = ?").get(filename);
203
+ return row || null;
204
+ }
205
+ catch (err) {
206
+ logger.debug(`Failed to get knowledge file: ${err.message}`);
207
+ return null;
208
+ }
209
+ }
210
+ static saveKnowledgeFile(filename, content) {
211
+ this.getDB().prepare(`
212
+ INSERT INTO knowledge (filename, content, updated_at) VALUES (?, ?, datetime('now'))
213
+ ON CONFLICT(filename) DO UPDATE SET content = excluded.content, updated_at = datetime('now')
214
+ `).run(filename, content);
215
+ }
216
+ static deleteKnowledgeFile(filename) {
217
+ const info = this.getDB().prepare("DELETE FROM knowledge WHERE filename = ?").run(filename);
218
+ return info.changes > 0;
219
+ }
220
+ // === USER PERSISTENCE ===
221
+ static hasUsers() {
222
+ try {
223
+ const row = this.getDB().prepare("SELECT COUNT(*) as count FROM users").get();
224
+ return row.count > 0;
225
+ }
226
+ catch {
227
+ return false;
228
+ }
229
+ }
230
+ static getUsers() {
231
+ try {
232
+ return this.getDB().prepare("SELECT name, token, role FROM users ORDER BY id ASC").all();
233
+ }
234
+ catch (err) {
235
+ logger.debug(`Failed to get users: ${err.message}`);
236
+ return [];
237
+ }
238
+ }
239
+ static getUserByToken(token) {
240
+ try {
241
+ const row = this.getDB().prepare("SELECT name, role FROM users WHERE token = ?").get(token);
242
+ return row || null;
243
+ }
244
+ catch (err) {
245
+ logger.debug(`Failed to get user by token: ${err.message}`);
246
+ return null;
247
+ }
248
+ }
249
+ static createUser(name, token, role) {
250
+ this.getDB().prepare("INSERT INTO users (name, token, role) VALUES (?, ?, ?)").run(name, token, role);
251
+ }
252
+ static deleteUser(name) {
253
+ const info = this.getDB().prepare("DELETE FROM users WHERE name = ?").run(name);
254
+ return info.changes > 0;
255
+ }
256
+ // === AGENT DETAILS PERSISTENCE ===
257
+ static createAgent(name, description, skills) {
258
+ const cleanName = name.replace("@", "");
259
+ this.getDB().prepare(`
260
+ INSERT INTO agents (name, state, task, description, skills, last_updated)
261
+ VALUES (?, 'READY', 'Idle', ?, ?, datetime('now'))
262
+ ON CONFLICT(name) DO UPDATE SET description = excluded.description, skills = excluded.skills
263
+ `).run(cleanName, description, skills);
264
+ }
265
+ static deleteAgent(name) {
266
+ const cleanName = name.replace("@", "");
267
+ const info = this.getDB().prepare("DELETE FROM agents WHERE name = ?").run(cleanName);
268
+ return info.changes > 0;
269
+ }
270
+ static updateAgentDetails(name, description, state, task, skills) {
271
+ const cleanName = name.replace("@", "");
272
+ this.getDB().prepare(`
273
+ INSERT INTO agents (name, state, task, description, skills, last_updated)
274
+ VALUES (?, ?, ?, ?, ?, datetime('now'))
275
+ ON CONFLICT(name) DO UPDATE SET
276
+ description = excluded.description,
277
+ state = excluded.state,
278
+ task = excluded.task,
279
+ skills = excluded.skills,
280
+ last_updated = datetime('now')
281
+ `).run(cleanName, state, task, description, skills);
282
+ }
283
+ // === EVENT HOOKS FOR REAL-TIME BROADCASTS ===
284
+ static onMessageSaved = null;
285
+ static onMessageStatusUpdated = null;
286
+ static saveLog(log) {
287
+ const db = this.getDB();
288
+ const timestamp = new Date().toISOString();
289
+ const agent = log.agent.replace("@", "");
290
+ const maskedSummary = maskText(log.summary);
291
+ const maskedFindings = log.findings ? maskText(log.findings) : null;
292
+ const traceId = log.trace_id || "";
293
+ let lastId = 0;
294
+ const insert = db.transaction(() => {
295
+ let prevHash = AUDIT_CHAIN_GENESIS;
296
+ try {
297
+ const lastRow = db.prepare("SELECT hash FROM logs WHERE hash IS NOT NULL ORDER BY id DESC LIMIT 1").get();
298
+ if (lastRow && lastRow.hash) {
299
+ prevHash = lastRow.hash;
300
+ }
301
+ }
302
+ catch { /* best-effort fallback to genesis */ }
303
+ const payload = buildAgentLogChainPayload({
304
+ prevHash,
305
+ timestamp,
306
+ agent,
307
+ action: log.action,
308
+ traceId: traceId || "",
309
+ status: log.status,
310
+ summary: maskedSummary,
311
+ });
312
+ const hash = sha256Hex(payload);
313
+ const result = db.prepare(`
314
+ INSERT INTO logs (timestamp, agent, action, trace_id, status, summary, findings, prev_hash, hash)
315
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
316
+ `).run(timestamp, agent, log.action, log.trace_id || null, log.status, maskedSummary, maskedFindings, prevHash, hash);
317
+ lastId = Number(result.lastInsertRowid);
318
+ });
319
+ insert();
320
+ return lastId;
321
+ }
322
+ static verifyLogIntegrity() {
323
+ const db = this.getDB();
324
+ try {
325
+ const rows = db.prepare("SELECT * FROM logs ORDER BY id ASC").all();
326
+ const hashed = rows.filter((r) => r.hash);
327
+ if (hashed.length === 0) {
328
+ return { valid: true, checked: 0, reason: "No hashed log rows yet" };
329
+ }
330
+ return verifyHashChain(hashed, (row, prevHash) => buildAgentLogChainPayload({
331
+ prevHash,
332
+ agent: row.agent,
333
+ action: row.action,
334
+ traceId: row.trace_id || "",
335
+ status: row.status,
336
+ summary: row.summary,
337
+ timestamp: row.timestamp,
338
+ }));
339
+ }
340
+ catch (err) {
341
+ return { valid: false, reason: `Verification error: ${err.message}` };
342
+ }
343
+ }
344
+ static saveCost(cost) {
345
+ const db = this.getDB();
346
+ db.prepare(`
347
+ INSERT INTO costs (provider, model, input_tokens, output_tokens, cost, timestamp, trace_id)
348
+ VALUES (?, ?, ?, ?, ?, ?, ?)
349
+ `).run(cost.provider, cost.model, cost.inputTokens, cost.outputTokens, cost.cost, cost.timestamp, cost.traceId || null);
350
+ }
351
+ static getAllCosts() {
352
+ const db = this.getDB();
353
+ const rows = db.prepare("SELECT * FROM costs ORDER BY timestamp ASC").all();
354
+ return rows.map(r => ({
355
+ provider: r.provider,
356
+ model: r.model,
357
+ inputTokens: r.input_tokens,
358
+ outputTokens: r.output_tokens,
359
+ cost: r.cost,
360
+ timestamp: r.timestamp,
361
+ traceId: r.trace_id || undefined
362
+ }));
363
+ }
364
+ static updateAgentStatus(name, state, task, lastUpdated) {
365
+ const cleanName = name.replace("@", "");
366
+ const timestamp = lastUpdated || new Date().toISOString();
367
+ this.getDB().prepare(`
368
+ INSERT INTO agents (name, state, task, last_updated)
369
+ VALUES (?, ?, ?, ?)
370
+ ON CONFLICT(name) DO UPDATE SET
371
+ state = excluded.state,
372
+ task = excluded.task,
373
+ last_updated = excluded.last_updated
374
+ `).run(cleanName, state, task, timestamp);
375
+ }
376
+ static getAllAgents() {
377
+ const db = this.getDB();
378
+ const rows = db.prepare("SELECT * FROM agents").all();
379
+ return rows.map(r => ({
380
+ name: asAgentID(r.name),
381
+ state: r.state,
382
+ task: r.task,
383
+ last_updated: r.last_updated
384
+ }));
385
+ }
386
+ static saveMessage(msg) {
387
+ const from = msg.from.replace("@", "");
388
+ const to = msg.to.replace("@", "");
389
+ const cleanContent = maskText(msg.content);
390
+ this.getDB().prepare(`
391
+ INSERT INTO messages (timestamp, sender, receiver, category, content, trace_id, parent_id, status, priority, requires_approval)
392
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
393
+ `).run(msg.timestamp, from, to, msg.category, cleanContent, msg.traceId, msg.parentId || null, msg.status, msg.priority, msg.requiresApproval ? 1 : 0);
394
+ if (this.onMessageSaved) {
395
+ try {
396
+ this.onMessageSaved({ traceId: msg.traceId, category: msg.category });
397
+ }
398
+ catch (err) {
399
+ logger.debug(`onMessageSaved hook error: ${err.message}`);
400
+ }
401
+ }
402
+ }
403
+ static getPendingMessages() {
404
+ const db = this.getDB();
405
+ const rows = db.prepare("SELECT * FROM messages WHERE status = 'PENDING'").all();
406
+ return rows.map(r => ({
407
+ id: asMessageID(r.id),
408
+ timestamp: r.timestamp,
409
+ from: asAgentID(r.sender),
410
+ to: asAgentID(r.receiver),
411
+ category: r.category,
412
+ content: maskText(r.content),
413
+ traceId: r.trace_id,
414
+ parentId: r.parent_id || undefined,
415
+ status: r.status,
416
+ priority: r.priority,
417
+ requiresApproval: r.requires_approval === 1
418
+ }));
419
+ }
420
+ static updateMessageStatus(id, status) {
421
+ this.getDB().prepare("UPDATE messages SET status = ? WHERE id = ?").run(status, id);
422
+ if (this.onMessageStatusUpdated) {
423
+ try {
424
+ this.onMessageStatusUpdated(id, status);
425
+ }
426
+ catch (err) {
427
+ logger.debug(`onMessageStatusUpdated hook error: ${err.message}`);
428
+ }
429
+ }
430
+ }
431
+ static saveTask(task) {
432
+ const agent = task.agent;
433
+ const cleanDesc = task.description;
434
+ this.getDB().prepare(`
435
+ INSERT INTO tasks (id, trace_id, description, agent, status, priority, dependencies, created_at)
436
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
437
+ ON CONFLICT(id) DO UPDATE SET
438
+ status = excluded.status,
439
+ priority = excluded.priority,
440
+ dependencies = excluded.dependencies,
441
+ agent = excluded.agent
442
+ `).run(task.id, task.traceId, cleanDesc, agent, task.status, task.priority, JSON.stringify(task.dependencies), task.createdAt || new Date().toISOString());
443
+ }
444
+ static getTasks(traceId) {
445
+ const db = this.getDB();
446
+ let rows;
447
+ if (traceId) {
448
+ rows = db.prepare("SELECT * FROM tasks WHERE trace_id = ?").all(traceId);
449
+ }
450
+ else {
451
+ rows = db.prepare("SELECT * FROM tasks").all();
452
+ }
453
+ return rows.map(r => {
454
+ let deps;
455
+ try {
456
+ deps = JSON.parse(r.dependencies || "[]");
457
+ }
458
+ catch {
459
+ deps = [];
460
+ }
461
+ return {
462
+ id: asTaskID(r.id),
463
+ traceId: r.trace_id,
464
+ description: maskText(r.description),
465
+ agent: asAgentID(r.agent),
466
+ status: r.status,
467
+ priority: r.priority,
468
+ dependencies: deps,
469
+ createdAt: r.created_at
470
+ };
471
+ });
472
+ }
473
+ static getLogs(agentName) {
474
+ const db = this.getDB();
475
+ let rows;
476
+ const cleanName = agentName ? agentName.replace("@", "") : undefined;
477
+ if (cleanName) {
478
+ rows = db.prepare("SELECT * FROM logs WHERE agent = ? ORDER BY timestamp DESC").all(cleanName);
479
+ }
480
+ else {
481
+ rows = db.prepare("SELECT * FROM logs ORDER BY timestamp DESC").all();
482
+ }
483
+ return rows.map(r => ({
484
+ id: asLogID(r.id),
485
+ timestamp: r.timestamp,
486
+ agent: asAgentID(r.agent),
487
+ action: r.action,
488
+ trace_id: r.trace_id || undefined,
489
+ status: r.status,
490
+ summary: maskText(r.summary),
491
+ findings: r.findings ? maskText(r.findings) : undefined,
492
+ prev_hash: r.prev_hash || undefined,
493
+ hash: r.hash || undefined
494
+ }));
495
+ }
496
+ static setMetadata(key, value) {
497
+ this.getDB().prepare(`
498
+ INSERT INTO metadata (key, value) VALUES (?, ?)
499
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value
500
+ `).run(key, value);
501
+ }
502
+ static getMetadata(key) {
503
+ const row = this.getDB().prepare("SELECT value FROM metadata WHERE key = ?").get(key);
504
+ return row ? row.value : null;
505
+ }
506
+ // === LOOP COOLDOWN PERSISTENCE ===
507
+ static saveLoopCooldown(agent, cooldownUntil, detail, cooldownCount = 1) {
508
+ const cleanAgent = agent.replace("@", "");
509
+ this.getDB().prepare(`
510
+ INSERT INTO loop_cooldowns (agent, cooldown_until, detail, cooldown_count, updated_at)
511
+ VALUES (?, ?, ?, ?, datetime('now'))
512
+ ON CONFLICT(agent) DO UPDATE SET
513
+ cooldown_until = excluded.cooldown_until,
514
+ detail = excluded.detail,
515
+ cooldown_count = excluded.cooldown_count,
516
+ updated_at = datetime('now')
517
+ `).run(cleanAgent, cooldownUntil, detail, cooldownCount);
518
+ }
519
+ static getLoopCooldown(agent) {
520
+ const cleanAgent = agent.replace("@", "");
521
+ try {
522
+ const row = this.getDB().prepare("SELECT * FROM loop_cooldowns WHERE agent = ?").get(cleanAgent);
523
+ if (!row)
524
+ return null;
525
+ return {
526
+ agent: row.agent,
527
+ cooldownUntil: row.cooldown_until,
528
+ detail: row.detail,
529
+ cooldownCount: row.cooldown_count
530
+ };
531
+ }
532
+ catch (err) {
533
+ logger.debug(`Failed to get loop cooldown: ${err.message}`);
534
+ return null;
535
+ }
536
+ }
537
+ static clearLoopCooldown(agent) {
538
+ const cleanAgent = agent.replace("@", "");
539
+ const info = this.getDB().prepare("DELETE FROM loop_cooldowns WHERE agent = ?").run(cleanAgent);
540
+ return info.changes > 0;
541
+ }
542
+ static clearAllLoopCooldowns() {
543
+ try {
544
+ this.getDB().prepare("DELETE FROM loop_cooldowns").run();
545
+ }
546
+ catch (err) {
547
+ logger.debug(`Failed to clear all loop cooldowns: ${err.message}`);
548
+ }
549
+ }
550
+ static listActiveLoopCooldowns() {
551
+ const now = Date.now();
552
+ try {
553
+ const rows = this.getDB().prepare("SELECT * FROM loop_cooldowns WHERE cooldown_until > ?").all(now);
554
+ return rows.map(r => ({
555
+ agent: r.agent,
556
+ cooldownUntil: r.cooldown_until,
557
+ detail: r.detail,
558
+ cooldownCount: r.cooldown_count
559
+ }));
560
+ }
561
+ catch (err) {
562
+ logger.debug(`Failed to list active loop cooldowns: ${err.message}`);
563
+ return [];
564
+ }
565
+ }
566
+ static purgeExpiredLoopCooldowns() {
567
+ const now = Date.now();
568
+ try {
569
+ const info = this.getDB().prepare("DELETE FROM loop_cooldowns WHERE cooldown_until <= ?").run(now);
570
+ return info.changes;
571
+ }
572
+ catch (err) {
573
+ logger.debug(`Failed to purge expired loop cooldowns: ${err.message}`);
574
+ return 0;
575
+ }
576
+ }
577
+ // === APPROVALS PERSISTENCE ===
578
+ static saveApproval(app) {
579
+ this.saveApprovalRequest(app);
580
+ }
581
+ static saveApprovalRequest(request) {
582
+ const db = this.getDB();
583
+ db.prepare(`
584
+ INSERT OR REPLACE INTO approvals (
585
+ trace_id, tool_name, agent, risk_score, risk_level, reason, args,
586
+ created_at, expires_at, status, passcode
587
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
588
+ `).run(request.traceId, request.toolName, request.agent, request.riskScore, request.riskLevel, request.reason, JSON.stringify(request.args), request.createdAt, request.expiresAt, request.status || "PENDING", request.passcode || null);
589
+ }
590
+ static getApproval(traceId) {
591
+ try {
592
+ const row = this.getDB().prepare("SELECT * FROM approvals WHERE trace_id = ?").get(traceId);
593
+ if (!row)
594
+ return null;
595
+ return {
596
+ traceId: row.trace_id,
597
+ toolName: row.tool_name,
598
+ agent: row.agent,
599
+ riskScore: row.risk_score,
600
+ riskLevel: row.risk_level,
601
+ reason: row.reason,
602
+ args: JSON.parse(row.args || "{}"),
603
+ createdAt: row.created_at,
604
+ expiresAt: row.expires_at,
605
+ status: row.status,
606
+ passcode: row.passcode || undefined
607
+ };
608
+ }
609
+ catch (err) {
610
+ logger.debug(`Failed to get approval: ${err.message}`);
611
+ return null;
612
+ }
613
+ }
614
+ static getPendingApprovals() {
615
+ try {
616
+ const rows = this.getDB().prepare("SELECT * FROM approvals WHERE status = 'PENDING'").all();
617
+ return rows.map(row => ({
618
+ traceId: row.trace_id,
619
+ toolName: row.tool_name,
620
+ agent: row.agent,
621
+ riskScore: row.risk_score,
622
+ riskLevel: row.risk_level,
623
+ reason: row.reason,
624
+ args: JSON.parse(row.args || "{}"),
625
+ createdAt: row.created_at,
626
+ expiresAt: row.expires_at,
627
+ status: row.status,
628
+ passcode: row.passcode || undefined
629
+ }));
630
+ }
631
+ catch (err) {
632
+ logger.debug(`Failed to get pending approvals: ${err.message}`);
633
+ return [];
634
+ }
635
+ }
636
+ static updateApprovalStatus(traceId, status) {
637
+ this.getDB().prepare("UPDATE approvals SET status = ? WHERE trace_id = ?").run(status, traceId);
638
+ }
639
+ static clearAllApprovals() {
640
+ try {
641
+ this.getDB().prepare("DELETE FROM approvals").run();
642
+ }
643
+ catch (err) {
644
+ logger.debug(`Failed to clear approvals: ${err.message}`);
645
+ }
646
+ }
647
+ // === DISCIPLINE PERSISTENCE ===
648
+ static saveDiscipline(agent, stats) {
649
+ const cleanAgent = agent.replace("@", "");
650
+ this.getDB().prepare(`
651
+ INSERT INTO discipline (agent, total_calls, violations, last_violation, cooldown_until, updated_at)
652
+ VALUES (?, ?, ?, ?, ?, datetime('now'))
653
+ ON CONFLICT(agent) DO UPDATE SET
654
+ total_calls = excluded.total_calls,
655
+ violations = excluded.violations,
656
+ last_violation = excluded.last_violation,
657
+ cooldown_until = excluded.cooldown_until,
658
+ updated_at = datetime('now')
659
+ `).run(cleanAgent, stats.totalCalls, stats.violations, stats.lastViolation, stats.cooldownUntil);
660
+ }
661
+ static getDiscipline(agent) {
662
+ const cleanAgent = agent.replace("@", "");
663
+ try {
664
+ const row = this.getDB().prepare("SELECT * FROM discipline WHERE agent = ?").get(cleanAgent);
665
+ if (!row)
666
+ return null;
667
+ return {
668
+ agent: row.agent,
669
+ totalCalls: row.total_calls,
670
+ violations: row.violations,
671
+ lastViolation: row.last_violation,
672
+ cooldownUntil: row.cooldown_until
673
+ };
674
+ }
675
+ catch (err) {
676
+ logger.debug(`Failed to get discipline: ${err.message}`);
677
+ return null;
678
+ }
679
+ }
680
+ static getAllDiscipline() {
681
+ try {
682
+ const rows = this.getDB().prepare("SELECT * FROM discipline").all();
683
+ return rows.map(row => ({
684
+ agent: row.agent,
685
+ totalCalls: row.total_calls,
686
+ violations: row.violations,
687
+ lastViolation: row.last_violation,
688
+ cooldownUntil: row.cooldown_until
689
+ }));
690
+ }
691
+ catch (err) {
692
+ logger.debug(`Failed to get all discipline: ${err.message}`);
693
+ return [];
694
+ }
695
+ }
696
+ static clearAllDiscipline() {
697
+ try {
698
+ this.getDB().prepare("DELETE FROM discipline").run();
699
+ }
700
+ catch (err) {
701
+ logger.debug(`Failed to clear discipline: ${err.message}`);
702
+ }
703
+ }
704
+ static checkIntegrity() {
705
+ try {
706
+ const db = this.getDB();
707
+ const rows = db.pragma("quick_check");
708
+ const status = rows && rows[0] ? rows[0].quick_check : "unknown";
709
+ return { ok: status === "ok", message: status };
710
+ }
711
+ catch (err) {
712
+ return { ok: false, message: err.message };
713
+ }
714
+ }
715
+ static reset() {
716
+ if (this.db) {
717
+ this.db.close();
718
+ this.db = null;
719
+ }
720
+ }
721
+ }
722
+ /** Canonical alias */
723
+ export const Storage = AtabeyStorage;
724
+ //# sourceMappingURL=storage.js.map