@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,321 @@
1
+ import { KiokukoError } from '../errors.js';
2
+ import { COVERAGE_LEVELS, LEDGER_EVENT_TYPES, RUN_STATUSES, } from './types.js';
3
+ const DEFAULT_LIMIT = 100;
4
+ const MAX_LIMIT = 100;
5
+ const RUN_CURSOR_VERSION = 1;
6
+ function validation(message) {
7
+ throw new KiokukoError('VALIDATION_ERROR', message);
8
+ }
9
+ function notFound() {
10
+ throw new KiokukoError('NOT_FOUND', 'Ledger run not found');
11
+ }
12
+ function integrity() {
13
+ throw new KiokukoError('INTEGRITY_ERROR', 'Stored ledger JSON is invalid');
14
+ }
15
+ function isPlainObject(value) {
16
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
17
+ return false;
18
+ const prototype = Object.getPrototypeOf(value);
19
+ return prototype === Object.prototype || prototype === null;
20
+ }
21
+ function inputObject(value, label) {
22
+ if (!isPlainObject(value))
23
+ validation(`${label} must be an object`);
24
+ return value;
25
+ }
26
+ function rejectUnknownFields(value, fields, label) {
27
+ const allowed = new Set(fields);
28
+ if (Object.keys(value).some((field) => !allowed.has(field)))
29
+ validation(`Unknown ${label} field`);
30
+ }
31
+ function requiredString(value, label) {
32
+ if (typeof value !== 'string' || value.trim().length === 0 || value.includes('\u0000'))
33
+ validation(`${label} must be a non-empty string`);
34
+ return value;
35
+ }
36
+ function optionalString(value, label) {
37
+ if (value === undefined)
38
+ return undefined;
39
+ return requiredString(value, label);
40
+ }
41
+ function parseLimit(value) {
42
+ if (value === undefined)
43
+ return DEFAULT_LIMIT;
44
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1 || value > MAX_LIMIT) {
45
+ validation('limit must be an integer between 1 and 100');
46
+ }
47
+ return value;
48
+ }
49
+ function encodeRunCursor(cursor) {
50
+ return Buffer.from(JSON.stringify(cursor), 'utf8').toString('base64url');
51
+ }
52
+ function parseRunCursor(value) {
53
+ if (value === undefined)
54
+ return undefined;
55
+ if (!/^[A-Za-z0-9_-]+$/.test(value))
56
+ validation('Invalid run cursor');
57
+ let parsed;
58
+ try {
59
+ const decoded = Buffer.from(value, 'base64url');
60
+ if (decoded.toString('base64url') !== value)
61
+ validation('Invalid run cursor');
62
+ parsed = JSON.parse(decoded.toString('utf8'));
63
+ }
64
+ catch (error) {
65
+ if (error instanceof KiokukoError)
66
+ throw error;
67
+ if (error instanceof SyntaxError)
68
+ validation('Invalid run cursor');
69
+ throw error;
70
+ }
71
+ if (!isPlainObject(parsed) || Object.keys(parsed).length !== 3 || !Object.keys(parsed).every((key) => ['version', 'createdAt', 'runId'].includes(key))) {
72
+ validation('Invalid run cursor');
73
+ }
74
+ if (parsed.version !== RUN_CURSOR_VERSION)
75
+ validation('Unsupported run cursor version');
76
+ if (typeof parsed.createdAt !== 'string' || !isUtcTimestamp(parsed.createdAt) || typeof parsed.runId !== 'string' || parsed.runId.length === 0) {
77
+ validation('Invalid run cursor');
78
+ }
79
+ return { version: RUN_CURSOR_VERSION, createdAt: parsed.createdAt, runId: parsed.runId };
80
+ }
81
+ function isUtcTimestamp(value) {
82
+ if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(value))
83
+ return false;
84
+ const parsed = Date.parse(value);
85
+ return Number.isFinite(parsed) && new Date(parsed).toISOString() === value;
86
+ }
87
+ function parseStatus(value) {
88
+ if (value === undefined)
89
+ return undefined;
90
+ if (typeof value !== 'string' || !RUN_STATUSES.includes(value))
91
+ validation('status has an invalid enum value');
92
+ return value;
93
+ }
94
+ function parseAfter(value) {
95
+ if (value === undefined)
96
+ return 0;
97
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0)
98
+ validation('after must be a non-negative safe integer');
99
+ return value;
100
+ }
101
+ function parseEventType(value) {
102
+ if (value === undefined)
103
+ return undefined;
104
+ if (typeof value !== 'string' || !LEDGER_EVENT_TYPES.includes(value))
105
+ validation('type has an invalid event type');
106
+ return value;
107
+ }
108
+ const REDACTION_KINDS = [
109
+ 'sensitive_key', 'secret_pattern', 'url', 'home_path', 'preview_truncated',
110
+ 'environment_value', 'hidden_reasoning',
111
+ ];
112
+ function parseRedactions(value) {
113
+ const parsed = parseStoredJson(value);
114
+ if (!Array.isArray(parsed))
115
+ integrity();
116
+ const redactions = [];
117
+ for (const item of parsed) {
118
+ if (!isPlainObject(item) || typeof item.path !== 'string' || typeof item.kind !== 'string' || !REDACTION_KINDS.includes(item.kind))
119
+ integrity();
120
+ redactions.push({ path: item.path, kind: item.kind });
121
+ }
122
+ return redactions;
123
+ }
124
+ function rowToEvent(row) {
125
+ return {
126
+ eventId: row.event_id,
127
+ runId: row.run_id,
128
+ sequence: row.sequence,
129
+ sourceEventId: row.source_event_id,
130
+ sourceSequence: row.source_sequence,
131
+ eventType: row.event_type,
132
+ sourceType: row.source_type,
133
+ actor: row.actor,
134
+ outcome: row.outcome,
135
+ occurredAt: row.occurred_at,
136
+ ingestedAt: row.ingested_at,
137
+ payload: parseStoredJson(row.payload_json),
138
+ redaction: parseRedactions(row.redaction_json),
139
+ previousHash: row.previous_hash,
140
+ eventHash: row.event_hash,
141
+ untrusted: true,
142
+ };
143
+ }
144
+ function parseStoredJson(value) {
145
+ let parsed;
146
+ try {
147
+ parsed = JSON.parse(value);
148
+ }
149
+ catch (error) {
150
+ if (error instanceof SyntaxError)
151
+ integrity();
152
+ throw error;
153
+ }
154
+ if (!isJsonValue(parsed))
155
+ integrity();
156
+ return parsed;
157
+ }
158
+ function isJsonValue(value) {
159
+ if (value === null || typeof value === 'boolean' || typeof value === 'string')
160
+ return true;
161
+ if (typeof value === 'number')
162
+ return Number.isFinite(value);
163
+ if (Array.isArray(value))
164
+ return value.every((item) => isJsonValue(item));
165
+ if (isPlainObject(value))
166
+ return Object.values(value).every((item) => isJsonValue(item));
167
+ return false;
168
+ }
169
+ function parseJsonObject(value) {
170
+ const parsed = parseStoredJson(value);
171
+ if (!isPlainObject(parsed))
172
+ integrity();
173
+ return parsed;
174
+ }
175
+ function parseCoverage(value) {
176
+ const parsed = parseJsonObject(value);
177
+ const fields = ['run', 'tool', 'command', 'file', 'approval'];
178
+ const levels = fields.map((field) => parsed[field]);
179
+ if (levels.some((level) => typeof level !== 'string' || !COVERAGE_LEVELS.includes(level)))
180
+ integrity();
181
+ return {
182
+ run: parsed.run,
183
+ tool: parsed.tool,
184
+ command: parsed.command,
185
+ file: parsed.file,
186
+ approval: parsed.approval,
187
+ };
188
+ }
189
+ function rowToRun(row) {
190
+ return {
191
+ runId: row.run_id,
192
+ workspace: row.workspace,
193
+ client: {
194
+ kind: row.client_kind,
195
+ ...(row.client_version === null ? {} : { version: row.client_version }),
196
+ ...(row.source_session_id === null ? {} : { sessionId: row.source_session_id }),
197
+ },
198
+ protocolVersion: row.protocol_version,
199
+ captureProfile: row.capture_profile,
200
+ coverage: parseCoverage(row.coverage_json),
201
+ status: row.status,
202
+ title: row.title,
203
+ taskHash: row.task_hash,
204
+ metadata: parseJsonObject(row.metadata_json),
205
+ lastSequence: row.last_sequence,
206
+ lastSourceSequence: row.last_source_sequence,
207
+ startedAt: row.started_at,
208
+ endedAt: row.ended_at,
209
+ createdAt: row.created_at,
210
+ updatedAt: row.updated_at,
211
+ untrusted: true,
212
+ };
213
+ }
214
+ function parseListRunsInput(value) {
215
+ const input = inputObject(value, 'run list input');
216
+ rejectUnknownFields(input, ['workspace', 'client', 'status', 'cursor', 'limit'], 'run list input');
217
+ const workspace = requiredString(input.workspace, 'workspace');
218
+ const client = optionalString(input.client, 'client');
219
+ const status = parseStatus(input.status);
220
+ const cursor = parseRunCursor(optionalString(input.cursor, 'cursor'));
221
+ return {
222
+ workspace,
223
+ limit: parseLimit(input.limit),
224
+ ...(client === undefined ? {} : { client }),
225
+ ...(status === undefined ? {} : { status }),
226
+ ...(cursor === undefined ? {} : { cursor }),
227
+ };
228
+ }
229
+ function parseReadRunInput(value) {
230
+ const input = inputObject(value, 'run read input');
231
+ rejectUnknownFields(input, ['workspace', 'runId'], 'run read input');
232
+ return {
233
+ workspace: requiredString(input.workspace, 'workspace'),
234
+ runId: requiredString(input.runId, 'runId'),
235
+ };
236
+ }
237
+ function parseListEventsInput(value) {
238
+ const input = inputObject(value, 'event list input');
239
+ rejectUnknownFields(input, ['workspace', 'runId', 'after', 'type', 'limit'], 'event list input');
240
+ const type = parseEventType(input.type);
241
+ return {
242
+ workspace: requiredString(input.workspace, 'workspace'),
243
+ runId: requiredString(input.runId, 'runId'),
244
+ after: parseAfter(input.after),
245
+ limit: parseLimit(input.limit),
246
+ ...(type === undefined ? {} : { type }),
247
+ };
248
+ }
249
+ export function listLedgerEvents(database, input) {
250
+ const parsed = parseListEventsInput(input);
251
+ const run = database.prepare('SELECT run_id FROM ledger_runs WHERE run_id = ? AND workspace = ?').get(parsed.runId, parsed.workspace);
252
+ if (!run)
253
+ notFound();
254
+ const clauses = ['run_id = ?', 'sequence > ?'];
255
+ const parameters = [parsed.runId, parsed.after];
256
+ if (parsed.type !== undefined) {
257
+ clauses.push('event_type = ?');
258
+ parameters.push(parsed.type);
259
+ }
260
+ parameters.push(parsed.limit + 1);
261
+ const rows = database.prepare(`
262
+ SELECT event_id, run_id, sequence, source_event_id, source_sequence, event_type,
263
+ source_type, actor, outcome, occurred_at, ingested_at, payload_json,
264
+ redaction_json, previous_hash, event_hash
265
+ FROM ledger_events
266
+ WHERE ${clauses.join(' AND ')}
267
+ ORDER BY sequence ASC
268
+ LIMIT ?
269
+ `).all(...parameters);
270
+ const pageRows = rows.slice(0, parsed.limit);
271
+ const nextCursor = rows.length > parsed.limit ? pageRows.at(-1)?.sequence ?? null : null;
272
+ return { items: pageRows.map(rowToEvent), nextCursor };
273
+ }
274
+ export function readLedgerRun(database, input) {
275
+ const parsed = parseReadRunInput(input);
276
+ const row = database.prepare(`
277
+ SELECT run_id, workspace, client_kind, client_version, source_session_id,
278
+ protocol_version, capture_profile, coverage_json, status, title, task_hash,
279
+ metadata_json, last_sequence, last_source_sequence, started_at, ended_at,
280
+ created_at, updated_at
281
+ FROM ledger_runs
282
+ WHERE run_id = ? AND workspace = ?
283
+ `).get(parsed.runId, parsed.workspace);
284
+ if (!row)
285
+ notFound();
286
+ return rowToRun(row);
287
+ }
288
+ export function listLedgerRuns(database, input) {
289
+ const parsed = parseListRunsInput(input);
290
+ const clauses = ['workspace = ?'];
291
+ const parameters = [parsed.workspace];
292
+ if (parsed.client !== undefined) {
293
+ clauses.push('client_kind = ?');
294
+ parameters.push(parsed.client);
295
+ }
296
+ if (parsed.status !== undefined) {
297
+ clauses.push('status = ?');
298
+ parameters.push(parsed.status);
299
+ }
300
+ if (parsed.cursor !== undefined) {
301
+ clauses.push('(created_at < ? OR (created_at = ? AND run_id > ?))');
302
+ parameters.push(parsed.cursor.createdAt, parsed.cursor.createdAt, parsed.cursor.runId);
303
+ }
304
+ parameters.push(parsed.limit + 1);
305
+ const rows = database.prepare(`
306
+ SELECT run_id, workspace, client_kind, client_version, source_session_id,
307
+ protocol_version, capture_profile, coverage_json, status, title, task_hash,
308
+ metadata_json, last_sequence, last_source_sequence, started_at, ended_at,
309
+ created_at, updated_at
310
+ FROM ledger_runs
311
+ WHERE ${clauses.join(' AND ')}
312
+ ORDER BY created_at DESC, run_id ASC
313
+ LIMIT ?
314
+ `).all(...parameters);
315
+ const pageRows = rows.slice(0, parsed.limit);
316
+ const nextCursor = rows.length > parsed.limit
317
+ ? encodeRunCursor({ version: RUN_CURSOR_VERSION, createdAt: pageRows.at(-1)?.created_at ?? '', runId: pageRows.at(-1)?.run_id ?? '' })
318
+ : null;
319
+ return { items: pageRows.map(rowToRun), nextCursor };
320
+ }
321
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/ledger/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type AnswerInput, type LedgerEventInput, type ProfileHints, type SanitizationOptions, type Sanitized, type TaskInput } from './types.js';
2
+ import type { JsonValue } from './types.js';
3
+ export declare function sanitizeEvent(value: unknown, options?: SanitizationOptions): Sanitized<LedgerEventInput>;
4
+ export declare function sanitizeTask(value: unknown, options?: SanitizationOptions): Sanitized<TaskInput>;
5
+ export declare function sanitizeProfileHints(value: unknown, options?: SanitizationOptions): Sanitized<ProfileHints>;
6
+ export declare function sanitizeAnswer(value: unknown, options?: SanitizationOptions): Sanitized<AnswerInput>;
7
+ export declare function sanitizeRunMetadata(value: JsonValue, options?: SanitizationOptions): Sanitized<JsonValue>;
8
+ //# sourceMappingURL=redaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../src/ledger/redaction.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE3K,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAkB5C,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAM5G;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,SAAS,CAAC,SAAS,CAAC,CAEpG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,SAAS,CAAC,YAAY,CAAC,CAE/G;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,SAAS,CAAC,WAAW,CAAC,CAExG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,mBAAwB,GAAG,SAAS,CAAC,SAAS,CAAC,CAI7G"}
@@ -0,0 +1,40 @@
1
+ import { canonicalJson } from './hash.js';
2
+ import { validateAnswerInput, validateEventInput, validateProfileHints, validateTaskInput } from './validate.js';
3
+ import { MAX_EVENT_PAYLOAD_BYTES } from './types.js';
4
+ import { sanitizeJson } from '../security/sanitize.js';
5
+ import { KiokukoError } from '../errors.js';
6
+ function snapshotTooLarge(label) {
7
+ throw new KiokukoError('VALIDATION_ERROR', `sanitized ${label} exceeds ${MAX_EVENT_PAYLOAD_BYTES} bytes`);
8
+ }
9
+ function assertBounded(value, label) {
10
+ if (Buffer.byteLength(canonicalJson(value), 'utf8') > MAX_EVENT_PAYLOAD_BYTES)
11
+ snapshotTooLarge(label);
12
+ }
13
+ function withTypedValue(value, options, validator, label) {
14
+ const validated = validator(value);
15
+ const result = sanitizeJson(validated, options);
16
+ assertBounded(result.value, label);
17
+ return { value: result.value, redactions: result.redactions, truncated: result.truncated };
18
+ }
19
+ export function sanitizeEvent(value, options = {}) {
20
+ const validated = validateEventInput(value);
21
+ const result = sanitizeJson(validated, options);
22
+ const payload = result.value.payload;
23
+ assertBounded(payload, 'event payload');
24
+ return { value: result.value, redactions: result.redactions, truncated: result.truncated };
25
+ }
26
+ export function sanitizeTask(value, options = {}) {
27
+ return withTypedValue(value, options, validateTaskInput, 'task snapshot');
28
+ }
29
+ export function sanitizeProfileHints(value, options = {}) {
30
+ return withTypedValue(value, options, validateProfileHints, 'profile hints snapshot');
31
+ }
32
+ export function sanitizeAnswer(value, options = {}) {
33
+ return withTypedValue(value, options, validateAnswerInput, 'answer snapshot');
34
+ }
35
+ export function sanitizeRunMetadata(value, options = {}) {
36
+ const result = sanitizeJson(value, options);
37
+ assertBounded(result.value, 'run metadata');
38
+ return { value: result.value, redactions: result.redactions, truncated: result.truncated };
39
+ }
40
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/ledger/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAwH,MAAM,YAAY,CAAC;AAC3K,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,aAAa,KAAK,YAAY,uBAAuB,QAAQ,CAAC,CAAC;AAC5G,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa;IAClD,IAAI,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,uBAAuB;QAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACzG,CAAC;AAED,SAAS,cAAc,CAAI,KAAc,EAAE,OAA4B,EAAE,SAAgC,EAAE,KAAa;IACtH,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChD,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAqB,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,UAA+B,EAAE;IAC7E,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAI,MAAM,CAAC,KAAgC,CAAC,OAAO,CAAC;IACjE,aAAa,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACxC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAoC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AAC5H,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,UAA+B,EAAE;IAC5E,OAAO,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc,EAAE,UAA+B,EAAE;IACpF,OAAO,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,UAA+B,EAAE;IAC9E,OAAO,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAgB,EAAE,UAA+B,EAAE;IACrF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { SqliteDatabase, SqliteRow } from '../db/adapter.js';
2
+ import { type AppendAck, type LedgerStoreOptions, type RunRecord, type RunStatus } from './types.js';
3
+ interface EventRow extends SqliteRow {
4
+ event_id: string;
5
+ run_id: string;
6
+ sequence: number;
7
+ source_event_id: string | null;
8
+ source_sequence: number | null;
9
+ event_type: string;
10
+ source_type: string | null;
11
+ actor: string;
12
+ outcome: string | null;
13
+ occurred_at: string | null;
14
+ ingested_at: string;
15
+ payload_json: string;
16
+ redaction_json: string;
17
+ previous_hash: string;
18
+ event_hash: string;
19
+ }
20
+ export declare class LedgerStore {
21
+ private readonly database;
22
+ private readonly options;
23
+ constructor(database: SqliteDatabase, options?: LedgerStoreOptions);
24
+ /** Run a standalone operation in the store's top-level transaction. */
25
+ withTransaction<T>(operation: () => T): T;
26
+ createRun(input: unknown): RunRecord;
27
+ /** Caller-owned transaction primitive; it deliberately does not begin or commit a transaction. */
28
+ createRunInTransaction(input: unknown, now?: string): RunRecord;
29
+ readRun(runId: string, workspace?: string): RunRecord | undefined;
30
+ getRunStatus(runId: string, workspace?: string): RunStatus | undefined;
31
+ updateRunStatus(runId: string, status: RunStatus, endedAt?: string): RunRecord;
32
+ updateRunStatusInTransaction(runId: string, status: RunStatus, endedAt?: string): RunRecord;
33
+ appendBatch(runId: string, input: unknown): AppendAck;
34
+ /** Caller-owned transaction primitive; a savepoint isolates this batch without committing or rolling back the outer transaction. */
35
+ appendBatchInTransaction(runId: string, input: unknown): AppendAck;
36
+ readEvents(runId: string): EventRow[];
37
+ verifyChain(runId: string): boolean;
38
+ private now;
39
+ private prepareRun;
40
+ private insertPreparedRun;
41
+ private appendPreparedBatchInTransaction;
42
+ private ackFromRows;
43
+ }
44
+ export declare function withLedgerTransaction<T>(database: SqliteDatabase, operation: () => T): T;
45
+ export {};
46
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/ledger/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAOlE,OAAO,EAEL,KAAK,SAAS,EAKd,KAAK,kBAAkB,EAEvB,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,YAAY,CAAC;AAuBpB,UAAU,QAAS,SAAQ,SAAS;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAqHD,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAEhB,QAAQ,EAAE,cAAc,EAAE,OAAO,GAAE,kBAAuB;IAIvF,uEAAuE;IACvE,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC;IAIzC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS;IAKpC,kGAAkG;IAClG,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,SAAa,GAAG,SAAS;IAKnE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAOjE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAItE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAM9E,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,SAAa,GAAG,SAAS;IAiB/F,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS;IAKrD,oIAAoI;IACpI,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS;IAKlE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;IAIrC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IA4BnC,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,gCAAgC;IAyFxC,OAAO,CAAC,WAAW;CAUpB;AAMD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAExF"}