@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,176 @@
1
+ import { readFile, unlink } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { atomicWriteText, readRegularFile } from '../agent-file/atomic-write.js';
4
+ import { AGENT_TEMPLATE_VERSION, renderAgentFile } from '../agent-file/render.js';
5
+ import { getGlobalDatabasePath } from '../config/paths.js';
6
+ import { readProjectConfig } from '../config/project-config.js';
7
+ import { initializeDatabase } from './init.js';
8
+ import { openConnection } from '../db/connection.js';
9
+ import { registerRepositoryAndLocation } from '../repository/binding.js';
10
+ import { detectRepositoryRoot } from '../repository/detect-root.js';
11
+ import { createRepositoryIdentity } from '../repository/identity.js';
12
+ import { KiokukoError } from '../errors.js';
13
+ import { readGitOrigin } from '../repository/git-origin.js';
14
+ function ensureChildPath(root, filePath) {
15
+ const resolvedRoot = path.resolve(root);
16
+ const resolvedPath = path.resolve(root, filePath);
17
+ if (resolvedPath !== resolvedRoot && !resolvedPath.startsWith(`${resolvedRoot}${path.sep}`)) {
18
+ throw new KiokukoError('VALIDATION_ERROR', 'agentFile must remain inside the repository root');
19
+ }
20
+ return resolvedPath;
21
+ }
22
+ async function readOptionalText(filePath) {
23
+ try {
24
+ return await readFile(filePath, 'utf8');
25
+ }
26
+ catch (error) {
27
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT')
28
+ return undefined;
29
+ throw error;
30
+ }
31
+ }
32
+ function bindingText(value) {
33
+ return `${JSON.stringify(value, null, 2)}\n`;
34
+ }
35
+ function bindingAction(existing, next) {
36
+ if (existing === undefined)
37
+ return 'created';
38
+ return existing === next ? 'unchanged' : 'updated';
39
+ }
40
+ function preferredCliCommand() {
41
+ return process.env.npm_command === 'exec' || process.env.npm_lifecycle_event === 'npx'
42
+ ? 'npm exec -- kiokuko'
43
+ : 'kiokuko';
44
+ }
45
+ export async function useRepository(options = {}) {
46
+ const rootOptions = {};
47
+ if (options.cwd !== undefined)
48
+ rootOptions.cwd = options.cwd;
49
+ if (options.root !== undefined)
50
+ rootOptions.root = options.root;
51
+ if (options.allowDirectory !== undefined)
52
+ rootOptions.allowDirectory = options.allowDirectory;
53
+ const detected = detectRepositoryRoot(rootOptions);
54
+ const repositoryRoot = detected.root;
55
+ const bindingFile = path.join(repositoryRoot, '.kiokuko.json');
56
+ const existingBindingText = await readOptionalText(bindingFile);
57
+ const existingBinding = existingBindingText === undefined ? undefined : await readProjectConfig(bindingFile);
58
+ if (existingBinding && options.workspace && existingBinding.workspace !== options.workspace && !options.forceRebind) {
59
+ throw new KiokukoError('CONFLICT', 'Existing binding uses another workspace; pass --force-rebind to change it');
60
+ }
61
+ const requestedAgentFile = options.agentFile ?? existingBinding?.agentFile ?? 'AGENTS.md';
62
+ const agentFile = ensureChildPath(repositoryRoot, requestedAgentFile);
63
+ const existingAgent = options.noAgentFile ? undefined : await readRegularFile(agentFile);
64
+ const identityOptions = { repositoryRoot };
65
+ const remote = readGitOrigin(repositoryRoot);
66
+ if (remote !== undefined)
67
+ identityOptions.remoteUrl = remote;
68
+ if (options.repositoryId !== undefined)
69
+ identityOptions.repositoryId = options.repositoryId;
70
+ if (existingBinding) {
71
+ identityOptions.existingBinding = {
72
+ repositoryId: existingBinding.repositoryId,
73
+ workspace: existingBinding.workspace,
74
+ };
75
+ }
76
+ if (options.workspace !== undefined)
77
+ identityOptions.workspace = options.workspace;
78
+ const identity = createRepositoryIdentity(identityOptions);
79
+ if (existingBinding && options.workspace && existingBinding.workspace !== identity.workspace && !options.forceRebind) {
80
+ throw new KiokukoError('CONFLICT', 'Existing binding uses another workspace; pass --force-rebind to change it');
81
+ }
82
+ const nextBinding = {
83
+ schemaVersion: 1,
84
+ repositoryId: identity.repositoryId,
85
+ workspace: identity.workspace,
86
+ agentFile: requestedAgentFile,
87
+ templateVersion: AGENT_TEMPLATE_VERSION,
88
+ };
89
+ const nextBindingText = bindingText(nextBinding);
90
+ const rendered = options.noAgentFile
91
+ ? undefined
92
+ : renderAgentFile(existingAgent?.content, {
93
+ repositoryId: identity.repositoryId,
94
+ workspace: identity.workspace,
95
+ cliCommand: preferredCliCommand(),
96
+ templateVersion: AGENT_TEMPLATE_VERSION,
97
+ });
98
+ const databasePath = options.databasePath ?? getGlobalDatabasePath();
99
+ const result = {
100
+ repositoryRoot,
101
+ repositoryId: identity.repositoryId,
102
+ workspace: identity.workspace,
103
+ databasePath,
104
+ bindingFile,
105
+ agentFile: options.noAgentFile ? null : agentFile,
106
+ agentFileAction: options.noAgentFile ? 'skipped' : rendered?.action ?? 'unchanged',
107
+ bindingAction: options.dryRun ? 'planned' : bindingAction(existingBindingText, nextBindingText),
108
+ dryRun: options.dryRun ?? false,
109
+ templateVersion: AGENT_TEMPLATE_VERSION,
110
+ };
111
+ if (options.dryRun)
112
+ return result;
113
+ const initOptions = { databasePath };
114
+ if (options.migrationsDirectory !== undefined)
115
+ initOptions.migrationsDirectory = options.migrationsDirectory;
116
+ await initializeDatabase(initOptions);
117
+ const database = openConnection(databasePath);
118
+ let retryBinding;
119
+ try {
120
+ try {
121
+ registerRepositoryAndLocation(database, {
122
+ repositoryId: identity.repositoryId,
123
+ workspace: identity.workspace,
124
+ displayName: identity.displayName,
125
+ canonicalRoot: repositoryRoot,
126
+ remoteFingerprint: identity.remoteFingerprint,
127
+ bindingSchemaVersion: 1,
128
+ agentTemplateVersion: AGENT_TEMPLATE_VERSION,
129
+ });
130
+ }
131
+ catch (error) {
132
+ if (error instanceof KiokukoError && error.code === 'CONFLICT' && options.repositoryId === undefined && options.workspace === undefined && existingBinding === undefined) {
133
+ retryBinding = database.prepare(`
134
+ SELECT r.repository_id AS repositoryId, r.workspace AS workspace
135
+ FROM repositories r JOIN repository_locations l ON l.repository_id = r.repository_id
136
+ WHERE l.canonical_root = ?
137
+ `).get(repositoryRoot);
138
+ }
139
+ if (!retryBinding)
140
+ throw error;
141
+ }
142
+ }
143
+ finally {
144
+ database.close();
145
+ }
146
+ if (retryBinding) {
147
+ return useRepository({ ...options, repositoryId: retryBinding.repositoryId, workspace: retryBinding.workspace });
148
+ }
149
+ const originalBinding = existingBindingText;
150
+ const originalAgent = existingAgent?.content;
151
+ try {
152
+ if (result.bindingAction !== 'unchanged')
153
+ await atomicWriteText(bindingFile, nextBindingText, 0o644);
154
+ if (rendered && rendered.action !== 'unchanged')
155
+ await atomicWriteText(agentFile, rendered.content, existingAgent?.mode ?? 0o644);
156
+ }
157
+ catch (error) {
158
+ if (originalBinding === undefined)
159
+ await unlink(bindingFile).catch(() => undefined);
160
+ else
161
+ await atomicWriteText(bindingFile, originalBinding, 0o644).catch(() => undefined);
162
+ if (options.noAgentFile) {
163
+ // No agent file was requested, so there is nothing to restore.
164
+ }
165
+ else if (originalAgent === undefined) {
166
+ await unlink(agentFile).catch(() => undefined);
167
+ }
168
+ else {
169
+ await atomicWriteText(agentFile, originalAgent, existingAgent?.mode ?? 0o644).catch(() => undefined);
170
+ }
171
+ throw error;
172
+ }
173
+ return result;
174
+ }
175
+ export const use = useRepository;
176
+ //# sourceMappingURL=use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../src/commands/use.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface PathEnvironment {
2
+ platform?: NodeJS.Platform;
3
+ env?: NodeJS.ProcessEnv;
4
+ }
5
+ export declare function getPlatformDataDirectory(options?: PathEnvironment): string;
6
+ export declare function getRuntimeDirectory(options?: PathEnvironment): string;
7
+ export declare function getRuntimeDescriptorPath(options?: PathEnvironment): string;
8
+ export declare function getDatabaseLockPath(databasePath: string, options?: PathEnvironment): string;
9
+ export declare function getGlobalDatabasePath(options?: PathEnvironment): string;
10
+ /** Global Codex configuration directory. CODEX_HOME intentionally takes precedence. */
11
+ export declare function getCodexHome(options?: PathEnvironment): string;
12
+ export declare function getCodexConfigPath(options?: PathEnvironment): string;
13
+ export declare function getCodexInstructionsPath(options?: PathEnvironment): string;
14
+ /** OpenCode's documented global configuration directory. */
15
+ export declare function getOpenCodeConfigDirectory(options?: PathEnvironment): string;
16
+ export declare function getOpenCodeInstructionsPath(options?: PathEnvironment): string;
17
+ export declare function ensurePlatformDataDirectory(options?: PathEnvironment): Promise<string>;
18
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AASD,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAqB9E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CASzE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAI9E;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,MAAM,CAO/F;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAI3E;AASD,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAKlE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAIxE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAI9E;AAED,4DAA4D;AAC5D,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAUhF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAIjF;AAED,wBAAsB,2BAA2B,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAIhG"}
@@ -0,0 +1,104 @@
1
+ import path from 'node:path';
2
+ import { createHash } from 'node:crypto';
3
+ import { mkdir } from 'node:fs/promises';
4
+ import { KiokukoError } from '../errors.js';
5
+ function selectedEnvironment({ platform = process.platform, env = process.env }) {
6
+ return { platform, env };
7
+ }
8
+ export function getPlatformDataDirectory(options = {}) {
9
+ const { platform, env } = selectedEnvironment(options);
10
+ const join = platform === 'win32' ? path.win32.join : path.posix.join;
11
+ if (platform === 'win32') {
12
+ const root = env.LOCALAPPDATA ?? env.APPDATA ?? env.USERPROFILE;
13
+ if (!root) {
14
+ throw new KiokukoError('VALIDATION_ERROR', 'A Windows user data directory is unavailable');
15
+ }
16
+ return join(root, 'kiokuko');
17
+ }
18
+ if (platform === 'darwin') {
19
+ const home = env.HOME;
20
+ if (!home)
21
+ throw new KiokukoError('VALIDATION_ERROR', 'HOME is unavailable');
22
+ return join(home, 'Library', 'Application Support', 'kiokuko');
23
+ }
24
+ const root = env.XDG_DATA_HOME || (env.HOME ? join(env.HOME, '.local', 'share') : undefined);
25
+ if (!root)
26
+ throw new KiokukoError('VALIDATION_ERROR', 'XDG_DATA_HOME or HOME is unavailable');
27
+ return join(root, 'kiokuko');
28
+ }
29
+ export function getRuntimeDirectory(options = {}) {
30
+ const { platform, env } = selectedEnvironment(options);
31
+ const join = platform === 'win32' ? path.win32.join : path.posix.join;
32
+ if (platform === 'linux' && env.XDG_RUNTIME_DIR) {
33
+ return join(env.XDG_RUNTIME_DIR, 'kiokuko');
34
+ }
35
+ return getPlatformDataDirectory(options);
36
+ }
37
+ export function getRuntimeDescriptorPath(options = {}) {
38
+ const { platform } = selectedEnvironment(options);
39
+ const join = platform === 'win32' ? path.win32.join : path.posix.join;
40
+ return join(getRuntimeDirectory(options), 'server.json');
41
+ }
42
+ export function getDatabaseLockPath(databasePath, options = {}) {
43
+ const { platform } = selectedEnvironment(options);
44
+ const platformPath = platform === 'win32' ? path.win32 : path.posix;
45
+ const resolvedPath = platformPath.resolve(databasePath);
46
+ const fingerprint = createHash('sha256').update(resolvedPath, 'utf8').digest('hex');
47
+ const join = platform === 'win32' ? path.win32.join : path.posix.join;
48
+ return join(getRuntimeDirectory(options), `${fingerprint}.lock`);
49
+ }
50
+ export function getGlobalDatabasePath(options = {}) {
51
+ const { platform } = selectedEnvironment(options);
52
+ const join = platform === 'win32' ? path.win32.join : path.posix.join;
53
+ return join(getPlatformDataDirectory(options), 'kiokuko.sqlite3');
54
+ }
55
+ function requireHome(options) {
56
+ const { platform, env } = selectedEnvironment(options);
57
+ const home = platform === 'win32' ? (env.USERPROFILE ?? env.HOME) : env.HOME;
58
+ if (!home)
59
+ throw new KiokukoError('VALIDATION_ERROR', 'The user home directory is unavailable');
60
+ return { home, join: platform === 'win32' ? path.win32.join : path.posix.join };
61
+ }
62
+ /** Global Codex configuration directory. CODEX_HOME intentionally takes precedence. */
63
+ export function getCodexHome(options = {}) {
64
+ const { platform, env } = selectedEnvironment(options);
65
+ if (env.CODEX_HOME)
66
+ return env.CODEX_HOME;
67
+ const { home, join } = requireHome(options);
68
+ return join(home, '.codex');
69
+ }
70
+ export function getCodexConfigPath(options = {}) {
71
+ const { platform } = selectedEnvironment(options);
72
+ const join = platform === 'win32' ? path.win32.join : path.posix.join;
73
+ return join(getCodexHome(options), 'config.toml');
74
+ }
75
+ export function getCodexInstructionsPath(options = {}) {
76
+ const { platform } = selectedEnvironment(options);
77
+ const join = platform === 'win32' ? path.win32.join : path.posix.join;
78
+ return join(getCodexHome(options), 'AGENTS.md');
79
+ }
80
+ /** OpenCode's documented global configuration directory. */
81
+ export function getOpenCodeConfigDirectory(options = {}) {
82
+ const { platform, env } = selectedEnvironment(options);
83
+ const join = platform === 'win32' ? path.win32.join : path.posix.join;
84
+ if (platform === 'win32') {
85
+ const root = env.APPDATA ?? env.LOCALAPPDATA;
86
+ if (root)
87
+ return join(root, 'opencode');
88
+ }
89
+ if (env.XDG_CONFIG_HOME)
90
+ return join(env.XDG_CONFIG_HOME, 'opencode');
91
+ const { home } = requireHome(options);
92
+ return join(home, '.config', 'opencode');
93
+ }
94
+ export function getOpenCodeInstructionsPath(options = {}) {
95
+ const { platform } = selectedEnvironment(options);
96
+ const join = platform === 'win32' ? path.win32.join : path.posix.join;
97
+ return join(getOpenCodeConfigDirectory(options), 'AGENTS.md');
98
+ }
99
+ export async function ensurePlatformDataDirectory(options = {}) {
100
+ const directory = getPlatformDataDirectory(options);
101
+ await mkdir(directory, { recursive: true, mode: 0o700 });
102
+ return directory;
103
+ }
104
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ProjectConfig {
2
+ schemaVersion: 1;
3
+ repositoryId: string;
4
+ workspace: string;
5
+ agentFile: string;
6
+ templateVersion: number;
7
+ }
8
+ export declare function parseProjectConfig(value: unknown): ProjectConfig;
9
+ export declare function readProjectConfig(filePath: string): Promise<ProjectConfig>;
10
+ //# sourceMappingURL=project-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/config/project-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAmBD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CA8BhE;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAOhF"}
@@ -0,0 +1,59 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { KiokukoError } from '../errors.js';
4
+ // Binding validation is deliberately strict: unknown fields are rejected rather than ignored.
5
+ const REQUIRED_FIELDS = new Set(['schemaVersion', 'repositoryId', 'workspace', 'agentFile', 'templateVersion']);
6
+ function isPlainObject(value) {
7
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
8
+ }
9
+ function validateAgentFile(agentFile) {
10
+ if (typeof agentFile !== 'string' || agentFile.length === 0 || agentFile.includes('\0')) {
11
+ throw new KiokukoError('VALIDATION_ERROR', 'agentFile must be a non-empty relative path');
12
+ }
13
+ const normalized = agentFile.replaceAll('\\', '/');
14
+ if (path.posix.isAbsolute(normalized) || /^[A-Za-z]:\//.test(normalized) || normalized.split('/').includes('..')) {
15
+ throw new KiokukoError('VALIDATION_ERROR', 'agentFile must remain inside the repository root');
16
+ }
17
+ }
18
+ export function parseProjectConfig(value) {
19
+ if (!isPlainObject(value)) {
20
+ throw new KiokukoError('VALIDATION_ERROR', 'binding must be a JSON object');
21
+ }
22
+ for (const field of Object.keys(value)) {
23
+ if (!REQUIRED_FIELDS.has(field)) {
24
+ throw new KiokukoError('VALIDATION_ERROR', `Unknown binding field: ${field}`);
25
+ }
26
+ }
27
+ if (value.schemaVersion !== 1) {
28
+ throw new KiokukoError('VALIDATION_ERROR', 'Unsupported binding schemaVersion');
29
+ }
30
+ if (typeof value.repositoryId !== 'string' || value.repositoryId.length === 0) {
31
+ throw new KiokukoError('VALIDATION_ERROR', 'repositoryId must be a non-empty string');
32
+ }
33
+ if (typeof value.workspace !== 'string' || value.workspace.length === 0) {
34
+ throw new KiokukoError('VALIDATION_ERROR', 'workspace must be a non-empty string');
35
+ }
36
+ validateAgentFile(value.agentFile);
37
+ const templateVersion = value.templateVersion;
38
+ if (typeof templateVersion !== 'number' || !Number.isInteger(templateVersion) || templateVersion < 1) {
39
+ throw new KiokukoError('VALIDATION_ERROR', 'templateVersion must be a positive integer');
40
+ }
41
+ return {
42
+ schemaVersion: 1,
43
+ repositoryId: value.repositoryId,
44
+ workspace: value.workspace,
45
+ agentFile: value.agentFile,
46
+ templateVersion,
47
+ };
48
+ }
49
+ export async function readProjectConfig(filePath) {
50
+ try {
51
+ return parseProjectConfig(JSON.parse(await readFile(filePath, 'utf8')));
52
+ }
53
+ catch (error) {
54
+ if (error instanceof KiokukoError)
55
+ throw error;
56
+ throw new KiokukoError('VALIDATION_ERROR', 'Unable to read project binding JSON');
57
+ }
58
+ }
59
+ //# sourceMappingURL=project-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/config/project-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { SqliteDatabase } from '../db/adapter.js';
2
+ import type { TaskProfile } from '../akinator/types.js';
3
+ import { listContextDeliveries, type ContextDeliveryInput, type ContextDeliveryView, type ExternalSyncSummary } from './delivery.js';
4
+ import { type Recommendation } from './recommendations.js';
5
+ import { type RankedCandidate } from './ranking.js';
6
+ import { type LedgerProjection } from '../ledger/projection.js';
7
+ import { type PreparedOfficialSourceSync, type SourceSyncResult } from '../knowledge/sources.js';
8
+ export declare const CONTEXT_BROKER_POLICY_VERSION: "context-ranking-v1+recommendations.v1";
9
+ export declare const CONTEXT_BROKER_DEFAULT_LIMIT = 20;
10
+ export declare const CONTEXT_BROKER_MAX_LIMIT = 100;
11
+ export declare const CONTEXT_BROKER_DEFAULT_CHARACTER_BUDGET = 8000;
12
+ export declare const CONTEXT_BROKER_MAX_CHARACTER_BUDGET = 100000;
13
+ export interface ContextBrokerQueryInput {
14
+ workspace?: string;
15
+ runId?: string;
16
+ task?: string;
17
+ taskProfile?: TaskProfile;
18
+ recommendedTags?: string[];
19
+ changedPaths?: string[];
20
+ errorSignatures?: string[];
21
+ limit?: number;
22
+ characterBudget?: number;
23
+ }
24
+ export interface ContextBrokerContextItem {
25
+ entryId: string;
26
+ entryRevision: number;
27
+ rank: number;
28
+ scoreComponents: RankedCandidate['scoreComponents'];
29
+ selectionReasons: string[];
30
+ content: RankedCandidate['content'];
31
+ untrusted: true;
32
+ }
33
+ export interface ContextBrokerContext {
34
+ deliveryId: string | null;
35
+ runId: string | null;
36
+ throughSequence: number;
37
+ taskProfileHash: string;
38
+ queryHash: string;
39
+ policyVersion: typeof CONTEXT_BROKER_POLICY_VERSION;
40
+ items: ContextBrokerContextItem[];
41
+ untrusted: true;
42
+ }
43
+ export interface ContextBrokerResult {
44
+ status: 'needs_answer' | 'ready' | 'exhausted' | 'unbound';
45
+ taskProfile: TaskProfile;
46
+ profileHash: string;
47
+ acceptedThrough: number;
48
+ intakeSessionId: string | null;
49
+ recommendedTags: string[];
50
+ projection: LedgerProjection | null;
51
+ context: ContextBrokerContext | null;
52
+ recommendations: Recommendation[];
53
+ externalSyncSummary: ExternalSyncSummary;
54
+ }
55
+ export interface ContextBrokerPersistence {
56
+ persistSources?: (workspace: string, prepared: PreparedOfficialSourceSync) => Promise<SourceSyncResult> | SourceSyncResult;
57
+ persistDelivery?: (input: ContextDeliveryInput) => Promise<ContextDeliveryView> | ContextDeliveryView;
58
+ }
59
+ export interface ContextBrokerOptions {
60
+ readonly now?: () => string;
61
+ readonly fetchImpl?: typeof fetch;
62
+ }
63
+ export declare class ContextBroker {
64
+ private readonly database;
65
+ private readonly options;
66
+ private readonly inFlight;
67
+ constructor(database: SqliteDatabase, options?: ContextBrokerOptions);
68
+ listDeliveries(input: {
69
+ runId: string;
70
+ cursor?: string;
71
+ limit?: number;
72
+ }): ReturnType<typeof listContextDeliveries> & {
73
+ untrusted: true;
74
+ };
75
+ query(rawInput: unknown, persistence?: ContextBrokerPersistence): Promise<ContextBrokerResult>;
76
+ private queryPrepared;
77
+ }
78
+ export declare function contextBrokerQueryHash(input: unknown): string;
79
+ export declare function newContextDeliveryId(): string;
80
+ //# sourceMappingURL=broker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/context/broker.ts"],"names":[],"mappings":"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"}