@askdkc/kiokuko 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 (391) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +112 -0
  3. package/README.ko.md +112 -0
  4. package/README.md +147 -0
  5. package/README.zh-CN.md +112 -0
  6. package/dist/agent-file/atomic-write.d.ts +6 -0
  7. package/dist/agent-file/atomic-write.d.ts.map +1 -0
  8. package/dist/agent-file/atomic-write.js +36 -0
  9. package/dist/agent-file/atomic-write.js.map +1 -0
  10. package/dist/agent-file/managed-block.d.ts +12 -0
  11. package/dist/agent-file/managed-block.d.ts.map +1 -0
  12. package/dist/agent-file/managed-block.js +56 -0
  13. package/dist/agent-file/managed-block.js.map +1 -0
  14. package/dist/agent-file/render.d.ts +14 -0
  15. package/dist/agent-file/render.d.ts.map +1 -0
  16. package/dist/agent-file/render.js +41 -0
  17. package/dist/agent-file/render.js.map +1 -0
  18. package/dist/akinator/domain.d.ts +25 -0
  19. package/dist/akinator/domain.d.ts.map +1 -0
  20. package/dist/akinator/domain.js +255 -0
  21. package/dist/akinator/domain.js.map +1 -0
  22. package/dist/akinator/orchestrator.d.ts +8 -0
  23. package/dist/akinator/orchestrator.d.ts.map +1 -0
  24. package/dist/akinator/orchestrator.js +11 -0
  25. package/dist/akinator/orchestrator.js.map +1 -0
  26. package/dist/akinator/service.d.ts +35 -0
  27. package/dist/akinator/service.d.ts.map +1 -0
  28. package/dist/akinator/service.js +296 -0
  29. package/dist/akinator/service.js.map +1 -0
  30. package/dist/akinator/store.d.ts +96 -0
  31. package/dist/akinator/store.d.ts.map +1 -0
  32. package/dist/akinator/store.js +583 -0
  33. package/dist/akinator/store.js.map +1 -0
  34. package/dist/akinator/types.d.ts +49 -0
  35. package/dist/akinator/types.d.ts.map +1 -0
  36. package/dist/akinator/types.js +2 -0
  37. package/dist/akinator/types.js.map +1 -0
  38. package/dist/bin/kiokuko.d.ts +3 -0
  39. package/dist/bin/kiokuko.d.ts.map +1 -0
  40. package/dist/bin/kiokuko.js +6 -0
  41. package/dist/bin/kiokuko.js.map +1 -0
  42. package/dist/cli.d.ts +10 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +362 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/client/runtime-discovery.d.ts +15 -0
  47. package/dist/client/runtime-discovery.d.ts.map +1 -0
  48. package/dist/client/runtime-discovery.js +45 -0
  49. package/dist/client/runtime-discovery.js.map +1 -0
  50. package/dist/client/server-client.d.ts +20 -0
  51. package/dist/client/server-client.d.ts.map +1 -0
  52. package/dist/client/server-client.js +424 -0
  53. package/dist/client/server-client.js.map +1 -0
  54. package/dist/commands/agent.d.ts +10 -0
  55. package/dist/commands/agent.d.ts.map +1 -0
  56. package/dist/commands/agent.js +283 -0
  57. package/dist/commands/agent.js.map +1 -0
  58. package/dist/commands/backup.d.ts +5 -0
  59. package/dist/commands/backup.d.ts.map +1 -0
  60. package/dist/commands/backup.js +14 -0
  61. package/dist/commands/backup.js.map +1 -0
  62. package/dist/commands/call.d.ts +7 -0
  63. package/dist/commands/call.d.ts.map +1 -0
  64. package/dist/commands/call.js +10 -0
  65. package/dist/commands/call.js.map +1 -0
  66. package/dist/commands/doctor.d.ts +31 -0
  67. package/dist/commands/doctor.d.ts.map +1 -0
  68. package/dist/commands/doctor.js +142 -0
  69. package/dist/commands/doctor.js.map +1 -0
  70. package/dist/commands/export.d.ts +21 -0
  71. package/dist/commands/export.d.ts.map +1 -0
  72. package/dist/commands/export.js +68 -0
  73. package/dist/commands/export.js.map +1 -0
  74. package/dist/commands/import.d.ts +15 -0
  75. package/dist/commands/import.d.ts.map +1 -0
  76. package/dist/commands/import.js +265 -0
  77. package/dist/commands/import.js.map +1 -0
  78. package/dist/commands/init.d.ts +14 -0
  79. package/dist/commands/init.d.ts.map +1 -0
  80. package/dist/commands/init.js +26 -0
  81. package/dist/commands/init.js.map +1 -0
  82. package/dist/commands/ledger.d.ts +7 -0
  83. package/dist/commands/ledger.d.ts.map +1 -0
  84. package/dist/commands/ledger.js +66 -0
  85. package/dist/commands/ledger.js.map +1 -0
  86. package/dist/commands/link.d.ts +6 -0
  87. package/dist/commands/link.d.ts.map +1 -0
  88. package/dist/commands/link.js +6 -0
  89. package/dist/commands/link.js.map +1 -0
  90. package/dist/commands/promote.d.ts +6 -0
  91. package/dist/commands/promote.d.ts.map +1 -0
  92. package/dist/commands/promote.js +6 -0
  93. package/dist/commands/promote.js.map +1 -0
  94. package/dist/commands/purge.d.ts +10 -0
  95. package/dist/commands/purge.d.ts.map +1 -0
  96. package/dist/commands/purge.js +26 -0
  97. package/dist/commands/purge.js.map +1 -0
  98. package/dist/commands/read.d.ts +6 -0
  99. package/dist/commands/read.d.ts.map +1 -0
  100. package/dist/commands/read.js +4 -0
  101. package/dist/commands/read.js.map +1 -0
  102. package/dist/commands/recall.d.ts +6 -0
  103. package/dist/commands/recall.d.ts.map +1 -0
  104. package/dist/commands/recall.js +4 -0
  105. package/dist/commands/recall.js.map +1 -0
  106. package/dist/commands/record.d.ts +6 -0
  107. package/dist/commands/record.d.ts.map +1 -0
  108. package/dist/commands/record.js +4 -0
  109. package/dist/commands/record.js.map +1 -0
  110. package/dist/commands/search.d.ts +6 -0
  111. package/dist/commands/search.d.ts.map +1 -0
  112. package/dist/commands/search.js +4 -0
  113. package/dist/commands/search.js.map +1 -0
  114. package/dist/commands/serve.d.ts +34 -0
  115. package/dist/commands/serve.d.ts.map +1 -0
  116. package/dist/commands/serve.js +120 -0
  117. package/dist/commands/serve.js.map +1 -0
  118. package/dist/commands/server-status.d.ts +20 -0
  119. package/dist/commands/server-status.d.ts.map +1 -0
  120. package/dist/commands/server-status.js +21 -0
  121. package/dist/commands/server-status.js.map +1 -0
  122. package/dist/commands/server.d.ts +13 -0
  123. package/dist/commands/server.d.ts.map +1 -0
  124. package/dist/commands/server.js +89 -0
  125. package/dist/commands/server.js.map +1 -0
  126. package/dist/commands/setup.d.ts +32 -0
  127. package/dist/commands/setup.d.ts.map +1 -0
  128. package/dist/commands/setup.js +121 -0
  129. package/dist/commands/setup.js.map +1 -0
  130. package/dist/commands/supersede.d.ts +6 -0
  131. package/dist/commands/supersede.d.ts.map +1 -0
  132. package/dist/commands/supersede.js +6 -0
  133. package/dist/commands/supersede.js.map +1 -0
  134. package/dist/commands/use.d.ts +28 -0
  135. package/dist/commands/use.d.ts.map +1 -0
  136. package/dist/commands/use.js +176 -0
  137. package/dist/commands/use.js.map +1 -0
  138. package/dist/config/paths.d.ts +18 -0
  139. package/dist/config/paths.d.ts.map +1 -0
  140. package/dist/config/paths.js +104 -0
  141. package/dist/config/paths.js.map +1 -0
  142. package/dist/config/project-config.d.ts +10 -0
  143. package/dist/config/project-config.d.ts.map +1 -0
  144. package/dist/config/project-config.js +59 -0
  145. package/dist/config/project-config.js.map +1 -0
  146. package/dist/context/broker.d.ts +80 -0
  147. package/dist/context/broker.d.ts.map +1 -0
  148. package/dist/context/broker.js +437 -0
  149. package/dist/context/broker.js.map +1 -0
  150. package/dist/context/delivery.d.ts +66 -0
  151. package/dist/context/delivery.d.ts.map +1 -0
  152. package/dist/context/delivery.js +758 -0
  153. package/dist/context/delivery.js.map +1 -0
  154. package/dist/context/feedback.d.ts +75 -0
  155. package/dist/context/feedback.d.ts.map +1 -0
  156. package/dist/context/feedback.js +997 -0
  157. package/dist/context/feedback.js.map +1 -0
  158. package/dist/context/ranking.d.ts +98 -0
  159. package/dist/context/ranking.d.ts.map +1 -0
  160. package/dist/context/ranking.js +513 -0
  161. package/dist/context/ranking.js.map +1 -0
  162. package/dist/context/recommendations.d.ts +85 -0
  163. package/dist/context/recommendations.d.ts.map +1 -0
  164. package/dist/context/recommendations.js +342 -0
  165. package/dist/context/recommendations.js.map +1 -0
  166. package/dist/db/adapter.d.ts +25 -0
  167. package/dist/db/adapter.d.ts.map +1 -0
  168. package/dist/db/adapter.js +37 -0
  169. package/dist/db/adapter.js.map +1 -0
  170. package/dist/db/capabilities.d.ts +13 -0
  171. package/dist/db/capabilities.d.ts.map +1 -0
  172. package/dist/db/capabilities.js +25 -0
  173. package/dist/db/capabilities.js.map +1 -0
  174. package/dist/db/connection.d.ts +6 -0
  175. package/dist/db/connection.d.ts.map +1 -0
  176. package/dist/db/connection.js +42 -0
  177. package/dist/db/connection.js.map +1 -0
  178. package/dist/db/migrate.d.ts +9 -0
  179. package/dist/db/migrate.d.ts.map +1 -0
  180. package/dist/db/migrate.js +102 -0
  181. package/dist/db/migrate.js.map +1 -0
  182. package/dist/db/transaction.d.ts +4 -0
  183. package/dist/db/transaction.d.ts.map +1 -0
  184. package/dist/db/transaction.js +39 -0
  185. package/dist/db/transaction.js.map +1 -0
  186. package/dist/errors.d.ts +9 -0
  187. package/dist/errors.d.ts.map +1 -0
  188. package/dist/errors.js +32 -0
  189. package/dist/errors.js.map +1 -0
  190. package/dist/gateway/agent-service.d.ts +69 -0
  191. package/dist/gateway/agent-service.d.ts.map +1 -0
  192. package/dist/gateway/agent-service.js +581 -0
  193. package/dist/gateway/agent-service.js.map +1 -0
  194. package/dist/gateway/checkpoint-service.d.ts +42 -0
  195. package/dist/gateway/checkpoint-service.d.ts.map +1 -0
  196. package/dist/gateway/checkpoint-service.js +295 -0
  197. package/dist/gateway/checkpoint-service.js.map +1 -0
  198. package/dist/knowledge/sources.d.ts +72 -0
  199. package/dist/knowledge/sources.d.ts.map +1 -0
  200. package/dist/knowledge/sources.js +406 -0
  201. package/dist/knowledge/sources.js.map +1 -0
  202. package/dist/ledger/archive.d.ts +50 -0
  203. package/dist/ledger/archive.d.ts.map +1 -0
  204. package/dist/ledger/archive.js +1072 -0
  205. package/dist/ledger/archive.js.map +1 -0
  206. package/dist/ledger/hash.d.ts +22 -0
  207. package/dist/ledger/hash.d.ts.map +1 -0
  208. package/dist/ledger/hash.js +25 -0
  209. package/dist/ledger/hash.js.map +1 -0
  210. package/dist/ledger/maintenance.d.ts +78 -0
  211. package/dist/ledger/maintenance.d.ts.map +1 -0
  212. package/dist/ledger/maintenance.js +683 -0
  213. package/dist/ledger/maintenance.js.map +1 -0
  214. package/dist/ledger/projection.d.ts +37 -0
  215. package/dist/ledger/projection.d.ts.map +1 -0
  216. package/dist/ledger/projection.js +307 -0
  217. package/dist/ledger/projection.js.map +1 -0
  218. package/dist/ledger/promotion.d.ts +28 -0
  219. package/dist/ledger/promotion.d.ts.map +1 -0
  220. package/dist/ledger/promotion.js +308 -0
  221. package/dist/ledger/promotion.js.map +1 -0
  222. package/dist/ledger/query.d.ts +55 -0
  223. package/dist/ledger/query.d.ts.map +1 -0
  224. package/dist/ledger/query.js +321 -0
  225. package/dist/ledger/query.js.map +1 -0
  226. package/dist/ledger/redaction.d.ts +8 -0
  227. package/dist/ledger/redaction.d.ts.map +1 -0
  228. package/dist/ledger/redaction.js +40 -0
  229. package/dist/ledger/redaction.js.map +1 -0
  230. package/dist/ledger/store.d.ts +46 -0
  231. package/dist/ledger/store.d.ts.map +1 -0
  232. package/dist/ledger/store.js +324 -0
  233. package/dist/ledger/store.js.map +1 -0
  234. package/dist/ledger/types.d.ts +119 -0
  235. package/dist/ledger/types.d.ts.map +1 -0
  236. package/dist/ledger/types.js +22 -0
  237. package/dist/ledger/types.js.map +1 -0
  238. package/dist/ledger/validate.d.ts +10 -0
  239. package/dist/ledger/validate.d.ts.map +1 -0
  240. package/dist/ledger/validate.js +183 -0
  241. package/dist/ledger/validate.js.map +1 -0
  242. package/dist/mcp/server.d.ts +9 -0
  243. package/dist/mcp/server.d.ts.map +1 -0
  244. package/dist/mcp/server.js +86 -0
  245. package/dist/mcp/server.js.map +1 -0
  246. package/dist/memory/audit.d.ts +14 -0
  247. package/dist/memory/audit.d.ts.map +1 -0
  248. package/dist/memory/audit.js +16 -0
  249. package/dist/memory/audit.js.map +1 -0
  250. package/dist/memory/entries.d.ts +65 -0
  251. package/dist/memory/entries.d.ts.map +1 -0
  252. package/dist/memory/entries.js +200 -0
  253. package/dist/memory/entries.js.map +1 -0
  254. package/dist/memory/lifecycle.d.ts +29 -0
  255. package/dist/memory/lifecycle.d.ts.map +1 -0
  256. package/dist/memory/lifecycle.js +61 -0
  257. package/dist/memory/lifecycle.js.map +1 -0
  258. package/dist/memory/retrieval.d.ts +44 -0
  259. package/dist/memory/retrieval.d.ts.map +1 -0
  260. package/dist/memory/retrieval.js +174 -0
  261. package/dist/memory/retrieval.js.map +1 -0
  262. package/dist/memory/scoped-memory.d.ts +41 -0
  263. package/dist/memory/scoped-memory.d.ts.map +1 -0
  264. package/dist/memory/scoped-memory.js +65 -0
  265. package/dist/memory/scoped-memory.js.map +1 -0
  266. package/dist/memory/secrets.d.ts +6 -0
  267. package/dist/memory/secrets.d.ts.map +1 -0
  268. package/dist/memory/secrets.js +17 -0
  269. package/dist/memory/secrets.js.map +1 -0
  270. package/dist/memory/workspaces.d.ts +17 -0
  271. package/dist/memory/workspaces.d.ts.map +1 -0
  272. package/dist/memory/workspaces.js +92 -0
  273. package/dist/memory/workspaces.js.map +1 -0
  274. package/dist/repository/binding.d.ts +19 -0
  275. package/dist/repository/binding.d.ts.map +1 -0
  276. package/dist/repository/binding.js +78 -0
  277. package/dist/repository/binding.js.map +1 -0
  278. package/dist/repository/detect-root.d.ts +12 -0
  279. package/dist/repository/detect-root.d.ts.map +1 -0
  280. package/dist/repository/detect-root.js +57 -0
  281. package/dist/repository/detect-root.js.map +1 -0
  282. package/dist/repository/git-origin.d.ts +2 -0
  283. package/dist/repository/git-origin.d.ts.map +1 -0
  284. package/dist/repository/git-origin.js +15 -0
  285. package/dist/repository/git-origin.js.map +1 -0
  286. package/dist/repository/identity.d.ts +19 -0
  287. package/dist/repository/identity.d.ts.map +1 -0
  288. package/dist/repository/identity.js +23 -0
  289. package/dist/repository/identity.js.map +1 -0
  290. package/dist/repository/remote-url.d.ts +4 -0
  291. package/dist/repository/remote-url.d.ts.map +1 -0
  292. package/dist/repository/remote-url.js +36 -0
  293. package/dist/repository/remote-url.js.map +1 -0
  294. package/dist/security/sanitize.d.ts +4 -0
  295. package/dist/security/sanitize.d.ts.map +1 -0
  296. package/dist/security/sanitize.js +174 -0
  297. package/dist/security/sanitize.js.map +1 -0
  298. package/dist/serialization/envelope.d.ts +20 -0
  299. package/dist/serialization/envelope.d.ts.map +1 -0
  300. package/dist/serialization/envelope.js +11 -0
  301. package/dist/serialization/envelope.js.map +1 -0
  302. package/dist/serialization/validate.d.ts +31 -0
  303. package/dist/serialization/validate.d.ts.map +1 -0
  304. package/dist/serialization/validate.js +168 -0
  305. package/dist/serialization/validate.js.map +1 -0
  306. package/dist/server/agent-application.d.ts +6 -0
  307. package/dist/server/agent-application.d.ts.map +1 -0
  308. package/dist/server/agent-application.js +60 -0
  309. package/dist/server/agent-application.js.map +1 -0
  310. package/dist/server/app.d.ts +5 -0
  311. package/dist/server/app.d.ts.map +1 -0
  312. package/dist/server/app.js +87 -0
  313. package/dist/server/app.js.map +1 -0
  314. package/dist/server/auth.d.ts +2 -0
  315. package/dist/server/auth.d.ts.map +1 -0
  316. package/dist/server/auth.js +22 -0
  317. package/dist/server/auth.js.map +1 -0
  318. package/dist/server/http.d.ts +69 -0
  319. package/dist/server/http.d.ts.map +1 -0
  320. package/dist/server/http.js +349 -0
  321. package/dist/server/http.js.map +1 -0
  322. package/dist/server/idempotency.d.ts +12 -0
  323. package/dist/server/idempotency.d.ts.map +1 -0
  324. package/dist/server/idempotency.js +210 -0
  325. package/dist/server/idempotency.js.map +1 -0
  326. package/dist/server/instance-lock.d.ts +17 -0
  327. package/dist/server/instance-lock.d.ts.map +1 -0
  328. package/dist/server/instance-lock.js +118 -0
  329. package/dist/server/instance-lock.js.map +1 -0
  330. package/dist/server/router.d.ts +29 -0
  331. package/dist/server/router.d.ts.map +1 -0
  332. package/dist/server/router.js +112 -0
  333. package/dist/server/router.js.map +1 -0
  334. package/dist/server/routes/agent-events.d.ts +5 -0
  335. package/dist/server/routes/agent-events.d.ts.map +1 -0
  336. package/dist/server/routes/agent-events.js +46 -0
  337. package/dist/server/routes/agent-events.js.map +1 -0
  338. package/dist/server/routes/agent-intake.d.ts +5 -0
  339. package/dist/server/routes/agent-intake.d.ts.map +1 -0
  340. package/dist/server/routes/agent-intake.js +42 -0
  341. package/dist/server/routes/agent-intake.js.map +1 -0
  342. package/dist/server/routes/agent-promotions.d.ts +5 -0
  343. package/dist/server/routes/agent-promotions.d.ts.map +1 -0
  344. package/dist/server/routes/agent-promotions.js +52 -0
  345. package/dist/server/routes/agent-promotions.js.map +1 -0
  346. package/dist/server/routes/agent-runs.d.ts +25 -0
  347. package/dist/server/routes/agent-runs.d.ts.map +1 -0
  348. package/dist/server/routes/agent-runs.js +151 -0
  349. package/dist/server/routes/agent-runs.js.map +1 -0
  350. package/dist/server/routes/task5-support.d.ts +11 -0
  351. package/dist/server/routes/task5-support.d.ts.map +1 -0
  352. package/dist/server/routes/task5-support.js +22 -0
  353. package/dist/server/routes/task5-support.js.map +1 -0
  354. package/dist/server/routes/task5.d.ts +5 -0
  355. package/dist/server/routes/task5.d.ts.map +1 -0
  356. package/dist/server/routes/task5.js +72 -0
  357. package/dist/server/routes/task5.js.map +1 -0
  358. package/dist/server/runtime-descriptor.d.ts +24 -0
  359. package/dist/server/runtime-descriptor.d.ts.map +1 -0
  360. package/dist/server/runtime-descriptor.js +156 -0
  361. package/dist/server/runtime-descriptor.js.map +1 -0
  362. package/dist/server/write-queue.d.ts +20 -0
  363. package/dist/server/write-queue.d.ts.map +1 -0
  364. package/dist/server/write-queue.js +83 -0
  365. package/dist/server/write-queue.js.map +1 -0
  366. package/dist/setup/managed-text.d.ts +6 -0
  367. package/dist/setup/managed-text.d.ts.map +1 -0
  368. package/dist/setup/managed-text.js +42 -0
  369. package/dist/setup/managed-text.js.map +1 -0
  370. package/dist/setup/opencode-config.d.ts +3 -0
  371. package/dist/setup/opencode-config.d.ts.map +1 -0
  372. package/dist/setup/opencode-config.js +26 -0
  373. package/dist/setup/opencode-config.js.map +1 -0
  374. package/dist/setup/render.d.ts +8 -0
  375. package/dist/setup/render.d.ts.map +1 -0
  376. package/dist/setup/render.js +45 -0
  377. package/dist/setup/render.js.map +1 -0
  378. package/dist/web/server.d.ts +16 -0
  379. package/dist/web/server.d.ts.map +1 -0
  380. package/dist/web/server.js +424 -0
  381. package/dist/web/server.js.map +1 -0
  382. package/dist/web/ui.d.ts +2 -0
  383. package/dist/web/ui.d.ts.map +1 -0
  384. package/dist/web/ui.js +271 -0
  385. package/dist/web/ui.js.map +1 -0
  386. package/migrations/001_initial.sql +89 -0
  387. package/migrations/002_fts.sql +66 -0
  388. package/migrations/003_akinator.sql +30 -0
  389. package/migrations/004_agent_gateway.sql +259 -0
  390. package/package.json +45 -0
  391. package/templates/AGENTS.md +29 -0
