@askdkc/kiokuko 0.1.16 → 0.1.19

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 (549) hide show
  1. package/README.ja.md +91 -112
  2. package/README.ko.md +90 -102
  3. package/README.md +103 -260
  4. package/README.zh-CN.md +88 -102
  5. package/dist/agent-file/atomic-write.d.ts +90 -3
  6. package/dist/agent-file/atomic-write.d.ts.map +1 -1
  7. package/dist/agent-file/atomic-write.js +990 -14
  8. package/dist/agent-file/atomic-write.js.map +1 -1
  9. package/dist/agent-file/managed-block.d.ts +12 -1
  10. package/dist/agent-file/managed-block.d.ts.map +1 -1
  11. package/dist/agent-file/managed-block.js +49 -4
  12. package/dist/agent-file/managed-block.js.map +1 -1
  13. package/dist/agent-file/render.d.ts +1 -1
  14. package/dist/agent-file/render.d.ts.map +1 -1
  15. package/dist/agent-file/render.js +10 -7
  16. package/dist/agent-file/render.js.map +1 -1
  17. package/dist/akinator/agent-task.d.ts +14 -24
  18. package/dist/akinator/agent-task.d.ts.map +1 -1
  19. package/dist/akinator/agent-task.js +460 -103
  20. package/dist/akinator/agent-task.js.map +1 -1
  21. package/dist/akinator/capabilities.d.ts +52 -7
  22. package/dist/akinator/capabilities.d.ts.map +1 -1
  23. package/dist/akinator/capabilities.js +226 -28
  24. package/dist/akinator/capabilities.js.map +1 -1
  25. package/dist/akinator/capability-binding.d.ts +11 -0
  26. package/dist/akinator/capability-binding.d.ts.map +1 -0
  27. package/dist/akinator/capability-binding.js +56 -0
  28. package/dist/akinator/capability-binding.js.map +1 -0
  29. package/dist/akinator/domain.js +2 -2
  30. package/dist/akinator/domain.js.map +1 -1
  31. package/dist/akinator/knowledge-path.d.ts.map +1 -1
  32. package/dist/akinator/knowledge-path.js +409 -39
  33. package/dist/akinator/knowledge-path.js.map +1 -1
  34. package/dist/akinator/orchestrator.d.ts +3 -4
  35. package/dist/akinator/orchestrator.d.ts.map +1 -1
  36. package/dist/akinator/orchestrator.js +1 -4
  37. package/dist/akinator/orchestrator.js.map +1 -1
  38. package/dist/akinator/service.d.ts +0 -4
  39. package/dist/akinator/service.d.ts.map +1 -1
  40. package/dist/akinator/service.js +19 -35
  41. package/dist/akinator/service.js.map +1 -1
  42. package/dist/akinator/skill-discovery-attempt.d.ts +20 -0
  43. package/dist/akinator/skill-discovery-attempt.d.ts.map +1 -0
  44. package/dist/akinator/skill-discovery-attempt.js +390 -0
  45. package/dist/akinator/skill-discovery-attempt.js.map +1 -0
  46. package/dist/akinator/store.d.ts.map +1 -1
  47. package/dist/akinator/store.js +107 -52
  48. package/dist/akinator/store.js.map +1 -1
  49. package/dist/akinator/types.d.ts +0 -12
  50. package/dist/akinator/types.d.ts.map +1 -1
  51. package/dist/bin/kiokuko.js +0 -0
  52. package/dist/cli.d.ts +2 -0
  53. package/dist/cli.d.ts.map +1 -1
  54. package/dist/cli.js +561 -144
  55. package/dist/cli.js.map +1 -1
  56. package/dist/client/server-client.d.ts +5 -3
  57. package/dist/client/server-client.d.ts.map +1 -1
  58. package/dist/client/server-client.js +486 -181
  59. package/dist/client/server-client.js.map +1 -1
  60. package/dist/commands/agent.d.ts +2 -0
  61. package/dist/commands/agent.d.ts.map +1 -1
  62. package/dist/commands/agent.js +861 -86
  63. package/dist/commands/agent.js.map +1 -1
  64. package/dist/commands/backup.d.ts +2 -1
  65. package/dist/commands/backup.d.ts.map +1 -1
  66. package/dist/commands/backup.js +64 -8
  67. package/dist/commands/backup.js.map +1 -1
  68. package/dist/commands/doctor.d.ts +5 -1
  69. package/dist/commands/doctor.d.ts.map +1 -1
  70. package/dist/commands/doctor.js +70 -26
  71. package/dist/commands/doctor.js.map +1 -1
  72. package/dist/commands/export.d.ts +0 -4
  73. package/dist/commands/export.d.ts.map +1 -1
  74. package/dist/commands/export.js +191 -32
  75. package/dist/commands/export.js.map +1 -1
  76. package/dist/commands/import.d.ts +10 -1
  77. package/dist/commands/import.d.ts.map +1 -1
  78. package/dist/commands/import.js +592 -113
  79. package/dist/commands/import.js.map +1 -1
  80. package/dist/commands/init.d.ts +19 -1
  81. package/dist/commands/init.d.ts.map +1 -1
  82. package/dist/commands/init.js +569 -22
  83. package/dist/commands/init.js.map +1 -1
  84. package/dist/commands/purge.d.ts.map +1 -1
  85. package/dist/commands/purge.js +3 -0
  86. package/dist/commands/purge.js.map +1 -1
  87. package/dist/commands/setup.d.ts +34 -8
  88. package/dist/commands/setup.d.ts.map +1 -1
  89. package/dist/commands/setup.js +418 -86
  90. package/dist/commands/setup.js.map +1 -1
  91. package/dist/commands/skills.d.ts +9 -0
  92. package/dist/commands/skills.d.ts.map +1 -0
  93. package/dist/commands/skills.js +317 -0
  94. package/dist/commands/skills.js.map +1 -0
  95. package/dist/commands/use.d.ts +10 -2
  96. package/dist/commands/use.d.ts.map +1 -1
  97. package/dist/commands/use.js +851 -73
  98. package/dist/commands/use.js.map +1 -1
  99. package/dist/config/paths.d.ts +11 -1
  100. package/dist/config/paths.d.ts.map +1 -1
  101. package/dist/config/paths.js +64 -29
  102. package/dist/config/paths.js.map +1 -1
  103. package/dist/config/project-config.d.ts +1 -0
  104. package/dist/config/project-config.d.ts.map +1 -1
  105. package/dist/config/project-config.js +70 -32
  106. package/dist/config/project-config.js.map +1 -1
  107. package/dist/context/broker.d.ts +30 -14
  108. package/dist/context/broker.d.ts.map +1 -1
  109. package/dist/context/broker.js +628 -150
  110. package/dist/context/broker.js.map +1 -1
  111. package/dist/context/delivery.d.ts +8 -22
  112. package/dist/context/delivery.d.ts.map +1 -1
  113. package/dist/context/delivery.js +204 -152
  114. package/dist/context/delivery.js.map +1 -1
  115. package/dist/context/feedback.d.ts +11 -12
  116. package/dist/context/feedback.d.ts.map +1 -1
  117. package/dist/context/feedback.js +250 -268
  118. package/dist/context/feedback.js.map +1 -1
  119. package/dist/context/origin.d.ts +9 -0
  120. package/dist/context/origin.d.ts.map +1 -0
  121. package/dist/context/origin.js +15 -0
  122. package/dist/context/origin.js.map +1 -0
  123. package/dist/context/ranking.d.ts +4 -13
  124. package/dist/context/ranking.d.ts.map +1 -1
  125. package/dist/context/ranking.js +21 -5
  126. package/dist/context/ranking.js.map +1 -1
  127. package/dist/context/recommendations.d.ts +0 -5
  128. package/dist/context/recommendations.d.ts.map +1 -1
  129. package/dist/context/recommendations.js +0 -1
  130. package/dist/context/recommendations.js.map +1 -1
  131. package/dist/context/run-state.d.ts +26 -0
  132. package/dist/context/run-state.d.ts.map +1 -0
  133. package/dist/context/run-state.js +399 -0
  134. package/dist/context/run-state.js.map +1 -0
  135. package/dist/context/scoped-broker.d.ts +19 -6
  136. package/dist/context/scoped-broker.d.ts.map +1 -1
  137. package/dist/context/scoped-broker.js +530 -131
  138. package/dist/context/scoped-broker.js.map +1 -1
  139. package/dist/context/selection-state.d.ts +19 -0
  140. package/dist/context/selection-state.d.ts.map +1 -0
  141. package/dist/context/selection-state.js +250 -0
  142. package/dist/context/selection-state.js.map +1 -0
  143. package/dist/db/adapter.d.ts +5 -3
  144. package/dist/db/adapter.d.ts.map +1 -1
  145. package/dist/db/adapter.js +6 -3
  146. package/dist/db/adapter.js.map +1 -1
  147. package/dist/db/capabilities.d.ts.map +1 -1
  148. package/dist/db/capabilities.js +34 -16
  149. package/dist/db/capabilities.js.map +1 -1
  150. package/dist/db/connection.d.ts +8 -0
  151. package/dist/db/connection.d.ts.map +1 -1
  152. package/dist/db/connection.js +55 -26
  153. package/dist/db/connection.js.map +1 -1
  154. package/dist/db/migrate.d.ts +28 -7
  155. package/dist/db/migrate.d.ts.map +1 -1
  156. package/dist/db/migrate.js +106 -78
  157. package/dist/db/migrate.js.map +1 -1
  158. package/dist/db/sqlite-retry.d.ts +11 -0
  159. package/dist/db/sqlite-retry.d.ts.map +1 -0
  160. package/dist/db/sqlite-retry.js +66 -0
  161. package/dist/db/sqlite-retry.js.map +1 -0
  162. package/dist/db/transaction.d.ts +13 -0
  163. package/dist/db/transaction.d.ts.map +1 -1
  164. package/dist/db/transaction.js +53 -24
  165. package/dist/db/transaction.js.map +1 -1
  166. package/dist/db/upgrade-backup.d.ts +58 -2
  167. package/dist/db/upgrade-backup.d.ts.map +1 -1
  168. package/dist/db/upgrade-backup.js +757 -28
  169. package/dist/db/upgrade-backup.js.map +1 -1
  170. package/dist/errors.js +1 -1
  171. package/dist/errors.js.map +1 -1
  172. package/dist/gateway/agent-service.d.ts +4 -1
  173. package/dist/gateway/agent-service.d.ts.map +1 -1
  174. package/dist/gateway/agent-service.js +71 -58
  175. package/dist/gateway/agent-service.js.map +1 -1
  176. package/dist/gateway/checkpoint-service.d.ts +1 -0
  177. package/dist/gateway/checkpoint-service.d.ts.map +1 -1
  178. package/dist/gateway/checkpoint-service.js +47 -24
  179. package/dist/gateway/checkpoint-service.js.map +1 -1
  180. package/dist/ledger/archive.d.ts +1 -4
  181. package/dist/ledger/archive.d.ts.map +1 -1
  182. package/dist/ledger/archive.js +134 -54
  183. package/dist/ledger/archive.js.map +1 -1
  184. package/dist/ledger/maintenance.d.ts +0 -11
  185. package/dist/ledger/maintenance.d.ts.map +1 -1
  186. package/dist/ledger/maintenance.js +41 -44
  187. package/dist/ledger/maintenance.js.map +1 -1
  188. package/dist/ledger/projection.d.ts +0 -1
  189. package/dist/ledger/projection.d.ts.map +1 -1
  190. package/dist/ledger/projection.js.map +1 -1
  191. package/dist/ledger/promotion.d.ts +0 -9
  192. package/dist/ledger/promotion.d.ts.map +1 -1
  193. package/dist/ledger/promotion.js.map +1 -1
  194. package/dist/ledger/query.d.ts +1 -15
  195. package/dist/ledger/query.d.ts.map +1 -1
  196. package/dist/ledger/query.js.map +1 -1
  197. package/dist/ledger/store.d.ts +0 -1
  198. package/dist/ledger/store.d.ts.map +1 -1
  199. package/dist/ledger/store.js +11 -8
  200. package/dist/ledger/store.js.map +1 -1
  201. package/dist/ledger/types.d.ts +0 -4
  202. package/dist/ledger/types.d.ts.map +1 -1
  203. package/dist/ledger/types.js.map +1 -1
  204. package/dist/ledger/validate.d.ts.map +1 -1
  205. package/dist/ledger/validate.js +0 -5
  206. package/dist/ledger/validate.js.map +1 -1
  207. package/dist/mcp/bounded-stdio-transport.d.ts +23 -0
  208. package/dist/mcp/bounded-stdio-transport.d.ts.map +1 -0
  209. package/dist/mcp/bounded-stdio-transport.js +109 -0
  210. package/dist/mcp/bounded-stdio-transport.js.map +1 -0
  211. package/dist/mcp/server.d.ts +4 -0
  212. package/dist/mcp/server.d.ts.map +1 -1
  213. package/dist/mcp/server.js +111 -75
  214. package/dist/mcp/server.js.map +1 -1
  215. package/dist/memory/audit.d.ts +0 -1
  216. package/dist/memory/audit.d.ts.map +1 -1
  217. package/dist/memory/audit.js +0 -1
  218. package/dist/memory/audit.js.map +1 -1
  219. package/dist/memory/curator.d.ts +45 -1
  220. package/dist/memory/curator.d.ts.map +1 -1
  221. package/dist/memory/curator.js +290 -68
  222. package/dist/memory/curator.js.map +1 -1
  223. package/dist/memory/entries.d.ts +12 -2
  224. package/dist/memory/entries.d.ts.map +1 -1
  225. package/dist/memory/entries.js +198 -114
  226. package/dist/memory/entries.js.map +1 -1
  227. package/dist/memory/federated-retrieval.d.ts +78 -0
  228. package/dist/memory/federated-retrieval.d.ts.map +1 -0
  229. package/dist/memory/federated-retrieval.js +441 -0
  230. package/dist/memory/federated-retrieval.js.map +1 -0
  231. package/dist/memory/hybrid-retrieval.d.ts +5 -11
  232. package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
  233. package/dist/memory/hybrid-retrieval.js +78 -58
  234. package/dist/memory/hybrid-retrieval.js.map +1 -1
  235. package/dist/memory/lifecycle.d.ts.map +1 -1
  236. package/dist/memory/lifecycle.js +17 -13
  237. package/dist/memory/lifecycle.js.map +1 -1
  238. package/dist/memory/portability.d.ts +10 -0
  239. package/dist/memory/portability.d.ts.map +1 -0
  240. package/dist/memory/portability.js +44 -0
  241. package/dist/memory/portability.js.map +1 -0
  242. package/dist/memory/rebuild-search.d.ts +5 -0
  243. package/dist/memory/rebuild-search.d.ts.map +1 -1
  244. package/dist/memory/rebuild-search.js +101 -76
  245. package/dist/memory/rebuild-search.js.map +1 -1
  246. package/dist/memory/retrieval-query.d.ts +0 -5
  247. package/dist/memory/retrieval-query.d.ts.map +1 -1
  248. package/dist/memory/retrieval-query.js +0 -5
  249. package/dist/memory/retrieval-query.js.map +1 -1
  250. package/dist/memory/retrieval.d.ts +11 -0
  251. package/dist/memory/retrieval.d.ts.map +1 -1
  252. package/dist/memory/retrieval.js +34 -120
  253. package/dist/memory/retrieval.js.map +1 -1
  254. package/dist/memory/revisions.d.ts +76 -1
  255. package/dist/memory/revisions.d.ts.map +1 -1
  256. package/dist/memory/revisions.js +539 -35
  257. package/dist/memory/revisions.js.map +1 -1
  258. package/dist/memory/scoped-memory.d.ts +22 -13
  259. package/dist/memory/scoped-memory.d.ts.map +1 -1
  260. package/dist/memory/scoped-memory.js +248 -139
  261. package/dist/memory/scoped-memory.js.map +1 -1
  262. package/dist/memory/secrets.d.ts +2 -0
  263. package/dist/memory/secrets.d.ts.map +1 -1
  264. package/dist/memory/secrets.js +36 -0
  265. package/dist/memory/secrets.js.map +1 -1
  266. package/dist/memory/structured-memory.d.ts +8 -1
  267. package/dist/memory/structured-memory.d.ts.map +1 -1
  268. package/dist/memory/structured-memory.js +74 -20
  269. package/dist/memory/structured-memory.js.map +1 -1
  270. package/dist/memory/workspaces.d.ts +9 -0
  271. package/dist/memory/workspaces.d.ts.map +1 -1
  272. package/dist/memory/workspaces.js +67 -0
  273. package/dist/memory/workspaces.js.map +1 -1
  274. package/dist/package-version.d.ts +2 -0
  275. package/dist/package-version.d.ts.map +1 -0
  276. package/dist/package-version.js +7 -0
  277. package/dist/package-version.js.map +1 -0
  278. package/dist/repository/binding.d.ts +5 -0
  279. package/dist/repository/binding.d.ts.map +1 -1
  280. package/dist/repository/binding.js +117 -17
  281. package/dist/repository/binding.js.map +1 -1
  282. package/dist/repository/framework-version.d.ts +8 -0
  283. package/dist/repository/framework-version.d.ts.map +1 -0
  284. package/dist/repository/framework-version.js +29 -0
  285. package/dist/repository/framework-version.js.map +1 -0
  286. package/dist/repository/identity-value.d.ts +4 -0
  287. package/dist/repository/identity-value.d.ts.map +1 -0
  288. package/dist/repository/identity-value.js +24 -0
  289. package/dist/repository/identity-value.js.map +1 -0
  290. package/dist/repository/identity.d.ts.map +1 -1
  291. package/dist/repository/identity.js +2 -0
  292. package/dist/repository/identity.js.map +1 -1
  293. package/dist/repository/project-fingerprint.d.ts +33 -0
  294. package/dist/repository/project-fingerprint.d.ts.map +1 -0
  295. package/dist/repository/project-fingerprint.js +429 -0
  296. package/dist/repository/project-fingerprint.js.map +1 -0
  297. package/dist/repository/remote-url.d.ts +0 -1
  298. package/dist/repository/remote-url.d.ts.map +1 -1
  299. package/dist/repository/remote-url.js +0 -1
  300. package/dist/repository/remote-url.js.map +1 -1
  301. package/dist/runtime-version.d.ts +2 -1
  302. package/dist/runtime-version.d.ts.map +1 -1
  303. package/dist/runtime-version.js +21 -4
  304. package/dist/runtime-version.js.map +1 -1
  305. package/dist/serialization/boundary-json.d.ts +20 -0
  306. package/dist/serialization/boundary-json.d.ts.map +1 -0
  307. package/dist/serialization/boundary-json.js +129 -0
  308. package/dist/serialization/boundary-json.js.map +1 -0
  309. package/dist/serialization/envelope.js +1 -1
  310. package/dist/serialization/envelope.js.map +1 -1
  311. package/dist/serialization/validate.d.ts +7 -0
  312. package/dist/serialization/validate.d.ts.map +1 -1
  313. package/dist/serialization/validate.js +53 -13
  314. package/dist/serialization/validate.js.map +1 -1
  315. package/dist/server/app.js +1 -1
  316. package/dist/server/app.js.map +1 -1
  317. package/dist/server/http.d.ts +4 -3
  318. package/dist/server/http.d.ts.map +1 -1
  319. package/dist/server/http.js +90 -50
  320. package/dist/server/http.js.map +1 -1
  321. package/dist/server/idempotency.d.ts +0 -6
  322. package/dist/server/idempotency.d.ts.map +1 -1
  323. package/dist/server/idempotency.js.map +1 -1
  324. package/dist/server/router.d.ts.map +1 -1
  325. package/dist/server/router.js +21 -4
  326. package/dist/server/router.js.map +1 -1
  327. package/dist/server/routes/agent-capability-gate.d.ts +40 -0
  328. package/dist/server/routes/agent-capability-gate.d.ts.map +1 -0
  329. package/dist/server/routes/agent-capability-gate.js +182 -0
  330. package/dist/server/routes/agent-capability-gate.js.map +1 -0
  331. package/dist/server/routes/agent-events.d.ts.map +1 -1
  332. package/dist/server/routes/agent-events.js +8 -1
  333. package/dist/server/routes/agent-events.js.map +1 -1
  334. package/dist/server/routes/agent-intake.d.ts.map +1 -1
  335. package/dist/server/routes/agent-intake.js +10 -2
  336. package/dist/server/routes/agent-intake.js.map +1 -1
  337. package/dist/server/routes/agent-promotions.d.ts.map +1 -1
  338. package/dist/server/routes/agent-promotions.js +5 -2
  339. package/dist/server/routes/agent-promotions.js.map +1 -1
  340. package/dist/server/routes/agent-runs.d.ts.map +1 -1
  341. package/dist/server/routes/agent-runs.js +18 -4
  342. package/dist/server/routes/agent-runs.js.map +1 -1
  343. package/dist/server/routes/request-binding.d.ts +5 -0
  344. package/dist/server/routes/request-binding.d.ts.map +1 -0
  345. package/dist/server/routes/request-binding.js +49 -0
  346. package/dist/server/routes/request-binding.js.map +1 -0
  347. package/dist/server/routes/task5-support.d.ts +1 -8
  348. package/dist/server/routes/task5-support.d.ts.map +1 -1
  349. package/dist/server/routes/task5-support.js +1 -17
  350. package/dist/server/routes/task5-support.js.map +1 -1
  351. package/dist/server/routes/task5.d.ts.map +1 -1
  352. package/dist/server/routes/task5.js +106 -36
  353. package/dist/server/routes/task5.js.map +1 -1
  354. package/dist/server/write-queue.js +2 -2
  355. package/dist/server/write-queue.js.map +1 -1
  356. package/dist/setup/claude-config.d.ts +2 -1
  357. package/dist/setup/claude-config.d.ts.map +1 -1
  358. package/dist/setup/claude-config.js +54 -4
  359. package/dist/setup/claude-config.js.map +1 -1
  360. package/dist/setup/client-detection.d.ts +7 -2
  361. package/dist/setup/client-detection.d.ts.map +1 -1
  362. package/dist/setup/client-detection.js +27 -9
  363. package/dist/setup/client-detection.js.map +1 -1
  364. package/dist/setup/hermes-config.d.ts +2 -1
  365. package/dist/setup/hermes-config.d.ts.map +1 -1
  366. package/dist/setup/hermes-config.js +53 -12
  367. package/dist/setup/hermes-config.js.map +1 -1
  368. package/dist/setup/legacy-client-cleanup.d.ts +6 -0
  369. package/dist/setup/legacy-client-cleanup.d.ts.map +1 -0
  370. package/dist/setup/legacy-client-cleanup.js +152 -0
  371. package/dist/setup/legacy-client-cleanup.js.map +1 -0
  372. package/dist/setup/managed-text.d.ts.map +1 -1
  373. package/dist/setup/managed-text.js +11 -1
  374. package/dist/setup/managed-text.js.map +1 -1
  375. package/dist/setup/opencode-config.d.ts +2 -1
  376. package/dist/setup/opencode-config.d.ts.map +1 -1
  377. package/dist/setup/opencode-config.js +57 -5
  378. package/dist/setup/opencode-config.js.map +1 -1
  379. package/dist/setup/render.d.ts +2 -1
  380. package/dist/setup/render.d.ts.map +1 -1
  381. package/dist/setup/render.js +91 -17
  382. package/dist/setup/render.js.map +1 -1
  383. package/dist/setup/standard-skills.d.ts +16 -2
  384. package/dist/setup/standard-skills.d.ts.map +1 -1
  385. package/dist/setup/standard-skills.js +37 -13
  386. package/dist/setup/standard-skills.js.map +1 -1
  387. package/dist/setup/strict-json.d.ts +7 -0
  388. package/dist/setup/strict-json.d.ts.map +1 -0
  389. package/dist/setup/strict-json.js +98 -0
  390. package/dist/setup/strict-json.js.map +1 -0
  391. package/dist/setup/strict-toml.d.ts +7 -0
  392. package/dist/setup/strict-toml.d.ts.map +1 -0
  393. package/dist/setup/strict-toml.js +470 -0
  394. package/dist/setup/strict-toml.js.map +1 -0
  395. package/dist/skills/cache.d.ts +15 -0
  396. package/dist/skills/cache.d.ts.map +1 -0
  397. package/dist/skills/cache.js +19 -0
  398. package/dist/skills/cache.js.map +1 -0
  399. package/dist/skills/candidate-ranking.d.ts +15 -0
  400. package/dist/skills/candidate-ranking.d.ts.map +1 -0
  401. package/dist/skills/candidate-ranking.js +52 -0
  402. package/dist/skills/candidate-ranking.js.map +1 -0
  403. package/dist/skills/chunking.d.ts +11 -0
  404. package/dist/skills/chunking.d.ts.map +1 -0
  405. package/dist/skills/chunking.js +291 -0
  406. package/dist/skills/chunking.js.map +1 -0
  407. package/dist/skills/config.d.ts +19 -0
  408. package/dist/skills/config.d.ts.map +1 -0
  409. package/dist/skills/config.js +103 -0
  410. package/dist/skills/config.js.map +1 -0
  411. package/dist/skills/discovery-service.d.ts +26 -0
  412. package/dist/skills/discovery-service.d.ts.map +1 -0
  413. package/dist/skills/discovery-service.js +921 -0
  414. package/dist/skills/discovery-service.js.map +1 -0
  415. package/dist/skills/external-transport.d.ts +2 -0
  416. package/dist/skills/external-transport.d.ts.map +1 -0
  417. package/dist/skills/external-transport.js +30 -0
  418. package/dist/skills/external-transport.js.map +1 -0
  419. package/dist/skills/find.d.ts +16 -0
  420. package/dist/skills/find.d.ts.map +1 -0
  421. package/dist/skills/find.js +58 -0
  422. package/dist/skills/find.js.map +1 -0
  423. package/dist/skills/gap-detection.d.ts +23 -0
  424. package/dist/skills/gap-detection.d.ts.map +1 -0
  425. package/dist/skills/gap-detection.js +62 -0
  426. package/dist/skills/gap-detection.js.map +1 -0
  427. package/dist/skills/import-preparation.d.ts +4 -0
  428. package/dist/skills/import-preparation.d.ts.map +1 -0
  429. package/dist/skills/import-preparation.js +20 -0
  430. package/dist/skills/import-preparation.js.map +1 -0
  431. package/dist/skills/materialization-authority.d.ts +11 -0
  432. package/dist/skills/materialization-authority.d.ts.map +1 -0
  433. package/dist/skills/materialization-authority.js +92 -0
  434. package/dist/skills/materialization-authority.js.map +1 -0
  435. package/dist/skills/materialization-service.d.ts +22 -0
  436. package/dist/skills/materialization-service.d.ts.map +1 -0
  437. package/dist/skills/materialization-service.js +101 -0
  438. package/dist/skills/materialization-service.js.map +1 -0
  439. package/dist/skills/official-catalog.d.ts +31 -0
  440. package/dist/skills/official-catalog.d.ts.map +1 -0
  441. package/dist/skills/official-catalog.js +110 -0
  442. package/dist/skills/official-catalog.js.map +1 -0
  443. package/dist/skills/providers/schema.d.ts +30 -0
  444. package/dist/skills/providers/schema.d.ts.map +1 -0
  445. package/dist/skills/providers/schema.js +354 -0
  446. package/dist/skills/providers/schema.js.map +1 -0
  447. package/dist/skills/providers/skills-sh-compat.d.ts +17 -0
  448. package/dist/skills/providers/skills-sh-compat.d.ts.map +1 -0
  449. package/dist/skills/providers/skills-sh-compat.js +71 -0
  450. package/dist/skills/providers/skills-sh-compat.js.map +1 -0
  451. package/dist/skills/providers/skills-sh-v1.d.ts +23 -0
  452. package/dist/skills/providers/skills-sh-v1.d.ts.map +1 -0
  453. package/dist/skills/providers/skills-sh-v1.js +134 -0
  454. package/dist/skills/providers/skills-sh-v1.js.map +1 -0
  455. package/dist/skills/query-builder.d.ts +18 -0
  456. package/dist/skills/query-builder.d.ts.map +1 -0
  457. package/dist/skills/query-builder.js +93 -0
  458. package/dist/skills/query-builder.js.map +1 -0
  459. package/dist/skills/source/errors.d.ts +9 -0
  460. package/dist/skills/source/errors.d.ts.map +1 -0
  461. package/dist/skills/source/errors.js +15 -0
  462. package/dist/skills/source/errors.js.map +1 -0
  463. package/dist/skills/source/frontmatter.d.ts +9 -0
  464. package/dist/skills/source/frontmatter.d.ts.map +1 -0
  465. package/dist/skills/source/frontmatter.js +77 -0
  466. package/dist/skills/source/frontmatter.js.map +1 -0
  467. package/dist/skills/source/github-fetcher.d.ts +20 -0
  468. package/dist/skills/source/github-fetcher.d.ts.map +1 -0
  469. package/dist/skills/source/github-fetcher.js +292 -0
  470. package/dist/skills/source/github-fetcher.js.map +1 -0
  471. package/dist/skills/source/snapshot-validator.d.ts +28 -0
  472. package/dist/skills/source/snapshot-validator.d.ts.map +1 -0
  473. package/dist/skills/source/snapshot-validator.js +186 -0
  474. package/dist/skills/source/snapshot-validator.js.map +1 -0
  475. package/dist/skills/store.d.ts +181 -0
  476. package/dist/skills/store.d.ts.map +1 -0
  477. package/dist/skills/store.js +1710 -0
  478. package/dist/skills/store.js.map +1 -0
  479. package/dist/skills/types.d.ts +169 -0
  480. package/dist/skills/types.d.ts.map +1 -0
  481. package/dist/skills/types.js +2 -0
  482. package/dist/skills/types.js.map +1 -0
  483. package/dist/web/i18n.d.ts +56 -8
  484. package/dist/web/i18n.d.ts.map +1 -1
  485. package/dist/web/i18n.js +224 -32
  486. package/dist/web/i18n.js.map +1 -1
  487. package/dist/web/server.d.ts.map +1 -1
  488. package/dist/web/server.js +458 -42
  489. package/dist/web/server.js.map +1 -1
  490. package/dist/web/ui.d.ts +4 -0
  491. package/dist/web/ui.d.ts.map +1 -1
  492. package/dist/web/ui.js +697 -61
  493. package/dist/web/ui.js.map +1 -1
  494. package/migrations/008_federated_memory.sql +46 -0
  495. package/migrations/009_external_skill_discovery.sql +126 -0
  496. package/package.json +6 -3
  497. package/skills/kiokuko-single-purpose-functions/SKILL.md +288 -0
  498. package/skills/kiokuko-single-purpose-functions/references/kiokuko-patterns.md +344 -0
  499. package/skills/kiokuko-single-purpose-functions/references/review-checklist.md +97 -0
  500. package/skills/kiokuko-ui-design-soul/SKILL.md +1186 -28
  501. package/templates/AGENTS.md +8 -7
  502. package/dist/client/runtime-discovery.d.ts +0 -15
  503. package/dist/client/runtime-discovery.d.ts.map +0 -1
  504. package/dist/client/runtime-discovery.js +0 -45
  505. package/dist/client/runtime-discovery.js.map +0 -1
  506. package/dist/commands/call.d.ts +0 -7
  507. package/dist/commands/call.d.ts.map +0 -1
  508. package/dist/commands/call.js +0 -10
  509. package/dist/commands/call.js.map +0 -1
  510. package/dist/commands/link.d.ts +0 -6
  511. package/dist/commands/link.d.ts.map +0 -1
  512. package/dist/commands/link.js +0 -6
  513. package/dist/commands/link.js.map +0 -1
  514. package/dist/commands/promote.d.ts +0 -6
  515. package/dist/commands/promote.d.ts.map +0 -1
  516. package/dist/commands/promote.js +0 -6
  517. package/dist/commands/promote.js.map +0 -1
  518. package/dist/commands/read.d.ts +0 -6
  519. package/dist/commands/read.d.ts.map +0 -1
  520. package/dist/commands/read.js +0 -4
  521. package/dist/commands/read.js.map +0 -1
  522. package/dist/commands/recall.d.ts +0 -6
  523. package/dist/commands/recall.d.ts.map +0 -1
  524. package/dist/commands/recall.js +0 -4
  525. package/dist/commands/recall.js.map +0 -1
  526. package/dist/commands/record.d.ts +0 -6
  527. package/dist/commands/record.d.ts.map +0 -1
  528. package/dist/commands/record.js +0 -4
  529. package/dist/commands/record.js.map +0 -1
  530. package/dist/commands/search.d.ts +0 -6
  531. package/dist/commands/search.d.ts.map +0 -1
  532. package/dist/commands/search.js +0 -4
  533. package/dist/commands/search.js.map +0 -1
  534. package/dist/commands/supersede.d.ts +0 -6
  535. package/dist/commands/supersede.d.ts.map +0 -1
  536. package/dist/commands/supersede.js +0 -6
  537. package/dist/commands/supersede.js.map +0 -1
  538. package/dist/knowledge/sources.d.ts +0 -72
  539. package/dist/knowledge/sources.d.ts.map +0 -1
  540. package/dist/knowledge/sources.js +0 -388
  541. package/dist/knowledge/sources.js.map +0 -1
  542. package/dist/setup/opencode-evidence.d.ts +0 -37
  543. package/dist/setup/opencode-evidence.d.ts.map +0 -1
  544. package/dist/setup/opencode-evidence.js +0 -58
  545. package/dist/setup/opencode-evidence.js.map +0 -1
  546. package/dist/setup/opencode-loop-guard.d.ts +0 -9
  547. package/dist/setup/opencode-loop-guard.d.ts.map +0 -1
  548. package/dist/setup/opencode-loop-guard.js +0 -248
  549. package/dist/setup/opencode-loop-guard.js.map +0 -1
