@aion0/bastion 0.1.7

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 (377) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +183 -0
  3. package/README.zh.md +468 -0
  4. package/config/default.yaml +73 -0
  5. package/dist/cli/commands/config.d.ts +3 -0
  6. package/dist/cli/commands/config.d.ts.map +1 -0
  7. package/dist/cli/commands/config.js +31 -0
  8. package/dist/cli/commands/config.js.map +1 -0
  9. package/dist/cli/commands/env.d.ts +3 -0
  10. package/dist/cli/commands/env.d.ts.map +1 -0
  11. package/dist/cli/commands/env.js +83 -0
  12. package/dist/cli/commands/env.js.map +1 -0
  13. package/dist/cli/commands/health.d.ts +3 -0
  14. package/dist/cli/commands/health.d.ts.map +1 -0
  15. package/dist/cli/commands/health.js +45 -0
  16. package/dist/cli/commands/health.js.map +1 -0
  17. package/dist/cli/commands/openclaw.d.ts +3 -0
  18. package/dist/cli/commands/openclaw.d.ts.map +1 -0
  19. package/dist/cli/commands/openclaw.js +1062 -0
  20. package/dist/cli/commands/openclaw.js.map +1 -0
  21. package/dist/cli/commands/proxy.d.ts +8 -0
  22. package/dist/cli/commands/proxy.d.ts.map +1 -0
  23. package/dist/cli/commands/proxy.js +433 -0
  24. package/dist/cli/commands/proxy.js.map +1 -0
  25. package/dist/cli/commands/start.d.ts +3 -0
  26. package/dist/cli/commands/start.d.ts.map +1 -0
  27. package/dist/cli/commands/start.js +62 -0
  28. package/dist/cli/commands/start.js.map +1 -0
  29. package/dist/cli/commands/stats.d.ts +3 -0
  30. package/dist/cli/commands/stats.d.ts.map +1 -0
  31. package/dist/cli/commands/stats.js +32 -0
  32. package/dist/cli/commands/stats.js.map +1 -0
  33. package/dist/cli/commands/stop.d.ts +3 -0
  34. package/dist/cli/commands/stop.d.ts.map +1 -0
  35. package/dist/cli/commands/stop.js +28 -0
  36. package/dist/cli/commands/stop.js.map +1 -0
  37. package/dist/cli/commands/token.d.ts +3 -0
  38. package/dist/cli/commands/token.d.ts.map +1 -0
  39. package/dist/cli/commands/token.js +32 -0
  40. package/dist/cli/commands/token.js.map +1 -0
  41. package/dist/cli/commands/trust-ca.d.ts +3 -0
  42. package/dist/cli/commands/trust-ca.d.ts.map +1 -0
  43. package/dist/cli/commands/trust-ca.js +44 -0
  44. package/dist/cli/commands/trust-ca.js.map +1 -0
  45. package/dist/cli/commands/wrap.d.ts +3 -0
  46. package/dist/cli/commands/wrap.d.ts.map +1 -0
  47. package/dist/cli/commands/wrap.js +70 -0
  48. package/dist/cli/commands/wrap.js.map +1 -0
  49. package/dist/cli/daemon.d.ts +11 -0
  50. package/dist/cli/daemon.d.ts.map +1 -0
  51. package/dist/cli/daemon.js +82 -0
  52. package/dist/cli/daemon.js.map +1 -0
  53. package/dist/cli/index.d.ts +3 -0
  54. package/dist/cli/index.d.ts.map +1 -0
  55. package/dist/cli/index.js +35 -0
  56. package/dist/cli/index.js.map +1 -0
  57. package/dist/config/index.d.ts +3 -0
  58. package/dist/config/index.d.ts.map +1 -0
  59. package/dist/config/index.js +60 -0
  60. package/dist/config/index.js.map +1 -0
  61. package/dist/config/manager.d.ts +12 -0
  62. package/dist/config/manager.d.ts.map +1 -0
  63. package/dist/config/manager.js +73 -0
  64. package/dist/config/manager.js.map +1 -0
  65. package/dist/config/paths.d.ts +10 -0
  66. package/dist/config/paths.d.ts.map +1 -0
  67. package/dist/config/paths.js +16 -0
  68. package/dist/config/paths.js.map +1 -0
  69. package/dist/config/schema.d.ts +85 -0
  70. package/dist/config/schema.d.ts.map +1 -0
  71. package/dist/config/schema.js +3 -0
  72. package/dist/config/schema.js.map +1 -0
  73. package/dist/dashboard/api-routes.d.ts +6 -0
  74. package/dist/dashboard/api-routes.d.ts.map +1 -0
  75. package/dist/dashboard/api-routes.js +671 -0
  76. package/dist/dashboard/api-routes.js.map +1 -0
  77. package/dist/dashboard/api.d.ts +4 -0
  78. package/dist/dashboard/api.d.ts.map +1 -0
  79. package/dist/dashboard/api.js +25 -0
  80. package/dist/dashboard/api.js.map +1 -0
  81. package/dist/dashboard/page.d.ts +3 -0
  82. package/dist/dashboard/page.d.ts.map +1 -0
  83. package/dist/dashboard/page.js +1622 -0
  84. package/dist/dashboard/page.js.map +1 -0
  85. package/dist/dlp/actions.d.ts +13 -0
  86. package/dist/dlp/actions.d.ts.map +1 -0
  87. package/dist/dlp/actions.js +3 -0
  88. package/dist/dlp/actions.js.map +1 -0
  89. package/dist/dlp/ai-validator.d.ts +28 -0
  90. package/dist/dlp/ai-validator.d.ts.map +1 -0
  91. package/dist/dlp/ai-validator.js +214 -0
  92. package/dist/dlp/ai-validator.js.map +1 -0
  93. package/dist/dlp/engine.d.ts +34 -0
  94. package/dist/dlp/engine.d.ts.map +1 -0
  95. package/dist/dlp/engine.js +342 -0
  96. package/dist/dlp/engine.js.map +1 -0
  97. package/dist/dlp/entropy.d.ts +22 -0
  98. package/dist/dlp/entropy.d.ts.map +1 -0
  99. package/dist/dlp/entropy.js +43 -0
  100. package/dist/dlp/entropy.js.map +1 -0
  101. package/dist/dlp/message-cache.d.ts +45 -0
  102. package/dist/dlp/message-cache.d.ts.map +1 -0
  103. package/dist/dlp/message-cache.js +251 -0
  104. package/dist/dlp/message-cache.js.map +1 -0
  105. package/dist/dlp/patterns/context-aware.d.ts +4 -0
  106. package/dist/dlp/patterns/context-aware.d.ts.map +1 -0
  107. package/dist/dlp/patterns/context-aware.js +45 -0
  108. package/dist/dlp/patterns/context-aware.js.map +1 -0
  109. package/dist/dlp/patterns/high-confidence.d.ts +4 -0
  110. package/dist/dlp/patterns/high-confidence.d.ts.map +1 -0
  111. package/dist/dlp/patterns/high-confidence.js +140 -0
  112. package/dist/dlp/patterns/high-confidence.js.map +1 -0
  113. package/dist/dlp/patterns/prompt-injection.d.ts +4 -0
  114. package/dist/dlp/patterns/prompt-injection.d.ts.map +1 -0
  115. package/dist/dlp/patterns/prompt-injection.js +244 -0
  116. package/dist/dlp/patterns/prompt-injection.js.map +1 -0
  117. package/dist/dlp/patterns/validated.d.ts +4 -0
  118. package/dist/dlp/patterns/validated.d.ts.map +1 -0
  119. package/dist/dlp/patterns/validated.js +21 -0
  120. package/dist/dlp/patterns/validated.js.map +1 -0
  121. package/dist/dlp/remote-sync.d.ts +47 -0
  122. package/dist/dlp/remote-sync.d.ts.map +1 -0
  123. package/dist/dlp/remote-sync.js +252 -0
  124. package/dist/dlp/remote-sync.js.map +1 -0
  125. package/dist/dlp/semantics.d.ts +27 -0
  126. package/dist/dlp/semantics.d.ts.map +1 -0
  127. package/dist/dlp/semantics.js +93 -0
  128. package/dist/dlp/semantics.js.map +1 -0
  129. package/dist/dlp/structure.d.ts +25 -0
  130. package/dist/dlp/structure.d.ts.map +1 -0
  131. package/dist/dlp/structure.js +86 -0
  132. package/dist/dlp/structure.js.map +1 -0
  133. package/dist/dlp/validators.d.ts +6 -0
  134. package/dist/dlp/validators.d.ts.map +1 -0
  135. package/dist/dlp/validators.js +46 -0
  136. package/dist/dlp/validators.js.map +1 -0
  137. package/dist/index.d.ts +2 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/index.js +200 -0
  140. package/dist/index.js.map +1 -0
  141. package/dist/license/verify.d.ts +18 -0
  142. package/dist/license/verify.d.ts.map +1 -0
  143. package/dist/license/verify.js +71 -0
  144. package/dist/license/verify.js.map +1 -0
  145. package/dist/metrics/collector.d.ts +11 -0
  146. package/dist/metrics/collector.d.ts.map +1 -0
  147. package/dist/metrics/collector.js +17 -0
  148. package/dist/metrics/collector.js.map +1 -0
  149. package/dist/metrics/dashboard.d.ts +6 -0
  150. package/dist/metrics/dashboard.d.ts.map +1 -0
  151. package/dist/metrics/dashboard.js +66 -0
  152. package/dist/metrics/dashboard.js.map +1 -0
  153. package/dist/metrics/pricing.d.ts +10 -0
  154. package/dist/metrics/pricing.d.ts.map +1 -0
  155. package/dist/metrics/pricing.js +62 -0
  156. package/dist/metrics/pricing.js.map +1 -0
  157. package/dist/optimizer/cache.d.ts +14 -0
  158. package/dist/optimizer/cache.d.ts.map +1 -0
  159. package/dist/optimizer/cache.js +58 -0
  160. package/dist/optimizer/cache.js.map +1 -0
  161. package/dist/optimizer/estimator.d.ts +6 -0
  162. package/dist/optimizer/estimator.d.ts.map +1 -0
  163. package/dist/optimizer/estimator.js +12 -0
  164. package/dist/optimizer/estimator.js.map +1 -0
  165. package/dist/optimizer/reorder.d.ts +9 -0
  166. package/dist/optimizer/reorder.d.ts.map +1 -0
  167. package/dist/optimizer/reorder.js +27 -0
  168. package/dist/optimizer/reorder.js.map +1 -0
  169. package/dist/optimizer/trimmer.d.ts +9 -0
  170. package/dist/optimizer/trimmer.d.ts.map +1 -0
  171. package/dist/optimizer/trimmer.js +47 -0
  172. package/dist/optimizer/trimmer.js.map +1 -0
  173. package/dist/plugin-api/index.d.ts +3 -0
  174. package/dist/plugin-api/index.d.ts.map +1 -0
  175. package/dist/plugin-api/index.js +6 -0
  176. package/dist/plugin-api/index.js.map +1 -0
  177. package/dist/plugin-api/types.d.ts +77 -0
  178. package/dist/plugin-api/types.d.ts.map +1 -0
  179. package/dist/plugin-api/types.js +6 -0
  180. package/dist/plugin-api/types.js.map +1 -0
  181. package/dist/plugins/adapter.d.ts +12 -0
  182. package/dist/plugins/adapter.d.ts.map +1 -0
  183. package/dist/plugins/adapter.js +116 -0
  184. package/dist/plugins/adapter.js.map +1 -0
  185. package/dist/plugins/builtin/audit-logger.d.ts +9 -0
  186. package/dist/plugins/builtin/audit-logger.d.ts.map +1 -0
  187. package/dist/plugins/builtin/audit-logger.js +53 -0
  188. package/dist/plugins/builtin/audit-logger.js.map +1 -0
  189. package/dist/plugins/builtin/dlp-scanner.d.ts +19 -0
  190. package/dist/plugins/builtin/dlp-scanner.d.ts.map +1 -0
  191. package/dist/plugins/builtin/dlp-scanner.js +284 -0
  192. package/dist/plugins/builtin/dlp-scanner.js.map +1 -0
  193. package/dist/plugins/builtin/metrics-collector.d.ts +4 -0
  194. package/dist/plugins/builtin/metrics-collector.d.ts.map +1 -0
  195. package/dist/plugins/builtin/metrics-collector.js +111 -0
  196. package/dist/plugins/builtin/metrics-collector.js.map +1 -0
  197. package/dist/plugins/builtin/token-optimizer.d.ts +10 -0
  198. package/dist/plugins/builtin/token-optimizer.d.ts.map +1 -0
  199. package/dist/plugins/builtin/token-optimizer.js +120 -0
  200. package/dist/plugins/builtin/token-optimizer.js.map +1 -0
  201. package/dist/plugins/builtin/tool-guard.d.ts +20 -0
  202. package/dist/plugins/builtin/tool-guard.d.ts.map +1 -0
  203. package/dist/plugins/builtin/tool-guard.js +259 -0
  204. package/dist/plugins/builtin/tool-guard.js.map +1 -0
  205. package/dist/plugins/context.d.ts +8 -0
  206. package/dist/plugins/context.d.ts.map +1 -0
  207. package/dist/plugins/context.js +33 -0
  208. package/dist/plugins/context.js.map +1 -0
  209. package/dist/plugins/event-bus.d.ts +9 -0
  210. package/dist/plugins/event-bus.d.ts.map +1 -0
  211. package/dist/plugins/event-bus.js +25 -0
  212. package/dist/plugins/event-bus.js.map +1 -0
  213. package/dist/plugins/index.d.ts +18 -0
  214. package/dist/plugins/index.d.ts.map +1 -0
  215. package/dist/plugins/index.js +148 -0
  216. package/dist/plugins/index.js.map +1 -0
  217. package/dist/plugins/loader.d.ts +14 -0
  218. package/dist/plugins/loader.d.ts.map +1 -0
  219. package/dist/plugins/loader.js +98 -0
  220. package/dist/plugins/loader.js.map +1 -0
  221. package/dist/plugins/types.d.ts +91 -0
  222. package/dist/plugins/types.d.ts.map +1 -0
  223. package/dist/plugins/types.js +3 -0
  224. package/dist/plugins/types.js.map +1 -0
  225. package/dist/proxy/certs.d.ts +10 -0
  226. package/dist/proxy/certs.d.ts.map +1 -0
  227. package/dist/proxy/certs.js +110 -0
  228. package/dist/proxy/certs.js.map +1 -0
  229. package/dist/proxy/connect.d.ts +11 -0
  230. package/dist/proxy/connect.d.ts.map +1 -0
  231. package/dist/proxy/connect.js +298 -0
  232. package/dist/proxy/connect.js.map +1 -0
  233. package/dist/proxy/forwarder.d.ts +14 -0
  234. package/dist/proxy/forwarder.d.ts.map +1 -0
  235. package/dist/proxy/forwarder.js +342 -0
  236. package/dist/proxy/forwarder.js.map +1 -0
  237. package/dist/proxy/passthrough.d.ts +4 -0
  238. package/dist/proxy/passthrough.d.ts.map +1 -0
  239. package/dist/proxy/passthrough.js +68 -0
  240. package/dist/proxy/passthrough.js.map +1 -0
  241. package/dist/proxy/providers/anthropic.d.ts +4 -0
  242. package/dist/proxy/providers/anthropic.d.ts.map +1 -0
  243. package/dist/proxy/providers/anthropic.js +46 -0
  244. package/dist/proxy/providers/anthropic.js.map +1 -0
  245. package/dist/proxy/providers/classify.d.ts +14 -0
  246. package/dist/proxy/providers/classify.d.ts.map +1 -0
  247. package/dist/proxy/providers/classify.js +37 -0
  248. package/dist/proxy/providers/classify.js.map +1 -0
  249. package/dist/proxy/providers/claude-web.d.ts +8 -0
  250. package/dist/proxy/providers/claude-web.d.ts.map +1 -0
  251. package/dist/proxy/providers/claude-web.js +50 -0
  252. package/dist/proxy/providers/claude-web.js.map +1 -0
  253. package/dist/proxy/providers/gemini.d.ts +4 -0
  254. package/dist/proxy/providers/gemini.d.ts.map +1 -0
  255. package/dist/proxy/providers/gemini.js +38 -0
  256. package/dist/proxy/providers/gemini.js.map +1 -0
  257. package/dist/proxy/providers/index.d.ts +27 -0
  258. package/dist/proxy/providers/index.d.ts.map +1 -0
  259. package/dist/proxy/providers/index.js +32 -0
  260. package/dist/proxy/providers/index.js.map +1 -0
  261. package/dist/proxy/providers/messaging.d.ts +2 -0
  262. package/dist/proxy/providers/messaging.d.ts.map +1 -0
  263. package/dist/proxy/providers/messaging.js +53 -0
  264. package/dist/proxy/providers/messaging.js.map +1 -0
  265. package/dist/proxy/providers/openai.d.ts +4 -0
  266. package/dist/proxy/providers/openai.d.ts.map +1 -0
  267. package/dist/proxy/providers/openai.js +38 -0
  268. package/dist/proxy/providers/openai.js.map +1 -0
  269. package/dist/proxy/providers/telegram.d.ts +8 -0
  270. package/dist/proxy/providers/telegram.d.ts.map +1 -0
  271. package/dist/proxy/providers/telegram.js +35 -0
  272. package/dist/proxy/providers/telegram.js.map +1 -0
  273. package/dist/proxy/router.d.ts +12 -0
  274. package/dist/proxy/router.d.ts.map +1 -0
  275. package/dist/proxy/router.js +26 -0
  276. package/dist/proxy/router.js.map +1 -0
  277. package/dist/proxy/safety.d.ts +13 -0
  278. package/dist/proxy/safety.d.ts.map +1 -0
  279. package/dist/proxy/safety.js +58 -0
  280. package/dist/proxy/safety.js.map +1 -0
  281. package/dist/proxy/server.d.ts +8 -0
  282. package/dist/proxy/server.d.ts.map +1 -0
  283. package/dist/proxy/server.js +126 -0
  284. package/dist/proxy/server.js.map +1 -0
  285. package/dist/proxy/streaming.d.ts +21 -0
  286. package/dist/proxy/streaming.d.ts.map +1 -0
  287. package/dist/proxy/streaming.js +70 -0
  288. package/dist/proxy/streaming.js.map +1 -0
  289. package/dist/storage/database.d.ts +6 -0
  290. package/dist/storage/database.d.ts.map +1 -0
  291. package/dist/storage/database.js +44 -0
  292. package/dist/storage/database.js.map +1 -0
  293. package/dist/storage/encryption.d.ts +11 -0
  294. package/dist/storage/encryption.d.ts.map +1 -0
  295. package/dist/storage/encryption.js +47 -0
  296. package/dist/storage/encryption.js.map +1 -0
  297. package/dist/storage/migrations.d.ts +3 -0
  298. package/dist/storage/migrations.d.ts.map +1 -0
  299. package/dist/storage/migrations.js +265 -0
  300. package/dist/storage/migrations.js.map +1 -0
  301. package/dist/storage/repositories/audit-log.d.ts +115 -0
  302. package/dist/storage/repositories/audit-log.d.ts.map +1 -0
  303. package/dist/storage/repositories/audit-log.js +586 -0
  304. package/dist/storage/repositories/audit-log.js.map +1 -0
  305. package/dist/storage/repositories/cache.d.ts +26 -0
  306. package/dist/storage/repositories/cache.d.ts.map +1 -0
  307. package/dist/storage/repositories/cache.js +44 -0
  308. package/dist/storage/repositories/cache.js.map +1 -0
  309. package/dist/storage/repositories/dlp-config-history.d.ts +17 -0
  310. package/dist/storage/repositories/dlp-config-history.d.ts.map +1 -0
  311. package/dist/storage/repositories/dlp-config-history.js +30 -0
  312. package/dist/storage/repositories/dlp-config-history.js.map +1 -0
  313. package/dist/storage/repositories/dlp-events.d.ts +35 -0
  314. package/dist/storage/repositories/dlp-events.d.ts.map +1 -0
  315. package/dist/storage/repositories/dlp-events.js +57 -0
  316. package/dist/storage/repositories/dlp-events.js.map +1 -0
  317. package/dist/storage/repositories/dlp-patterns.d.ts +70 -0
  318. package/dist/storage/repositories/dlp-patterns.d.ts.map +1 -0
  319. package/dist/storage/repositories/dlp-patterns.js +187 -0
  320. package/dist/storage/repositories/dlp-patterns.js.map +1 -0
  321. package/dist/storage/repositories/optimizer-events.d.ts +28 -0
  322. package/dist/storage/repositories/optimizer-events.d.ts.map +1 -0
  323. package/dist/storage/repositories/optimizer-events.js +49 -0
  324. package/dist/storage/repositories/optimizer-events.js.map +1 -0
  325. package/dist/storage/repositories/plugin-events.d.ts +34 -0
  326. package/dist/storage/repositories/plugin-events.d.ts.map +1 -0
  327. package/dist/storage/repositories/plugin-events.js +64 -0
  328. package/dist/storage/repositories/plugin-events.js.map +1 -0
  329. package/dist/storage/repositories/requests.d.ts +68 -0
  330. package/dist/storage/repositories/requests.d.ts.map +1 -0
  331. package/dist/storage/repositories/requests.js +113 -0
  332. package/dist/storage/repositories/requests.js.map +1 -0
  333. package/dist/storage/repositories/sessions.d.ts +23 -0
  334. package/dist/storage/repositories/sessions.d.ts.map +1 -0
  335. package/dist/storage/repositories/sessions.js +42 -0
  336. package/dist/storage/repositories/sessions.js.map +1 -0
  337. package/dist/storage/repositories/tool-calls.d.ts +49 -0
  338. package/dist/storage/repositories/tool-calls.d.ts.map +1 -0
  339. package/dist/storage/repositories/tool-calls.js +61 -0
  340. package/dist/storage/repositories/tool-calls.js.map +1 -0
  341. package/dist/storage/repositories/tool-guard-rules.d.ts +50 -0
  342. package/dist/storage/repositories/tool-guard-rules.d.ts.map +1 -0
  343. package/dist/storage/repositories/tool-guard-rules.js +120 -0
  344. package/dist/storage/repositories/tool-guard-rules.js.map +1 -0
  345. package/dist/tool-guard/alert.d.ts +30 -0
  346. package/dist/tool-guard/alert.d.ts.map +1 -0
  347. package/dist/tool-guard/alert.js +113 -0
  348. package/dist/tool-guard/alert.js.map +1 -0
  349. package/dist/tool-guard/extractor.d.ts +10 -0
  350. package/dist/tool-guard/extractor.d.ts.map +1 -0
  351. package/dist/tool-guard/extractor.js +309 -0
  352. package/dist/tool-guard/extractor.js.map +1 -0
  353. package/dist/tool-guard/rules.d.ts +18 -0
  354. package/dist/tool-guard/rules.d.ts.map +1 -0
  355. package/dist/tool-guard/rules.js +255 -0
  356. package/dist/tool-guard/rules.js.map +1 -0
  357. package/dist/tool-guard/streaming-guard.d.ts +57 -0
  358. package/dist/tool-guard/streaming-guard.d.ts.map +1 -0
  359. package/dist/tool-guard/streaming-guard.js +389 -0
  360. package/dist/tool-guard/streaming-guard.js.map +1 -0
  361. package/dist/utils/hash.d.ts +2 -0
  362. package/dist/utils/hash.d.ts.map +1 -0
  363. package/dist/utils/hash.js +8 -0
  364. package/dist/utils/hash.js.map +1 -0
  365. package/dist/utils/logger.d.ts +11 -0
  366. package/dist/utils/logger.d.ts.map +1 -0
  367. package/dist/utils/logger.js +54 -0
  368. package/dist/utils/logger.js.map +1 -0
  369. package/dist/utils/timeout.d.ts +5 -0
  370. package/dist/utils/timeout.d.ts.map +1 -0
  371. package/dist/utils/timeout.js +26 -0
  372. package/dist/utils/timeout.js.map +1 -0
  373. package/dist/version.d.ts +5 -0
  374. package/dist/version.d.ts.map +1 -0
  375. package/dist/version.js +23 -0
  376. package/dist/version.js.map +1 -0
  377. package/package.json +67 -0
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runMigrations = runMigrations;
4
+ const MIGRATIONS = [
5
+ // Migration 1: Initial schema
6
+ `
7
+ CREATE TABLE IF NOT EXISTS schema_version (
8
+ version INTEGER PRIMARY KEY,
9
+ applied_at TEXT NOT NULL DEFAULT (datetime('now'))
10
+ );
11
+
12
+ CREATE TABLE IF NOT EXISTS requests (
13
+ id TEXT PRIMARY KEY,
14
+ provider TEXT NOT NULL,
15
+ model TEXT NOT NULL,
16
+ method TEXT NOT NULL,
17
+ path TEXT NOT NULL,
18
+ status_code INTEGER,
19
+ input_tokens INTEGER DEFAULT 0,
20
+ output_tokens INTEGER DEFAULT 0,
21
+ cache_creation_tokens INTEGER DEFAULT 0,
22
+ cache_read_tokens INTEGER DEFAULT 0,
23
+ cost_usd REAL DEFAULT 0,
24
+ latency_ms INTEGER DEFAULT 0,
25
+ cached INTEGER DEFAULT 0,
26
+ dlp_action TEXT,
27
+ dlp_findings INTEGER DEFAULT 0,
28
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
29
+ );
30
+
31
+ CREATE TABLE IF NOT EXISTS cache (
32
+ key TEXT PRIMARY KEY,
33
+ provider TEXT NOT NULL,
34
+ model TEXT NOT NULL,
35
+ encrypted_response BLOB NOT NULL,
36
+ iv BLOB NOT NULL,
37
+ auth_tag BLOB NOT NULL,
38
+ input_tokens INTEGER DEFAULT 0,
39
+ output_tokens INTEGER DEFAULT 0,
40
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
41
+ last_hit_at TEXT,
42
+ hit_count INTEGER DEFAULT 0
43
+ );
44
+
45
+ CREATE TABLE IF NOT EXISTS dlp_events (
46
+ id TEXT PRIMARY KEY,
47
+ request_id TEXT NOT NULL,
48
+ pattern_name TEXT NOT NULL,
49
+ pattern_category TEXT NOT NULL,
50
+ action TEXT NOT NULL,
51
+ match_count INTEGER DEFAULT 1,
52
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
53
+ );
54
+
55
+ CREATE INDEX IF NOT EXISTS idx_requests_created_at ON requests(created_at);
56
+ CREATE INDEX IF NOT EXISTS idx_requests_provider ON requests(provider);
57
+ CREATE INDEX IF NOT EXISTS idx_cache_last_hit ON cache(last_hit_at);
58
+ CREATE INDEX IF NOT EXISTS idx_dlp_events_request ON dlp_events(request_id);
59
+ `,
60
+ // Migration 2: Session tracking, audit log, optimizer events, DLP snippets
61
+ `
62
+ ALTER TABLE requests ADD COLUMN session_id TEXT;
63
+ ALTER TABLE requests ADD COLUMN api_key_hash TEXT;
64
+
65
+ CREATE TABLE IF NOT EXISTS audit_log (
66
+ id TEXT PRIMARY KEY,
67
+ request_id TEXT NOT NULL,
68
+ encrypted_content BLOB,
69
+ iv BLOB NOT NULL,
70
+ auth_tag BLOB NOT NULL,
71
+ request_length INTEGER DEFAULT 0,
72
+ response_length INTEGER DEFAULT 0,
73
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
74
+ );
75
+
76
+ CREATE TABLE IF NOT EXISTS optimizer_events (
77
+ id TEXT PRIMARY KEY,
78
+ request_id TEXT NOT NULL,
79
+ cache_hit INTEGER DEFAULT 0,
80
+ original_length INTEGER DEFAULT 0,
81
+ trimmed_length INTEGER DEFAULT 0,
82
+ chars_saved INTEGER DEFAULT 0,
83
+ tokens_saved_estimate INTEGER DEFAULT 0,
84
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
85
+ );
86
+
87
+ ALTER TABLE dlp_events ADD COLUMN original_snippet TEXT;
88
+ ALTER TABLE dlp_events ADD COLUMN redacted_snippet TEXT;
89
+
90
+ CREATE INDEX IF NOT EXISTS idx_requests_session ON requests(session_id);
91
+ CREATE INDEX IF NOT EXISTS idx_requests_api_key ON requests(api_key_hash);
92
+ CREATE INDEX IF NOT EXISTS idx_audit_request ON audit_log(request_id);
93
+ CREATE INDEX IF NOT EXISTS idx_optimizer_request ON optimizer_events(request_id);
94
+ `,
95
+ // Migration 3: Sessions table for session metadata and client identification
96
+ `
97
+ CREATE TABLE IF NOT EXISTS sessions (
98
+ id TEXT PRIMARY KEY,
99
+ label TEXT,
100
+ source TEXT DEFAULT 'auto',
101
+ project_path TEXT,
102
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
103
+ last_seen_at TEXT NOT NULL DEFAULT (datetime('now'))
104
+ );
105
+
106
+ CREATE INDEX IF NOT EXISTS idx_sessions_last_seen ON sessions(last_seen_at);
107
+ `,
108
+ // Migration 4: DLP patterns table for DB-backed, UI-configurable patterns
109
+ `
110
+ CREATE TABLE IF NOT EXISTS dlp_patterns (
111
+ id TEXT PRIMARY KEY,
112
+ name TEXT NOT NULL UNIQUE,
113
+ category TEXT NOT NULL DEFAULT 'custom',
114
+ regex_source TEXT NOT NULL,
115
+ regex_flags TEXT DEFAULT 'g',
116
+ description TEXT,
117
+ validator TEXT,
118
+ require_context TEXT,
119
+ enabled INTEGER DEFAULT 1,
120
+ is_builtin INTEGER DEFAULT 0,
121
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
122
+ );
123
+ `,
124
+ // Migration 5: DLP direction column (request vs response scanning)
125
+ `
126
+ ALTER TABLE dlp_events ADD COLUMN direction TEXT DEFAULT 'request';
127
+ `,
128
+ // Migration 6: Audit log DLP hit flag and summary column
129
+ `
130
+ ALTER TABLE audit_log ADD COLUMN dlp_hit INTEGER DEFAULT 0;
131
+ ALTER TABLE audit_log ADD COLUMN summary TEXT;
132
+ CREATE INDEX IF NOT EXISTS idx_audit_dlp_hit ON audit_log(dlp_hit);
133
+ `,
134
+ // Migration 7: DLP config change history
135
+ `
136
+ CREATE TABLE IF NOT EXISTS dlp_config_history (
137
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
138
+ config_json TEXT NOT NULL,
139
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
140
+ );
141
+ `,
142
+ // Migration 8: Tool Guard — tool_calls table for audit
143
+ `
144
+ CREATE TABLE IF NOT EXISTS tool_calls (
145
+ id TEXT PRIMARY KEY,
146
+ request_id TEXT NOT NULL,
147
+ tool_name TEXT NOT NULL,
148
+ tool_input TEXT,
149
+ rule_id TEXT,
150
+ rule_name TEXT,
151
+ severity TEXT,
152
+ category TEXT,
153
+ provider TEXT,
154
+ session_id TEXT,
155
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
156
+ );
157
+
158
+ CREATE INDEX IF NOT EXISTS idx_tool_calls_request ON tool_calls(request_id);
159
+ CREATE INDEX IF NOT EXISTS idx_tool_calls_session ON tool_calls(session_id);
160
+ CREATE INDEX IF NOT EXISTS idx_tool_calls_severity ON tool_calls(severity);
161
+ CREATE INDEX IF NOT EXISTS idx_tool_calls_created ON tool_calls(created_at);
162
+ `,
163
+ // Migration 9: Tool Guard — action result column on tool_calls
164
+ `
165
+ ALTER TABLE tool_calls ADD COLUMN action TEXT;
166
+ `,
167
+ // Migration 10: Tool Guard rules table for DB-backed, UI-configurable rules
168
+ `
169
+ CREATE TABLE IF NOT EXISTS tool_guard_rules (
170
+ id TEXT PRIMARY KEY,
171
+ name TEXT NOT NULL UNIQUE,
172
+ description TEXT,
173
+ severity TEXT NOT NULL DEFAULT 'medium',
174
+ category TEXT NOT NULL DEFAULT 'custom',
175
+ tool_name_pattern TEXT,
176
+ tool_name_flags TEXT,
177
+ input_pattern TEXT NOT NULL,
178
+ input_flags TEXT DEFAULT 'i',
179
+ enabled INTEGER DEFAULT 1,
180
+ is_builtin INTEGER DEFAULT 0,
181
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
182
+ );
183
+ `,
184
+ // Migration 11: Audit log — tool_guard_hit column + ensure action column exists
185
+ // (action column may already exist from migration 9 on fresh installs; runner handles duplicate)
186
+ `
187
+ ALTER TABLE tool_calls ADD COLUMN action TEXT;
188
+ ALTER TABLE audit_log ADD COLUMN tool_guard_hit INTEGER DEFAULT 0;
189
+ CREATE INDEX IF NOT EXISTS idx_audit_tool_guard_hit ON audit_log(tool_guard_hit);
190
+ `,
191
+ // Migration 12: Ensure tool_calls.action column exists (catch-up for DBs that skipped migration 9/11)
192
+ `
193
+ ALTER TABLE tool_calls ADD COLUMN action TEXT;
194
+ `,
195
+ // Migration 13: Backfill action + severity for existing records
196
+ `
197
+ UPDATE tool_calls SET action = 'flag' WHERE action IS NULL AND rule_id IS NOT NULL;
198
+ UPDATE tool_calls SET action = 'pass', severity = 'info' WHERE action IS NULL AND rule_id IS NULL;
199
+ `,
200
+ // Migration 14: Audit log — plugin pipeline fail-closed tracking
201
+ `
202
+ ALTER TABLE audit_log ADD COLUMN failed_plugin TEXT;
203
+ ALTER TABLE audit_log ADD COLUMN fail_action TEXT;
204
+ `,
205
+ // Migration 15: Plugin events table for external plugin event storage
206
+ `
207
+ CREATE TABLE IF NOT EXISTS plugin_events (
208
+ id TEXT PRIMARY KEY,
209
+ plugin_name TEXT NOT NULL,
210
+ request_id TEXT,
211
+ type TEXT NOT NULL,
212
+ severity TEXT NOT NULL,
213
+ rule TEXT NOT NULL,
214
+ detail TEXT NOT NULL,
215
+ matched_text TEXT,
216
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
217
+ );
218
+
219
+ CREATE INDEX IF NOT EXISTS idx_plugin_events_plugin ON plugin_events(plugin_name);
220
+ CREATE INDEX IF NOT EXISTS idx_plugin_events_request ON plugin_events(request_id);
221
+ CREATE INDEX IF NOT EXISTS idx_plugin_events_created ON plugin_events(created_at);
222
+ `,
223
+ // Migration 16: DLP patterns — context_verify column for anti-pattern / entropy / code-block checks
224
+ `
225
+ ALTER TABLE dlp_patterns ADD COLUMN context_verify TEXT;
226
+ `,
227
+ ];
228
+ function runMigrations(db) {
229
+ // Ensure schema_version table exists
230
+ db.exec(`
231
+ CREATE TABLE IF NOT EXISTS schema_version (
232
+ version INTEGER PRIMARY KEY,
233
+ applied_at TEXT NOT NULL DEFAULT (datetime('now'))
234
+ );
235
+ `);
236
+ const currentVersion = db.prepare('SELECT MAX(version) as version FROM schema_version').get();
237
+ const version = currentVersion?.version ?? 0;
238
+ for (let i = version; i < MIGRATIONS.length; i++) {
239
+ try {
240
+ db.exec(MIGRATIONS[i]);
241
+ }
242
+ catch (err) {
243
+ // Handle duplicate column errors from idempotent ALTER TABLE statements
244
+ if (err instanceof Error && err.message.includes('duplicate column')) {
245
+ // Execute statements individually, skipping duplicate column errors
246
+ const statements = MIGRATIONS[i].split(';').map(s => s.trim()).filter(Boolean);
247
+ for (const stmt of statements) {
248
+ try {
249
+ db.exec(stmt);
250
+ }
251
+ catch (stmtErr) {
252
+ if (!(stmtErr instanceof Error) || !stmtErr.message.includes('duplicate column')) {
253
+ throw stmtErr;
254
+ }
255
+ }
256
+ }
257
+ }
258
+ else {
259
+ throw err;
260
+ }
261
+ }
262
+ db.prepare('INSERT INTO schema_version (version) VALUES (?)').run(i + 1);
263
+ }
264
+ }
265
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/storage/migrations.ts"],"names":[],"mappings":";;AAkPA,sCAqCC;AArRD,MAAM,UAAU,GAAa;IAC3B,8BAA8B;IAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDC;IAED,2EAA2E;IAC3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCC;IAED,6EAA6E;IAC7E;;;;;;;;;;;GAWC;IAED,0EAA0E;IAC1E;;;;;;;;;;;;;;GAcC;IAED,mEAAmE;IACnE;;GAEC;IAED,yDAAyD;IACzD;;;;GAIC;IAED,yCAAyC;IACzC;;;;;;GAMC;IAED,uDAAuD;IACvD;;;;;;;;;;;;;;;;;;;GAmBC;IAED,+DAA+D;IAC/D;;GAEC;IAED,4EAA4E;IAC5E;;;;;;;;;;;;;;;GAeC;IAED,gFAAgF;IAChF,iGAAiG;IACjG;;;;GAIC;IAED,sGAAsG;IACtG;;GAEC;IAED,gEAAgE;IAChE;;;GAGC;IAED,iEAAiE;IACjE;;;GAGC;IAED,sEAAsE;IACtE;;;;;;;;;;;;;;;;GAgBC;IAED,oGAAoG;IACpG;;GAEC;CACF,CAAC;AAEF,SAAgB,aAAa,CAAC,EAAqB;IACjD,qCAAqC;IACrC,EAAE,CAAC,IAAI,CAAC;;;;;GAKP,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,GAAG,EAE9E,CAAC;IACd,MAAM,OAAO,GAAG,cAAc,EAAE,OAAO,IAAI,CAAC,CAAC;IAE7C,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wEAAwE;YACxE,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACrE,oEAAoE;gBACpE,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC/E,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;oBAC9B,IAAI,CAAC;wBACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChB,CAAC;oBAAC,OAAO,OAAO,EAAE,CAAC;wBACjB,IAAI,CAAC,CAAC,OAAO,YAAY,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;4BACjF,MAAM,OAAO,CAAC;wBAChB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC"}
@@ -0,0 +1,115 @@
1
+ import type Database from 'better-sqlite3';
2
+ export interface AuditLogRecord {
3
+ id: string;
4
+ request_id: string;
5
+ encrypted_content: Buffer | null;
6
+ iv: Buffer;
7
+ auth_tag: Buffer;
8
+ request_length: number;
9
+ response_length: number;
10
+ dlp_hit: number;
11
+ tool_guard_hit: number;
12
+ summary: string | null;
13
+ created_at: string;
14
+ }
15
+ export interface AuditLogMeta {
16
+ id: string;
17
+ request_id: string;
18
+ request_length: number;
19
+ response_length: number;
20
+ dlp_hit: number;
21
+ tool_guard_hit: number;
22
+ failed_plugin: string | null;
23
+ fail_action: string | null;
24
+ summary: string | null;
25
+ created_at: string;
26
+ session_id?: string | null;
27
+ model?: string | null;
28
+ status_code?: number | null;
29
+ latency_ms?: number | null;
30
+ stop_reason?: string | null;
31
+ }
32
+ export interface AuditSession {
33
+ session_id: string;
34
+ request_count: number;
35
+ first_at: string;
36
+ last_at: string;
37
+ models: string;
38
+ label: string | null;
39
+ source: string | null;
40
+ project_path: string | null;
41
+ }
42
+ export interface ParsedMessage {
43
+ role: string;
44
+ content: ParsedContentBlock[];
45
+ }
46
+ export interface ParsedContentBlock {
47
+ type: 'text' | 'tool_use' | 'tool_result' | 'image' | 'other';
48
+ text?: string;
49
+ toolName?: string;
50
+ toolInput?: string;
51
+ isError?: boolean;
52
+ }
53
+ export interface ParsedAudit {
54
+ request: {
55
+ model: string | null;
56
+ maxTokens: number | null;
57
+ temperature: number | null;
58
+ stream: boolean;
59
+ system: string | null;
60
+ tools: string[];
61
+ messages: ParsedMessage[];
62
+ };
63
+ response: {
64
+ model: string | null;
65
+ stopReason: string | null;
66
+ usage: Record<string, number>;
67
+ content: ParsedContentBlock[];
68
+ };
69
+ raw: {
70
+ request: string;
71
+ response: string;
72
+ };
73
+ }
74
+ export declare function parseAuditContent(reqStr: string, resStr: string): ParsedAudit;
75
+ export declare class AuditLogRepository {
76
+ private db;
77
+ private insertStmt;
78
+ constructor(db: Database.Database);
79
+ insert(record: {
80
+ id: string;
81
+ request_id: string;
82
+ requestBody: string;
83
+ responseBody: string;
84
+ dlpHit?: boolean;
85
+ toolGuardHit?: boolean;
86
+ failedPlugin?: string;
87
+ failAction?: 'continued' | 'blocked';
88
+ rawData?: boolean;
89
+ rawMaxBytes?: number;
90
+ summaryMaxBytes?: number;
91
+ }): void;
92
+ /** Check if an audit entry already exists for a given request ID */
93
+ hasEntry(requestId: string): boolean;
94
+ /** Mark an existing audit entry as DLP-hit (used when audit-logger inserted first) */
95
+ markDlpHit(requestId: string): void;
96
+ getByRequestId(requestId: string): {
97
+ request: string;
98
+ response: string;
99
+ } | null;
100
+ getParsedByRequestId(requestId: string): ParsedAudit | null;
101
+ /** Get meta for a single request (used as fallback when rawData is off) */
102
+ getMetaByRequestId(requestId: string): AuditLogMeta | null;
103
+ getRecent(limit?: number, sinceHours?: number): AuditLogMeta[];
104
+ /** Get all audit entries for a session, in chronological order */
105
+ getBySessionId(sessionId: string): AuditLogMeta[];
106
+ /** Get sessions that have audit entries, ordered by most recent */
107
+ getAuditSessions(limit?: number, sinceHours?: number): AuditSession[];
108
+ /** Get a full parsed session timeline: all requests in order with parsed content */
109
+ getParsedSession(sessionId: string): Array<{
110
+ meta: AuditLogMeta;
111
+ parsed: ParsedAudit;
112
+ }>;
113
+ purgeOlderThan(hours: number): number;
114
+ }
115
+ //# sourceMappingURL=audit-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../../src/storage/repositories/audit-log.ts"],"names":[],"mappings":"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"}