@@ -0,0 +1,342 @@
1
+ import { KiokukoError } from '../errors.js';
2
+ export const RECOMMENDATION_POLICY_VERSION = 'recommendations.v1';
3
+ export const RECOMMENDATION_CODES = [
4
+ 'INTAKE_INCOMPLETE',
5
+ 'VERIFY_AFTER_MUTATION',
6
+ 'SIDE_EFFECT_OUTCOME_UNKNOWN',
7
+ 'UNRESOLVED_FAILURE',
8
+ 'COVERAGE_INCOMPLETE',
9
+ 'CONTEXT_STALE',
10
+ 'CONTRADICTORY_MEMORY',
11
+ 'PROMOTION_CANDIDATE',
12
+ ];
13
+ export const RECOMMENDATION_PRIORITY = Object.freeze({
14
+ INTAKE_INCOMPLETE: 1,
15
+ VERIFY_AFTER_MUTATION: 2,
16
+ SIDE_EFFECT_OUTCOME_UNKNOWN: 3,
17
+ UNRESOLVED_FAILURE: 4,
18
+ COVERAGE_INCOMPLETE: 5,
19
+ CONTEXT_STALE: 6,
20
+ CONTRADICTORY_MEMORY: 7,
21
+ PROMOTION_CANDIDATE: 8,
22
+ });
23
+ export const RECOMMENDATION_CODE_PRIORITY = RECOMMENDATION_PRIORITY;
24
+ export const MAX_RECOMMENDATIONS = RECOMMENDATION_CODES.length;
25
+ export const MAX_EVIDENCE_EVENT_IDS = 16;
26
+ export const MAX_REFERENCE_IDS = 16;
27
+ export const MAX_INPUT_ITEMS = 4096;
28
+ export const RECOMMENDATION_MESSAGES = Object.freeze({
29
+ INTAKE_INCOMPLETE: 'Intake is incomplete; required task details remain unanswered',
30
+ VERIFY_AFTER_MUTATION: 'Passing evidence predates the latest mutation',
31
+ SIDE_EFFECT_OUTCOME_UNKNOWN: 'A side effect has no known outcome',
32
+ UNRESOLVED_FAILURE: 'Unresolved failures remain',
33
+ COVERAGE_INCOMPLETE: 'Observed coverage is incomplete',
34
+ CONTEXT_STALE: 'Previously delivered context may be stale',
35
+ CONTRADICTORY_MEMORY: 'Verified memory entries contain a contradiction',
36
+ PROMOTION_CANDIDATE: 'A durable proposal is eligible for candidate promotion only',
37
+ });
38
+ const COVERAGE_CATEGORIES = ['approval', 'command', 'file', 'run', 'tool'];
39
+ const COVERAGE_LEVELS = ['complete', 'best_effort', 'declared', 'unavailable'];
40
+ const MISSING_PROFILE_FIELDS = ['taskType', 'target', 'expected'];
41
+ const EVIDENCE_STATES = ['none', 'failed', 'fresh', 'stale'];
42
+ const TASK_TYPES = ['build', 'debug', 'research', 'review', 'devops', 'writing', 'analysis'];
43
+ const TOP_LEVEL_FIELDS = ['projection', 'broker'];
44
+ const PROJECTION_FIELDS = [
45
+ 'intakeIncomplete', 'missingProfileFields', 'evidenceState', 'unresolvedFailureEventIds',
46
+ 'unknownOutcomeEventIds', 'coverage', 'declaredCoverage', 'incompleteCoverageCategories',
47
+ 'latestMutationEventIds', 'latestPassingVerificationEventIds', 'throughSequence',
48
+ 'latestMutationSequence', 'latestPassingVerificationSequence', 'profileHash', 'taskProfile',
49
+ ];
50
+ const BROKER_FIELDS = ['staleDeliveredEntries', 'contradictoryMemoryPairs', 'promotionCandidates'];
51
+ const STALE_ENTRY_FIELDS = ['entryId', 'deliveredRevision', 'currentRevision', 'stale', 'evidenceEventIds'];
52
+ const CONTRADICTION_FIELDS = ['leftEntryId', 'rightEntryId', 'verified', 'evidenceEventIds'];
53
+ const PROMOTION_FIELDS = ['eventId', 'eligible', 'evidenceEventIds'];
54
+ const COVERAGE_FIELDS = COVERAGE_CATEGORIES;
55
+ const TASK_PROFILE_FIELDS = ['taskType', 'target', 'expected', 'constraints'];
56
+ function validation() {
57
+ throw new KiokukoError('VALIDATION_ERROR', 'Invalid recommendation input');
58
+ }
59
+ function isPlainObject(value) {
60
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
61
+ return false;
62
+ const prototype = Object.getPrototypeOf(value);
63
+ return prototype === Object.prototype || prototype === null;
64
+ }
65
+ function hasOwn(value, key) {
66
+ return Object.prototype.hasOwnProperty.call(value, key);
67
+ }
68
+ function knownFields(value, allowed) {
69
+ const allowedSet = new Set(allowed);
70
+ if (Object.keys(value).some((key) => !allowedSet.has(key)))
71
+ validation();
72
+ }
73
+ function requiredFields(value, required) {
74
+ if (required.some((key) => !hasOwn(value, key)))
75
+ validation();
76
+ }
77
+ function safeIdentifier(value) {
78
+ if (typeof value !== 'string' || value.length === 0 || value.length > 256)
79
+ validation();
80
+ if (/\s|:\/\/|[;&|<>`$]/u.test(value))
81
+ validation();
82
+ if (/(?:bearer|basic)\s|(?:ghp_|github_pat_|xox[baprs]-|sk-[A-Za-z0-9]|AKIA[0-9A-Z]{16})/iu.test(value))
83
+ validation();
84
+ return value;
85
+ }
86
+ function idList(value, required) {
87
+ if (value === undefined && !required)
88
+ return [];
89
+ if (!Array.isArray(value) || value.length > MAX_INPUT_ITEMS)
90
+ validation();
91
+ return [...new Set(value.map((item) => safeIdentifier(item)))].sort();
92
+ }
93
+ function bounded(values, maximum) {
94
+ const unique = [...new Set(values)].sort();
95
+ return { values: unique.slice(0, maximum), truncated: unique.length > maximum };
96
+ }
97
+ function enumValue(value, values) {
98
+ if (typeof value !== 'string' || !values.includes(value))
99
+ validation();
100
+ return value;
101
+ }
102
+ function booleanValue(value) {
103
+ if (typeof value !== 'boolean')
104
+ validation();
105
+ return value;
106
+ }
107
+ function sequence(value, optional) {
108
+ if (value === undefined && optional)
109
+ return null;
110
+ if (value === null && optional)
111
+ return null;
112
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0)
113
+ validation();
114
+ return value;
115
+ }
116
+ function parseTaskProfile(value) {
117
+ if (!isPlainObject(value))
118
+ validation();
119
+ knownFields(value, TASK_PROFILE_FIELDS);
120
+ requiredFields(value, TASK_PROFILE_FIELDS);
121
+ const taskType = value.taskType === null ? null : enumValue(value.taskType, TASK_TYPES);
122
+ for (const field of ['target', 'expected', 'constraints']) {
123
+ if (value[field] !== null && typeof value[field] !== 'string')
124
+ validation();
125
+ }
126
+ return {
127
+ taskType,
128
+ target: value.target,
129
+ expected: value.expected,
130
+ constraints: value.constraints,
131
+ };
132
+ }
133
+ function parseDeclaredCoverage(value) {
134
+ if (value === undefined)
135
+ return undefined;
136
+ if (!isPlainObject(value))
137
+ validation();
138
+ knownFields(value, COVERAGE_FIELDS);
139
+ const result = {};
140
+ for (const category of COVERAGE_CATEGORIES) {
141
+ if (hasOwn(value, category))
142
+ result[category] = enumValue(value[category], COVERAGE_LEVELS);
143
+ }
144
+ return result;
145
+ }
146
+ function parseProjection(value) {
147
+ if (!isPlainObject(value))
148
+ validation();
149
+ knownFields(value, PROJECTION_FIELDS);
150
+ requiredFields(value, [
151
+ 'intakeIncomplete', 'missingProfileFields', 'evidenceState', 'unresolvedFailureEventIds',
152
+ 'unknownOutcomeEventIds', 'coverage',
153
+ ]);
154
+ const intakeIncomplete = booleanValue(value.intakeIncomplete);
155
+ const missingProfileFields = idList(value.missingProfileFields, true);
156
+ if (missingProfileFields.some((field) => !MISSING_PROFILE_FIELDS.includes(field)))
157
+ validation();
158
+ const evidenceState = enumValue(value.evidenceState, EVIDENCE_STATES);
159
+ const coverage = enumValue(value.coverage, ['complete', 'partial']);
160
+ const declaredCoverage = parseDeclaredCoverage(value.declaredCoverage);
161
+ const incompleteCoverageCategories = idList(value.incompleteCoverageCategories, false);
162
+ if (incompleteCoverageCategories.some((category) => !COVERAGE_CATEGORIES.includes(category)))
163
+ validation();
164
+ if (intakeIncomplete && missingProfileFields.length === 0)
165
+ validation();
166
+ if (hasOwn(value, 'throughSequence'))
167
+ sequence(value.throughSequence, false);
168
+ if (hasOwn(value, 'latestMutationSequence'))
169
+ sequence(value.latestMutationSequence, true);
170
+ if (hasOwn(value, 'latestPassingVerificationSequence'))
171
+ sequence(value.latestPassingVerificationSequence, true);
172
+ if (hasOwn(value, 'profileHash'))
173
+ safeIdentifier(value.profileHash);
174
+ if (hasOwn(value, 'taskProfile'))
175
+ parseTaskProfile(value.taskProfile);
176
+ return {
177
+ intakeIncomplete,
178
+ missingProfileFields,
179
+ evidenceState,
180
+ unresolvedFailureEventIds: idList(value.unresolvedFailureEventIds, true),
181
+ unknownOutcomeEventIds: idList(value.unknownOutcomeEventIds, true),
182
+ coverage,
183
+ ...(declaredCoverage === undefined ? {} : { declaredCoverage }),
184
+ incompleteCoverageCategories,
185
+ latestMutationEventIds: idList(value.latestMutationEventIds, false),
186
+ latestPassingVerificationEventIds: idList(value.latestPassingVerificationEventIds, false),
187
+ };
188
+ }
189
+ function parseStaleEntries(value) {
190
+ if (value === undefined)
191
+ return [];
192
+ if (!Array.isArray(value) || value.length > MAX_INPUT_ITEMS)
193
+ validation();
194
+ return value.map((item) => {
195
+ if (!isPlainObject(item))
196
+ validation();
197
+ knownFields(item, STALE_ENTRY_FIELDS);
198
+ requiredFields(item, ['entryId', 'deliveredRevision', 'currentRevision']);
199
+ if (sequence(item.deliveredRevision, false) === null || sequence(item.currentRevision, false) === null)
200
+ validation();
201
+ return {
202
+ entryId: safeIdentifier(item.entryId),
203
+ stale: hasOwn(item, 'stale') ? booleanValue(item.stale) : true,
204
+ evidenceEventIds: idList(item.evidenceEventIds, false),
205
+ };
206
+ });
207
+ }
208
+ function parseContradictions(value) {
209
+ if (value === undefined)
210
+ return [];
211
+ if (!Array.isArray(value) || value.length > MAX_INPUT_ITEMS)
212
+ validation();
213
+ return value.map((item) => {
214
+ if (!isPlainObject(item))
215
+ validation();
216
+ knownFields(item, CONTRADICTION_FIELDS);
217
+ requiredFields(item, ['leftEntryId', 'rightEntryId', 'verified']);
218
+ return {
219
+ leftEntryId: safeIdentifier(item.leftEntryId),
220
+ rightEntryId: safeIdentifier(item.rightEntryId),
221
+ verified: booleanValue(item.verified),
222
+ evidenceEventIds: idList(item.evidenceEventIds, false),
223
+ };
224
+ });
225
+ }
226
+ function parsePromotionCandidates(value) {
227
+ if (value === undefined)
228
+ return [];
229
+ if (!Array.isArray(value) || value.length > MAX_INPUT_ITEMS)
230
+ validation();
231
+ return value.map((item) => {
232
+ if (!isPlainObject(item))
233
+ validation();
234
+ knownFields(item, PROMOTION_FIELDS);
235
+ requiredFields(item, ['eventId', 'eligible']);
236
+ return {
237
+ eventId: safeIdentifier(item.eventId),
238
+ eligible: booleanValue(item.eligible),
239
+ evidenceEventIds: idList(item.evidenceEventIds, false),
240
+ };
241
+ });
242
+ }
243
+ function parseBroker(value) {
244
+ if (value === undefined)
245
+ return { staleDeliveredEntries: [], contradictoryMemoryPairs: [], promotionCandidates: [] };
246
+ if (!isPlainObject(value))
247
+ validation();
248
+ knownFields(value, BROKER_FIELDS);
249
+ return {
250
+ staleDeliveredEntries: parseStaleEntries(value.staleDeliveredEntries),
251
+ contradictoryMemoryPairs: parseContradictions(value.contradictoryMemoryPairs),
252
+ promotionCandidates: parsePromotionCandidates(value.promotionCandidates),
253
+ };
254
+ }
255
+ function parseInput(value) {
256
+ if (!isPlainObject(value))
257
+ validation();
258
+ knownFields(value, TOP_LEVEL_FIELDS);
259
+ requiredFields(value, ['projection']);
260
+ return {
261
+ projection: parseProjection(value.projection),
262
+ broker: parseBroker(value.broker),
263
+ };
264
+ }
265
+ function makeRecommendation(code, evidenceEventIds, referenceIds = [], extraMetadata = {}) {
266
+ const evidence = bounded(evidenceEventIds, MAX_EVIDENCE_EVENT_IDS);
267
+ const references = bounded(referenceIds, MAX_REFERENCE_IDS);
268
+ const categories = extraMetadata.incompleteCoverageCategories === undefined
269
+ ? undefined
270
+ : bounded(extraMetadata.incompleteCoverageCategories, MAX_REFERENCE_IDS);
271
+ return {
272
+ code,
273
+ message: RECOMMENDATION_MESSAGES[code],
274
+ evidenceEventIds: evidence.values,
275
+ priority: RECOMMENDATION_PRIORITY[code],
276
+ untrusted: true,
277
+ actionable: false,
278
+ metadata: {
279
+ truncated: evidence.truncated || references.truncated || (categories?.truncated ?? false),
280
+ ...(categories === undefined || categories.values.length === 0 ? {} : { incompleteCoverageCategories: categories.values }),
281
+ referenceIds: references.values,
282
+ },
283
+ };
284
+ }
285
+ function sortRecommendations(recommendations) {
286
+ const ordered = [...recommendations].sort((left, right) => left.priority - right.priority);
287
+ if (ordered.length <= MAX_RECOMMENDATIONS)
288
+ return ordered;
289
+ const truncated = ordered.slice(0, MAX_RECOMMENDATIONS);
290
+ return truncated.map((recommendation) => ({
291
+ ...recommendation,
292
+ metadata: {
293
+ truncated: true,
294
+ referenceIds: [...recommendation.metadata.referenceIds],
295
+ ...(recommendation.metadata.incompleteCoverageCategories === undefined
296
+ ? {}
297
+ : { incompleteCoverageCategories: [...recommendation.metadata.incompleteCoverageCategories] }),
298
+ },
299
+ }));
300
+ }
301
+ export function buildRecommendations(input) {
302
+ const normalized = parseInput(input);
303
+ const { projection, broker } = normalized;
304
+ const recommendations = [];
305
+ if (projection.intakeIncomplete) {
306
+ recommendations.push(makeRecommendation('INTAKE_INCOMPLETE', []));
307
+ }
308
+ if (projection.evidenceState === 'stale') {
309
+ recommendations.push(makeRecommendation('VERIFY_AFTER_MUTATION', [
310
+ ...projection.latestMutationEventIds,
311
+ ...projection.latestPassingVerificationEventIds,
312
+ ]));
313
+ }
314
+ if (projection.unknownOutcomeEventIds.length > 0) {
315
+ recommendations.push(makeRecommendation('SIDE_EFFECT_OUTCOME_UNKNOWN', projection.unknownOutcomeEventIds));
316
+ }
317
+ if (projection.unresolvedFailureEventIds.length > 0) {
318
+ recommendations.push(makeRecommendation('UNRESOLVED_FAILURE', projection.unresolvedFailureEventIds));
319
+ }
320
+ if (projection.coverage === 'partial') {
321
+ const declaredCoverage = projection.declaredCoverage;
322
+ const declaredCategories = declaredCoverage === undefined
323
+ ? []
324
+ : COVERAGE_CATEGORIES.filter((category) => (Object.prototype.hasOwnProperty.call(declaredCoverage, category)
325
+ && declaredCoverage[category] !== 'complete'));
326
+ recommendations.push(makeRecommendation('COVERAGE_INCOMPLETE', [], [], { incompleteCoverageCategories: [...declaredCategories, ...projection.incompleteCoverageCategories] }));
327
+ }
328
+ const staleEntries = broker.staleDeliveredEntries.filter((entry) => entry.stale);
329
+ if (staleEntries.length > 0) {
330
+ recommendations.push(makeRecommendation('CONTEXT_STALE', staleEntries.flatMap((entry) => entry.evidenceEventIds), staleEntries.map((entry) => entry.entryId)));
331
+ }
332
+ const verifiedPairs = broker.contradictoryMemoryPairs.filter((pair) => pair.verified);
333
+ if (verifiedPairs.length > 0) {
334
+ recommendations.push(makeRecommendation('CONTRADICTORY_MEMORY', verifiedPairs.flatMap((pair) => pair.evidenceEventIds), verifiedPairs.flatMap((pair) => [pair.leftEntryId, pair.rightEntryId])));
335
+ }
336
+ const eligibleCandidates = broker.promotionCandidates.filter((candidate) => candidate.eligible);
337
+ if (eligibleCandidates.length > 0) {
338
+ recommendations.push(makeRecommendation('PROMOTION_CANDIDATE', eligibleCandidates.flatMap((candidate) => [candidate.eventId, ...candidate.evidenceEventIds])));
339
+ }
340
+ return sortRecommendations(recommendations);
341
+ }
342
+ //# sourceMappingURL=recommendations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../src/context/recommendations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { DatabaseSync } from 'node:sqlite';
2
+ export type SqliteValue = null | number | bigint | string | NodeJS.ArrayBufferView;
3
+ export type SqliteRow = Record<string, unknown>;
4
+ export interface SqliteStatement {
5
+ run(...parameters: SqliteValue[]): void;
6
+ get<T extends SqliteRow = SqliteRow>(...parameters: SqliteValue[]): T | undefined;
7
+ all<T extends SqliteRow = SqliteRow>(...parameters: SqliteValue[]): T[];
8
+ }
9
+ export interface SqliteDatabase {
10
+ readonly filePath: string;
11
+ exec(sql: string): void;
12
+ prepare(sql: string): SqliteStatement;
13
+ backup(destination: string): Promise<number>;
14
+ close(): void;
15
+ }
16
+ export declare class NodeSqliteAdapter implements SqliteDatabase {
17
+ readonly filePath: string;
18
+ private readonly database;
19
+ constructor(filePath: string, database: DatabaseSync);
20
+ exec(sql: string): void;
21
+ prepare(sql: string): SqliteStatement;
22
+ backup(destination: string): Promise<number>;
23
+ close(): void;
24
+ }
25
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/db/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,YAAY,EAAsB,MAAM,aAAa,CAAC;AAEvF,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;AACnF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,GAAG,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACxC,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,GAAG,UAAU,EAAE,WAAW,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;IAClF,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,GAAG,UAAU,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;CACzE;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;IACtC,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,KAAK,IAAI,IAAI,CAAC;CACf;AAkBD,qBAAa,iBAAkB,YAAW,cAAc;IAEpD,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADhB,QAAQ,EAAE,MAAM,EACR,QAAQ,EAAE,YAAY;IAGzC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAIrC,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5C,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,37 @@
1
+ import { backup as sqliteBackup } from 'node:sqlite';
2
+ class StatementAdapter {
3
+ statement;
4
+ constructor(statement) {
5
+ this.statement = statement;
6
+ }
7
+ run(...parameters) {
8
+ this.statement.run(...parameters);
9
+ }
10
+ get(...parameters) {
11
+ return this.statement.get(...parameters);
12
+ }
13
+ all(...parameters) {
14
+ return this.statement.all(...parameters);
15
+ }
16
+ }
17
+ export class NodeSqliteAdapter {
18
+ filePath;
19
+ database;
20
+ constructor(filePath, database) {
21
+ this.filePath = filePath;
22
+ this.database = database;
23
+ }
24
+ exec(sql) {
25
+ this.database.exec(sql);
26
+ }
27
+ prepare(sql) {
28
+ return new StatementAdapter(this.database.prepare(sql));
29
+ }
30
+ backup(destination) {
31
+ return sqliteBackup(this.database, destination);
32
+ }
33
+ close() {
34
+ this.database.close();
35
+ }
36
+ }
37
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/db/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAoC,MAAM,aAAa,CAAC;AAmBvF,MAAM,gBAAgB;IACS;IAA7B,YAA6B,SAAwB;QAAxB,cAAS,GAAT,SAAS,CAAe;IAAG,CAAC;IAEzD,GAAG,CAAC,GAAG,UAAyB;QAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CAAkC,GAAG,UAAyB;QAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAkB,CAAC;IAC5D,CAAC;IAED,GAAG,CAAkC,GAAG,UAAyB;QAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAQ,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,iBAAiB;IAEjB;IACQ;IAFnB,YACW,QAAgB,EACR,QAAsB;QAD9B,aAAQ,GAAR,QAAQ,CAAQ;QACR,aAAQ,GAAR,QAAQ,CAAc;IACtC,CAAC;IAEJ,IAAI,CAAC,GAAW;QACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,WAAmB;QACxB,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { SqliteDatabase } from './adapter.js';
2
+ export interface SqliteCapabilities {
3
+ driver: 'node:sqlite';
4
+ sqliteVersion: string;
5
+ fts5: boolean;
6
+ foreignKeys: boolean;
7
+ journalMode: string;
8
+ synchronous: string;
9
+ busyTimeout: number;
10
+ backup: boolean;
11
+ }
12
+ export declare function detectCapabilities(database: SqliteDatabase): SqliteCapabilities;
13
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/db/capabilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,cAAc,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AAMD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,kBAAkB,CAmB/E"}
@@ -0,0 +1,25 @@
1
+ import { backup as sqliteBackup } from 'node:sqlite';
2
+ function value(row, key) {
3
+ return row?.[key];
4
+ }
5
+ export function detectCapabilities(database) {
6
+ let fts5 = false;
7
+ try {
8
+ database.exec('CREATE VIRTUAL TABLE temp.kiokuko_capability_fts USING fts5(content); DROP TABLE temp.kiokuko_capability_fts;');
9
+ fts5 = true;
10
+ }
11
+ catch {
12
+ fts5 = false;
13
+ }
14
+ return {
15
+ driver: 'node:sqlite',
16
+ sqliteVersion: String(value(database.prepare('SELECT sqlite_version() AS version').get(), 'version')),
17
+ fts5,
18
+ foreignKeys: value(database.prepare('PRAGMA foreign_keys').get(), 'foreign_keys') === 1,
19
+ journalMode: String(value(database.prepare('PRAGMA journal_mode').get(), 'journal_mode')).toLowerCase(),
20
+ synchronous: String(value(database.prepare('PRAGMA synchronous').get(), 'synchronous')).toLowerCase(),
21
+ busyTimeout: Number(value(database.prepare('PRAGMA busy_timeout').get(), 'timeout') ?? 0),
22
+ backup: typeof sqliteBackup === 'function',
23
+ };
24
+ }
25
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/db/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AAcrD,SAAS,KAAK,CAAI,GAA0B,EAAE,GAAW;IACvD,OAAO,GAAG,EAAE,CAAC,GAAG,CAAkB,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAwB;IACzD,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,+GAA+G,CAAC,CAAC;QAC/H,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,MAAM,EAAE,aAAa;QACrB,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QACrG,IAAI;QACJ,WAAW,EAAE,KAAK,CAAS,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC;QAC/F,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,WAAW,EAAE;QACvG,WAAW,EAAE,MAAM,CAAC,KAAK,CAAkB,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE;QACtH,WAAW,EAAE,MAAM,CAAC,KAAK,CAAS,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACjG,MAAM,EAAE,OAAO,YAAY,KAAK,UAAU;KAC3C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { NodeSqliteAdapter } from './adapter.js';
2
+ export interface ConnectionOptions {
3
+ readonly readOnly?: boolean;
4
+ }
5
+ export declare function openConnection(filePath: string, options?: ConnectionOptions): NodeSqliteAdapter;
6
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAIjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAmBD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,iBAAiB,CAiBnG"}
@@ -0,0 +1,42 @@
1
+ import { DatabaseSync } from 'node:sqlite';
2
+ import { dirname } from 'node:path';
3
+ import { chmodSync, mkdirSync } from 'node:fs';
4
+ import { NodeSqliteAdapter } from './adapter.js';
5
+ const JOURNAL_MODE_RETRY_LIMIT = 5;
6
+ function isLockError(error) {
7
+ return error instanceof Error && /database is locked|database table is locked|busy/i.test(error.message);
8
+ }
9
+ function configureJournalMode(database) {
10
+ for (let attempt = 1;; attempt += 1) {
11
+ try {
12
+ database.exec('PRAGMA journal_mode = WAL;');
13
+ return;
14
+ }
15
+ catch (error) {
16
+ if (!isLockError(error) || attempt >= JOURNAL_MODE_RETRY_LIMIT)
17
+ throw error;
18
+ const buffer = new Int32Array(new SharedArrayBuffer(4));
19
+ Atomics.wait(buffer, 0, 0, attempt * 25);
20
+ }
21
+ }
22
+ }
23
+ export function openConnection(filePath, options = {}) {
24
+ if (filePath !== ':memory:') {
25
+ mkdirSync(dirname(filePath), { recursive: true, mode: 0o700 });
26
+ }
27
+ const database = new DatabaseSync(filePath, {
28
+ enableForeignKeyConstraints: true,
29
+ timeout: 5000,
30
+ ...(options.readOnly === undefined ? {} : { readOnly: options.readOnly }),
31
+ });
32
+ if (filePath !== ':memory:' && !options.readOnly)
33
+ chmodSync(filePath, 0o600);
34
+ database.exec(`
35
+ PRAGMA foreign_keys = ON;
36
+ PRAGMA busy_timeout = 5000;
37
+ `);
38
+ configureJournalMode(database);
39
+ database.exec('PRAGMA synchronous = NORMAL;');
40
+ return new NodeSqliteAdapter(filePath, database);
41
+ }
42
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAMnC,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,YAAY,KAAK,IAAI,mDAAmD,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3G,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAsB;IAClD,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,wBAAwB;gBAAE,MAAM,KAAK,CAAC;YAC5E,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,UAA6B,EAAE;IAC9E,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE;QAC1C,2BAA2B,EAAE,IAAI;QACjC,OAAO,EAAE,IAAI;QACb,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;KAC1E,CAAC,CAAC;IACH,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7E,QAAQ,CAAC,IAAI,CAAC;;;GAGb,CAAC,CAAC;IACH,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,OAAO,IAAI,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { SqliteDatabase } from './adapter.js';
2
+ export interface MigrationResult {
3
+ applied: number[];
4
+ currentVersion: number;
5
+ }
6
+ export declare function defaultMigrationsDirectory(): string;
7
+ export declare function migrateDatabase(database: SqliteDatabase, directory?: string): MigrationResult;
8
+ export declare const migrate: typeof migrateDatabase;
9
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAYD,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAgFD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,SAA+B,GAAG,eAAe,CAiBnH;AAED,eAAO,MAAM,OAAO,wBAAkB,CAAC"}