@@ -1,25 +1,36 @@
1
1
  import { DatabaseSync } from 'node:sqlite';
2
2
  import { dirname } from 'node:path';
3
- import { chmodSync, mkdirSync } from 'node:fs';
3
+ import { chmodSync, lstatSync, mkdirSync } from 'node:fs';
4
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);
5
+ import { withSqliteLockRetry } from './sqlite-retry.js';
6
+ import { KiokukoError } from '../errors.js';
7
+ export function databaseFileIdentity(filePath) {
8
+ const status = lstatSync(filePath, { bigint: true });
9
+ if (!status.isFile()) {
10
+ throw new KiokukoError('INTEGRITY_ERROR', 'SQLite database path is not a regular non-symbolic-link file');
11
+ }
12
+ return Object.freeze({ device: status.dev, inode: status.ino });
8
13
  }
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
- }
14
+ export function sameDatabaseFileIdentity(left, right) {
15
+ return left.device === right.device && left.inode === right.inode;
16
+ }
17
+ export function requireDatabaseFileIdentity(filePath, expected) {
18
+ let actual;
19
+ try {
20
+ actual = databaseFileIdentity(filePath);
21
+ }
22
+ catch (error) {
23
+ const failure = new KiokukoError('CONFLICT', 'SQLite database file identity changed during initialization');
24
+ Object.defineProperty(failure, 'cause', { value: error });
25
+ throw failure;
26
+ }
27
+ if (!sameDatabaseFileIdentity(actual, expected)) {
28
+ throw new KiokukoError('CONFLICT', 'SQLite database file identity changed during initialization');
21
29
  }
22
30
  }
