@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,513 @@
1
+ import { KiokukoError } from '../errors.js';
2
+ import { ENTRY_KINDS, ENTRY_STATUSES, TRUST_LEVELS } from '../serialization/validate.js';
3
+ import { TASK_TYPES } from '../akinator/types.js';
4
+ export const CONTEXT_RANKING_VERSION = 'context-ranking-v1';
5
+ /** Integer score weights. Components are additive and deliberately bounded. */
6
+ export const CONTEXT_RANKING_WEIGHTS = Object.freeze({
7
+ statusVerified: 100,
8
+ statusCandidate: 40,
9
+ trustSystemVerified: 30,
10
+ trustSourceVerified: 25,
11
+ trustUserAsserted: 15,
12
+ confidence: 20,
13
+ taskAffinity: 12,
14
+ recommendedTag: 10,
15
+ pathOverlap: 12,
16
+ errorSignature: 15,
17
+ feedbackHelpful: 3,
18
+ feedbackIrrelevant: -3,
19
+ feedbackStale: -4,
20
+ feedbackConflicting: -4,
21
+ recency: 5,
22
+ contradiction: 0,
23
+ });
24
+ export const CONTEXT_RANKING_COMPONENTS = [
25
+ 'status',
26
+ 'trust',
27
+ 'confidence',
28
+ 'taskAffinity',
29
+ 'recommendedTags',
30
+ 'pathOverlap',
31
+ 'errorSignature',
32
+ 'feedback',
33
+ 'recency',
34
+ 'contradiction',
35
+ ];
36
+ export const CONTEXT_SELECTION_REASON_ORDER = [
37
+ 'verified',
38
+ 'candidate',
39
+ 'system_verified_trust',
40
+ 'source_verified_trust',
41
+ 'user_asserted_trust',
42
+ 'confidence',
43
+ 'task_kind_affinity',
44
+ 'task_tag_affinity',
45
+ 'recommended_tag_match',
46
+ 'target_match',
47
+ 'changed_path_match',
48
+ 'error_signature_match',
49
+ 'helpful_feedback',
50
+ 'irrelevant_feedback',
51
+ 'stale_feedback',
52
+ 'conflicting_feedback',
53
+ 'recent',
54
+ 'contradiction_warning',
55
+ 'revision_changed',
56
+ ];
57
+ const MAX_CANDIDATES = 500;
58
+ const MAX_ARRAY_ITEMS = 500;
59
+ const MAX_ID_LENGTH = 200;
60
+ const MAX_TAG_LENGTH = 200;
61
+ const MAX_PATH_LENGTH = 1_000;
62
+ const MAX_ERROR_SIGNATURE_LENGTH = 500;
63
+ const MAX_TITLE_LENGTH = 2_000;
64
+ const MAX_SUMMARY_LENGTH = 4_000;
65
+ const MAX_BODY_LENGTH = 100_000;
66
+ const MAX_SCOPE_DEPTH = 6;
67
+ const MAX_SCOPE_ITEMS = 500;
68
+ export const CONTEXT_RANKING_DEFAULT_CHARACTER_BUDGET = 8_000;
69
+ // Chosen to match the existing bounded retrieval ceiling; delivery previews remain capped.
70
+ export const CONTEXT_RANKING_MAX_CHARACTER_BUDGET = 100_000;
71
+ const DEFAULT_CHARACTER_BUDGET = CONTEXT_RANKING_DEFAULT_CHARACTER_BUDGET;
72
+ const MAX_CHARACTER_BUDGET = CONTEXT_RANKING_MAX_CHARACTER_BUDGET;
73
+ const TASK_AFFINITY = {
74
+ build: { kinds: ['decision', 'lesson', 'reference'], tags: ['build', 'builder', 'implementation', 'skill:test-driven-development'] },
75
+ debug: { kinds: ['lesson', 'decision', 'reference'], tags: ['debug', 'debugging', 'reviewer', 'skill:systematic-debugging'] },
76
+ research: { kinds: ['reference', 'fact'], tags: ['research', 'researcher', 'skill:grounded-citations'] },
77
+ review: { kinds: ['lesson', 'decision', 'reference'], tags: ['review', 'reviewer', 'code-review', 'skill:requesting-code-review'] },
78
+ devops: { kinds: ['lesson', 'decision', 'reference'], tags: ['devops', 'skill:server-resource-monitoring'] },
79
+ writing: { kinds: ['preference', 'reference', 'decision'], tags: ['writing', 'writer', 'skill:writing-plans'] },
80
+ analysis: { kinds: ['fact', 'reference', 'decision'], tags: ['analysis', 'analyst'] },
81
+ };
82
+ function invalid() {
83
+ throw new KiokukoError('VALIDATION_ERROR', 'Invalid context ranking input');
84
+ }
85
+ function isRecord(value) {
86
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
87
+ return false;
88
+ const prototype = Object.getPrototypeOf(value);
89
+ return prototype === Object.prototype || prototype === null;
90
+ }
91
+ function hasOwn(value, key) {
92
+ return Object.prototype.hasOwnProperty.call(value, key);
93
+ }
94
+ function knownFields(value, allowed) {
95
+ const allowedSet = new Set(allowed);
96
+ if (Object.keys(value).some((key) => !allowedSet.has(key)))
97
+ invalid();
98
+ }
99
+ function requiredFields(value, fields) {
100
+ if (fields.some((field) => !hasOwn(value, field)))
101
+ invalid();
102
+ }
103
+ function boundedString(value, max, nonEmpty = true) {
104
+ if (typeof value !== 'string' || value.length > max || (nonEmpty && value.trim().length === 0))
105
+ invalid();
106
+ return value;
107
+ }
108
+ function positiveInteger(value, max) {
109
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1 || value > max)
110
+ invalid();
111
+ return value;
112
+ }
113
+ function finiteConfidence(value) {
114
+ if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || value > 1)
115
+ invalid();
116
+ return value;
117
+ }
118
+ function canonicalTimestamp(value) {
119
+ const timestamp = boundedString(value, 64);
120
+ if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/u.test(timestamp))
121
+ invalid();
122
+ const parsed = Date.parse(timestamp);
123
+ if (!Number.isFinite(parsed) || new Date(parsed).toISOString() !== timestamp)
124
+ invalid();
125
+ return timestamp;
126
+ }
127
+ function enumValue(value, allowed) {
128
+ if (typeof value !== 'string' || !allowed.includes(value))
129
+ invalid();
130
+ return value;
131
+ }
132
+ function cloneScope(value, depth = 0, itemCount = { value: 0 }) {
133
+ if (!isRecord(value) || depth > MAX_SCOPE_DEPTH)
134
+ invalid();
135
+ const result = {};
136
+ for (const key of Object.keys(value).sort()) {
137
+ if (key.length > MAX_TAG_LENGTH)
138
+ invalid();
139
+ itemCount.value += 1;
140
+ if (itemCount.value > MAX_SCOPE_ITEMS)
141
+ invalid();
142
+ const child = value[key];
143
+ if (child === null || typeof child === 'boolean') {
144
+ result[key] = child;
145
+ }
146
+ else if (typeof child === 'string') {
147
+ result[key] = boundedString(child, MAX_BODY_LENGTH, false);
148
+ }
149
+ else if (typeof child === 'number') {
150
+ if (!Number.isFinite(child))
151
+ invalid();
152
+ result[key] = child;
153
+ }
154
+ else if (Array.isArray(child)) {
155
+ if (child.length > MAX_ARRAY_ITEMS)
156
+ invalid();
157
+ result[key] = child.map((item) => cloneScopeValue(item, depth + 1, itemCount));
158
+ }
159
+ else if (isRecord(child)) {
160
+ result[key] = cloneScope(child, depth + 1, itemCount);
161
+ }
162
+ else {
163
+ invalid();
164
+ }
165
+ }
166
+ return result;
167
+ }
168
+ function cloneScopeValue(value, depth, itemCount) {
169
+ if (value === null || typeof value === 'boolean')
170
+ return value;
171
+ if (typeof value === 'string')
172
+ return boundedString(value, MAX_BODY_LENGTH, false);
173
+ if (typeof value === 'number') {
174
+ if (!Number.isFinite(value))
175
+ invalid();
176
+ return value;
177
+ }
178
+ if (Array.isArray(value)) {
179
+ if (value.length > MAX_ARRAY_ITEMS)
180
+ invalid();
181
+ return value.map((item) => cloneScopeValue(item, depth + 1, itemCount));
182
+ }
183
+ if (isRecord(value))
184
+ return cloneScope(value, depth, itemCount);
185
+ invalid();
186
+ }
187
+ function stringArray(value, maxLength, maxItems) {
188
+ if (!Array.isArray(value) || value.length > maxItems)
189
+ invalid();
190
+ return value.map((item) => boundedString(item, maxLength));
191
+ }
192
+ function normalizeLiteral(value) {
193
+ return value.normalize('NFKC').toLowerCase().trim().replace(/\s+/gu, ' ');
194
+ }
195
+ function literalTokens(value) {
196
+ const normalized = normalizeLiteral(value);
197
+ return normalized.match(/[\p{L}\p{N}](?:[\p{L}\p{N}._:/\\-]*[\p{L}\p{N}])?/gu) ?? [];
198
+ }
199
+ function pathEvidenceTokens(value) {
200
+ const result = new Set();
201
+ for (const token of literalTokens(value)) {
202
+ result.add(token);
203
+ for (const segment of token.split(/[\\/]+/u)) {
204
+ if (segment.length > 0)
205
+ result.add(segment);
206
+ }
207
+ }
208
+ return result;
209
+ }
210
+ function collectScopeStrings(value, result = []) {
211
+ for (const child of Object.values(value)) {
212
+ if (typeof child === 'string')
213
+ result.push(child);
214
+ else if (Array.isArray(child)) {
215
+ for (const item of child) {
216
+ if (typeof item === 'string')
217
+ result.push(item);
218
+ else if (isRecord(item))
219
+ collectScopeStrings(item, result);
220
+ }
221
+ }
222
+ else if (isRecord(child))
223
+ collectScopeStrings(child, result);
224
+ }
225
+ return result;
226
+ }
227
+ function candidatePathFields(candidate) {
228
+ return [candidate.title, ...candidate.tags, ...collectScopeStrings(candidate.scope)];
229
+ }
230
+ function candidateErrorFields(candidate) {
231
+ return [candidate.title, ...(candidate.summary === null ? [] : [candidate.summary]), ...candidate.tags, ...collectScopeStrings(candidate.scope)];
232
+ }
233
+ function literalMatch(field, signature) {
234
+ const normalizedField = normalizeLiteral(field);
235
+ const normalizedSignature = normalizeLiteral(signature);
236
+ const start = normalizedField.indexOf(normalizedSignature);
237
+ if (start < 0)
238
+ return false;
239
+ if (!/^[\u0000-\u007f]+$/u.test(normalizedSignature))
240
+ return true;
241
+ const before = normalizedField[start - 1];
242
+ const after = normalizedField[start + normalizedSignature.length];
243
+ const word = /[A-Za-z0-9_]/u;
244
+ return !(before !== undefined && word.test(before)) && !(after !== undefined && word.test(after));
245
+ }
246
+ function parseTaskProfile(value) {
247
+ if (!isRecord(value))
248
+ invalid();
249
+ knownFields(value, ['taskType', 'target', 'expected', 'constraints']);
250
+ requiredFields(value, ['taskType', 'target', 'expected', 'constraints']);
251
+ const taskType = value.taskType === null ? null : enumValue(value.taskType, TASK_TYPES);
252
+ const target = value.target === null ? null : boundedString(value.target, MAX_PATH_LENGTH);
253
+ const expected = value.expected === null ? null : boundedString(value.expected, MAX_SUMMARY_LENGTH);
254
+ const constraints = value.constraints === null ? null : boundedString(value.constraints, MAX_SUMMARY_LENGTH);
255
+ return { taskType, target, expected, constraints };
256
+ }
257
+ function parseCandidate(value) {
258
+ if (!isRecord(value))
259
+ invalid();
260
+ knownFields(value, [
261
+ 'id', 'revision', 'kind', 'status', 'trustLevel', 'confidence', 'title', 'summary', 'body', 'tags', 'scope', 'updatedAt', 'contradiction',
262
+ ]);
263
+ requiredFields(value, [
264
+ 'id', 'revision', 'kind', 'status', 'trustLevel', 'confidence', 'title', 'summary', 'body', 'tags', 'scope', 'updatedAt',
265
+ ]);
266
+ const summary = value.summary === null ? null : boundedString(value.summary, MAX_SUMMARY_LENGTH, false);
267
+ const contradiction = value.contradiction === undefined ? false : value.contradiction;
268
+ if (typeof contradiction !== 'boolean')
269
+ invalid();
270
+ return {
271
+ id: boundedString(value.id, MAX_ID_LENGTH),
272
+ revision: positiveInteger(value.revision, Number.MAX_SAFE_INTEGER),
273
+ kind: enumValue(value.kind, ENTRY_KINDS),
274
+ status: enumValue(value.status, ENTRY_STATUSES),
275
+ trustLevel: enumValue(value.trustLevel, TRUST_LEVELS),
276
+ confidence: finiteConfidence(value.confidence),
277
+ title: boundedString(value.title, MAX_TITLE_LENGTH),
278
+ summary,
279
+ body: boundedString(value.body, MAX_BODY_LENGTH, false),
280
+ tags: stringArray(value.tags, MAX_TAG_LENGTH, MAX_ARRAY_ITEMS),
281
+ scope: cloneScope(value.scope),
282
+ updatedAt: canonicalTimestamp(value.updatedAt),
283
+ ...(contradiction ? { contradiction: true } : {}),
284
+ };
285
+ }
286
+ function parseInput(value) {
287
+ if (!isRecord(value))
288
+ invalid();
289
+ knownFields(value, ['taskProfile', 'recommendedTags', 'changedPaths', 'errorSignatures', 'priorDelivered', 'feedback', 'candidates', 'limit', 'characterBudget']);
290
+ requiredFields(value, ['taskProfile', 'recommendedTags', 'changedPaths', 'errorSignatures', 'priorDelivered', 'feedback', 'candidates', 'limit']);
291
+ const candidatesValue = value.candidates;
292
+ if (!Array.isArray(candidatesValue) || candidatesValue.length > MAX_CANDIDATES)
293
+ invalid();
294
+ const candidates = candidatesValue.map(parseCandidate);
295
+ const ids = new Set();
296
+ for (const candidateValue of candidates) {
297
+ if (ids.has(candidateValue.id))
298
+ invalid();
299
+ ids.add(candidateValue.id);
300
+ }
301
+ if (!Array.isArray(value.priorDelivered) || value.priorDelivered.length > MAX_ARRAY_ITEMS)
302
+ invalid();
303
+ const priorDelivered = value.priorDelivered.map((item) => {
304
+ if (!isRecord(item))
305
+ invalid();
306
+ knownFields(item, ['entryId', 'revision']);
307
+ requiredFields(item, ['entryId', 'revision']);
308
+ return { entryId: boundedString(item.entryId, MAX_ID_LENGTH), revision: positiveInteger(item.revision, Number.MAX_SAFE_INTEGER) };
309
+ });
310
+ if (!Array.isArray(value.feedback) || value.feedback.length > MAX_ARRAY_ITEMS)
311
+ invalid();
312
+ const feedback = value.feedback.map((item) => {
313
+ if (!isRecord(item))
314
+ invalid();
315
+ knownFields(item, ['entryId', 'verdict']);
316
+ requiredFields(item, ['entryId', 'verdict']);
317
+ return { entryId: boundedString(item.entryId, MAX_ID_LENGTH), verdict: enumValue(item.verdict, ['helpful', 'irrelevant', 'stale', 'conflicting']) };
318
+ });
319
+ const characterBudget = value.characterBudget === undefined ? DEFAULT_CHARACTER_BUDGET : positiveInteger(value.characterBudget, MAX_CHARACTER_BUDGET);
320
+ return {
321
+ taskProfile: parseTaskProfile(value.taskProfile),
322
+ recommendedTags: stringArray(value.recommendedTags, MAX_TAG_LENGTH, MAX_ARRAY_ITEMS),
323
+ changedPaths: stringArray(value.changedPaths, MAX_PATH_LENGTH, MAX_ARRAY_ITEMS),
324
+ errorSignatures: stringArray(value.errorSignatures, MAX_ERROR_SIGNATURE_LENGTH, MAX_ARRAY_ITEMS),
325
+ priorDelivered,
326
+ feedback,
327
+ candidates,
328
+ limit: positiveInteger(value.limit, 100),
329
+ characterBudget,
330
+ };
331
+ }
332
+ function statusScore(status) {
333
+ return status === 'verified' ? CONTEXT_RANKING_WEIGHTS.statusVerified : CONTEXT_RANKING_WEIGHTS.statusCandidate;
334
+ }
335
+ function trustScore(trustLevel) {
336
+ if (trustLevel === 'system_verified')
337
+ return CONTEXT_RANKING_WEIGHTS.trustSystemVerified;
338
+ if (trustLevel === 'source_verified')
339
+ return CONTEXT_RANKING_WEIGHTS.trustSourceVerified;
340
+ if (trustLevel === 'user_asserted')
341
+ return CONTEXT_RANKING_WEIGHTS.trustUserAsserted;
342
+ return 0;
343
+ }
344
+ function scoreCandidate(candidate, context) {
345
+ const candidateTags = new Set(candidate.tags.map(normalizeLiteral));
346
+ const taskAffinity = context.taskProfile.taskType === null ? null : TASK_AFFINITY[context.taskProfile.taskType];
347
+ const taskTagMatch = taskAffinity?.tags.some((tag) => candidateTags.has(normalizeLiteral(tag))) ?? false;
348
+ const taskKindMatch = taskAffinity?.kinds.includes(candidate.kind) ?? false;
349
+ const recommendedTagMatches = [...context.recommendedTags].filter((tag) => candidateTags.has(tag)).length;
350
+ const candidatePathTokens = new Set();
351
+ for (const field of candidatePathFields(candidate)) {
352
+ for (const token of pathEvidenceTokens(field))
353
+ candidatePathTokens.add(token);
354
+ }
355
+ const targetMatch = context.taskProfile.target !== null
356
+ && [...pathEvidenceTokens(context.taskProfile.target)].some((token) => candidatePathTokens.has(token));
357
+ const changedPathMatch = context.changedPaths.some((path) => [...pathEvidenceTokens(path)].some((token) => candidatePathTokens.has(token)));
358
+ const errorMatches = candidate.kind === 'lesson' || candidate.kind === 'reference'
359
+ ? context.errorSignatures.filter((signature) => candidateErrorFields(candidate).some((field) => literalMatch(field, signature))).length
360
+ : 0;
361
+ const feedbackVerdicts = context.feedback.get(candidate.id) ?? [];
362
+ const feedbackScore = feedbackVerdicts.reduce((sum, verdict) => {
363
+ if (verdict === 'helpful')
364
+ return sum + CONTEXT_RANKING_WEIGHTS.feedbackHelpful;
365
+ if (verdict === 'irrelevant')
366
+ return sum + CONTEXT_RANKING_WEIGHTS.feedbackIrrelevant;
367
+ if (verdict === 'stale')
368
+ return sum + CONTEXT_RANKING_WEIGHTS.feedbackStale;
369
+ return sum + CONTEXT_RANKING_WEIGHTS.feedbackConflicting;
370
+ }, 0);
371
+ const recencyScore = Math.min(5, Math.floor(Math.max(0, Date.parse(candidate.updatedAt) - context.oldestUpdatedAt) / 86_400_000));
372
+ const scoreComponents = {
373
+ status: statusScore(candidate.status),
374
+ trust: trustScore(candidate.trustLevel),
375
+ confidence: Math.round(candidate.confidence * CONTEXT_RANKING_WEIGHTS.confidence),
376
+ taskAffinity: taskKindMatch || taskTagMatch ? CONTEXT_RANKING_WEIGHTS.taskAffinity : 0,
377
+ recommendedTags: Math.min(20, recommendedTagMatches * CONTEXT_RANKING_WEIGHTS.recommendedTag),
378
+ pathOverlap: targetMatch || changedPathMatch ? CONTEXT_RANKING_WEIGHTS.pathOverlap : 0,
379
+ errorSignature: Math.min(30, errorMatches * CONTEXT_RANKING_WEIGHTS.errorSignature),
380
+ feedback: Math.max(-4, Math.min(4, feedbackScore)),
381
+ recency: recencyScore,
382
+ contradiction: 0,
383
+ };
384
+ const selectionReasons = [];
385
+ if (candidate.status === 'verified')
386
+ selectionReasons.push('verified');
387
+ else
388
+ selectionReasons.push('candidate');
389
+ if (candidate.trustLevel !== 'untrusted')
390
+ selectionReasons.push(`${candidate.trustLevel}_trust`);
391
+ if (scoreComponents.confidence > 0)
392
+ selectionReasons.push('confidence');
393
+ if (taskKindMatch)
394
+ selectionReasons.push('task_kind_affinity');
395
+ if (taskTagMatch)
396
+ selectionReasons.push('task_tag_affinity');
397
+ if (scoreComponents.recommendedTags > 0)
398
+ selectionReasons.push('recommended_tag_match');
399
+ if (targetMatch)
400
+ selectionReasons.push('target_match');
401
+ if (changedPathMatch)
402
+ selectionReasons.push('changed_path_match');
403
+ if (scoreComponents.errorSignature > 0)
404
+ selectionReasons.push('error_signature_match');
405
+ if (feedbackVerdicts.includes('helpful'))
406
+ selectionReasons.push('helpful_feedback');
407
+ for (const verdict of ['irrelevant', 'stale', 'conflicting']) {
408
+ if (feedbackVerdicts.includes(verdict))
409
+ selectionReasons.push(`${verdict}_feedback`);
410
+ }
411
+ if (recencyScore > 0)
412
+ selectionReasons.push('recent');
413
+ if (candidate.contradiction === true)
414
+ selectionReasons.push('contradiction_warning');
415
+ const deliveredRevision = context.priorDelivered.get(candidate.id);
416
+ if (deliveredRevision !== undefined && candidate.revision > deliveredRevision)
417
+ selectionReasons.push('revision_changed');
418
+ selectionReasons.sort((left, right) => reasonRank(left) - reasonRank(right) || compareStrings(left, right));
419
+ return {
420
+ entryId: candidate.id,
421
+ revision: candidate.revision,
422
+ kind: candidate.kind,
423
+ status: candidate.status,
424
+ trustLevel: candidate.trustLevel,
425
+ confidence: candidate.confidence,
426
+ tags: [...candidate.tags].sort(compareStrings),
427
+ scope: cloneScope(candidate.scope),
428
+ updatedAt: candidate.updatedAt,
429
+ totalScore: Object.values(scoreComponents).reduce((sum, component) => sum + component, 0),
430
+ scoreComponents,
431
+ selectionReasons,
432
+ content: {
433
+ title: candidate.title,
434
+ summary: candidate.summary,
435
+ bodyPreview: candidate.body,
436
+ characterCount: candidate.title.length + (candidate.summary?.length ?? 0) + candidate.body.length,
437
+ truncated: false,
438
+ },
439
+ };
440
+ }
441
+ function compareStrings(left, right) {
442
+ return left < right ? -1 : left > right ? 1 : 0;
443
+ }
444
+ function reasonRank(reason) {
445
+ const index = CONTEXT_SELECTION_REASON_ORDER.indexOf(reason);
446
+ return index === -1 ? CONTEXT_SELECTION_REASON_ORDER.length : index;
447
+ }
448
+ function characterCount(value) {
449
+ return Array.from(value).length;
450
+ }
451
+ function takeCharacters(value, budget) {
452
+ return Array.from(value).slice(0, Math.max(0, budget)).join('');
453
+ }
454
+ function fitContent(content, budget) {
455
+ let remaining = budget;
456
+ const title = takeCharacters(content.title, remaining);
457
+ remaining -= characterCount(title);
458
+ const fullSummary = content.summary ?? '';
459
+ const summaryText = takeCharacters(fullSummary, remaining);
460
+ remaining -= characterCount(summaryText);
461
+ const bodyPreview = takeCharacters(content.bodyPreview, remaining);
462
+ const truncated = title.length !== content.title.length
463
+ || summaryText.length !== fullSummary.length
464
+ || bodyPreview.length !== content.bodyPreview.length;
465
+ return {
466
+ title,
467
+ summary: content.summary === null ? null : summaryText,
468
+ bodyPreview,
469
+ characterCount: characterCount(title) + characterCount(summaryText) + characterCount(bodyPreview),
470
+ truncated,
471
+ };
472
+ }
473
+ function applyCharacterBudget(ranked, budget) {
474
+ const selected = [];
475
+ let remaining = budget;
476
+ for (const candidate of ranked) {
477
+ if (remaining <= 0)
478
+ break;
479
+ const content = fitContent(candidate.content, remaining);
480
+ selected.push({ ...candidate, content });
481
+ remaining -= content.characterCount;
482
+ }
483
+ return selected;
484
+ }
485
+ export function rankContextCandidates(input) {
486
+ const parsed = parseInput(input);
487
+ const priorDelivered = new Map();
488
+ for (const delivered of parsed.priorDelivered) {
489
+ priorDelivered.set(delivered.entryId, Math.max(delivered.revision, priorDelivered.get(delivered.entryId) ?? 0));
490
+ }
491
+ const feedback = new Map();
492
+ for (const signal of parsed.feedback)
493
+ feedback.set(signal.entryId, [...(feedback.get(signal.entryId) ?? []), signal.verdict]);
494
+ const context = {
495
+ taskProfile: parsed.taskProfile,
496
+ recommendedTags: new Set(parsed.recommendedTags.map(normalizeLiteral)),
497
+ changedPaths: parsed.changedPaths,
498
+ errorSignatures: parsed.errorSignatures,
499
+ priorDelivered,
500
+ feedback,
501
+ oldestUpdatedAt: parsed.candidates.length === 0 ? 0 : Math.min(...parsed.candidates.map((candidate) => Date.parse(candidate.updatedAt))),
502
+ };
503
+ const ranked = parsed.candidates
504
+ .filter((candidate) => candidate.status !== 'superseded')
505
+ .filter((candidate) => {
506
+ const deliveredRevision = context.priorDelivered.get(candidate.id);
507
+ return deliveredRevision === undefined || candidate.revision > deliveredRevision;
508
+ })
509
+ .map((candidate) => scoreCandidate(candidate, context))
510
+ .sort((left, right) => right.totalScore - left.totalScore || compareStrings(left.entryId, right.entryId));
511
+ return applyCharacterBudget(ranked.slice(0, parsed.limit), parsed.characterBudget);
512
+ }
513
+ //# sourceMappingURL=ranking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranking.js","sourceRoot":"","sources":["../../src/context/ranking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ export declare const RECOMMENDATION_POLICY_VERSION: "recommendations.v1";
2
+ export declare const RECOMMENDATION_CODES: readonly ["INTAKE_INCOMPLETE", "VERIFY_AFTER_MUTATION", "SIDE_EFFECT_OUTCOME_UNKNOWN", "UNRESOLVED_FAILURE", "COVERAGE_INCOMPLETE", "CONTEXT_STALE", "CONTRADICTORY_MEMORY", "PROMOTION_CANDIDATE"];
3
+ export type RecommendationCode = (typeof RECOMMENDATION_CODES)[number];
4
+ export declare const RECOMMENDATION_PRIORITY: Readonly<Record<RecommendationCode, number>>;
5
+ export declare const RECOMMENDATION_CODE_PRIORITY: Readonly<Record<"INTAKE_INCOMPLETE" | "VERIFY_AFTER_MUTATION" | "SIDE_EFFECT_OUTCOME_UNKNOWN" | "UNRESOLVED_FAILURE" | "COVERAGE_INCOMPLETE" | "CONTEXT_STALE" | "CONTRADICTORY_MEMORY" | "PROMOTION_CANDIDATE", number>>;
6
+ export declare const MAX_RECOMMENDATIONS: 8;
7
+ export declare const MAX_EVIDENCE_EVENT_IDS = 16;
8
+ export declare const MAX_REFERENCE_IDS = 16;
9
+ export declare const MAX_INPUT_ITEMS = 4096;
10
+ export declare const RECOMMENDATION_MESSAGES: Readonly<Record<RecommendationCode, string>>;
11
+ declare const COVERAGE_CATEGORIES: readonly ["approval", "command", "file", "run", "tool"];
12
+ declare const COVERAGE_LEVELS: readonly ["complete", "best_effort", "declared", "unavailable"];
13
+ declare const MISSING_PROFILE_FIELDS: readonly ["taskType", "target", "expected"];
14
+ declare const EVIDENCE_STATES: readonly ["none", "failed", "fresh", "stale"];
15
+ declare const TASK_TYPES: readonly ["build", "debug", "research", "review", "devops", "writing", "analysis"];
16
+ type CoverageCategory = (typeof COVERAGE_CATEGORIES)[number];
17
+ type CoverageLevel = (typeof COVERAGE_LEVELS)[number];
18
+ type MissingProfileField = (typeof MISSING_PROFILE_FIELDS)[number];
19
+ type EvidenceState = (typeof EVIDENCE_STATES)[number];
20
+ export interface RecommendationMetadata {
21
+ truncated: boolean;
22
+ referenceIds: string[];
23
+ incompleteCoverageCategories?: CoverageCategory[];
24
+ }
25
+ export interface Recommendation {
26
+ code: RecommendationCode;
27
+ message: string;
28
+ evidenceEventIds: string[];
29
+ priority: number;
30
+ untrusted: true;
31
+ actionable: false;
32
+ metadata: RecommendationMetadata;
33
+ }
34
+ export interface RecommendationProjectionInput {
35
+ intakeIncomplete: boolean;
36
+ missingProfileFields: MissingProfileField[];
37
+ evidenceState: EvidenceState;
38
+ unresolvedFailureEventIds: string[];
39
+ unknownOutcomeEventIds: string[];
40
+ coverage: 'complete' | 'partial';
41
+ declaredCoverage?: Partial<Record<CoverageCategory, CoverageLevel>>;
42
+ incompleteCoverageCategories?: CoverageCategory[];
43
+ latestMutationEventIds?: string[];
44
+ latestPassingVerificationEventIds?: string[];
45
+ throughSequence?: number;
46
+ latestMutationSequence?: number | null;
47
+ latestPassingVerificationSequence?: number | null;
48
+ profileHash?: string;
49
+ taskProfile?: {
50
+ taskType: (typeof TASK_TYPES)[number] | null;
51
+ target: string | null;
52
+ expected: string | null;
53
+ constraints: string | null;
54
+ };
55
+ }
56
+ export interface RecommendationStaleDeliveredEntryInput {
57
+ entryId: string;
58
+ deliveredRevision: number;
59
+ currentRevision: number;
60
+ stale?: boolean;
61
+ evidenceEventIds?: string[];
62
+ }
63
+ export interface RecommendationContradictionPairInput {
64
+ leftEntryId: string;
65
+ rightEntryId: string;
66
+ verified: boolean;
67
+ evidenceEventIds?: string[];
68
+ }
69
+ export interface RecommendationPromotionCandidateInput {
70
+ eventId: string;
71
+ eligible: boolean;
72
+ evidenceEventIds?: string[];
73
+ }
74
+ export interface RecommendationBrokerInput {
75
+ staleDeliveredEntries?: RecommendationStaleDeliveredEntryInput[];
76
+ contradictoryMemoryPairs?: RecommendationContradictionPairInput[];
77
+ promotionCandidates?: RecommendationPromotionCandidateInput[];
78
+ }
79
+ export interface RecommendationInput {
80
+ projection: RecommendationProjectionInput;
81
+ broker?: RecommendationBrokerInput;
82
+ }
83
+ export declare function buildRecommendations(input: unknown): Recommendation[];
84
+ export {};
85
+ //# sourceMappingURL=recommendations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendations.d.ts","sourceRoot":"","sources":["../../src/context/recommendations.ts"],"names":[],"mappings":"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"}