@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,324 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { withImmediateTransaction } from '../db/transaction.js';
3
+ import { KiokukoError } from '../errors.js';
4
+ import { canonicalJson, hashLedgerEvent, GENESIS_HASH } from './hash.js';
5
+ import { sanitizeEvent, sanitizeRunMetadata, sanitizeTask } from './redaction.js';
6
+ import { sanitizeJson } from '../security/sanitize.js';
7
+ import { validateEventBatch, validateRunInput, validateRunStatus, validateTimestamp } from './validate.js';
8
+ import { TERMINAL_RUN_STATUSES, } from './types.js';
9
+ function notFound(message) {
10
+ throw new KiokukoError('NOT_FOUND', message);
11
+ }
12
+ function conflict(message) {
13
+ throw new KiokukoError('CONFLICT', message);
14
+ }
15
+ function parseJson(value) {
16
+ return JSON.parse(value);
17
+ }
18
+ function sameOptional(left, right) {
19
+ return (left ?? null) === (right ?? null);
20
+ }
21
+ function withBatchSavepoint(database, operation) {
22
+ const savepoint = `kiokuko_ledger_batch_${randomUUID().replaceAll('-', '')}`;
23
+ database.exec(`SAVEPOINT ${savepoint}`);
24
+ try {
25
+ const result = operation();
26
+ database.exec(`RELEASE SAVEPOINT ${savepoint}`);
27
+ return result;
28
+ }
29
+ catch (error) {
30
+ try {
31
+ database.exec(`ROLLBACK TO SAVEPOINT ${savepoint}`);
32
+ database.exec(`RELEASE SAVEPOINT ${savepoint}`);
33
+ }
34
+ catch {
35
+ // Preserve the original batch failure.
36
+ }
37
+ throw error;
38
+ }
39
+ }
40
+ function eventFingerprint(event, redaction) {
41
+ return canonicalJson({
42
+ sourceEventId: event.sourceEventId ?? null,
43
+ sourceSequence: event.sourceSequence ?? null,
44
+ eventType: event.eventType,
45
+ sourceType: event.sourceType ?? null,
46
+ actor: event.actor,
47
+ outcome: event.outcome ?? null,
48
+ occurredAt: event.occurredAt ?? null,
49
+ payload: event.payload,
50
+ redaction,
51
+ });
52
+ }
53
+ function rowFingerprint(row) {
54
+ return eventFingerprint({
55
+ ...(row.source_event_id === null ? {} : { sourceEventId: row.source_event_id }),
56
+ ...(row.source_sequence === null ? {} : { sourceSequence: row.source_sequence }),
57
+ eventType: row.event_type,
58
+ ...(row.source_type === null ? {} : { sourceType: row.source_type }),
59
+ actor: row.actor,
60
+ outcome: row.outcome,
61
+ ...(row.occurred_at === null ? {} : { occurredAt: row.occurred_at }),
62
+ payload: parseJson(row.payload_json),
63
+ }, parseJson(row.redaction_json));
64
+ }
65
+ function preparedEvents(events, options) {
66
+ const prepared = events.map((input) => {
67
+ const sanitized = sanitizeEvent(input, options);
68
+ const sanitizedInput = sanitized.value;
69
+ return {
70
+ input: sanitizedInput,
71
+ sanitized,
72
+ eventId: sanitizedInput.eventId ?? randomUUID(),
73
+ fingerprint: eventFingerprint(sanitizedInput, sanitized.redactions),
74
+ };
75
+ });
76
+ const sourceIds = new Set();
77
+ const eventIds = new Set();
78
+ for (const event of prepared) {
79
+ if (event.input.sourceEventId && sourceIds.has(event.input.sourceEventId))
80
+ conflict('duplicate source event ID in batch');
81
+ if (event.input.sourceEventId)
82
+ sourceIds.add(event.input.sourceEventId);
83
+ if (eventIds.has(event.eventId))
84
+ conflict('duplicate event ID in batch');
85
+ eventIds.add(event.eventId);
86
+ }
87
+ return prepared;
88
+ }
89
+ function rowToRun(row) {
90
+ return {
91
+ runId: row.run_id,
92
+ workspace: row.workspace,
93
+ client: {
94
+ kind: row.client_kind,
95
+ ...(row.client_version === null ? {} : { version: row.client_version }),
96
+ ...(row.source_session_id === null ? {} : { sessionId: row.source_session_id }),
97
+ },
98
+ protocolVersion: row.protocol_version,
99
+ captureProfile: row.capture_profile,
100
+ coverage: parseJson(row.coverage_json),
101
+ status: row.status,
102
+ title: row.title,
103
+ taskHash: row.task_hash,
104
+ metadata: parseJson(row.metadata_json),
105
+ lastSequence: row.last_sequence,
106
+ lastSourceSequence: row.last_source_sequence,
107
+ startedAt: row.started_at,
108
+ endedAt: row.ended_at,
109
+ createdAt: row.created_at,
110
+ updatedAt: row.updated_at,
111
+ };
112
+ }
113
+ export class LedgerStore {
114
+ database;
115
+ options;
116
+ constructor(database, options = {}) {
117
+ this.database = database;
118
+ this.options = options;
119
+ }
120
+ /** Run a standalone operation in the store's top-level transaction. */
121
+ withTransaction(operation) {
122
+ return withImmediateTransaction(this.database, operation);
123
+ }
124
+ createRun(input) {
125
+ const prepared = this.prepareRun(input);
126
+ return withImmediateTransaction(this.database, () => this.insertPreparedRun(prepared));
127
+ }
128
+ /** Caller-owned transaction primitive; it deliberately does not begin or commit a transaction. */
129
+ createRunInTransaction(input, now = this.now()) {
130
+ const prepared = this.prepareRun(input, now);
131
+ return this.insertPreparedRun(prepared);
132
+ }
133
+ readRun(runId, workspace) {
134
+ const row = workspace === undefined
135
+ ? this.database.prepare('SELECT * FROM ledger_runs WHERE run_id = ?').get(runId)
136
+ : this.database.prepare('SELECT * FROM ledger_runs WHERE run_id = ? AND workspace = ?').get(runId, workspace);
137
+ return row ? rowToRun(row) : undefined;
138
+ }
139
+ getRunStatus(runId, workspace) {
140
+ return this.readRun(runId, workspace)?.status;
141
+ }
142
+ updateRunStatus(runId, status, endedAt) {
143
+ const validatedStatus = validateRunStatus(status);
144
+ const timestamp = validateTimestamp(endedAt ?? this.now(), 'endedAt');
145
+ return withImmediateTransaction(this.database, () => this.updateRunStatusInTransaction(runId, validatedStatus, timestamp));
146
+ }
147
+ updateRunStatusInTransaction(runId, status, endedAt = this.now()) {
148
+ const validatedStatus = validateRunStatus(status);
149
+ const timestamp = validateTimestamp(endedAt, 'endedAt');
150
+ const current = this.database.prepare('SELECT * FROM ledger_runs WHERE run_id = ?').get(runId);
151
+ if (!current)
152
+ notFound('Ledger run not found');
153
+ if (TERMINAL_RUN_STATUSES.includes(current.status) && current.status !== validatedStatus)
154
+ conflict('Terminal ledger run cannot change status');
155
+ this.database.prepare('UPDATE ledger_runs SET status = ?, ended_at = ?, updated_at = ? WHERE run_id = ?').run(validatedStatus, TERMINAL_RUN_STATUSES.includes(validatedStatus) ? timestamp : null, timestamp, runId);
156
+ const updated = this.database.prepare('SELECT * FROM ledger_runs WHERE run_id = ?').get(runId);
157
+ if (!updated)
158
+ notFound('Ledger run not found');
159
+ return rowToRun(updated);
160
+ }
161
+ appendBatch(runId, input) {
162
+ const events = preparedEvents(validateEventBatch(input), this.options);
163
+ return withImmediateTransaction(this.database, () => this.appendPreparedBatchInTransaction(runId, events));
164
+ }
165
+ /** Caller-owned transaction primitive; a savepoint isolates this batch without committing or rolling back the outer transaction. */
166
+ appendBatchInTransaction(runId, input) {
167
+ const events = preparedEvents(validateEventBatch(input), this.options);
168
+ return withBatchSavepoint(this.database, () => this.appendPreparedBatchInTransaction(runId, events));
169
+ }
170
+ readEvents(runId) {
171
+ return this.database.prepare('SELECT * FROM ledger_events WHERE run_id = ? ORDER BY sequence').all(runId);
172
+ }
173
+ verifyChain(runId) {
174
+ let previous = GENESIS_HASH;
175
+ const rows = this.readEvents(runId);
176
+ for (let index = 0; index < rows.length; index += 1) {
177
+ const row = rows[index];
178
+ if (!row || row.sequence !== index + 1 || row.previous_hash !== previous)
179
+ return false;
180
+ const calculated = hashLedgerEvent({
181
+ runId,
182
+ sequence: row.sequence,
183
+ eventId: row.event_id,
184
+ previousHash: row.previous_hash,
185
+ eventType: row.event_type,
186
+ ...(row.source_event_id === null ? {} : { sourceEventId: row.source_event_id }),
187
+ ...(row.source_sequence === null ? {} : { sourceSequence: row.source_sequence }),
188
+ ...(row.source_type === null ? {} : { sourceType: row.source_type }),
189
+ actor: row.actor,
190
+ ...(row.outcome === null ? {} : { outcome: row.outcome }),
191
+ ...(row.occurred_at === null ? {} : { occurredAt: row.occurred_at }),
192
+ ingestedAt: row.ingested_at,
193
+ payload: parseJson(row.payload_json),
194
+ redaction: parseJson(row.redaction_json),
195
+ });
196
+ if (calculated !== row.event_hash)
197
+ return false;
198
+ previous = row.event_hash;
199
+ }
200
+ return true;
201
+ }
202
+ now() {
203
+ return this.options.now?.() ?? new Date().toISOString();
204
+ }
205
+ prepareRun(input, now = this.now()) {
206
+ const validated = validateRunInput(input);
207
+ const client = sanitizeJson(validated.client, this.options).value;
208
+ const task = sanitizeTask(validated.task, this.options);
209
+ const metadata = sanitizeRunMetadata(validated.metadata ?? {}, this.options).value;
210
+ return { input: { ...validated, client }, task, metadata: (metadata && typeof metadata === 'object' && !Array.isArray(metadata) ? metadata : {}), now };
211
+ }
212
+ insertPreparedRun(prepared) {
213
+ const { input, task, metadata, now } = prepared;
214
+ if (this.database.prepare('SELECT run_id FROM ledger_runs WHERE run_id = ?').get(input.runId))
215
+ conflict('Ledger run already exists');
216
+ const taskHash = hashText(canonicalJson(task.value));
217
+ const taskTitle = task.value.title;
218
+ this.database.prepare(`
219
+ INSERT INTO ledger_runs (
220
+ run_id, workspace, client_kind, client_version, source_session_id, parent_run_id,
221
+ protocol_version, capture_profile, coverage_json, status, title, task_hash,
222
+ metadata_json, last_sequence, last_source_sequence, started_at, ended_at, created_at, updated_at
223
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'intake', ?, ?, ?, 0, NULL, ?, NULL, ?, ?)
224
+ `).run(input.runId, input.workspace, input.client.kind, input.client.version ?? null, input.client.sessionId ?? null, input.parentRunId ?? null, input.protocolVersion, input.captureProfile, canonicalJson(input.coverage), taskTitle, taskHash, canonicalJson(metadata), input.startedAt ?? now, now, now);
225
+ const row = this.database.prepare('SELECT * FROM ledger_runs WHERE run_id = ?').get(input.runId);
226
+ if (!row)
227
+ notFound('Ledger run not found after creation');
228
+ return rowToRun(row);
229
+ }
230
+ appendPreparedBatchInTransaction(runId, events) {
231
+ const run = this.database.prepare('SELECT * FROM ledger_runs WHERE run_id = ?').get(runId);
232
+ if (!run)
233
+ notFound('Ledger run not found');
234
+ const existingRows = [];
235
+ for (const event of events) {
236
+ const sourceRow = event.input.sourceEventId
237
+ ? this.database.prepare('SELECT * FROM ledger_events WHERE run_id = ? AND source_event_id = ?').get(runId, event.input.sourceEventId)
238
+ : undefined;
239
+ const eventIdRow = this.database.prepare('SELECT * FROM ledger_events WHERE event_id = ?').get(event.eventId);
240
+ if (sourceRow && eventIdRow && sourceRow.event_id !== eventIdRow.event_id)
241
+ conflict('Event identities refer to different ledger events');
242
+ const existing = sourceRow ?? eventIdRow;
243
+ if (!existing)
244
+ continue;
245
+ if (existing.run_id !== runId)
246
+ conflict('Event ID is already owned by another ledger run');
247
+ if (event.input.eventId !== undefined && existing.event_id !== event.input.eventId)
248
+ conflict('Event ID conflicts with the stored source event');
249
+ if (event.fingerprint !== rowFingerprint(existing))
250
+ conflict('Source event conflicts with an existing ledger event');
251
+ existingRows.push(existing);
252
+ }
253
+ if (existingRows.length > 0) {
254
+ if (existingRows.length !== events.length || new Set(existingRows.map((row) => row.event_id)).size !== existingRows.length) {
255
+ conflict('Source event conflicts with an existing ledger event');
256
+ }
257
+ return this.ackFromRows(runId, existingRows);
258
+ }
259
+ if (TERMINAL_RUN_STATUSES.includes(run.status))
260
+ conflict('Cannot append events to a terminal ledger run');
261
+ let sequence = run.last_sequence;
262
+ let previousHash = sequence === 0 ? GENESIS_HASH : (this.database.prepare('SELECT event_hash FROM ledger_events WHERE run_id = ? AND sequence = ?').get(runId, sequence)?.event_hash ?? '');
263
+ if (sequence > 0 && !previousHash)
264
+ throw new KiokukoError('INTEGRITY_ERROR', 'Ledger sequence has no previous hash');
265
+ let lastSourceSequence = run.last_source_sequence;
266
+ const localSequences = [];
267
+ const sourceSequences = [];
268
+ const eventIds = [];
269
+ const ingestedAt = this.now();
270
+ for (const event of events) {
271
+ sequence += 1;
272
+ const sourceSequence = event.input.sourceSequence ?? null;
273
+ const payloadJson = canonicalJson(event.input.payload);
274
+ const redactionJson = canonicalJson(event.sanitized.redactions);
275
+ const eventHash = hashLedgerEvent({
276
+ runId,
277
+ sequence,
278
+ eventId: event.eventId,
279
+ previousHash,
280
+ eventType: event.input.eventType,
281
+ ...(event.input.sourceEventId === undefined ? {} : { sourceEventId: event.input.sourceEventId }),
282
+ ...(event.input.sourceSequence === undefined ? {} : { sourceSequence: event.input.sourceSequence }),
283
+ ...(event.input.sourceType === undefined ? {} : { sourceType: event.input.sourceType }),
284
+ actor: event.input.actor,
285
+ ...(event.input.outcome === undefined ? {} : { outcome: event.input.outcome }),
286
+ ...(event.input.occurredAt === undefined ? {} : { occurredAt: event.input.occurredAt }),
287
+ ingestedAt,
288
+ payload: event.input.payload,
289
+ redaction: event.sanitized.redactions,
290
+ });
291
+ this.database.prepare(`
292
+ INSERT INTO ledger_events (
293
+ event_id, run_id, sequence, source_event_id, source_sequence, event_type, source_type,
294
+ actor, outcome, occurred_at, ingested_at, payload_json, redaction_json, previous_hash, event_hash
295
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
296
+ `).run(event.eventId, runId, sequence, event.input.sourceEventId ?? null, sourceSequence, event.input.eventType, event.input.sourceType ?? null, event.input.actor, event.input.outcome ?? null, event.input.occurredAt ?? null, ingestedAt, payloadJson, redactionJson, previousHash, eventHash);
297
+ previousHash = eventHash;
298
+ if (sourceSequence !== null)
299
+ lastSourceSequence = lastSourceSequence === null ? sourceSequence : Math.max(lastSourceSequence, sourceSequence);
300
+ localSequences.push(sequence);
301
+ sourceSequences.push(sourceSequence);
302
+ eventIds.push(event.eventId);
303
+ }
304
+ this.database.prepare('UPDATE ledger_runs SET last_sequence = ?, last_source_sequence = ?, updated_at = ? WHERE run_id = ?').run(sequence, lastSourceSequence, ingestedAt, runId);
305
+ return { runId, acceptedThrough: sequence, localSequences, sourceSequences, eventIds };
306
+ }
307
+ ackFromRows(runId, rows) {
308
+ const ordered = [...rows].sort((left, right) => left.sequence - right.sequence);
309
+ return {
310
+ runId,
311
+ acceptedThrough: ordered.at(-1)?.sequence ?? 0,
312
+ localSequences: ordered.map((row) => row.sequence),
313
+ sourceSequences: ordered.map((row) => row.source_sequence),
314
+ eventIds: ordered.map((row) => row.event_id),
315
+ };
316
+ }
317
+ }
318
+ function hashText(value) {
319
+ return createHash('sha256').update(value, 'utf8').digest('hex');
320
+ }
321
+ export function withLedgerTransaction(database, operation) {
322
+ return withImmediateTransaction(database, operation);
323
+ }
324
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/ledger/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ export type JsonValue = null | boolean | number | string | JsonValue[] | {
2
+ [key: string]: JsonValue;
3
+ };
4
+ export type JsonObject = {
5
+ [key: string]: JsonValue;
6
+ };
7
+ export declare const MAX_BATCH_EVENTS = 200;
8
+ export declare const MAX_EVENT_PAYLOAD_BYTES: number;
9
+ export declare const MAX_PREVIEW_BYTES: number;
10
+ export declare const MAX_ID_LENGTH = 256;
11
+ export declare const MAX_TEXT_LENGTH: number;
12
+ export declare const LEDGER_EVENT_TYPES: readonly ["intake.started", "intake.answered", "intake.ready", "intake.exhausted", "run.started", "run.closed", "request.received", "constraint.recorded", "decision.recorded", "step.started", "step.completed", "step.failed", "approval.requested", "approval.decided", "tool.requested", "tool.started", "tool.completed", "tool.failed", "tool.outcome_unknown", "command.started", "command.completed", "file.observed", "file.changed", "test.started", "test.completed", "verification.recorded", "error.recorded", "retry.recorded", "cancellation.recorded", "context.used", "context.feedback", "memory.proposed", "memory.promoted", "task_profile.revised", "correction.recorded", "source.event"];
13
+ export type LedgerEventType = (typeof LEDGER_EVENT_TYPES)[number];
14
+ export declare const CAPTURE_PROFILES: readonly ["minimal", "standard", "diagnostic"];
15
+ export type CaptureProfile = (typeof CAPTURE_PROFILES)[number];
16
+ export declare const COVERAGE_LEVELS: readonly ["complete", "best_effort", "declared", "unavailable"];
17
+ export type CoverageLevel = (typeof COVERAGE_LEVELS)[number];
18
+ export declare const RUN_STATUSES: readonly ["intake", "active", "completed", "failed", "cancelled", "interrupted"];
19
+ export type RunStatus = (typeof RUN_STATUSES)[number];
20
+ export declare const TERMINAL_RUN_STATUSES: readonly ["completed", "failed", "cancelled", "interrupted"];
21
+ export type TerminalRunStatus = (typeof TERMINAL_RUN_STATUSES)[number];
22
+ export declare const TASK_TYPES: readonly ["build", "debug", "research", "review", "devops", "writing", "analysis"];
23
+ export type TaskType = (typeof TASK_TYPES)[number];
24
+ export interface Coverage {
25
+ run: CoverageLevel;
26
+ tool: CoverageLevel;
27
+ command: CoverageLevel;
28
+ file: CoverageLevel;
29
+ approval: CoverageLevel;
30
+ }
31
+ export interface ClientInput {
32
+ kind: string;
33
+ version?: string;
34
+ sessionId?: string;
35
+ }
36
+ export interface ProfileHints {
37
+ taskType: TaskType | null;
38
+ target: string | null;
39
+ expected: string | null;
40
+ constraints: JsonValue | null;
41
+ }
42
+ export interface TaskInput {
43
+ title: string;
44
+ query: string;
45
+ profileHints: ProfileHints;
46
+ }
47
+ export interface AnswerInput {
48
+ apiVersion: '1';
49
+ questionId: string;
50
+ value: JsonValue;
51
+ }
52
+ export interface CreateRunInput {
53
+ runId: string;
54
+ workspace: string;
55
+ protocolVersion: '1';
56
+ client: ClientInput;
57
+ captureProfile: CaptureProfile;
58
+ coverage: Coverage;
59
+ task: TaskInput;
60
+ metadata?: JsonObject;
61
+ parentRunId?: string;
62
+ startedAt?: string;
63
+ }
64
+ export interface LedgerEventInput {
65
+ eventId?: string;
66
+ sourceEventId?: string;
67
+ sourceSequence?: number;
68
+ eventType: LedgerEventType;
69
+ sourceType?: string;
70
+ actor: string;
71
+ outcome?: string | null;
72
+ occurredAt?: string;
73
+ payload: JsonValue;
74
+ }
75
+ export interface AppendBatchInput {
76
+ events: LedgerEventInput[];
77
+ }
78
+ export interface Redaction {
79
+ path: string;
80
+ kind: 'sensitive_key' | 'secret_pattern' | 'url' | 'home_path' | 'preview_truncated' | 'environment_value' | 'hidden_reasoning';
81
+ }
82
+ export interface SanitizationOptions {
83
+ workspace?: string;
84
+ home?: string;
85
+ }
86
+ export interface Sanitized<T> {
87
+ value: T;
88
+ redactions: Redaction[];
89
+ truncated: string[];
90
+ }
91
+ export interface RunRecord {
92
+ runId: string;
93
+ workspace: string;
94
+ client: ClientInput;
95
+ protocolVersion: string;
96
+ captureProfile: CaptureProfile;
97
+ coverage: Coverage;
98
+ status: RunStatus;
99
+ title: string | null;
100
+ taskHash: string | null;
101
+ metadata: JsonObject;
102
+ lastSequence: number;
103
+ lastSourceSequence: number | null;
104
+ startedAt: string;
105
+ endedAt: string | null;
106
+ createdAt: string;
107
+ updatedAt: string;
108
+ }
109
+ export interface AppendAck {
110
+ runId: string;
111
+ acceptedThrough: number;
112
+ localSequences: number[];
113
+ sourceSequences: Array<number | null>;
114
+ eventIds: string[];
115
+ }
116
+ export interface LedgerStoreOptions extends SanitizationOptions {
117
+ now?: () => string;
118
+ }
119
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ledger/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export const MAX_BATCH_EVENTS = 200;
2
+ export const MAX_EVENT_PAYLOAD_BYTES = 64 * 1024;
3
+ export const MAX_PREVIEW_BYTES = 4 * 1024;
4
+ export const MAX_ID_LENGTH = 256;
5
+ export const MAX_TEXT_LENGTH = 16 * 1024;
6
+ export const LEDGER_EVENT_TYPES = [
7
+ 'intake.started', 'intake.answered', 'intake.ready', 'intake.exhausted',
8
+ 'run.started', 'run.closed', 'request.received', 'constraint.recorded',
9
+ 'decision.recorded', 'step.started', 'step.completed', 'step.failed',
10
+ 'approval.requested', 'approval.decided', 'tool.requested', 'tool.started',
11
+ 'tool.completed', 'tool.failed', 'tool.outcome_unknown', 'command.started',
12
+ 'command.completed', 'file.observed', 'file.changed', 'test.started',
13
+ 'test.completed', 'verification.recorded', 'error.recorded', 'retry.recorded',
14
+ 'cancellation.recorded', 'context.used', 'context.feedback', 'memory.proposed',
15
+ 'memory.promoted', 'task_profile.revised', 'correction.recorded', 'source.event',
16
+ ];
17
+ export const CAPTURE_PROFILES = ['minimal', 'standard', 'diagnostic'];
18
+ export const COVERAGE_LEVELS = ['complete', 'best_effort', 'declared', 'unavailable'];
19
+ export const RUN_STATUSES = ['intake', 'active', 'completed', 'failed', 'cancelled', 'interrupted'];
20
+ export const TERMINAL_RUN_STATUSES = ['completed', 'failed', 'cancelled', 'interrupted'];
21
+ export const TASK_TYPES = ['build', 'debug', 'research', 'review', 'devops', 'writing', 'analysis'];
22
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ledger/types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB;IACvE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,qBAAqB;IACtE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa;IACpE,oBAAoB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc;IAC1E,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,EAAE,iBAAiB;IAC1E,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc;IACpE,gBAAgB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,gBAAgB;IAC7E,uBAAuB,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB;IAC9E,iBAAiB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,cAAc;CACxE,CAAC;AAGX,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AAG/E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,CAAU,CAAC;AAG/F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAU,CAAC;AAE7G,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAU,CAAC;AAGlG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type AnswerInput, type CreateRunInput, type LedgerEventInput, type ProfileHints, type RunStatus, type TaskInput } from './types.js';
2
+ export declare function validateTimestamp(value: unknown, label?: string): string;
3
+ export declare function validateProfileHints(value: unknown): ProfileHints;
4
+ export declare function validateTaskInput(value: unknown): TaskInput;
5
+ export declare function validateAnswerInput(value: unknown): AnswerInput;
6
+ export declare function validateEventInput(value: unknown): LedgerEventInput;
7
+ export declare function validateEventBatch(value: unknown): LedgerEventInput[];
8
+ export declare function validateRunInput(value: unknown): CreateRunInput;
9
+ export declare function validateRunStatus(value: unknown): RunStatus;
10
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/ledger/validate.ts"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,WAAW,EAGhB,KAAK,cAAc,EAInB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AA8DpB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAc,GAAG,MAAM,CAK7E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAQjE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAQ3D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAQ/D;AAqBD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAkBnE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAarE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAqB/D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAE3D"}