31
+ function configureJournalMode(database) {
32
+ withSqliteLockRetry(() => database.exec('PRAGMA journal_mode = WAL;'));
33
+ }
23
34
  export function openConnection(filePath, options = {}) {
24
35
  if (filePath !== ':memory:') {
25
36
  mkdirSync(dirname(filePath), { recursive: true, mode: 0o700 });
@@ -29,16 +40,34 @@ export function openConnection(filePath, options = {}) {
29
40
  timeout: 5000,
30
41
  ...(options.readOnly === undefined ? {} : { readOnly: options.readOnly }),
31
42
  });
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
- if (!options.readOnly) {
39
- configureJournalMode(database);
40
- database.exec('PRAGMA synchronous = NORMAL;');
43
+ try {
44
+ if (options.expectedFileIdentity !== undefined) {
45
+ if (filePath === ':memory:') {
46
+ throw new KiokukoError('VALIDATION_ERROR', 'An in-memory database cannot have a file identity');
47
+ }
48
+ // This check deliberately precedes chmod and every writable PRAGMA.
49
+ requireDatabaseFileIdentity(filePath, options.expectedFileIdentity);
50
+ }
51
+ if (filePath !== ':memory:' && !options.readOnly)
52
+ chmodSync(filePath, 0o600);
53
+ database.exec(`
54
+ PRAGMA foreign_keys = ON;
55
+ PRAGMA busy_timeout = 5000;
56
+ `);
57
+ if (!options.readOnly) {
58
+ configureJournalMode(database);
59
+ database.exec('PRAGMA synchronous = NORMAL;');
60
+ }
61
+ return new NodeSqliteAdapter(filePath, database);
62
+ }
63
+ catch (error) {
64
+ try {
65
+ database.close();
66
+ }
67
+ catch (closeError) {
68
+ throw new AggregateError([error, closeError], 'SQLite connection initialization failed and closing it also failed');
69
+ }
70
+ throw error;
41
71
  }
42
- return new NodeSqliteAdapter(filePath, database);
43
72
  }
44
73
  //# sourceMappingURL=connection.js.map
@@ -1 +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,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,34 @@ export interface MigrationResult {
4
4
  currentVersion: number;
5
5
  }
6
6
  export interface MigrationPlan {
7
- applied: number[];
8
- pending: number[];
9
- databaseVersion: number;
10
- currentVersion: number;
7
+ readonly applied: readonly number[];
8
+ readonly pending: readonly number[];
9
+ readonly databaseVersion: number;
10
+ readonly currentVersion: number;
11
+ readonly migrations: readonly MigrationSource[];
12
+ }
13
+ export interface MigrationIdentity {
14
+ readonly version: number;
15
+ readonly name: string;
16
+ }
17
+ export interface MigrationSource extends MigrationIdentity {
18
+ readonly checksum: string;
19
+ readonly sql: string;
20
+ }
21
+ export interface MigrationSnapshot {
22
+ readonly migrations: readonly MigrationSource[];
23
+ }
24
+ export interface MigrationHooks {
25
+ /**
26
+ * Runs after a pending migration's SQL and before its schema marker is
27
+ * written. The hook is inside the same SQLite transaction as both steps.
28
+ */
29
+ readonly beforeMarkApplied?: (database: SqliteDatabase, migration: MigrationIdentity) => void;
11
30
  }
12
31
  export declare function defaultMigrationsDirectory(): string;
13
- export declare function inspectMigrationPlan(database: SqliteDatabase, directory?: string): MigrationPlan;
14
- export declare function migrateDatabase(database: SqliteDatabase, directory?: string): MigrationResult;
15
- export declare const migrate: typeof migrateDatabase;
32
+ export declare function loadMigrationSnapshot(directory?: string): MigrationSnapshot;
33
+ export declare function inspectMigrationSnapshot(database: SqliteDatabase, snapshot: MigrationSnapshot): MigrationPlan;
34
+ /** Apply an already-loaded migration snapshot inside a transaction owned by the caller. */
35
+ export declare function migrateDatabaseSnapshotInTransaction(database: SqliteDatabase, snapshot: MigrationSnapshot, hooks?: MigrationHooks): MigrationResult;
36
+ export declare function migrateDatabase(database: SqliteDatabase, directory?: string, hooks?: MigrationHooks): MigrationResult;
16
37
  //# sourceMappingURL=migrate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,cAAc,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAkBD,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAgGD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,SAA+B,GAAG,aAAa,CAEtH;AAiED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,SAA+B,GAAG,eAAe,CAkBnH;AAED,eAAO,MAAM,OAAO,wBAAkB,CAAC"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,cAAc,CAAC;AAG9D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC/F;AAkBD,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAED,wBAAgB,qBAAqB,CAAC,SAAS,SAA+B,GAAG,iBAAiB,CAsEjG;AAiGD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,iBAAiB,GAAG,aAAa,CAE7G;AA2DD,2FAA2F;AAC3F,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,GAAE,cAAmB,GACzB,eAAe,CAEjB;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EACxB,SAAS,SAA+B,EACxC,KAAK,GAAE,cAAmB,GACzB,eAAe,CASjB"}
@@ -2,29 +2,57 @@ import { createHash } from 'node:crypto';
2
2
  import { readFileSync, readdirSync } from 'node:fs';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import path from 'node:path';
5
+ import { TextDecoder } from 'node:util';
5
6
  import { KiokukoError } from '../errors.js';
6
- const MIGRATION_FILE = /^(\d+)_([a-z0-9_-]+)\.sql$/i;
7
- const LOCK_RETRY_LIMIT = 5;
7
+ import { canonicalizeEntryRevisionHashesInMigration } from '../memory/revisions.js';
8
+ import { withImmediateTransaction } from './transaction.js';
9
+ function applyBuiltInMigrationOperation(database, migration) {
10
+ if (migration.version === 9 && migration.name === '009_external_skill_discovery.sql') {
11
+ canonicalizeEntryRevisionHashesInMigration(database);
12
+ }
13
+ }
14
+ const MIGRATION_FILE = /^([0-9]{3})_([a-z0-9_-]+)\.sql$/;
15
+ const loadedMigrationSnapshots = new WeakSet();
16
+ const fatalUtf8Decoder = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true });
8
17
  export function defaultMigrationsDirectory() {
9
18
  return fileURLToPath(new URL('../../migrations/', import.meta.url));
10
19
  }
