@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,168 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { KiokukoError } from '../errors.js';
3
+ export const ENTRY_KINDS = ['fact', 'decision', 'lesson', 'preference', 'reference'];
4
+ export const ENTRY_STATUSES = ['candidate', 'verified', 'superseded'];
5
+ export const TRUST_LEVELS = ['untrusted', 'user_asserted', 'source_verified', 'system_verified'];
6
+ const RECORD_FIELDS = new Set([
7
+ 'workspace',
8
+ 'kind',
9
+ 'status',
10
+ 'title',
11
+ 'body',
12
+ 'summary',
13
+ 'scope',
14
+ 'provenance',
15
+ 'trustLevel',
16
+ 'confidence',
17
+ 'tags',
18
+ 'createdBy',
19
+ 'actor',
20
+ ]);
21
+ const PROVENANCE_FIELDS = new Set(['type', 'reference']);
22
+ function validation(message, details = {}) {
23
+ throw new KiokukoError('VALIDATION_ERROR', message, details);
24
+ }
25
+ function isPlainObject(value) {
26
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
27
+ return false;
28
+ const prototype = Object.getPrototypeOf(value);
29
+ return prototype === Object.prototype || prototype === null;
30
+ }
31
+ function assertObject(value, field) {
32
+ if (!isPlainObject(value))
33
+ validation(`${field} must be a JSON object`);
34
+ }
35
+ function assertKnownFields(value, allowed, label) {
36
+ for (const field of Object.keys(value)) {
37
+ if (!allowed.has(field))
38
+ validation(`Unknown ${label} field: ${field}`, { field });
39
+ }
40
+ }
41
+ function assertJsonValue(value, path) {
42
+ if (value === null || typeof value === 'boolean' || typeof value === 'string')
43
+ return;
44
+ if (typeof value === 'number') {
45
+ if (Number.isFinite(value))
46
+ return;
47
+ validation(`${path} must contain only finite JSON numbers`);
48
+ }
49
+ if (Array.isArray(value)) {
50
+ for (let index = 0; index < value.length; index += 1)
51
+ assertJsonValue(value[index], `${path}[${index}]`);
52
+ return;
53
+ }
54
+ if (isPlainObject(value)) {
55
+ for (const [key, child] of Object.entries(value))
56
+ assertJsonValue(child, `${path}.${key}`);
57
+ return;
58
+ }
59
+ validation(`${path} must be JSON-compatible`);
60
+ }
61
+ function isNonEmptyString(value) {
62
+ return typeof value === 'string' && value.trim().length > 0;
63
+ }
64
+ function enumValue(value, allowed, field) {
65
+ if (typeof value !== 'string' || !allowed.includes(value)) {
66
+ validation(`${field} must be one of: ${allowed.join(', ')}`);
67
+ }
68
+ return value;
69
+ }
70
+ function cloneAndSort(value) {
71
+ if (Array.isArray(value))
72
+ return value.map(cloneAndSort);
73
+ if (value !== null && typeof value === 'object') {
74
+ return Object.fromEntries(Object.keys(value)
75
+ .sort()
76
+ .map((key) => [key, cloneAndSort(value[key])]));
77
+ }
78
+ return value;
79
+ }
80
+ /** Serialize JSON values with recursively sorted object keys and no insignificant whitespace. */
81
+ export function canonicalJson(value) {
82
+ assertJsonValue(value, 'value');
83
+ return JSON.stringify(cloneAndSort(value));
84
+ }
85
+ export function canonicalContentHash(value) {
86
+ return createHash('sha256').update(canonicalJson(value), 'utf8').digest('hex');
87
+ }
88
+ export function requireWorkspace(value) {
89
+ if (!isNonEmptyString(value))
90
+ validation('workspace must be a non-empty string');
91
+ return value;
92
+ }
93
+ function validateObjectField(value, field) {
94
+ assertObject(value, field);
95
+ assertJsonValue(value, field);
96
+ return value;
97
+ }
98
+ function validateProvenance(value) {
99
+ const provenance = validateObjectField(value, 'provenance');
100
+ assertKnownFields(provenance, PROVENANCE_FIELDS, 'provenance');
101
+ if (Object.keys(provenance).length > 0) {
102
+ if (!isNonEmptyString(provenance.type))
103
+ validation('provenance.type must be a non-empty string');
104
+ if (!isNonEmptyString(provenance.reference))
105
+ validation('provenance.reference must be a non-empty string');
106
+ }
107
+ return provenance;
108
+ }
109
+ function validateTags(value) {
110
+ if (!Array.isArray(value))
111
+ validation('tags must be an array of strings');
112
+ if (value.length > 100)
113
+ validation('tags must contain at most 100 values');
114
+ const tags = value.map((tag, index) => {
115
+ if (!isNonEmptyString(tag) || tag.length > 200)
116
+ validation(`tags[${index}] must be a non-empty string of at most 200 characters`);
117
+ return tag;
118
+ });
119
+ return [...new Set(tags)].sort((left, right) => left.localeCompare(right));
120
+ }
121
+ export function validateRecordInput(value) {
122
+ assertObject(value, 'record input');
123
+ assertKnownFields(value, RECORD_FIELDS, 'record input');
124
+ const workspace = requireWorkspace(value.workspace);
125
+ const kind = enumValue(value.kind, ENTRY_KINDS, 'kind');
126
+ const status = value.status === undefined ? 'candidate' : enumValue(value.status, ENTRY_STATUSES, 'status');
127
+ const title = value.title;
128
+ if (!isNonEmptyString(title))
129
+ validation('title must be a non-empty string');
130
+ if (typeof value.body !== 'string')
131
+ validation('body must be a string');
132
+ let summary = null;
133
+ if (value.summary !== undefined && value.summary !== null) {
134
+ if (typeof value.summary !== 'string')
135
+ validation('summary must be a string or null');
136
+ summary = value.summary;
137
+ }
138
+ const scope = value.scope === undefined ? {} : validateObjectField(value.scope, 'scope');
139
+ const provenance = value.provenance === undefined ? {} : validateProvenance(value.provenance);
140
+ const trustLevel = value.trustLevel === undefined ? 'user_asserted' : enumValue(value.trustLevel, TRUST_LEVELS, 'trustLevel');
141
+ const confidence = value.confidence === undefined ? 1.0 : value.confidence;
142
+ if (typeof confidence !== 'number' || !Number.isFinite(confidence) || confidence < 0 || confidence > 1) {
143
+ validation('confidence must be between 0 and 1');
144
+ }
145
+ const tags = value.tags === undefined ? [] : validateTags(value.tags);
146
+ const createdBy = value.createdBy === undefined ? 'kiokuko-cli' : value.createdBy;
147
+ if (!isNonEmptyString(createdBy))
148
+ validation('createdBy must be a non-empty string');
149
+ const actor = value.actor === undefined ? createdBy : value.actor;
150
+ if (!isNonEmptyString(actor))
151
+ validation('actor must be a non-empty string');
152
+ return {
153
+ workspace,
154
+ kind,
155
+ status,
156
+ title,
157
+ body: value.body,
158
+ summary,
159
+ scope,
160
+ provenance,
161
+ trustLevel,
162
+ confidence,
163
+ tags,
164
+ createdBy,
165
+ actor,
166
+ };
167
+ }
168
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/serialization/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAU,CAAC;AAC9F,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AAC/E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,CAAU,CAAC;AAwB1G,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,WAAW;IACX,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,SAAS;IACT,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,MAAM;IACN,WAAW;IACX,OAAO;CACR,CAAC,CAAC;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AAEzD,SAAS,UAAU,CAAC,OAAe,EAAE,UAAmC,EAAE;IACxE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC;AAC9D,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,KAAa;IACjD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,UAAU,CAAC,GAAG,KAAK,wBAAwB,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA8B,EAAE,OAAoB,EAAE,KAAa;IAC5F,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,UAAU,CAAC,WAAW,KAAK,WAAW,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,IAAY;IACnD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO;IACtF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QACnC,UAAU,CAAC,GAAG,IAAI,wCAAwC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;YAAE,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;QACzG,OAAO;IACT,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,eAAe,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3F,OAAO;IACT,CAAC;IACD,UAAU,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,SAAS,CAA8B,KAAc,EAAE,OAAU,EAAE,KAAa;IACvF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,UAAU,CAAC,GAAG,KAAK,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,KAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,KAAgB;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aACf,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC,CAAC,CAAC,CAChD,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAW,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAAE,UAAU,CAAC,sCAAsC,CAAC,CAAC;IACjF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,KAAa;IACxD,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3B,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,KAAmB,CAAC;AAC7B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC5D,iBAAiB,CAAC,UAAU,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,UAAU,CAAC,4CAA4C,CAAC,CAAC;QACjG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,UAAU,CAAC,iDAAiD,CAAC,CAAC;IAC7G,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,UAAU,CAAC,kCAAkC,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;QAAE,UAAU,CAAC,sCAAsC,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACpC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;YAAE,UAAU,CAAC,QAAQ,KAAK,wDAAwD,CAAC,CAAC;QAClI,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACpC,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IAExD,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC5G,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAAE,UAAU,CAAC,kCAAkC,CAAC,CAAC;IAC7E,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAExE,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1D,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YAAE,UAAU,CAAC,kCAAkC,CAAC,CAAC;QACtF,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzF,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9F,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAC9H,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;IAC3E,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACvG,UAAU,CAAC,oCAAoC,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IAClF,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAAE,UAAU,CAAC,sCAAsC,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAClE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAAE,UAAU,CAAC,kCAAkC,CAAC,CAAC;IAE7E,OAAO;QACL,SAAS;QACT,IAAI;QACJ,MAAM;QACN,KAAK;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO;QACP,KAAK;QACL,UAAU;QACV,UAAU;QACV,UAAU;QACV,IAAI;QACJ,SAAS;QACT,KAAK;KACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type HttpApplicationContext, type HttpServerHandle, type HttpServerOptions } from './http.js';
2
+ import type { V1RouteHandler } from './router.js';
3
+ export type AgentHttpServerOptions = Omit<HttpServerOptions, 'app' | 'v1' | 'applicationFactory'>;
4
+ export declare function createAgentV1Handler(context: HttpApplicationContext): V1RouteHandler;
5
+ export declare function startAgentHttpServer(options?: AgentHttpServerOptions): Promise<HttpServerHandle>;
6
+ //# sourceMappingURL=agent-application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-application.d.ts","sourceRoot":"","sources":["../../src/server/agent-application.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACxH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK,GAAG,IAAI,GAAG,oBAAoB,CAAC,CAAC;AAUlG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,GAAG,cAAc,CAyBpF;AAWD,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAM1G"}
@@ -0,0 +1,60 @@
1
+ import { KiokukoError } from '../errors.js';
2
+ import { AgentGatewayService } from '../gateway/agent-service.js';
3
+ import { CheckpointService, FeedbackService } from '../gateway/checkpoint-service.js';
4
+ import { ContextBroker } from '../context/broker.js';
5
+ import { startHttpServer } from './http.js';
6
+ import { createAgentEventsRoute, agentEventsOperation } from './routes/agent-events.js';
7
+ import { createAgentIntakeRoute, agentIntakeOperation } from './routes/agent-intake.js';
8
+ import { createAgentRunsRoute, agentRunsOperation } from './routes/agent-runs.js';
9
+ import { createAgentPromotionsRoute, agentPromotionsOperation } from './routes/agent-promotions.js';
10
+ import { createTask5Route, task5Operation } from './routes/task5.js';
11
+ function operationFor(method, pathname) {
12
+ return agentRunsOperation(method, pathname)
13
+ ?? agentPromotionsOperation(method, pathname)
14
+ ?? agentIntakeOperation(method, pathname)
15
+ ?? agentEventsOperation(method, pathname)
16
+ ?? task5Operation(method, pathname);
17
+ }
18
+ export function createAgentV1Handler(context) {
19
+ const routeContext = {
20
+ database: context.database,
21
+ service: new AgentGatewayService(context.database),
22
+ checkpointService: new CheckpointService(context.database),
23
+ feedbackService: new FeedbackService(context.database),
24
+ broker: new ContextBroker(context.database),
25
+ enqueueWrite: context.enqueueWrite,
26
+ };
27
+ const routes = [
28
+ createAgentRunsRoute(routeContext),
29
+ createAgentPromotionsRoute(routeContext),
30
+ createAgentIntakeRoute(routeContext),
31
+ createAgentEventsRoute(routeContext),
32
+ createTask5Route(routeContext),
33
+ ];
34
+ const handler = (async (request) => {
35
+ for (const route of routes) {
36
+ const result = await route(request);
37
+ if (result !== undefined)
38
+ return result;
39
+ }
40
+ return undefined;
41
+ });
42
+ handler.operationFor = ({ method, url }) => operationFor(method, url.pathname);
43
+ return handler;
44
+ }
45
+ function rejectConflictingOptions(options) {
46
+ const unsafe = options;
47
+ for (const key of ['app', 'v1', 'applicationFactory']) {
48
+ if (Object.prototype.hasOwnProperty.call(unsafe, key)) {
49
+ throw new KiokukoError('VALIDATION_ERROR', 'Agent server options cannot override the production application');
50
+ }
51
+ }
52
+ }
53
+ export async function startAgentHttpServer(options = {}) {
54
+ rejectConflictingOptions(options);
55
+ return startHttpServer({
56
+ ...options,
57
+ applicationFactory: (context) => context.createAuthenticatedApp(createAgentV1Handler(context)),
58
+ });
59
+ }
60
+ //# sourceMappingURL=agent-application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-application.js","sourceRoot":"","sources":["../../src/server/agent-application.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { RequestListener } from 'node:http';
2
+ import { type RouterDependencies } from './router.js';
3
+ export type AppDependencies = RouterDependencies;
4
+ export declare function createApp(dependencies: AppDependencies): RequestListener;
5
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EAAkC,KAAK,kBAAkB,EAAuB,MAAM,aAAa,CAAC;AAE3G,MAAM,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAoFjD,wBAAgB,SAAS,CAAC,YAAY,EAAE,eAAe,GAAG,eAAe,CAQxE"}
@@ -0,0 +1,87 @@
1
+ import { KiokukoError } from '../errors.js';
2
+ import { createRouter } from './router.js';
3
+ function writeJsonError(response, status, operation, code, message, details = {}, retryAfterSeconds) {
4
+ const body = JSON.stringify({
5
+ apiVersion: '1',
6
+ ok: false,
7
+ operation,
8
+ error: { code, message, details },
9
+ });
10
+ response.writeHead(status, {
11
+ 'cache-control': 'no-store',
12
+ 'content-length': Buffer.byteLength(body),
13
+ 'content-type': 'application/json; charset=utf-8',
14
+ ...(retryAfterSeconds === undefined ? {} : { 'retry-after': String(retryAfterSeconds) }),
15
+ });
16
+ response.end(body);
17
+ }
18
+ function boundedRetryAfterSeconds(error) {
19
+ const value = error.details.retryAfterSeconds;
20
+ if (typeof value !== 'number' || !Number.isFinite(value))
21
+ return 1;
22
+ return Math.min(60, Math.max(1, Math.trunc(value)));
23
+ }
24
+ function operationFor(request, v1) {
25
+ const pathname = new URL(request.url ?? '/', 'http://127.0.0.1').pathname;
26
+ try {
27
+ const resolved = v1?.operationFor?.({
28
+ method: request.method ?? 'GET',
29
+ url: new URL(request.url ?? '/', 'http://127.0.0.1'),
30
+ });
31
+ if (typeof resolved === 'string' && resolved.length > 0)
32
+ return resolved;
33
+ }
34
+ catch {
35
+ // An operation resolver is advisory; error serialization must keep the safe fallback.
36
+ }
37
+ return pathname === '/health/ready' ? 'health.ready' : pathname === '/api/v1' || pathname.startsWith('/api/v1/') ? 'api.v1' : 'server.request';
38
+ }
39
+ function handleError(request, response, error, v1) {
40
+ if (error instanceof KiokukoError && error.code === 'AUTHENTICATION_ERROR') {
41
+ writeJsonError(response, 401, operationFor(request, v1), 'AUTHENTICATION_ERROR', 'Authorization is invalid');
42
+ return;
43
+ }
44
+ if (error instanceof KiokukoError && error.code === 'NOT_FOUND') {
45
+ writeJsonError(response, 404, operationFor(request, v1), 'NOT_FOUND', 'Endpoint not found');
46
+ return;
47
+ }
48
+ if (error instanceof KiokukoError && (error.code === 'VALIDATION_ERROR' || error.code === 'USAGE_ERROR')) {
49
+ writeJsonError(response, 400, operationFor(request, v1), error.code, 'Request is invalid');
50
+ return;
51
+ }
52
+ if (error instanceof KiokukoError && error.code === 'CONFLICT') {
53
+ writeJsonError(response, 409, operationFor(request, v1), 'CONFLICT', 'Request conflicts with current state');
54
+ return;
55
+ }
56
+ if (error instanceof KiokukoError && error.code === 'BACKPRESSURE') {
57
+ const retryAfterSeconds = boundedRetryAfterSeconds(error);
58
+ writeJsonError(response, 429, operationFor(request, v1), 'BACKPRESSURE', 'Service is busy', { retryAfterSeconds }, retryAfterSeconds);
59
+ return;
60
+ }
61
+ if (error instanceof KiokukoError && (error.code === 'SERVICE_UNAVAILABLE' || error.code === 'DATABASE_ERROR')) {
62
+ const message = error.code === 'DATABASE_ERROR' ? 'Database unavailable' : 'Service unavailable';
63
+ writeJsonError(response, 503, operationFor(request, v1), error.code, message);
64
+ return;
65
+ }
66
+ if (error instanceof KiokukoError && error.code === 'SECURITY_REJECTION') {
67
+ writeJsonError(response, 422, operationFor(request, v1), 'SECURITY_REJECTION', 'Request rejected');
68
+ return;
69
+ }
70
+ if (error instanceof KiokukoError && error.code === 'INTEGRITY_ERROR') {
71
+ writeJsonError(response, 500, operationFor(request, v1), 'INTEGRITY_ERROR', 'Internal integrity error');
72
+ return;
73
+ }
74
+ writeJsonError(response, 500, operationFor(request, v1), 'DATABASE_ERROR', 'Unexpected server error');
75
+ }
76
+ export function createApp(dependencies) {
77
+ const router = createRouter(dependencies);
78
+ return (request, response) => {
79
+ void Promise.resolve(router(request, response)).catch((error) => {
80
+ if (!response.headersSent)
81
+ handleError(request, response, error, dependencies.v1);
82
+ else
83
+ response.destroy();
84
+ });
85
+ };
86
+ }
87
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function requireBearerAuthorization(header: unknown, expectedToken: unknown): void;
2
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"AASA,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI,CAcxF"}
@@ -0,0 +1,22 @@
1
+ import { createHash, timingSafeEqual } from 'node:crypto';
2
+ import { KiokukoError } from '../errors.js';
3
+ const TOKEN_PATTERN = /^[0-9a-f]{64}$/;
4
+ function authenticationFailure() {
5
+ throw new KiokukoError('AUTHENTICATION_ERROR', 'Authorization is invalid');
6
+ }
7
+ export function requireBearerAuthorization(header, expectedToken) {
8
+ if (typeof expectedToken !== 'string' || !TOKEN_PATTERN.test(expectedToken)) {
9
+ throw new KiokukoError('INTEGRITY_ERROR', 'Server authentication token is invalid');
10
+ }
11
+ if (typeof header !== 'string')
12
+ authenticationFailure();
13
+ const match = /^Bearer ([0-9a-f]{64})$/.exec(header);
14
+ const suppliedToken = match?.[1];
15
+ if (suppliedToken === undefined)
16
+ authenticationFailure();
17
+ const expectedDigest = createHash('sha256').update(expectedToken, 'utf8').digest();
18
+ const suppliedDigest = createHash('sha256').update(suppliedToken, 'utf8').digest();
19
+ if (!timingSafeEqual(expectedDigest, suppliedDigest))
20
+ authenticationFailure();
21
+ }
22
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAEvC,SAAS,qBAAqB;IAC5B,MAAM,IAAI,YAAY,CAAC,sBAAsB,EAAE,0BAA0B,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAe,EAAE,aAAsB;IAChF,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,wCAAwC,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,qBAAqB,EAAE,CAAC;IAExD,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,aAAa,KAAK,SAAS;QAAE,qBAAqB,EAAE,CAAC;IAEzD,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IACnF,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IACnF,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,cAAc,CAAC;QAAE,qBAAqB,EAAE,CAAC;AAChF,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { type RequestListener, type Server } from 'node:http';
2
+ import { type PathEnvironment } from '../config/paths.js';
3
+ import type { SqliteDatabase } from '../db/adapter.js';
4
+ import { type InstanceLock, type InstanceLockOptions, type PidLiveness } from './instance-lock.js';
5
+ import { type CreateRuntimeDescriptorInput, type RuntimeDescriptor, type RuntimeDescriptorView } from './runtime-descriptor.js';
6
+ import { type WriteQueueState } from './write-queue.js';
7
+ import type { V1RouteHandler } from './router.js';
8
+ export type DatabaseOpener = (databasePath: string) => SqliteDatabase | PromiseLike<SqliteDatabase>;
9
+ export type DatabaseMigrator = (database: SqliteDatabase, migrationsDirectory?: string) => unknown | PromiseLike<unknown>;
10
+ export type HttpServerFactory = (listener: RequestListener) => Server;
11
+ export type InstanceLockAcquirer = (databasePath: string, options: InstanceLockOptions) => InstanceLock | PromiseLike<InstanceLock>;
12
+ export type RuntimeDescriptorFactory = (input: CreateRuntimeDescriptorInput) => RuntimeDescriptor;
13
+ export type RuntimeDescriptorReader = (filePath: string) => RuntimeDescriptor | undefined | PromiseLike<RuntimeDescriptor | undefined>;
14
+ export type RuntimeDescriptorWriter = (filePath: string, descriptor: RuntimeDescriptor) => void | PromiseLike<void>;
15
+ export type RuntimeDescriptorRemover = (filePath: string, expectedInstanceId: string) => boolean | PromiseLike<boolean>;
16
+ export interface HttpApplicationContext {
17
+ readonly database: SqliteDatabase;
18
+ enqueueWrite<T>(operation: () => T | PromiseLike<T>): Promise<T>;
19
+ createAuthenticatedApp(v1?: V1RouteHandler): RequestListener;
20
+ }
21
+ export type HttpApplicationFactory = (context: HttpApplicationContext) => RequestListener;
22
+ export interface HttpServerDependencies {
23
+ readonly openDatabase?: DatabaseOpener;
24
+ readonly migrateDatabase?: DatabaseMigrator;
25
+ readonly createServer?: HttpServerFactory;
26
+ readonly acquireInstanceLock?: InstanceLockAcquirer;
27
+ readonly isPidAlive?: PidLiveness;
28
+ readonly createRuntimeDescriptor?: RuntimeDescriptorFactory;
29
+ readonly readRuntimeDescriptor?: RuntimeDescriptorReader;
30
+ readonly writeRuntimeDescriptor?: RuntimeDescriptorWriter;
31
+ readonly removeRuntimeDescriptor?: RuntimeDescriptorRemover;
32
+ }
33
+ export interface HttpServerOptions extends PathEnvironment {
34
+ readonly databasePath?: string;
35
+ readonly migrationsDirectory?: string;
36
+ readonly descriptorPath?: string;
37
+ readonly runtimeDirectory?: string;
38
+ readonly host?: string;
39
+ readonly port?: number;
40
+ readonly queueCapacity?: number;
41
+ readonly pid?: number;
42
+ readonly instanceId?: string;
43
+ readonly startedAt?: string;
44
+ readonly capabilityToken?: string;
45
+ readonly app?: RequestListener;
46
+ readonly v1?: V1RouteHandler;
47
+ readonly applicationFactory?: HttpApplicationFactory;
48
+ readonly dependencies?: HttpServerDependencies;
49
+ readonly openDatabase?: DatabaseOpener;
50
+ readonly migrateDatabase?: DatabaseMigrator;
51
+ readonly createServer?: HttpServerFactory;
52
+ readonly acquireInstanceLock?: InstanceLockAcquirer;
53
+ readonly isPidAlive?: PidLiveness;
54
+ readonly createRuntimeDescriptor?: RuntimeDescriptorFactory;
55
+ readonly readRuntimeDescriptor?: RuntimeDescriptorReader;
56
+ readonly writeRuntimeDescriptor?: RuntimeDescriptorWriter;
57
+ readonly removeRuntimeDescriptor?: RuntimeDescriptorRemover;
58
+ }
59
+ export interface HttpServerHandle {
60
+ readonly server: Server;
61
+ readonly url: string;
62
+ readonly descriptor: RuntimeDescriptorView;
63
+ readonly runtimeDescriptor: RuntimeDescriptorView;
64
+ readonly queueState: WriteQueueState;
65
+ enqueueWrite<T>(operation: () => T | PromiseLike<T>): Promise<T>;
66
+ close(): Promise<void>;
67
+ }
68
+ export declare function startHttpServer(options?: HttpServerOptions): Promise<HttpServerHandle>;
69
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}