11
- function listMigrations(directory) {
20
+ export function loadMigrationSnapshot(directory = defaultMigrationsDirectory()) {
12
21
  const migrations = readdirSync(directory)
13
22
  .map((name) => {
14
23
  const match = MIGRATION_FILE.exec(name);
15
- if (!match)
24
+ if (!match) {
25
+ if (/\.sql$/iu.test(name)) {
26
+ throw new KiokukoError('INTEGRITY_ERROR', `Migration filename is not canonical: ${name}`, { name });
27
+ }
16
28
  return undefined;
29
+ }
17
30
  const version = Number(match[1]);
18
- const sql = readFileSync(path.join(directory, name), 'utf8');
31
+ const bytes = readFileSync(path.join(directory, name));
32
+ if (bytes.subarray(0, 3).equals(Buffer.from([0xEF, 0xBB, 0xBF]))) {
33
+ throw new KiokukoError('INTEGRITY_ERROR', `Migration file ${name} has a non-canonical UTF-8 BOM`);
34
+ }
35
+ let sql;
36
+ try {
37
+ sql = fatalUtf8Decoder.decode(bytes);
38
+ }
39
+ catch (error) {
40
+ const failure = new KiokukoError('INTEGRITY_ERROR', `Migration file ${name} is not valid UTF-8`);
41
+ Object.defineProperty(failure, 'cause', { value: error });
42
+ throw failure;
43
+ }
19
44
  return {
20
45
  version,
21
46
  name,
22
47
  sql,
23
- checksum: createHash('sha256').update(sql).digest('hex'),
48
+ checksum: createHash('sha256').update(bytes).digest('hex'),
24
49
  };
25
50
  })
26
51
  .filter((migration) => migration !== undefined)
27
52
  .sort((left, right) => left.version - right.version);
53
+ if (migrations.length === 0) {
54
+ throw new KiokukoError('INTEGRITY_ERROR', 'Migration directory contains no versioned migration files');
55
+ }
28
56
  const versions = new Set();
29
57
  for (const migration of migrations) {
30
58
  if (!Number.isSafeInteger(migration.version) || migration.version < 1) {
@@ -35,7 +63,23 @@ function listMigrations(directory) {
35
63
  }
36
64
  versions.add(migration.version);
37
65
  }
38
- return migrations;
66
+ for (const [index, migration] of migrations.entries()) {
67
+ const expectedVersion = index + 1;
68
+ if (migration.version !== expectedVersion) {
69
+ throw new KiokukoError('INTEGRITY_ERROR', `Migration files must form an exact contiguous sequence starting at version 1; expected ${expectedVersion} but found ${migration.version}`, { expectedVersion, actualVersion: migration.version, name: migration.name });
70
+ }
71
+ }
72
+ const snapshot = Object.freeze({
73
+ migrations: Object.freeze(migrations.map((migration) => Object.freeze(migration))),
74
+ });
75
+ loadedMigrationSnapshots.add(snapshot);
76
+ return snapshot;
77
+ }
78
+ function requireLoadedMigrationSnapshot(snapshot) {
79
+ if (!loadedMigrationSnapshots.has(snapshot)) {
80
+ throw new KiokukoError('INTEGRITY_ERROR', 'Migration snapshot was not produced by the validated snapshot loader');
81
+ }
82
+ return snapshot.migrations;
39
83
  }
40
84
  function hasMigrationTable(database) {
41
85
  return Boolean(database.prepare(`
@@ -53,16 +97,23 @@ function appliedMigrationRows(database) {
53
97
  ORDER BY version
54
98
  `).all();
55
99
  }
100
+ function appliedMigrationVersion(value) {
101
+ if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 1)
102
+ return value;
103
+ throw new KiokukoError('INTEGRITY_ERROR', 'Database migration history contains an invalid version');
104
+ }
56
105
  function migrationPlan(database, migrations) {
57
106
  const currentVersion = migrations.at(-1)?.version ?? 0;
58
107
  const byVersion = new Map(migrations.map((migration) => [migration.version, migration]));
59
108
  const rows = appliedMigrationRows(database);
60
109
  const applied = [];
110
+ const seenVersions = new Set();
61
111
  for (const row of rows) {
62
- const version = Number(row.version);
63
- if (!Number.isSafeInteger(version) || version < 1) {
64
- throw new KiokukoError('INTEGRITY_ERROR', 'Database migration history contains an invalid version');
112
+ const version = appliedMigrationVersion(row.version);
113
+ if (seenVersions.has(version)) {
114
+ throw new KiokukoError('INTEGRITY_ERROR', `Database migration history contains duplicate version ${version}`, { version });
65
115
  }
116
+ seenVersions.add(version);
66
117
  const migration = byVersion.get(version);
67
118
  if (!migration) {
68
119
  if (version > currentVersion) {
@@ -70,89 +121,56 @@ function migrationPlan(database, migrations) {
70
121
  }
71
122
  throw new KiokukoError('INTEGRITY_ERROR', `Database migration version ${version} is not supported by this Kiokuko binary`);
72
123
  }
124
+ if (typeof row.name !== 'string' || typeof row.checksum !== 'string') {
125
+ throw new KiokukoError('INTEGRITY_ERROR', `Database migration history contains invalid metadata for version ${version}`, { version });
126
+ }
73
127
  if (row.name !== migration.name || row.checksum !== migration.checksum) {
74
128
  throw new KiokukoError('INTEGRITY_ERROR', `Migration checksum mismatch for ${migration.name}`, { version: migration.version, name: migration.name });
75
129
  }
76
130
  applied.push(version);
77
131
  }
78
- const appliedSet = new Set(applied);
79
- let foundPending = false;
80
- for (const migration of migrations) {
81
- if (!appliedSet.has(migration.version))
82
- foundPending = true;
83
- else if (foundPending) {
132
+ for (const [index, version] of applied.entries()) {
133
+ const expectedVersion = index + 1;
134
+ if (version !== expectedVersion) {
84
135
  throw new KiokukoError('INTEGRITY_ERROR', 'Database migration history is not a contiguous prefix');
85
136
  }
86
137
  }
138
+ const appliedSet = new Set(applied);
87
139
  return {
88
- applied,
89
- pending: migrations.filter((migration) => !appliedSet.has(migration.version)).map((migration) => migration.version),
140
+ applied: Object.freeze(applied),
141
+ pending: Object.freeze(migrations.filter((migration) => !appliedSet.has(migration.version)).map((migration) => migration.version)),
90
142
  databaseVersion: applied.at(-1) ?? 0,
91
143
  currentVersion,
144
+ migrations,
92
145
  };
93
146
  }
94
- export function inspectMigrationPlan(database, directory = defaultMigrationsDirectory()) {
95
- return migrationPlan(database, listMigrations(directory));
147
+ export function inspectMigrationSnapshot(database, snapshot) {
148
+ return migrationPlan(database, requireLoadedMigrationSnapshot(snapshot));
96
149
  }
97
- function isLockError(error) {
98
- return error instanceof Error && /database is locked|database table is locked|busy/i.test(error.message);
99
- }
100
- function waitForRetry(attempt) {
101
- const buffer = new Int32Array(new SharedArrayBuffer(4));
102
- Atomics.wait(buffer, 0, 0, attempt * 25);
103
- }
104
- function withLockRetry(operation) {
105
- for (let attempt = 1;; attempt += 1) {
106
- try {
107
- return operation();
108
- }
109
- catch (error) {
110
- if (!isLockError(error) || attempt >= LOCK_RETRY_LIMIT)
111
- throw error;
112
- waitForRetry(attempt);
150
+ function applyOneInTransaction(database, migration, migrations, hooks) {
151
+ // Revalidate while the caller's write lock is held. No other migrator can
152
+ // advance the history between this check, the SQL, the application hook,
153
+ // and the marker write.
154
+ migrationPlan(database, migrations);
155
+ const existing = database
156
+ .prepare('SELECT checksum FROM schema_migrations WHERE version = ?')
157
+ .get(migration.version);
158
+ if (existing) {
159
+ if (typeof existing.checksum !== 'string' || existing.checksum !== migration.checksum) {
160
+ throw new KiokukoError('INTEGRITY_ERROR', `Migration checksum mismatch for ${migration.name}`, { version: migration.version, name: migration.name });
113
161
  }
162
+ return false;
114
163
  }
164
+ database.exec(migration.sql);
165
+ applyBuiltInMigrationOperation(database, migration);
166
+ hooks.beforeMarkApplied?.(database, { version: migration.version, name: migration.name });
167
+ database
168
+ .prepare('INSERT INTO schema_migrations (version, name, checksum, applied_at) VALUES (?, ?, ?, ?)')
169
+ .run(migration.version, migration.name, migration.checksum, new Date().toISOString());
170
+ return true;
115
171
  }
116
- function rollback(database) {
117
- try {
118
- database.exec('ROLLBACK');
119
- }
120
- catch {
121
- // Preserve the original migration error.
122
- }
123
- }
124
- function applyOne(database, migration, migrations) {
125
- return withLockRetry(() => {
126
- database.exec('BEGIN IMMEDIATE');
127
- try {
128
- // Revalidate under the write lock so a newer binary cannot advance the
129
- // database between the read-only upgrade inspection and this write.
130
- migrationPlan(database, migrations);
131
- const existing = database
132
- .prepare('SELECT checksum FROM schema_migrations WHERE version = ?')
133
- .get(migration.version);
134
- if (existing) {
135
- if (existing.checksum !== migration.checksum) {
136
- throw new KiokukoError('INTEGRITY_ERROR', `Migration checksum mismatch for ${migration.name}`, { version: migration.version, name: migration.name });
137
- }
138
- database.exec('COMMIT');
139
- return false;
140
- }
141
- database.exec(migration.sql);
142
- database
143
- .prepare('INSERT INTO schema_migrations (version, name, checksum, applied_at) VALUES (?, ?, ?, ?)')
144
- .run(migration.version, migration.name, migration.checksum, new Date().toISOString());
145
- database.exec('COMMIT');
146
- return true;
147
- }
148
- catch (error) {
149
- rollback(database);
150
- throw error;
151
- }
152
- });
153
- }
154
- export function migrateDatabase(database, directory = defaultMigrationsDirectory()) {
155
- const migrations = listMigrations(directory);
172
+ function applyMigrationSetInTransaction(database, migrations, hooks) {
173
+ // Revalidate the database state after the writer transaction begins.
156
174
  migrationPlan(database, migrations);
157
175
  database.exec(`
158
176
  CREATE TABLE IF NOT EXISTS schema_migrations (
@@ -164,11 +182,21 @@ export function migrateDatabase(database, directory = defaultMigrationsDirectory
164
182
  `);
165
183
  const applied = [];
166
184
  for (const migration of migrations) {
167
- if (applyOne(database, migration, migrations))
185
+ if (applyOneInTransaction(database, migration, migrations, hooks))
168
186
  applied.push(migration.version);
169
187
  }
170
188
  const currentVersion = migrations.at(-1)?.version ?? 0;
171
189
  return { applied, currentVersion };
172
190
  }
173
- export const migrate = migrateDatabase;
191
+ /** Apply an already-loaded migration snapshot inside a transaction owned by the caller. */
192
+ export function migrateDatabaseSnapshotInTransaction(database, snapshot, hooks = {}) {
193
+ return applyMigrationSetInTransaction(database, requireLoadedMigrationSnapshot(snapshot), hooks);
194
+ }
195
+ export function migrateDatabase(database, directory = defaultMigrationsDirectory(), hooks = {}) {
196
+ const migrations = loadMigrationSnapshot(directory).migrations;
197
+ // Fail on unsupported history before beginning a write transaction, then
198
+ // repeat the check under the lock in applyMigrationSetInTransaction.
199
+ migrationPlan(database, migrations);
200
+ return withImmediateTransaction(database, () => applyMigrationSetInTransaction(database, migrations, hooks));
201
+ }
174
202
  //# sourceMappingURL=migrate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /** Match only node:sqlite errors whose SQLite primary result code is BUSY or LOCKED. */
2
+ export declare function isSqliteLockError(error: unknown): boolean;
3
+ /** Match only native node:sqlite operational failures discovery may safely report as bounded degradation. */
4
+ export declare function isSqliteOperationalError(error: unknown): boolean;
5
+ /** Match database bytes that SQLite itself reports as corrupt or not a database. */
6
+ export declare function isSqliteCorruptionError(error: unknown): boolean;
7
+ /** Match one exact PRIMARY KEY/UNIQUE target; trigger text cannot spoof this check. */
8
+ export declare function isSqliteUniqueConstraintError(error: unknown, targets: readonly string[]): boolean;
9
+ /** Retry a synchronous operation at most five total attempts, and only for SQLite BUSY/LOCKED. */
10
+ export declare function withSqliteLockRetry<T>(operation: () => T): T;
11
+ //# sourceMappingURL=sqlite-retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-retry.d.ts","sourceRoot":"","sources":["../../src/db/sqlite-retry.ts"],"names":[],"mappings":"AAuBA,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKzD;AAED,6GAA6G;AAC7G,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGhE;AAED,oFAAoF;AACpF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK/D;AAED,uFAAuF;AACvF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAIjG;AAOD,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAS5D"}
@@ -0,0 +1,66 @@
1
+ const LOCK_ATTEMPT_LIMIT = 5;
2
+ const SQLITE_BUSY = 5;
3
+ const SQLITE_LOCKED = 6;
4
+ const SQLITE_CORRUPT = 11;
5
+ const SQLITE_NOTADB = 26;
6
+ const SQLITE_CONSTRAINT_PRIMARYKEY = 1555;
7
+ const SQLITE_CONSTRAINT_UNIQUE = 2067;
8
+ const SQLITE_OPERATIONAL_CODES = new Set([SQLITE_BUSY, SQLITE_LOCKED, 8, 10, 13, 14]);
9
+ function sqliteErrorCode(error) {
10
+ if (!(error instanceof Error))
11
+ return undefined;
12
+ const sqliteError = error;
13
+ if (sqliteError.code !== 'ERR_SQLITE_ERROR'
14
+ || typeof sqliteError.errcode !== 'number'
15
+ || !Number.isSafeInteger(sqliteError.errcode)
16
+ || sqliteError.errcode < 0) {
17
+ return undefined;
18
+ }
19
+ return sqliteError.errcode;
20
+ }
21
+ /** Match only node:sqlite errors whose SQLite primary result code is BUSY or LOCKED. */
22
+ export function isSqliteLockError(error) {
23
+ const code = sqliteErrorCode(error);
24
+ if (code === undefined)
25
+ return false;
26
+ const primaryResultCode = code & 0xff;
27
+ return primaryResultCode === SQLITE_BUSY || primaryResultCode === SQLITE_LOCKED;
28
+ }
29
+ /** Match only native node:sqlite operational failures discovery may safely report as bounded degradation. */
30
+ export function isSqliteOperationalError(error) {
31
+ const code = sqliteErrorCode(error);
32
+ return code !== undefined && SQLITE_OPERATIONAL_CODES.has(code & 0xff);
33
+ }
34
+ /** Match database bytes that SQLite itself reports as corrupt or not a database. */
35
+ export function isSqliteCorruptionError(error) {
36
+ const code = sqliteErrorCode(error);
37
+ if (code === undefined)
38
+ return false;
39
+ const primaryResultCode = code & 0xff;
40
+ return primaryResultCode === SQLITE_CORRUPT || primaryResultCode === SQLITE_NOTADB;
41
+ }
42
+ /** Match one exact PRIMARY KEY/UNIQUE target; trigger text cannot spoof this check. */
43
+ export function isSqliteUniqueConstraintError(error, targets) {
44
+ const code = sqliteErrorCode(error);
45
+ if (code !== SQLITE_CONSTRAINT_PRIMARYKEY && code !== SQLITE_CONSTRAINT_UNIQUE)
46
+ return false;
47
+ return error instanceof Error && targets.some((target) => error.message === `UNIQUE constraint failed: ${target}`);
48
+ }
49
+ function waitForRetry(attempt) {
50
+ const buffer = new Int32Array(new SharedArrayBuffer(4));
51
+ Atomics.wait(buffer, 0, 0, attempt * 25);
52
+ }
53
+ /** Retry a synchronous operation at most five total attempts, and only for SQLite BUSY/LOCKED. */
54
+ export function withSqliteLockRetry(operation) {
55
+ for (let attempt = 1;; attempt += 1) {
56
+ try {
57
+ return operation();
58
+ }
59
+ catch (error) {
60
+ if (!isSqliteLockError(error) || attempt >= LOCK_ATTEMPT_LIMIT)
61
+ throw error;
62
+ waitForRetry(attempt);
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=sqlite-retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-retry.js","sourceRoot":"","sources":["../../src/db/sqlite-retry.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAC1C,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAEtF,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,WAAW,GAAG,KAAsD,CAAC;IAC3E,IACE,WAAW,CAAC,IAAI,KAAK,kBAAkB;WACpC,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ;WACvC,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC;WAC1C,WAAW,CAAC,OAAO,GAAG,CAAC,EAC1B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC;IACtC,OAAO,iBAAiB,KAAK,WAAW,IAAI,iBAAiB,KAAK,aAAa,CAAC;AAClF,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,IAAI,KAAK,SAAS,IAAI,wBAAwB,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC;IACtC,OAAO,iBAAiB,KAAK,cAAc,IAAI,iBAAiB,KAAK,aAAa,CAAC;AACrF,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,6BAA6B,CAAC,KAAc,EAAE,OAA0B;IACtF,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,4BAA4B,IAAI,IAAI,KAAK,wBAAwB;QAAE,OAAO,KAAK,CAAC;IAC7F,OAAO,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,6BAA6B,MAAM,EAAE,CAAC,CAAC;AACrH,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,mBAAmB,CAAI,SAAkB;IACvD,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,SAAS,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,kBAAkB;gBAAE,MAAM,KAAK,CAAC;YAC5E,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,4 +1,17 @@
1
1
  import type { SqliteDatabase } from './adapter.js';
2
+ /**
3
+ * COMMIT threw and the subsequent ROLLBACK also threw. The caller must treat
4
+ * the transaction as possibly committed: compensating durable side effects
5
+ * could otherwise turn an uncertain outcome into split-brain state.
6
+ */
7
+ export declare class TransactionCommitUncertainError extends AggregateError {
8
+ readonly commitError: unknown;
9
+ readonly rollbackError: unknown;
10
+ constructor(commitError: unknown, rollbackError: unknown);
11
+ }
12
+ export declare function rollbackFailedTransaction(database: SqliteDatabase, operationError: unknown): never;
2
13
  /** Run a synchronous write transaction with bounded retry for SQLite lock errors only. */
3
14
  export declare function withImmediateTransaction<T>(database: SqliteDatabase, operation: () => T): T;
15
+ /** Run synchronous reads against one SQLite snapshot without reserving a writer lock. */
16
+ export declare function withDeferredReadTransaction<T>(database: SqliteDatabase, operation: () => T): T;
4
17
  //# sourceMappingURL=transaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/db/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAqBnD,0FAA0F;AAC1F,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAiB3F"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/db/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD;;;;GAIG;AACH,qBAAa,+BAAgC,SAAQ,cAAc;IACjE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;gBAEpB,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO;CASzD;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,GAAG,KAAK,CAUlG;AAeD,0FAA0F;AAC1F,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAY3F;AAED,yFAAyF;AACzF,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAU9F"}