kiokuko-dsh 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 (1032) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +50 -0
  3. package/README.ko.md +50 -0
  4. package/README.md +53 -0
  5. package/README.zh-CN.md +50 -0
  6. package/dist/agent-file/atomic-write.d.ts +93 -0
  7. package/dist/agent-file/atomic-write.d.ts.map +1 -0
  8. package/dist/agent-file/atomic-write.js +1026 -0
  9. package/dist/agent-file/atomic-write.js.map +1 -0
  10. package/dist/agent-file/managed-block.d.ts +23 -0
  11. package/dist/agent-file/managed-block.d.ts.map +1 -0
  12. package/dist/agent-file/managed-block.js +101 -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 +63 -0
  17. package/dist/agent-file/render.js.map +1 -0
  18. package/dist/akinator/agent-task.d.ts +72 -0
  19. package/dist/akinator/agent-task.d.ts.map +1 -0
  20. package/dist/akinator/agent-task.js +684 -0
  21. package/dist/akinator/agent-task.js.map +1 -0
  22. package/dist/akinator/capabilities.d.ts +92 -0
  23. package/dist/akinator/capabilities.d.ts.map +1 -0
  24. package/dist/akinator/capabilities.js +364 -0
  25. package/dist/akinator/capabilities.js.map +1 -0
  26. package/dist/akinator/capability-binding.d.ts +11 -0
  27. package/dist/akinator/capability-binding.d.ts.map +1 -0
  28. package/dist/akinator/capability-binding.js +71 -0
  29. package/dist/akinator/capability-binding.js.map +1 -0
  30. package/dist/akinator/domain.d.ts +25 -0
  31. package/dist/akinator/domain.d.ts.map +1 -0
  32. package/dist/akinator/domain.js +266 -0
  33. package/dist/akinator/domain.js.map +1 -0
  34. package/dist/akinator/knowledge-path.d.ts +33 -0
  35. package/dist/akinator/knowledge-path.d.ts.map +1 -0
  36. package/dist/akinator/knowledge-path.js +474 -0
  37. package/dist/akinator/knowledge-path.js.map +1 -0
  38. package/dist/akinator/orchestrator.d.ts +7 -0
  39. package/dist/akinator/orchestrator.d.ts.map +1 -0
  40. package/dist/akinator/orchestrator.js +8 -0
  41. package/dist/akinator/orchestrator.js.map +1 -0
  42. package/dist/akinator/reasoning.d.ts +8 -0
  43. package/dist/akinator/reasoning.d.ts.map +1 -0
  44. package/dist/akinator/reasoning.js +118 -0
  45. package/dist/akinator/reasoning.js.map +1 -0
  46. package/dist/akinator/service.d.ts +32 -0
  47. package/dist/akinator/service.d.ts.map +1 -0
  48. package/dist/akinator/service.js +294 -0
  49. package/dist/akinator/service.js.map +1 -0
  50. package/dist/akinator/skill-discovery-attempt.d.ts +26 -0
  51. package/dist/akinator/skill-discovery-attempt.d.ts.map +1 -0
  52. package/dist/akinator/skill-discovery-attempt.js +469 -0
  53. package/dist/akinator/skill-discovery-attempt.js.map +1 -0
  54. package/dist/akinator/store.d.ts +96 -0
  55. package/dist/akinator/store.d.ts.map +1 -0
  56. package/dist/akinator/store.js +642 -0
  57. package/dist/akinator/store.js.map +1 -0
  58. package/dist/akinator/types.d.ts +70 -0
  59. package/dist/akinator/types.d.ts.map +1 -0
  60. package/dist/akinator/types.js +2 -0
  61. package/dist/akinator/types.js.map +1 -0
  62. package/dist/bin/kiokuko.d.ts +3 -0
  63. package/dist/bin/kiokuko.d.ts.map +1 -0
  64. package/dist/bin/kiokuko.js +13 -0
  65. package/dist/bin/kiokuko.js.map +1 -0
  66. package/dist/cli.d.ts +24 -0
  67. package/dist/cli.d.ts.map +1 -0
  68. package/dist/cli.js +962 -0
  69. package/dist/cli.js.map +1 -0
  70. package/dist/client/server-client.d.ts +22 -0
  71. package/dist/client/server-client.d.ts.map +1 -0
  72. package/dist/client/server-client.js +729 -0
  73. package/dist/client/server-client.js.map +1 -0
  74. package/dist/commands/agent.d.ts +12 -0
  75. package/dist/commands/agent.d.ts.map +1 -0
  76. package/dist/commands/agent.js +1138 -0
  77. package/dist/commands/agent.js.map +1 -0
  78. package/dist/commands/backup.d.ts +6 -0
  79. package/dist/commands/backup.d.ts.map +1 -0
  80. package/dist/commands/backup.js +77 -0
  81. package/dist/commands/backup.js.map +1 -0
  82. package/dist/commands/curator.d.ts +25 -0
  83. package/dist/commands/curator.d.ts.map +1 -0
  84. package/dist/commands/curator.js +58 -0
  85. package/dist/commands/curator.js.map +1 -0
  86. package/dist/commands/doctor.d.ts +61 -0
  87. package/dist/commands/doctor.d.ts.map +1 -0
  88. package/dist/commands/doctor.js +522 -0
  89. package/dist/commands/doctor.js.map +1 -0
  90. package/dist/commands/embeddings.d.ts +40 -0
  91. package/dist/commands/embeddings.d.ts.map +1 -0
  92. package/dist/commands/embeddings.js +317 -0
  93. package/dist/commands/embeddings.js.map +1 -0
  94. package/dist/commands/enno.d.ts +7 -0
  95. package/dist/commands/enno.d.ts.map +1 -0
  96. package/dist/commands/enno.js +76 -0
  97. package/dist/commands/enno.js.map +1 -0
  98. package/dist/commands/export.d.ts +17 -0
  99. package/dist/commands/export.d.ts.map +1 -0
  100. package/dist/commands/export.js +233 -0
  101. package/dist/commands/export.js.map +1 -0
  102. package/dist/commands/import.d.ts +24 -0
  103. package/dist/commands/import.d.ts.map +1 -0
  104. package/dist/commands/import.js +778 -0
  105. package/dist/commands/import.js.map +1 -0
  106. package/dist/commands/init.d.ts +34 -0
  107. package/dist/commands/init.d.ts.map +1 -0
  108. package/dist/commands/init.js +637 -0
  109. package/dist/commands/init.js.map +1 -0
  110. package/dist/commands/ledger.d.ts +7 -0
  111. package/dist/commands/ledger.d.ts.map +1 -0
  112. package/dist/commands/ledger.js +66 -0
  113. package/dist/commands/ledger.js.map +1 -0
  114. package/dist/commands/purge.d.ts +10 -0
  115. package/dist/commands/purge.d.ts.map +1 -0
  116. package/dist/commands/purge.js +29 -0
  117. package/dist/commands/purge.js.map +1 -0
  118. package/dist/commands/serve.d.ts +34 -0
  119. package/dist/commands/serve.d.ts.map +1 -0
  120. package/dist/commands/serve.js +120 -0
  121. package/dist/commands/serve.js.map +1 -0
  122. package/dist/commands/server-status.d.ts +20 -0
  123. package/dist/commands/server-status.d.ts.map +1 -0
  124. package/dist/commands/server-status.js +21 -0
  125. package/dist/commands/server-status.js.map +1 -0
  126. package/dist/commands/server.d.ts +13 -0
  127. package/dist/commands/server.d.ts.map +1 -0
  128. package/dist/commands/server.js +89 -0
  129. package/dist/commands/server.js.map +1 -0
  130. package/dist/commands/setup.d.ts +105 -0
  131. package/dist/commands/setup.d.ts.map +1 -0
  132. package/dist/commands/setup.js +793 -0
  133. package/dist/commands/setup.js.map +1 -0
  134. package/dist/commands/skills.d.ts +9 -0
  135. package/dist/commands/skills.d.ts.map +1 -0
  136. package/dist/commands/skills.js +317 -0
  137. package/dist/commands/skills.js.map +1 -0
  138. package/dist/commands/use.d.ts +40 -0
  139. package/dist/commands/use.d.ts.map +1 -0
  140. package/dist/commands/use.js +1090 -0
  141. package/dist/commands/use.js.map +1 -0
  142. package/dist/config/paths.d.ts +57 -0
  143. package/dist/config/paths.d.ts.map +1 -0
  144. package/dist/config/paths.js +352 -0
  145. package/dist/config/paths.js.map +1 -0
  146. package/dist/config/project-config.d.ts +11 -0
  147. package/dist/config/project-config.d.ts.map +1 -0
  148. package/dist/config/project-config.js +97 -0
  149. package/dist/config/project-config.js.map +1 -0
  150. package/dist/context/broker.d.ts +99 -0
  151. package/dist/context/broker.d.ts.map +1 -0
  152. package/dist/context/broker.js +923 -0
  153. package/dist/context/broker.js.map +1 -0
  154. package/dist/context/delivery-migration.d.ts +40 -0
  155. package/dist/context/delivery-migration.d.ts.map +1 -0
  156. package/dist/context/delivery-migration.js +367 -0
  157. package/dist/context/delivery-migration.js.map +1 -0
  158. package/dist/context/delivery.d.ts +61 -0
  159. package/dist/context/delivery.d.ts.map +1 -0
  160. package/dist/context/delivery.js +886 -0
  161. package/dist/context/delivery.js.map +1 -0
  162. package/dist/context/feedback.d.ts +73 -0
  163. package/dist/context/feedback.d.ts.map +1 -0
  164. package/dist/context/feedback.js +993 -0
  165. package/dist/context/feedback.js.map +1 -0
  166. package/dist/context/nudge-store.d.ts +57 -0
  167. package/dist/context/nudge-store.d.ts.map +1 -0
  168. package/dist/context/nudge-store.js +227 -0
  169. package/dist/context/nudge-store.js.map +1 -0
  170. package/dist/context/nudge-validation.d.ts +26 -0
  171. package/dist/context/nudge-validation.d.ts.map +1 -0
  172. package/dist/context/nudge-validation.js +122 -0
  173. package/dist/context/nudge-validation.js.map +1 -0
  174. package/dist/context/nudges.d.ts +38 -0
  175. package/dist/context/nudges.d.ts.map +1 -0
  176. package/dist/context/nudges.js +131 -0
  177. package/dist/context/nudges.js.map +1 -0
  178. package/dist/context/origin.d.ts +9 -0
  179. package/dist/context/origin.d.ts.map +1 -0
  180. package/dist/context/origin.js +15 -0
  181. package/dist/context/origin.js.map +1 -0
  182. package/dist/context/ranking.d.ts +92 -0
  183. package/dist/context/ranking.d.ts.map +1 -0
  184. package/dist/context/ranking.js +560 -0
  185. package/dist/context/ranking.js.map +1 -0
  186. package/dist/context/recommendations.d.ts +80 -0
  187. package/dist/context/recommendations.d.ts.map +1 -0
  188. package/dist/context/recommendations.js +341 -0
  189. package/dist/context/recommendations.js.map +1 -0
  190. package/dist/context/run-state.d.ts +26 -0
  191. package/dist/context/run-state.d.ts.map +1 -0
  192. package/dist/context/run-state.js +399 -0
  193. package/dist/context/run-state.js.map +1 -0
  194. package/dist/context/scoped-broker.d.ts +77 -0
  195. package/dist/context/scoped-broker.d.ts.map +1 -0
  196. package/dist/context/scoped-broker.js +690 -0
  197. package/dist/context/scoped-broker.js.map +1 -0
  198. package/dist/context/selection-state.d.ts +32 -0
  199. package/dist/context/selection-state.d.ts.map +1 -0
  200. package/dist/context/selection-state.js +369 -0
  201. package/dist/context/selection-state.js.map +1 -0
  202. package/dist/db/adapter.d.ts +27 -0
  203. package/dist/db/adapter.d.ts.map +1 -0
  204. package/dist/db/adapter.js +41 -0
  205. package/dist/db/adapter.js.map +1 -0
  206. package/dist/db/capabilities.d.ts +21 -0
  207. package/dist/db/capabilities.d.ts.map +1 -0
  208. package/dist/db/capabilities.js +57 -0
  209. package/dist/db/capabilities.js.map +1 -0
  210. package/dist/db/connection.d.ts +21 -0
  211. package/dist/db/connection.d.ts.map +1 -0
  212. package/dist/db/connection.js +129 -0
  213. package/dist/db/connection.js.map +1 -0
  214. package/dist/db/migrate.d.ts +40 -0
  215. package/dist/db/migrate.d.ts.map +1 -0
  216. package/dist/db/migrate.js +216 -0
  217. package/dist/db/migrate.js.map +1 -0
  218. package/dist/db/sqlite-retry.d.ts +11 -0
  219. package/dist/db/sqlite-retry.d.ts.map +1 -0
  220. package/dist/db/sqlite-retry.js +70 -0
  221. package/dist/db/sqlite-retry.js.map +1 -0
  222. package/dist/db/transaction.d.ts +17 -0
  223. package/dist/db/transaction.d.ts.map +1 -0
  224. package/dist/db/transaction.js +68 -0
  225. package/dist/db/transaction.js.map +1 -0
  226. package/dist/db/upgrade-backup.d.ts +59 -0
  227. package/dist/db/upgrade-backup.d.ts.map +1 -0
  228. package/dist/db/upgrade-backup.js +773 -0
  229. package/dist/db/upgrade-backup.js.map +1 -0
  230. package/dist/dsh/advisory-runner.d.ts +32 -0
  231. package/dist/dsh/advisory-runner.d.ts.map +1 -0
  232. package/dist/dsh/advisory-runner.js +111 -0
  233. package/dist/dsh/advisory-runner.js.map +1 -0
  234. package/dist/dsh/agent-state.d.ts +49 -0
  235. package/dist/dsh/agent-state.d.ts.map +1 -0
  236. package/dist/dsh/agent-state.js +103 -0
  237. package/dist/dsh/agent-state.js.map +1 -0
  238. package/dist/dsh/capability-catalog.d.ts +24 -0
  239. package/dist/dsh/capability-catalog.d.ts.map +1 -0
  240. package/dist/dsh/capability-catalog.js +108 -0
  241. package/dist/dsh/capability-catalog.js.map +1 -0
  242. package/dist/dsh/commands.d.ts +43 -0
  243. package/dist/dsh/commands.d.ts.map +1 -0
  244. package/dist/dsh/commands.js +83 -0
  245. package/dist/dsh/commands.js.map +1 -0
  246. package/dist/dsh/composition.d.ts +64 -0
  247. package/dist/dsh/composition.d.ts.map +1 -0
  248. package/dist/dsh/composition.js +104 -0
  249. package/dist/dsh/composition.js.map +1 -0
  250. package/dist/dsh/config.d.ts +7 -0
  251. package/dist/dsh/config.d.ts.map +1 -0
  252. package/dist/dsh/config.js +6 -0
  253. package/dist/dsh/config.js.map +1 -0
  254. package/dist/dsh/context-injection.d.ts +24 -0
  255. package/dist/dsh/context-injection.d.ts.map +1 -0
  256. package/dist/dsh/context-injection.js +61 -0
  257. package/dist/dsh/context-injection.js.map +1 -0
  258. package/dist/dsh/enno-controller.d.ts +94 -0
  259. package/dist/dsh/enno-controller.d.ts.map +1 -0
  260. package/dist/dsh/enno-controller.js +137 -0
  261. package/dist/dsh/enno-controller.js.map +1 -0
  262. package/dist/dsh/index.d.ts +31 -0
  263. package/dist/dsh/index.d.ts.map +1 -0
  264. package/dist/dsh/index.js +52 -0
  265. package/dist/dsh/index.js.map +1 -0
  266. package/dist/dsh/intake-gate.d.ts +50 -0
  267. package/dist/dsh/intake-gate.d.ts.map +1 -0
  268. package/dist/dsh/intake-gate.js +77 -0
  269. package/dist/dsh/intake-gate.js.map +1 -0
  270. package/dist/dsh/intake-profile-resolver.d.ts +22 -0
  271. package/dist/dsh/intake-profile-resolver.d.ts.map +1 -0
  272. package/dist/dsh/intake-profile-resolver.js +44 -0
  273. package/dist/dsh/intake-profile-resolver.js.map +1 -0
  274. package/dist/dsh/message-sources.d.ts +28 -0
  275. package/dist/dsh/message-sources.d.ts.map +1 -0
  276. package/dist/dsh/message-sources.js +62 -0
  277. package/dist/dsh/message-sources.js.map +1 -0
  278. package/dist/dsh/parity.d.ts +18 -0
  279. package/dist/dsh/parity.d.ts.map +1 -0
  280. package/dist/dsh/parity.js +105 -0
  281. package/dist/dsh/parity.js.map +1 -0
  282. package/dist/dsh/prompt-policy.d.ts +18 -0
  283. package/dist/dsh/prompt-policy.d.ts.map +1 -0
  284. package/dist/dsh/prompt-policy.js +16 -0
  285. package/dist/dsh/prompt-policy.js.map +1 -0
  286. package/dist/dsh/runtime.d.ts +40 -0
  287. package/dist/dsh/runtime.d.ts.map +1 -0
  288. package/dist/dsh/runtime.js +237 -0
  289. package/dist/dsh/runtime.js.map +1 -0
  290. package/dist/dsh/session-bridge.d.ts +98 -0
  291. package/dist/dsh/session-bridge.d.ts.map +1 -0
  292. package/dist/dsh/session-bridge.js +202 -0
  293. package/dist/dsh/session-bridge.js.map +1 -0
  294. package/dist/dsh/standard-skill-provider.d.ts +50 -0
  295. package/dist/dsh/standard-skill-provider.d.ts.map +1 -0
  296. package/dist/dsh/standard-skill-provider.js +71 -0
  297. package/dist/dsh/standard-skill-provider.js.map +1 -0
  298. package/dist/dsh/tool-policy.d.ts +40 -0
  299. package/dist/dsh/tool-policy.d.ts.map +1 -0
  300. package/dist/dsh/tool-policy.js +125 -0
  301. package/dist/dsh/tool-policy.js.map +1 -0
  302. package/dist/dsh/tools.d.ts +85 -0
  303. package/dist/dsh/tools.d.ts.map +1 -0
  304. package/dist/dsh/tools.js +156 -0
  305. package/dist/dsh/tools.js.map +1 -0
  306. package/dist/dsh/user-interaction.d.ts +51 -0
  307. package/dist/dsh/user-interaction.d.ts.map +1 -0
  308. package/dist/dsh/user-interaction.js +92 -0
  309. package/dist/dsh/user-interaction.js.map +1 -0
  310. package/dist/embedding/backend.d.ts +27 -0
  311. package/dist/embedding/backend.d.ts.map +1 -0
  312. package/dist/embedding/backend.js +67 -0
  313. package/dist/embedding/backend.js.map +1 -0
  314. package/dist/embedding/config.d.ts +10 -0
  315. package/dist/embedding/config.d.ts.map +1 -0
  316. package/dist/embedding/config.js +142 -0
  317. package/dist/embedding/config.js.map +1 -0
  318. package/dist/embedding/diagnostics.d.ts +34 -0
  319. package/dist/embedding/diagnostics.d.ts.map +1 -0
  320. package/dist/embedding/diagnostics.js +274 -0
  321. package/dist/embedding/diagnostics.js.map +1 -0
  322. package/dist/embedding/document.d.ts +20 -0
  323. package/dist/embedding/document.d.ts.map +1 -0
  324. package/dist/embedding/document.js +122 -0
  325. package/dist/embedding/document.js.map +1 -0
  326. package/dist/embedding/javascript-backend.d.ts +11 -0
  327. package/dist/embedding/javascript-backend.d.ts.map +1 -0
  328. package/dist/embedding/javascript-backend.js +164 -0
  329. package/dist/embedding/javascript-backend.js.map +1 -0
  330. package/dist/embedding/jobs.d.ts +67 -0
  331. package/dist/embedding/jobs.d.ts.map +1 -0
  332. package/dist/embedding/jobs.js +259 -0
  333. package/dist/embedding/jobs.js.map +1 -0
  334. package/dist/embedding/local-model-loader.d.ts +24 -0
  335. package/dist/embedding/local-model-loader.d.ts.map +1 -0
  336. package/dist/embedding/local-model-loader.js +64 -0
  337. package/dist/embedding/local-model-loader.js.map +1 -0
  338. package/dist/embedding/local-transformers-provider.d.ts +17 -0
  339. package/dist/embedding/local-transformers-provider.d.ts.map +1 -0
  340. package/dist/embedding/local-transformers-provider.js +54 -0
  341. package/dist/embedding/local-transformers-provider.js.map +1 -0
  342. package/dist/embedding/model-download.d.ts +32 -0
  343. package/dist/embedding/model-download.d.ts.map +1 -0
  344. package/dist/embedding/model-download.js +41 -0
  345. package/dist/embedding/model-download.js.map +1 -0
  346. package/dist/embedding/model-installation.d.ts +17 -0
  347. package/dist/embedding/model-installation.d.ts.map +1 -0
  348. package/dist/embedding/model-installation.js +71 -0
  349. package/dist/embedding/model-installation.js.map +1 -0
  350. package/dist/embedding/model-manifest.d.ts +18 -0
  351. package/dist/embedding/model-manifest.d.ts.map +1 -0
  352. package/dist/embedding/model-manifest.js +86 -0
  353. package/dist/embedding/model-manifest.js.map +1 -0
  354. package/dist/embedding/openai-compatible-provider.d.ts +24 -0
  355. package/dist/embedding/openai-compatible-provider.d.ts.map +1 -0
  356. package/dist/embedding/openai-compatible-provider.js +330 -0
  357. package/dist/embedding/openai-compatible-provider.js.map +1 -0
  358. package/dist/embedding/presets/local-small.d.ts +8 -0
  359. package/dist/embedding/presets/local-small.d.ts.map +1 -0
  360. package/dist/embedding/presets/local-small.js +67 -0
  361. package/dist/embedding/presets/local-small.js.map +1 -0
  362. package/dist/embedding/presets/manifest.d.ts +27 -0
  363. package/dist/embedding/presets/manifest.d.ts.map +1 -0
  364. package/dist/embedding/presets/manifest.js +5 -0
  365. package/dist/embedding/presets/manifest.js.map +1 -0
  366. package/dist/embedding/profile.d.ts +10 -0
  367. package/dist/embedding/profile.d.ts.map +1 -0
  368. package/dist/embedding/profile.js +67 -0
  369. package/dist/embedding/profile.js.map +1 -0
  370. package/dist/embedding/provider.d.ts +13 -0
  371. package/dist/embedding/provider.d.ts.map +1 -0
  372. package/dist/embedding/provider.js +17 -0
  373. package/dist/embedding/provider.js.map +1 -0
  374. package/dist/embedding/query-cache.d.ts +45 -0
  375. package/dist/embedding/query-cache.d.ts.map +1 -0
  376. package/dist/embedding/query-cache.js +181 -0
  377. package/dist/embedding/query-cache.js.map +1 -0
  378. package/dist/embedding/runtime.d.ts +14 -0
  379. package/dist/embedding/runtime.d.ts.map +1 -0
  380. package/dist/embedding/runtime.js +407 -0
  381. package/dist/embedding/runtime.js.map +1 -0
  382. package/dist/embedding/settings.d.ts +6 -0
  383. package/dist/embedding/settings.d.ts.map +1 -0
  384. package/dist/embedding/settings.js +69 -0
  385. package/dist/embedding/settings.js.map +1 -0
  386. package/dist/embedding/setup-lock.d.ts +7 -0
  387. package/dist/embedding/setup-lock.d.ts.map +1 -0
  388. package/dist/embedding/setup-lock.js +35 -0
  389. package/dist/embedding/setup-lock.js.map +1 -0
  390. package/dist/embedding/setup-service.d.ts +53 -0
  391. package/dist/embedding/setup-service.d.ts.map +1 -0
  392. package/dist/embedding/setup-service.js +184 -0
  393. package/dist/embedding/setup-service.js.map +1 -0
  394. package/dist/embedding/sqlite-vec-backend.d.ts +9 -0
  395. package/dist/embedding/sqlite-vec-backend.d.ts.map +1 -0
  396. package/dist/embedding/sqlite-vec-backend.js +106 -0
  397. package/dist/embedding/sqlite-vec-backend.js.map +1 -0
  398. package/dist/embedding/sqlite-vec-loader.d.ts +17 -0
  399. package/dist/embedding/sqlite-vec-loader.d.ts.map +1 -0
  400. package/dist/embedding/sqlite-vec-loader.js +51 -0
  401. package/dist/embedding/sqlite-vec-loader.js.map +1 -0
  402. package/dist/embedding/store.d.ts +66 -0
  403. package/dist/embedding/store.d.ts.map +1 -0
  404. package/dist/embedding/store.js +490 -0
  405. package/dist/embedding/store.js.map +1 -0
  406. package/dist/embedding/types.d.ts +126 -0
  407. package/dist/embedding/types.d.ts.map +1 -0
  408. package/dist/embedding/types.js +2 -0
  409. package/dist/embedding/types.js.map +1 -0
  410. package/dist/embedding/vector.d.ts +9 -0
  411. package/dist/embedding/vector.d.ts.map +1 -0
  412. package/dist/embedding/vector.js +90 -0
  413. package/dist/embedding/vector.js.map +1 -0
  414. package/dist/embedding/worker.d.ts +23 -0
  415. package/dist/embedding/worker.d.ts.map +1 -0
  416. package/dist/embedding/worker.js +84 -0
  417. package/dist/embedding/worker.js.map +1 -0
  418. package/dist/enno-oduno/adapters.d.ts +21 -0
  419. package/dist/enno-oduno/adapters.d.ts.map +1 -0
  420. package/dist/enno-oduno/adapters.js +253 -0
  421. package/dist/enno-oduno/adapters.js.map +1 -0
  422. package/dist/enno-oduno/advisory-store.d.ts +31 -0
  423. package/dist/enno-oduno/advisory-store.d.ts.map +1 -0
  424. package/dist/enno-oduno/advisory-store.js +105 -0
  425. package/dist/enno-oduno/advisory-store.js.map +1 -0
  426. package/dist/enno-oduno/advisory.d.ts +18 -0
  427. package/dist/enno-oduno/advisory.d.ts.map +1 -0
  428. package/dist/enno-oduno/advisory.js +310 -0
  429. package/dist/enno-oduno/advisory.js.map +1 -0
  430. package/dist/enno-oduno/confirmation.d.ts +4 -0
  431. package/dist/enno-oduno/confirmation.d.ts.map +1 -0
  432. package/dist/enno-oduno/confirmation.js +127 -0
  433. package/dist/enno-oduno/confirmation.js.map +1 -0
  434. package/dist/enno-oduno/directives.d.ts +12 -0
  435. package/dist/enno-oduno/directives.d.ts.map +1 -0
  436. package/dist/enno-oduno/directives.js +276 -0
  437. package/dist/enno-oduno/directives.js.map +1 -0
  438. package/dist/enno-oduno/enno-oduno.d.mts +2 -0
  439. package/dist/enno-oduno/enno-oduno.d.mts.map +1 -0
  440. package/dist/enno-oduno/enno-oduno.mjs +3 -0
  441. package/dist/enno-oduno/enno-oduno.mjs.map +1 -0
  442. package/dist/enno-oduno/experts.d.ts +6 -0
  443. package/dist/enno-oduno/experts.d.ts.map +1 -0
  444. package/dist/enno-oduno/experts.js +32 -0
  445. package/dist/enno-oduno/experts.js.map +1 -0
  446. package/dist/enno-oduno/goki.d.mts +2 -0
  447. package/dist/enno-oduno/goki.d.mts.map +1 -0
  448. package/dist/enno-oduno/goki.mjs +3 -0
  449. package/dist/enno-oduno/goki.mjs.map +1 -0
  450. package/dist/enno-oduno/handoff.d.ts +4 -0
  451. package/dist/enno-oduno/handoff.d.ts.map +1 -0
  452. package/dist/enno-oduno/handoff.js +18 -0
  453. package/dist/enno-oduno/handoff.js.map +1 -0
  454. package/dist/enno-oduno/harness.d.ts +20 -0
  455. package/dist/enno-oduno/harness.d.ts.map +1 -0
  456. package/dist/enno-oduno/harness.js +66 -0
  457. package/dist/enno-oduno/harness.js.map +1 -0
  458. package/dist/enno-oduno/instructions.d.ts +9 -0
  459. package/dist/enno-oduno/instructions.d.ts.map +1 -0
  460. package/dist/enno-oduno/instructions.js +12 -0
  461. package/dist/enno-oduno/instructions.js.map +1 -0
  462. package/dist/enno-oduno/plan-recovery.d.ts +44 -0
  463. package/dist/enno-oduno/plan-recovery.d.ts.map +1 -0
  464. package/dist/enno-oduno/plan-recovery.js +160 -0
  465. package/dist/enno-oduno/plan-recovery.js.map +1 -0
  466. package/dist/enno-oduno/repository-state.d.ts +8 -0
  467. package/dist/enno-oduno/repository-state.d.ts.map +1 -0
  468. package/dist/enno-oduno/repository-state.js +139 -0
  469. package/dist/enno-oduno/repository-state.js.map +1 -0
  470. package/dist/enno-oduno/role-runner.d.ts +9 -0
  471. package/dist/enno-oduno/role-runner.d.ts.map +1 -0
  472. package/dist/enno-oduno/role-runner.js +219 -0
  473. package/dist/enno-oduno/role-runner.js.map +1 -0
  474. package/dist/enno-oduno/sanitize.d.ts +17 -0
  475. package/dist/enno-oduno/sanitize.d.ts.map +1 -0
  476. package/dist/enno-oduno/sanitize.js +88 -0
  477. package/dist/enno-oduno/sanitize.js.map +1 -0
  478. package/dist/enno-oduno/schemas.d.ts +962 -0
  479. package/dist/enno-oduno/schemas.d.ts.map +1 -0
  480. package/dist/enno-oduno/schemas.js +609 -0
  481. package/dist/enno-oduno/schemas.js.map +1 -0
  482. package/dist/enno-oduno/service.d.ts +57 -0
  483. package/dist/enno-oduno/service.d.ts.map +1 -0
  484. package/dist/enno-oduno/service.js +1379 -0
  485. package/dist/enno-oduno/service.js.map +1 -0
  486. package/dist/enno-oduno/skills.d.ts +22 -0
  487. package/dist/enno-oduno/skills.d.ts.map +1 -0
  488. package/dist/enno-oduno/skills.js +127 -0
  489. package/dist/enno-oduno/skills.js.map +1 -0
  490. package/dist/enno-oduno/store.d.ts +106 -0
  491. package/dist/enno-oduno/store.d.ts.map +1 -0
  492. package/dist/enno-oduno/store.js +712 -0
  493. package/dist/enno-oduno/store.js.map +1 -0
  494. package/dist/enno-oduno/types.d.ts +457 -0
  495. package/dist/enno-oduno/types.d.ts.map +1 -0
  496. package/dist/enno-oduno/types.js +66 -0
  497. package/dist/enno-oduno/types.js.map +1 -0
  498. package/dist/enno-oduno/validation-errors.d.ts +93 -0
  499. package/dist/enno-oduno/validation-errors.d.ts.map +1 -0
  500. package/dist/enno-oduno/validation-errors.js +152 -0
  501. package/dist/enno-oduno/validation-errors.js.map +1 -0
  502. package/dist/enno-oduno/verifier.d.ts +10 -0
  503. package/dist/enno-oduno/verifier.d.ts.map +1 -0
  504. package/dist/enno-oduno/verifier.js +214 -0
  505. package/dist/enno-oduno/verifier.js.map +1 -0
  506. package/dist/enno-oduno/zenki.d.mts +2 -0
  507. package/dist/enno-oduno/zenki.d.mts.map +1 -0
  508. package/dist/enno-oduno/zenki.mjs +3 -0
  509. package/dist/enno-oduno/zenki.mjs.map +1 -0
  510. package/dist/errors.d.ts +13 -0
  511. package/dist/errors.d.ts.map +1 -0
  512. package/dist/errors.js +60 -0
  513. package/dist/errors.js.map +1 -0
  514. package/dist/gateway/agent-service.d.ts +72 -0
  515. package/dist/gateway/agent-service.d.ts.map +1 -0
  516. package/dist/gateway/agent-service.js +594 -0
  517. package/dist/gateway/agent-service.js.map +1 -0
  518. package/dist/gateway/checkpoint-mutation-service.d.ts +33 -0
  519. package/dist/gateway/checkpoint-mutation-service.d.ts.map +1 -0
  520. package/dist/gateway/checkpoint-mutation-service.js +513 -0
  521. package/dist/gateway/checkpoint-mutation-service.js.map +1 -0
  522. package/dist/gateway/checkpoint-service.d.ts +40 -0
  523. package/dist/gateway/checkpoint-service.d.ts.map +1 -0
  524. package/dist/gateway/checkpoint-service.js +149 -0
  525. package/dist/gateway/checkpoint-service.js.map +1 -0
  526. package/dist/gateway/nudge-delivery-service.d.ts +21 -0
  527. package/dist/gateway/nudge-delivery-service.d.ts.map +1 -0
  528. package/dist/gateway/nudge-delivery-service.js +67 -0
  529. package/dist/gateway/nudge-delivery-service.js.map +1 -0
  530. package/dist/ledger/archive.d.ts +48 -0
  531. package/dist/ledger/archive.d.ts.map +1 -0
  532. package/dist/ledger/archive.js +1261 -0
  533. package/dist/ledger/archive.js.map +1 -0
  534. package/dist/ledger/checkpoint-contract.d.ts +144 -0
  535. package/dist/ledger/checkpoint-contract.d.ts.map +1 -0
  536. package/dist/ledger/checkpoint-contract.js +91 -0
  537. package/dist/ledger/checkpoint-contract.js.map +1 -0
  538. package/dist/ledger/checkpoint-eligibility.d.ts +17 -0
  539. package/dist/ledger/checkpoint-eligibility.d.ts.map +1 -0
  540. package/dist/ledger/checkpoint-eligibility.js +19 -0
  541. package/dist/ledger/checkpoint-eligibility.js.map +1 -0
  542. package/dist/ledger/hash.d.ts +22 -0
  543. package/dist/ledger/hash.d.ts.map +1 -0
  544. package/dist/ledger/hash.js +25 -0
  545. package/dist/ledger/hash.js.map +1 -0
  546. package/dist/ledger/maintenance.d.ts +68 -0
  547. package/dist/ledger/maintenance.d.ts.map +1 -0
  548. package/dist/ledger/maintenance.js +767 -0
  549. package/dist/ledger/maintenance.js.map +1 -0
  550. package/dist/ledger/projection.d.ts +38 -0
  551. package/dist/ledger/projection.d.ts.map +1 -0
  552. package/dist/ledger/projection.js +315 -0
  553. package/dist/ledger/projection.js.map +1 -0
  554. package/dist/ledger/promotion.d.ts +19 -0
  555. package/dist/ledger/promotion.d.ts.map +1 -0
  556. package/dist/ledger/promotion.js +310 -0
  557. package/dist/ledger/promotion.js.map +1 -0
  558. package/dist/ledger/query.d.ts +41 -0
  559. package/dist/ledger/query.d.ts.map +1 -0
  560. package/dist/ledger/query.js +321 -0
  561. package/dist/ledger/query.js.map +1 -0
  562. package/dist/ledger/redaction.d.ts +8 -0
  563. package/dist/ledger/redaction.d.ts.map +1 -0
  564. package/dist/ledger/redaction.js +40 -0
  565. package/dist/ledger/redaction.js.map +1 -0
  566. package/dist/ledger/store.d.ts +45 -0
  567. package/dist/ledger/store.d.ts.map +1 -0
  568. package/dist/ledger/store.js +327 -0
  569. package/dist/ledger/store.js.map +1 -0
  570. package/dist/ledger/types.d.ts +115 -0
  571. package/dist/ledger/types.d.ts.map +1 -0
  572. package/dist/ledger/types.js +27 -0
  573. package/dist/ledger/types.js.map +1 -0
  574. package/dist/ledger/validate.d.ts +10 -0
  575. package/dist/ledger/validate.d.ts.map +1 -0
  576. package/dist/ledger/validate.js +178 -0
  577. package/dist/ledger/validate.js.map +1 -0
  578. package/dist/mcp/bounded-stdio-transport.d.ts +26 -0
  579. package/dist/mcp/bounded-stdio-transport.d.ts.map +1 -0
  580. package/dist/mcp/bounded-stdio-transport.js +121 -0
  581. package/dist/mcp/bounded-stdio-transport.js.map +1 -0
  582. package/dist/mcp/request-deadline.d.ts +51 -0
  583. package/dist/mcp/request-deadline.d.ts.map +1 -0
  584. package/dist/mcp/request-deadline.js +155 -0
  585. package/dist/mcp/request-deadline.js.map +1 -0
  586. package/dist/mcp/runtime-owner.d.ts +27 -0
  587. package/dist/mcp/runtime-owner.d.ts.map +1 -0
  588. package/dist/mcp/runtime-owner.js +129 -0
  589. package/dist/mcp/runtime-owner.js.map +1 -0
  590. package/dist/mcp/server.d.ts +24 -0
  591. package/dist/mcp/server.d.ts.map +1 -0
  592. package/dist/mcp/server.js +502 -0
  593. package/dist/mcp/server.js.map +1 -0
  594. package/dist/memory/audit.d.ts +13 -0
  595. package/dist/memory/audit.d.ts.map +1 -0
  596. package/dist/memory/audit.js +15 -0
  597. package/dist/memory/audit.js.map +1 -0
  598. package/dist/memory/checkpoint-contract.d.ts +490 -0
  599. package/dist/memory/checkpoint-contract.d.ts.map +1 -0
  600. package/dist/memory/checkpoint-contract.js +106 -0
  601. package/dist/memory/checkpoint-contract.js.map +1 -0
  602. package/dist/memory/curator-trust.d.ts +15 -0
  603. package/dist/memory/curator-trust.d.ts.map +1 -0
  604. package/dist/memory/curator-trust.js +58 -0
  605. package/dist/memory/curator-trust.js.map +1 -0
  606. package/dist/memory/curator.d.ts +115 -0
  607. package/dist/memory/curator.d.ts.map +1 -0
  608. package/dist/memory/curator.js +706 -0
  609. package/dist/memory/curator.js.map +1 -0
  610. package/dist/memory/entries.d.ts +75 -0
  611. package/dist/memory/entries.d.ts.map +1 -0
  612. package/dist/memory/entries.js +355 -0
  613. package/dist/memory/entries.js.map +1 -0
  614. package/dist/memory/federated-retrieval.d.ts +79 -0
  615. package/dist/memory/federated-retrieval.d.ts.map +1 -0
  616. package/dist/memory/federated-retrieval.js +515 -0
  617. package/dist/memory/federated-retrieval.js.map +1 -0
  618. package/dist/memory/hybrid-retrieval.d.ts +33 -0
  619. package/dist/memory/hybrid-retrieval.d.ts.map +1 -0
  620. package/dist/memory/hybrid-retrieval.js +398 -0
  621. package/dist/memory/hybrid-retrieval.js.map +1 -0
  622. package/dist/memory/lifecycle.d.ts +29 -0
  623. package/dist/memory/lifecycle.d.ts.map +1 -0
  624. package/dist/memory/lifecycle.js +65 -0
  625. package/dist/memory/lifecycle.js.map +1 -0
  626. package/dist/memory/portability.d.ts +10 -0
  627. package/dist/memory/portability.d.ts.map +1 -0
  628. package/dist/memory/portability.js +44 -0
  629. package/dist/memory/portability.js.map +1 -0
  630. package/dist/memory/rebuild-search.d.ts +24 -0
  631. package/dist/memory/rebuild-search.d.ts.map +1 -0
  632. package/dist/memory/rebuild-search.js +167 -0
  633. package/dist/memory/rebuild-search.js.map +1 -0
  634. package/dist/memory/retrieval-query.d.ts +16 -0
  635. package/dist/memory/retrieval-query.d.ts.map +1 -0
  636. package/dist/memory/retrieval-query.js +161 -0
  637. package/dist/memory/retrieval-query.js.map +1 -0
  638. package/dist/memory/retrieval.d.ts +56 -0
  639. package/dist/memory/retrieval.d.ts.map +1 -0
  640. package/dist/memory/retrieval.js +101 -0
  641. package/dist/memory/retrieval.js.map +1 -0
  642. package/dist/memory/revisions.d.ts +123 -0
  643. package/dist/memory/revisions.d.ts.map +1 -0
  644. package/dist/memory/revisions.js +759 -0
  645. package/dist/memory/revisions.js.map +1 -0
  646. package/dist/memory/scoped-memory.d.ts +76 -0
  647. package/dist/memory/scoped-memory.d.ts.map +1 -0
  648. package/dist/memory/scoped-memory.js +539 -0
  649. package/dist/memory/scoped-memory.js.map +1 -0
  650. package/dist/memory/secrets.d.ts +8 -0
  651. package/dist/memory/secrets.d.ts.map +1 -0
  652. package/dist/memory/secrets.js +54 -0
  653. package/dist/memory/secrets.js.map +1 -0
  654. package/dist/memory/structured-memory.d.ts +60 -0
  655. package/dist/memory/structured-memory.d.ts.map +1 -0
  656. package/dist/memory/structured-memory.js +341 -0
  657. package/dist/memory/structured-memory.js.map +1 -0
  658. package/dist/memory/workspaces.d.ts +26 -0
  659. package/dist/memory/workspaces.d.ts.map +1 -0
  660. package/dist/memory/workspaces.js +159 -0
  661. package/dist/memory/workspaces.js.map +1 -0
  662. package/dist/model-tools/contracts.d.ts +1297 -0
  663. package/dist/model-tools/contracts.d.ts.map +1 -0
  664. package/dist/model-tools/contracts.js +104 -0
  665. package/dist/model-tools/contracts.js.map +1 -0
  666. package/dist/model-tools/registry.d.ts +8 -0
  667. package/dist/model-tools/registry.d.ts.map +1 -0
  668. package/dist/model-tools/registry.js +59 -0
  669. package/dist/model-tools/registry.js.map +1 -0
  670. package/dist/package-version.d.ts +2 -0
  671. package/dist/package-version.d.ts.map +1 -0
  672. package/dist/package-version.js +7 -0
  673. package/dist/package-version.js.map +1 -0
  674. package/dist/repository/binding.d.ts +32 -0
  675. package/dist/repository/binding.d.ts.map +1 -0
  676. package/dist/repository/binding.js +208 -0
  677. package/dist/repository/binding.js.map +1 -0
  678. package/dist/repository/cwd-schema.d.ts +4 -0
  679. package/dist/repository/cwd-schema.d.ts.map +1 -0
  680. package/dist/repository/cwd-schema.js +8 -0
  681. package/dist/repository/cwd-schema.js.map +1 -0
  682. package/dist/repository/detect-root.d.ts +13 -0
  683. package/dist/repository/detect-root.d.ts.map +1 -0
  684. package/dist/repository/detect-root.js +77 -0
  685. package/dist/repository/detect-root.js.map +1 -0
  686. package/dist/repository/framework-version.d.ts +8 -0
  687. package/dist/repository/framework-version.d.ts.map +1 -0
  688. package/dist/repository/framework-version.js +29 -0
  689. package/dist/repository/framework-version.js.map +1 -0
  690. package/dist/repository/git-origin.d.ts +2 -0
  691. package/dist/repository/git-origin.d.ts.map +1 -0
  692. package/dist/repository/git-origin.js +15 -0
  693. package/dist/repository/git-origin.js.map +1 -0
  694. package/dist/repository/gitignore.d.ts +8 -0
  695. package/dist/repository/gitignore.d.ts.map +1 -0
  696. package/dist/repository/gitignore.js +21 -0
  697. package/dist/repository/gitignore.js.map +1 -0
  698. package/dist/repository/identity-value.d.ts +4 -0
  699. package/dist/repository/identity-value.d.ts.map +1 -0
  700. package/dist/repository/identity-value.js +24 -0
  701. package/dist/repository/identity-value.js.map +1 -0
  702. package/dist/repository/identity.d.ts +19 -0
  703. package/dist/repository/identity.d.ts.map +1 -0
  704. package/dist/repository/identity.js +25 -0
  705. package/dist/repository/identity.js.map +1 -0
  706. package/dist/repository/project-fingerprint.d.ts +33 -0
  707. package/dist/repository/project-fingerprint.d.ts.map +1 -0
  708. package/dist/repository/project-fingerprint.js +429 -0
  709. package/dist/repository/project-fingerprint.js.map +1 -0
  710. package/dist/repository/remote-url.d.ts +3 -0
  711. package/dist/repository/remote-url.d.ts.map +1 -0
  712. package/dist/repository/remote-url.js +35 -0
  713. package/dist/repository/remote-url.js.map +1 -0
  714. package/dist/runtime-version.d.ts +6 -0
  715. package/dist/runtime-version.d.ts.map +1 -0
  716. package/dist/runtime-version.js +33 -0
  717. package/dist/runtime-version.js.map +1 -0
  718. package/dist/security/sanitize.d.ts +4 -0
  719. package/dist/security/sanitize.d.ts.map +1 -0
  720. package/dist/security/sanitize.js +174 -0
  721. package/dist/security/sanitize.js.map +1 -0
  722. package/dist/serialization/boundary-json.d.ts +20 -0
  723. package/dist/serialization/boundary-json.d.ts.map +1 -0
  724. package/dist/serialization/boundary-json.js +129 -0
  725. package/dist/serialization/boundary-json.js.map +1 -0
  726. package/dist/serialization/envelope.d.ts +20 -0
  727. package/dist/serialization/envelope.d.ts.map +1 -0
  728. package/dist/serialization/envelope.js +11 -0
  729. package/dist/serialization/envelope.js.map +1 -0
  730. package/dist/serialization/validate.d.ts +38 -0
  731. package/dist/serialization/validate.d.ts.map +1 -0
  732. package/dist/serialization/validate.js +233 -0
  733. package/dist/serialization/validate.js.map +1 -0
  734. package/dist/server/agent-application.d.ts +6 -0
  735. package/dist/server/agent-application.d.ts.map +1 -0
  736. package/dist/server/agent-application.js +74 -0
  737. package/dist/server/agent-application.js.map +1 -0
  738. package/dist/server/agent-checkpoint-use-case.d.ts +41 -0
  739. package/dist/server/agent-checkpoint-use-case.d.ts.map +1 -0
  740. package/dist/server/agent-checkpoint-use-case.js +159 -0
  741. package/dist/server/agent-checkpoint-use-case.js.map +1 -0
  742. package/dist/server/app.d.ts +5 -0
  743. package/dist/server/app.d.ts.map +1 -0
  744. package/dist/server/app.js +87 -0
  745. package/dist/server/app.js.map +1 -0
  746. package/dist/server/auth.d.ts +2 -0
  747. package/dist/server/auth.d.ts.map +1 -0
  748. package/dist/server/auth.js +22 -0
  749. package/dist/server/auth.js.map +1 -0
  750. package/dist/server/http.d.ts +86 -0
  751. package/dist/server/http.d.ts.map +1 -0
  752. package/dist/server/http.js +455 -0
  753. package/dist/server/http.js.map +1 -0
  754. package/dist/server/idempotency.d.ts +6 -0
  755. package/dist/server/idempotency.d.ts.map +1 -0
  756. package/dist/server/idempotency.js +210 -0
  757. package/dist/server/idempotency.js.map +1 -0
  758. package/dist/server/instance-lock.d.ts +17 -0
  759. package/dist/server/instance-lock.d.ts.map +1 -0
  760. package/dist/server/instance-lock.js +118 -0
  761. package/dist/server/instance-lock.js.map +1 -0
  762. package/dist/server/router.d.ts +29 -0
  763. package/dist/server/router.d.ts.map +1 -0
  764. package/dist/server/router.js +129 -0
  765. package/dist/server/router.js.map +1 -0
  766. package/dist/server/routes/agent-capability-gate.d.ts +43 -0
  767. package/dist/server/routes/agent-capability-gate.d.ts.map +1 -0
  768. package/dist/server/routes/agent-capability-gate.js +202 -0
  769. package/dist/server/routes/agent-capability-gate.js.map +1 -0
  770. package/dist/server/routes/agent-events.d.ts +5 -0
  771. package/dist/server/routes/agent-events.d.ts.map +1 -0
  772. package/dist/server/routes/agent-events.js +53 -0
  773. package/dist/server/routes/agent-events.js.map +1 -0
  774. package/dist/server/routes/agent-intake.d.ts +5 -0
  775. package/dist/server/routes/agent-intake.d.ts.map +1 -0
  776. package/dist/server/routes/agent-intake.js +50 -0
  777. package/dist/server/routes/agent-intake.js.map +1 -0
  778. package/dist/server/routes/agent-promotions.d.ts +5 -0
  779. package/dist/server/routes/agent-promotions.d.ts.map +1 -0
  780. package/dist/server/routes/agent-promotions.js +55 -0
  781. package/dist/server/routes/agent-promotions.js.map +1 -0
  782. package/dist/server/routes/agent-runs.d.ts +32 -0
  783. package/dist/server/routes/agent-runs.d.ts.map +1 -0
  784. package/dist/server/routes/agent-runs.js +165 -0
  785. package/dist/server/routes/agent-runs.js.map +1 -0
  786. package/dist/server/routes/request-binding.d.ts +5 -0
  787. package/dist/server/routes/request-binding.d.ts.map +1 -0
  788. package/dist/server/routes/request-binding.js +49 -0
  789. package/dist/server/routes/request-binding.js.map +1 -0
  790. package/dist/server/routes/task5-support.d.ts +4 -0
  791. package/dist/server/routes/task5-support.d.ts.map +1 -0
  792. package/dist/server/routes/task5-support.js +6 -0
  793. package/dist/server/routes/task5-support.js.map +1 -0
  794. package/dist/server/routes/task5.d.ts +5 -0
  795. package/dist/server/routes/task5.d.ts.map +1 -0
  796. package/dist/server/routes/task5.js +85 -0
  797. package/dist/server/routes/task5.js.map +1 -0
  798. package/dist/server/runtime-descriptor.d.ts +24 -0
  799. package/dist/server/runtime-descriptor.d.ts.map +1 -0
  800. package/dist/server/runtime-descriptor.js +156 -0
  801. package/dist/server/runtime-descriptor.js.map +1 -0
  802. package/dist/server/write-queue.d.ts +20 -0
  803. package/dist/server/write-queue.d.ts.map +1 -0
  804. package/dist/server/write-queue.js +83 -0
  805. package/dist/server/write-queue.js.map +1 -0
  806. package/dist/setup/claude-config.d.ts +8 -0
  807. package/dist/setup/claude-config.d.ts.map +1 -0
  808. package/dist/setup/claude-config.js +95 -0
  809. package/dist/setup/claude-config.js.map +1 -0
  810. package/dist/setup/client-detection.d.ts +13 -0
  811. package/dist/setup/client-detection.d.ts.map +1 -0
  812. package/dist/setup/client-detection.js +64 -0
  813. package/dist/setup/client-detection.js.map +1 -0
  814. package/dist/setup/enno-client-config.d.ts +9 -0
  815. package/dist/setup/enno-client-config.d.ts.map +1 -0
  816. package/dist/setup/enno-client-config.js +172 -0
  817. package/dist/setup/enno-client-config.js.map +1 -0
  818. package/dist/setup/hermes-config.d.ts +7 -0
  819. package/dist/setup/hermes-config.d.ts.map +1 -0
  820. package/dist/setup/hermes-config.js +145 -0
  821. package/dist/setup/hermes-config.js.map +1 -0
  822. package/dist/setup/legacy-client-cleanup.d.ts +6 -0
  823. package/dist/setup/legacy-client-cleanup.d.ts.map +1 -0
  824. package/dist/setup/legacy-client-cleanup.js +152 -0
  825. package/dist/setup/legacy-client-cleanup.js.map +1 -0
  826. package/dist/setup/managed-text.d.ts +6 -0
  827. package/dist/setup/managed-text.d.ts.map +1 -0
  828. package/dist/setup/managed-text.js +52 -0
  829. package/dist/setup/managed-text.js.map +1 -0
  830. package/dist/setup/mcp-conflict.d.ts +4 -0
  831. package/dist/setup/mcp-conflict.d.ts.map +1 -0
  832. package/dist/setup/mcp-conflict.js +15 -0
  833. package/dist/setup/mcp-conflict.js.map +1 -0
  834. package/dist/setup/opencode-config.d.ts +8 -0
  835. package/dist/setup/opencode-config.d.ts.map +1 -0
  836. package/dist/setup/opencode-config.js +98 -0
  837. package/dist/setup/opencode-config.js.map +1 -0
  838. package/dist/setup/project-agent-refresh.d.ts +41 -0
  839. package/dist/setup/project-agent-refresh.d.ts.map +1 -0
  840. package/dist/setup/project-agent-refresh.js +158 -0
  841. package/dist/setup/project-agent-refresh.js.map +1 -0
  842. package/dist/setup/render.d.ts +13 -0
  843. package/dist/setup/render.d.ts.map +1 -0
  844. package/dist/setup/render.js +334 -0
  845. package/dist/setup/render.js.map +1 -0
  846. package/dist/setup/standard-skills.d.ts +60 -0
  847. package/dist/setup/standard-skills.d.ts.map +1 -0
  848. package/dist/setup/standard-skills.js +133 -0
  849. package/dist/setup/standard-skills.js.map +1 -0
  850. package/dist/setup/strict-json.d.ts +7 -0
  851. package/dist/setup/strict-json.d.ts.map +1 -0
  852. package/dist/setup/strict-json.js +98 -0
  853. package/dist/setup/strict-json.js.map +1 -0
  854. package/dist/setup/strict-toml.d.ts +18 -0
  855. package/dist/setup/strict-toml.d.ts.map +1 -0
  856. package/dist/setup/strict-toml.js +491 -0
  857. package/dist/setup/strict-toml.js.map +1 -0
  858. package/dist/skills/cache.d.ts +15 -0
  859. package/dist/skills/cache.d.ts.map +1 -0
  860. package/dist/skills/cache.js +19 -0
  861. package/dist/skills/cache.js.map +1 -0
  862. package/dist/skills/candidate-ranking.d.ts +15 -0
  863. package/dist/skills/candidate-ranking.d.ts.map +1 -0
  864. package/dist/skills/candidate-ranking.js +52 -0
  865. package/dist/skills/candidate-ranking.js.map +1 -0
  866. package/dist/skills/chunking.d.ts +11 -0
  867. package/dist/skills/chunking.d.ts.map +1 -0
  868. package/dist/skills/chunking.js +291 -0
  869. package/dist/skills/chunking.js.map +1 -0
  870. package/dist/skills/config.d.ts +19 -0
  871. package/dist/skills/config.d.ts.map +1 -0
  872. package/dist/skills/config.js +103 -0
  873. package/dist/skills/config.js.map +1 -0
  874. package/dist/skills/discovery-service.d.ts +26 -0
  875. package/dist/skills/discovery-service.d.ts.map +1 -0
  876. package/dist/skills/discovery-service.js +929 -0
  877. package/dist/skills/discovery-service.js.map +1 -0
  878. package/dist/skills/external-transport.d.ts +2 -0
  879. package/dist/skills/external-transport.d.ts.map +1 -0
  880. package/dist/skills/external-transport.js +30 -0
  881. package/dist/skills/external-transport.js.map +1 -0
  882. package/dist/skills/find.d.ts +17 -0
  883. package/dist/skills/find.d.ts.map +1 -0
  884. package/dist/skills/find.js +59 -0
  885. package/dist/skills/find.js.map +1 -0
  886. package/dist/skills/gap-detection.d.ts +23 -0
  887. package/dist/skills/gap-detection.d.ts.map +1 -0
  888. package/dist/skills/gap-detection.js +62 -0
  889. package/dist/skills/gap-detection.js.map +1 -0
  890. package/dist/skills/import-preparation.d.ts +4 -0
  891. package/dist/skills/import-preparation.d.ts.map +1 -0
  892. package/dist/skills/import-preparation.js +20 -0
  893. package/dist/skills/import-preparation.js.map +1 -0
  894. package/dist/skills/materialization-authority.d.ts +11 -0
  895. package/dist/skills/materialization-authority.d.ts.map +1 -0
  896. package/dist/skills/materialization-authority.js +92 -0
  897. package/dist/skills/materialization-authority.js.map +1 -0
  898. package/dist/skills/materialization-service.d.ts +22 -0
  899. package/dist/skills/materialization-service.d.ts.map +1 -0
  900. package/dist/skills/materialization-service.js +101 -0
  901. package/dist/skills/materialization-service.js.map +1 -0
  902. package/dist/skills/official-catalog.d.ts +31 -0
  903. package/dist/skills/official-catalog.d.ts.map +1 -0
  904. package/dist/skills/official-catalog.js +110 -0
  905. package/dist/skills/official-catalog.js.map +1 -0
  906. package/dist/skills/providers/schema.d.ts +30 -0
  907. package/dist/skills/providers/schema.d.ts.map +1 -0
  908. package/dist/skills/providers/schema.js +354 -0
  909. package/dist/skills/providers/schema.js.map +1 -0
  910. package/dist/skills/providers/skills-sh-compat.d.ts +17 -0
  911. package/dist/skills/providers/skills-sh-compat.d.ts.map +1 -0
  912. package/dist/skills/providers/skills-sh-compat.js +73 -0
  913. package/dist/skills/providers/skills-sh-compat.js.map +1 -0
  914. package/dist/skills/providers/skills-sh-v1.d.ts +23 -0
  915. package/dist/skills/providers/skills-sh-v1.d.ts.map +1 -0
  916. package/dist/skills/providers/skills-sh-v1.js +152 -0
  917. package/dist/skills/providers/skills-sh-v1.js.map +1 -0
  918. package/dist/skills/query-builder.d.ts +18 -0
  919. package/dist/skills/query-builder.d.ts.map +1 -0
  920. package/dist/skills/query-builder.js +93 -0
  921. package/dist/skills/query-builder.js.map +1 -0
  922. package/dist/skills/source/errors.d.ts +9 -0
  923. package/dist/skills/source/errors.d.ts.map +1 -0
  924. package/dist/skills/source/errors.js +15 -0
  925. package/dist/skills/source/errors.js.map +1 -0
  926. package/dist/skills/source/frontmatter.d.ts +9 -0
  927. package/dist/skills/source/frontmatter.d.ts.map +1 -0
  928. package/dist/skills/source/frontmatter.js +77 -0
  929. package/dist/skills/source/frontmatter.js.map +1 -0
  930. package/dist/skills/source/github-fetcher.d.ts +20 -0
  931. package/dist/skills/source/github-fetcher.d.ts.map +1 -0
  932. package/dist/skills/source/github-fetcher.js +296 -0
  933. package/dist/skills/source/github-fetcher.js.map +1 -0
  934. package/dist/skills/source/snapshot-validator.d.ts +28 -0
  935. package/dist/skills/source/snapshot-validator.d.ts.map +1 -0
  936. package/dist/skills/source/snapshot-validator.js +186 -0
  937. package/dist/skills/source/snapshot-validator.js.map +1 -0
  938. package/dist/skills/store.d.ts +180 -0
  939. package/dist/skills/store.d.ts.map +1 -0
  940. package/dist/skills/store.js +1712 -0
  941. package/dist/skills/store.js.map +1 -0
  942. package/dist/skills/types.d.ts +171 -0
  943. package/dist/skills/types.d.ts.map +1 -0
  944. package/dist/skills/types.js +2 -0
  945. package/dist/skills/types.js.map +1 -0
  946. package/dist/web/i18n.d.ts +184 -0
  947. package/dist/web/i18n.d.ts.map +1 -0
  948. package/dist/web/i18n.js +733 -0
  949. package/dist/web/i18n.js.map +1 -0
  950. package/dist/web/server.d.ts +16 -0
  951. package/dist/web/server.d.ts.map +1 -0
  952. package/dist/web/server.js +862 -0
  953. package/dist/web/server.js.map +1 -0
  954. package/dist/web/ui.d.ts +6 -0
  955. package/dist/web/ui.d.ts.map +1 -0
  956. package/dist/web/ui.js +1328 -0
  957. package/dist/web/ui.js.map +1 -0
  958. package/docs/README.ja.md +14 -0
  959. package/docs/README.md +16 -0
  960. package/docs/agent-file.md +72 -0
  961. package/docs/agent-gateway.md +104 -0
  962. package/docs/architecture.md +12 -0
  963. package/docs/cli-contract.md +39 -0
  964. package/docs/client-compatibility.md +299 -0
  965. package/docs/concepts.ja.md +25 -0
  966. package/docs/concepts.md +33 -0
  967. package/docs/database.md +11 -0
  968. package/docs/dsh-plugin.md +108 -0
  969. package/docs/enno-oduno.ja.md +22 -0
  970. package/docs/enno-oduno.md +35 -0
  971. package/docs/execution-ledger.md +89 -0
  972. package/docs/getting-started.ja.md +88 -0
  973. package/docs/getting-started.md +99 -0
  974. package/docs/release-notes-0.1.18.md +103 -0
  975. package/docs/retrieval-evaluation.md +10 -0
  976. package/docs/security-and-trust.ja.md +29 -0
  977. package/docs/security-and-trust.md +39 -0
  978. package/docs/security.md +11 -0
  979. package/docs/semantic-retrieval.ja.md +18 -0
  980. package/docs/semantic-retrieval.md +26 -0
  981. package/docs/sqlite-driver-adr.md +8 -0
  982. package/dsh/cordis.patch.yml +7 -0
  983. package/migrations/001_initial.sql +123 -0
  984. package/migrations/002_fts.sql +22 -0
  985. package/migrations/003_akinator.sql +30 -0
  986. package/migrations/004_agent_gateway.sql +261 -0
  987. package/migrations/005_hybrid_search.sql +40 -0
  988. package/migrations/006_context_v2.sql +4 -0
  989. package/migrations/007_akinator_reasoning.sql +59 -0
  990. package/migrations/008_federated_memory.sql +46 -0
  991. package/migrations/009_external_skill_discovery.sql +126 -0
  992. package/migrations/010_nudge_deliveries.sql +50 -0
  993. package/migrations/011_nudge_integrity.sql +52 -0
  994. package/migrations/012_context_delivery_v4.sql +3 -0
  995. package/migrations/013_enno_oduno.sql +176 -0
  996. package/migrations/014_oduno_reflection_phases.sql +40 -0
  997. package/migrations/015_skill_discovery_attempt_digests.sql +90 -0
  998. package/migrations/016_enno_advisory_rounds.sql +67 -0
  999. package/migrations/017_enno_advisory_protocol_v2.sql +101 -0
  1000. package/migrations/018_enno_repository_routing.sql +5 -0
  1001. package/migrations/019_enno_execution_integrity.sql +149 -0
  1002. package/migrations/020_cjk_fts.sql +80 -0
  1003. package/migrations/021_semantic_embeddings.sql +122 -0
  1004. package/migrations/022_embedding_setup_v2.sql +236 -0
  1005. package/migrations/023_enno_dsh_client.sql +291 -0
  1006. package/migrations/down/020_cjk_fts.sql +38 -0
  1007. package/migrations/down/021_semantic_embeddings.sql +17 -0
  1008. package/migrations/down/022_embedding_setup_v2.sql +133 -0
  1009. package/package.json +101 -0
  1010. package/skills/kiokuko-enno-oduno/SKILL.md +209 -0
  1011. package/skills/kiokuko-enno-oduno/enno-oduno.png +0 -0
  1012. package/skills/kiokuko-simple-work/SKILL.md +112 -0
  1013. package/skills/kiokuko-single-purpose-functions/SKILL.md +82 -0
  1014. package/skills/kiokuko-single-purpose-functions/references/boundaries-and-ownership.md +50 -0
  1015. package/skills/kiokuko-single-purpose-functions/references/domain-and-types.md +48 -0
  1016. package/skills/kiokuko-single-purpose-functions/references/effects-and-data.md +43 -0
  1017. package/skills/kiokuko-single-purpose-functions/references/kiokuko-patterns.md +344 -0
  1018. package/skills/kiokuko-single-purpose-functions/references/problem-shaping-and-language.md +84 -0
  1019. package/skills/kiokuko-single-purpose-functions/references/protocols-and-idempotency.md +42 -0
  1020. package/skills/kiokuko-single-purpose-functions/references/review-checklist.md +97 -0
  1021. package/skills/kiokuko-single-purpose-functions/references/verification.md +41 -0
  1022. package/skills/kiokuko-soul/SKILL.md +104 -0
  1023. package/skills/kiokuko-ui-design-soul/SKILL.md +73 -0
  1024. package/skills/kiokuko-ui-design-soul/references/accessibility-and-navigation.md +31 -0
  1025. package/skills/kiokuko-ui-design-soul/references/async-recovery.md +49 -0
  1026. package/skills/kiokuko-ui-design-soul/references/forms-and-controls.md +35 -0
  1027. package/skills/kiokuko-ui-design-soul/references/interaction-feedback.md +34 -0
  1028. package/skills/kiokuko-ui-design-soul/references/responsive-and-platform.md +38 -0
  1029. package/skills/kiokuko-ui-design-soul/references/safety-and-review.md +39 -0
  1030. package/skills/kiokuko-ui-design-soul/references/ui-checklist.md +71 -0
  1031. package/skills/memory-reasoning/SKILL.md +52 -0
  1032. package/templates/AGENTS.md +46 -0
@@ -0,0 +1,993 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { isProxy } from 'node:util/types';
3
+ import { withImmediateTransaction } from '../db/transaction.js';
4
+ import { KiokukoError } from '../errors.js';
5
+ import { sanitizeJson } from '../security/sanitize.js';
6
+ import { canonicalContentHash } from '../serialization/validate.js';
7
+ import { entryOriginMatchesWorkspace, isContextEntryOrigin } from './origin.js';
8
+ import { CONTEXT_FEEDBACK_VERDICTS, MAX_FEEDBACK_COMMENT_BYTES, MAX_FEEDBACK_IDENTIFIER_LENGTH, } from '../ledger/checkpoint-contract.js';
9
+ export { CONTEXT_FEEDBACK_VERDICTS, MAX_FEEDBACK_COMMENT_BYTES, MAX_FEEDBACK_IDENTIFIER_LENGTH };
10
+ export const MAX_FEEDBACK_OUTCOME_BYTES = 4 * 1024;
11
+ export const RUN_FEEDBACK_RECOMMENDATION_VERDICTS = ['accepted', 'dismissed', 'resolved'];
12
+ /** Shared cross-run feedback evidence for retrieval policy consumers. */
13
+ export function contextFeedbackSignals(database, entryId) {
14
+ const rows = database.prepare(`
15
+ SELECT verdict, COUNT(DISTINCT run_id) AS distinctRuns
16
+ FROM context_feedback
17
+ WHERE entry_id = ?
18
+ GROUP BY verdict
19
+ `).all(entryId);
20
+ const byVerdict = new Map();
21
+ for (const row of rows) {
22
+ if (typeof row.verdict !== 'string'
23
+ || !CONTEXT_FEEDBACK_VERDICTS.includes(row.verdict)
24
+ || typeof row.distinctRuns !== 'number'
25
+ || !Number.isSafeInteger(row.distinctRuns)
26
+ || row.distinctRuns < 1) {
27
+ throw new KiokukoError('INTEGRITY_ERROR', 'Stored context feedback aggregate is invalid');
28
+ }
29
+ byVerdict.set(row.verdict, row.distinctRuns);
30
+ }
31
+ return CONTEXT_FEEDBACK_VERDICTS.flatMap((verdict) => {
32
+ const distinctRuns = byVerdict.get(verdict);
33
+ return distinctRuns === undefined ? [] : [{ verdict, distinctRuns, boundedInfluence: Math.min(2, distinctRuns) }];
34
+ });
35
+ }
36
+ const CONTEXT_INPUT_FIELDS = new Set([
37
+ 'workspace', 'feedbackId', 'deliveryId', 'entryId', 'entryRevision', 'runId', 'verdict',
38
+ 'comment', 'actor', 'idempotencyKey', 'createdAt',
39
+ ]);
40
+ const CONTEXT_LIST_FIELDS = new Set(['workspace', 'runId', 'deliveryId', 'entryId', 'limit']);
41
+ const RUN_INPUT_FIELDS = new Set([
42
+ 'workspace', 'feedbackId', 'runId', 'outcome', 'recommendationCode', 'recommendationVerdict',
43
+ 'rating', 'comment', 'actor', 'idempotencyKey', 'createdAt',
44
+ ]);
45
+ const RUN_LIST_FIELDS = new Set(['workspace', 'runId', 'limit']);
46
+ const VALIDATION_MESSAGE = 'Feedback input is invalid';
47
+ const NOT_FOUND_MESSAGE = 'Feedback target was not found';
48
+ const CONFLICT_MESSAGE = 'Feedback conflicts with existing record';
49
+ const INTEGRITY_MESSAGE = 'Stored feedback is invalid';
50
+ const DATABASE_MESSAGE = 'Feedback database operation failed';
51
+ function fail(code, message) {
52
+ throw new KiokukoError(code, message);
53
+ }
54
+ function validation() {
55
+ return fail('VALIDATION_ERROR', VALIDATION_MESSAGE);
56
+ }
57
+ function notFound() {
58
+ return fail('NOT_FOUND', NOT_FOUND_MESSAGE);
59
+ }
60
+ function conflict() {
61
+ return fail('CONFLICT', CONFLICT_MESSAGE);
62
+ }
63
+ function integrity() {
64
+ return fail('INTEGRITY_ERROR', INTEGRITY_MESSAGE);
65
+ }
66
+ function databaseFailure() {
67
+ return fail('DATABASE_ERROR', DATABASE_MESSAGE);
68
+ }
69
+ function isPlainObject(value) {
70
+ if (typeof value !== 'object' || value === null || Array.isArray(value) || isProxy(value))
71
+ return false;
72
+ const prototype = Object.getPrototypeOf(value);
73
+ return prototype === Object.prototype || prototype === null;
74
+ }
75
+ function inputFields(value, allowed, exact = false) {
76
+ if (!isPlainObject(value))
77
+ validation();
78
+ const keys = Reflect.ownKeys(value);
79
+ if (exact && keys.length !== allowed.size)
80
+ validation();
81
+ const descriptors = Object.getOwnPropertyDescriptors(value);
82
+ const result = Object.create(null);
83
+ for (const key of keys) {
84
+ if (typeof key !== 'string' || !allowed.has(key))
85
+ validation();
86
+ const descriptor = descriptors[key];
87
+ if (!descriptor || !('value' in descriptor) || descriptor.enumerable !== true)
88
+ validation();
89
+ result[key] = descriptor.value;
90
+ }
91
+ return result;
92
+ }
93
+ function isKiokukoError(error) {
94
+ return error instanceof KiokukoError;
95
+ }
96
+ const SQLITE_CONSTRAINT_PRIMARY_KEY = 1_555;
97
+ const SQLITE_CONSTRAINT_UNIQUE = 2_067;
98
+ const NO_UNIQUENESS_FAILURES = new Set();
99
+ const SQLITE_OPERATIONAL_PRIMARY_CODES = new Set([5, 6, 7, 8, 9, 10, 13, 14, 15, 22, 23]);
100
+ const SQLITE_INTEGRITY_PRIMARY_CODES = new Set([11, 24, 26]);
101
+ const CONTEXT_FEEDBACK_UNIQUENESS_FAILURES = new Set([
102
+ 'UNIQUE constraint failed: context_feedback.feedback_id',
103
+ 'UNIQUE constraint failed: context_feedback.run_id, context_feedback.actor, context_feedback.idempotency_key',
104
+ ]);
105
+ const RUN_FEEDBACK_UNIQUENESS_FAILURES = new Set([
106
+ 'UNIQUE constraint failed: run_feedback.feedback_id',
107
+ 'UNIQUE constraint failed: run_feedback.run_id, run_feedback.actor, run_feedback.idempotency_key',
108
+ ]);
109
+ const INTAKE_FEEDBACK_UNIQUENESS_FAILURES = new Set([
110
+ 'UNIQUE constraint failed: intake_feedback.feedback_id',
111
+ 'UNIQUE constraint failed: intake_feedback.run_id, intake_feedback.actor, intake_feedback.idempotency_key',
112
+ ]);
113
+ function nodeSqliteFailure(error) {
114
+ if (!(error instanceof Error))
115
+ return null;
116
+ const failure = error;
117
+ if (failure.code !== 'ERR_SQLITE_ERROR'
118
+ || typeof failure.errcode !== 'number'
119
+ || !Number.isSafeInteger(failure.errcode)
120
+ || failure.errcode < 0)
121
+ return null;
122
+ return failure;
123
+ }
124
+ function normalizeDatabaseError(error, uniquenessFailures = NO_UNIQUENESS_FAILURES) {
125
+ if (isKiokukoError(error))
126
+ throw error;
127
+ const failure = nodeSqliteFailure(error);
128
+ if (failure === null)
129
+ throw error;
130
+ if ((failure.errcode === SQLITE_CONSTRAINT_PRIMARY_KEY || failure.errcode === SQLITE_CONSTRAINT_UNIQUE)
131
+ && uniquenessFailures.has(failure.message))
132
+ conflict();
133
+ const primaryResultCode = failure.errcode & 0xff;
134
+ if (SQLITE_INTEGRITY_PRIMARY_CODES.has(primaryResultCode))
135
+ integrity();
136
+ if (SQLITE_OPERATIONAL_PRIMARY_CODES.has(primaryResultCode))
137
+ databaseFailure();
138
+ throw error;
139
+ }
140
+ function requiredString(value) {
141
+ if (typeof value !== 'string' || value.length === 0 || value.length > MAX_FEEDBACK_IDENTIFIER_LENGTH)
142
+ validation();
143
+ return value;
144
+ }
145
+ function optionalText(value, maximum) {
146
+ if (value === undefined || value === null)
147
+ return null;
148
+ if (typeof value !== 'string' || value.length === 0 || value.length > maximum)
149
+ validation();
150
+ return value;
151
+ }
152
+ function optionalUtf8Text(value, maximumBytes) {
153
+ if (value === undefined || value === null)
154
+ return null;
155
+ if (typeof value !== 'string' || value.length === 0 || Buffer.byteLength(value, 'utf8') > maximumBytes)
156
+ validation();
157
+ return value;
158
+ }
159
+ function isCanonicalFeedbackTimestamp(value) {
160
+ if (typeof value !== 'string' || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(value))
161
+ return false;
162
+ const parsed = Date.parse(value);
163
+ return Number.isFinite(parsed) && new Date(parsed).toISOString() === value;
164
+ }
165
+ export function validateFeedbackTimestamp(value) {
166
+ if (!isCanonicalFeedbackTimestamp(value))
167
+ validation();
168
+ return value;
169
+ }
170
+ function normalizeComment(value, workspace) {
171
+ if (value === undefined || value === null)
172
+ return null;
173
+ if (typeof value !== 'string')
174
+ validation();
175
+ if (value.trim().length === 0)
176
+ return null;
177
+ const sanitized = sanitizeJson(value, { workspace }).value;
178
+ if (typeof sanitized !== 'string')
179
+ validation();
180
+ if (sanitized.trim().length === 0)
181
+ return null;
182
+ if (Buffer.byteLength(sanitized, 'utf8') > MAX_FEEDBACK_COMMENT_BYTES)
183
+ validation();
184
+ return sanitized;
185
+ }
186
+ function hashIdempotencyKey(value) {
187
+ return createHash('sha256').update(value, 'utf8').digest('hex');
188
+ }
189
+ function contextBodyHash(input) {
190
+ return canonicalContentHash({
191
+ feedbackId: input.feedbackId,
192
+ workspace: input.workspace,
193
+ deliveryId: input.deliveryId,
194
+ entryId: input.entryId,
195
+ runId: input.runId,
196
+ verdict: input.verdict,
197
+ comment: input.comment,
198
+ actor: input.actor,
199
+ createdAt: input.createdAt,
200
+ });
201
+ }
202
+ function runBodyHash(input) {
203
+ return canonicalContentHash({
204
+ feedbackId: input.feedbackId,
205
+ workspace: input.workspace,
206
+ runId: input.runId,
207
+ outcome: input.outcome,
208
+ recommendationCode: input.recommendationCode,
209
+ recommendationVerdict: input.recommendationVerdict,
210
+ rating: input.rating,
211
+ comment: input.comment,
212
+ actor: input.actor,
213
+ createdAt: input.createdAt,
214
+ });
215
+ }
216
+ function validateContextFeedbackInput(value) {
217
+ const fields = inputFields(value, CONTEXT_INPUT_FIELDS);
218
+ const workspace = requiredString(fields.workspace);
219
+ const feedbackId = requiredString(fields.feedbackId);
220
+ const deliveryId = requiredString(fields.deliveryId);
221
+ const entryId = requiredString(fields.entryId);
222
+ const entryRevision = fields.entryRevision === undefined
223
+ ? undefined
224
+ : typeof fields.entryRevision === 'number' && Number.isSafeInteger(fields.entryRevision) && fields.entryRevision > 0
225
+ ? fields.entryRevision
226
+ : validation();
227
+ const runId = requiredString(fields.runId);
228
+ if (typeof fields.verdict !== 'string' || !CONTEXT_FEEDBACK_VERDICTS.includes(fields.verdict))
229
+ validation();
230
+ const verdict = fields.verdict;
231
+ const actor = requiredString(fields.actor);
232
+ const idempotencyKey = requiredString(fields.idempotencyKey);
233
+ const createdAt = validateFeedbackTimestamp(fields.createdAt);
234
+ const comment = normalizeComment(fields.comment, workspace);
235
+ return {
236
+ feedbackId,
237
+ workspace,
238
+ deliveryId,
239
+ entryId,
240
+ ...(entryRevision === undefined ? {} : { entryRevision }),
241
+ runId,
242
+ verdict,
243
+ comment,
244
+ actor,
245
+ idempotencyKeyHash: hashIdempotencyKey(idempotencyKey),
246
+ createdAt,
247
+ };
248
+ }
249
+ function validateContextFeedbackListInput(value) {
250
+ const fields = inputFields(value, CONTEXT_LIST_FIELDS);
251
+ const workspace = requiredString(fields.workspace);
252
+ const runId = fields.runId === undefined ? undefined : requiredString(fields.runId);
253
+ const deliveryId = fields.deliveryId === undefined ? undefined : requiredString(fields.deliveryId);
254
+ const entryId = fields.entryId === undefined ? undefined : requiredString(fields.entryId);
255
+ const limit = fields.limit === undefined ? 100 : fields.limit;
256
+ if (typeof limit !== 'number' || !Number.isInteger(limit) || limit < 1 || limit > 100)
257
+ validation();
258
+ return {
259
+ workspace,
260
+ ...(runId === undefined ? {} : { runId }),
261
+ ...(deliveryId === undefined ? {} : { deliveryId }),
262
+ ...(entryId === undefined ? {} : { entryId }),
263
+ limit,
264
+ };
265
+ }
266
+ function validateRunFeedbackListInput(value) {
267
+ const fields = inputFields(value, RUN_LIST_FIELDS);
268
+ const workspace = requiredString(fields.workspace);
269
+ const runId = fields.runId === undefined ? undefined : requiredString(fields.runId);
270
+ const limit = fields.limit === undefined ? 100 : fields.limit;
271
+ if (typeof limit !== 'number' || !Number.isInteger(limit) || limit < 1 || limit > 100)
272
+ validation();
273
+ return { workspace, ...(runId === undefined ? {} : { runId }), limit };
274
+ }
275
+ function validateRunFeedbackInput(value) {
276
+ const fields = inputFields(value, RUN_INPUT_FIELDS);
277
+ const workspace = requiredString(fields.workspace);
278
+ const feedbackId = requiredString(fields.feedbackId);
279
+ const runId = requiredString(fields.runId);
280
+ const outcome = optionalUtf8Text(fields.outcome, MAX_FEEDBACK_OUTCOME_BYTES);
281
+ const recommendationCode = optionalText(fields.recommendationCode, MAX_FEEDBACK_IDENTIFIER_LENGTH);
282
+ const rawRecommendationVerdict = fields.recommendationVerdict;
283
+ const recommendationVerdict = rawRecommendationVerdict === undefined || rawRecommendationVerdict === null
284
+ ? null
285
+ : typeof rawRecommendationVerdict === 'string' && RUN_FEEDBACK_RECOMMENDATION_VERDICTS.includes(rawRecommendationVerdict)
286
+ ? rawRecommendationVerdict
287
+ : validation();
288
+ if ((recommendationCode === null) !== (recommendationVerdict === null))
289
+ validation();
290
+ const rawRating = fields.rating;
291
+ const rating = rawRating === undefined || rawRating === null
292
+ ? null
293
+ : typeof rawRating === 'number' && Number.isInteger(rawRating) && rawRating >= 1 && rawRating <= 5
294
+ ? rawRating
295
+ : validation();
296
+ if (outcome === null && recommendationCode === null && rating === null)
297
+ validation();
298
+ const actor = requiredString(fields.actor);
299
+ const idempotencyKey = requiredString(fields.idempotencyKey);
300
+ const createdAt = validateFeedbackTimestamp(fields.createdAt);
301
+ const comment = normalizeComment(fields.comment, workspace);
302
+ return {
303
+ feedbackId,
304
+ workspace,
305
+ runId,
306
+ outcome,
307
+ recommendationCode,
308
+ recommendationVerdict,
309
+ rating,
310
+ comment,
311
+ actor,
312
+ idempotencyKeyHash: hashIdempotencyKey(idempotencyKey),
313
+ createdAt,
314
+ };
315
+ }
316
+ function assertContextTarget(database, input) {
317
+ const target = database.prepare(`
318
+ SELECT cde.entry_revision AS entry_revision, cde.origin_scope AS origin_scope,
319
+ e.workspace AS entry_workspace, er.workspace AS revision_workspace
320
+ FROM context_deliveries AS cd
321
+ JOIN ledger_runs AS lr ON lr.run_id = cd.run_id
322
+ JOIN context_delivery_entries AS cde
323
+ ON cde.delivery_id = cd.delivery_id AND cde.entry_id = ?
324
+ JOIN entries AS e ON e.id = cde.entry_id
325
+ JOIN entry_revisions AS er
326
+ ON er.entry_id = cde.entry_id AND er.revision = cde.entry_revision
327
+ WHERE cd.delivery_id = ?
328
+ AND cd.run_id = ?
329
+ AND lr.workspace = ?
330
+ `).get(input.entryId, input.deliveryId, input.runId, input.workspace);
331
+ if (!target)
332
+ notFound();
333
+ if (!isContextEntryOrigin(target.origin_scope)
334
+ || typeof target.entry_workspace !== 'string'
335
+ || target.revision_workspace !== target.entry_workspace
336
+ || !entryOriginMatchesWorkspace({ origin: target.origin_scope, runWorkspace: input.workspace, entryWorkspace: target.entry_workspace }))
337
+ notFound();
338
+ if (input.entryRevision !== undefined && target.entry_revision !== input.entryRevision)
339
+ conflict();
340
+ }
341
+ function selectContextByKey(database, input) {
342
+ return database.prepare(`
343
+ SELECT
344
+ cf.feedback_id, cf.delivery_id, cf.entry_id, cf.run_id, cf.verdict, cf.comment,
345
+ cf.actor, cf.idempotency_key, cf.created_at,
346
+ lr.workspace AS run_workspace,
347
+ cd.run_id AS delivery_run_id,
348
+ cd.delivery_id AS joined_delivery_id,
349
+ cde.delivery_id AS linked_delivery_id,
350
+ cde.entry_id AS linked_entry_id,
351
+ cde.entry_revision AS entry_revision,
352
+ e.workspace AS entry_workspace,
353
+ er.workspace AS revision_workspace,
354
+ cde.origin_scope AS origin_scope
355
+ FROM context_feedback AS cf
356
+ LEFT JOIN ledger_runs AS lr ON lr.run_id = cf.run_id
357
+ LEFT JOIN context_deliveries AS cd ON cd.delivery_id = cf.delivery_id
358
+ LEFT JOIN context_delivery_entries AS cde
359
+ ON cde.delivery_id = cf.delivery_id AND cde.entry_id = cf.entry_id
360
+ LEFT JOIN entries AS e ON e.id = cf.entry_id
361
+ LEFT JOIN entry_revisions AS er
362
+ ON er.entry_id = cde.entry_id AND er.revision = cde.entry_revision
363
+ WHERE cf.run_id = ? AND cf.actor = ? AND cf.idempotency_key = ?
364
+ `).get(input.runId, input.actor, input.idempotencyKeyHash);
365
+ }
366
+ function hasContextFeedbackId(database, feedbackId) {
367
+ return Boolean(database.prepare('SELECT 1 AS present FROM context_feedback WHERE feedback_id = ?').get(feedbackId));
368
+ }
369
+ function storedString(value) {
370
+ if (typeof value !== 'string' || value.length === 0)
371
+ integrity();
372
+ return value;
373
+ }
374
+ function storedHash(value) {
375
+ if (typeof value !== 'string' || !/^[0-9a-f]{64}$/.test(value))
376
+ integrity();
377
+ return value;
378
+ }
379
+ function storedTimestamp(value) {
380
+ if (!isCanonicalFeedbackTimestamp(value))
381
+ integrity();
382
+ return value;
383
+ }
384
+ function rowToContextFeedback(row, workspace) {
385
+ const feedbackId = storedString(row.feedback_id);
386
+ const deliveryId = storedString(row.delivery_id);
387
+ const entryId = storedString(row.entry_id);
388
+ const runId = storedString(row.run_id);
389
+ const actor = storedString(row.actor);
390
+ const runWorkspace = storedString(row.run_workspace);
391
+ if (runWorkspace !== workspace)
392
+ integrity();
393
+ if (storedString(row.delivery_run_id) !== runId)
394
+ integrity();
395
+ if (storedString(row.joined_delivery_id) !== deliveryId)
396
+ integrity();
397
+ if (storedString(row.linked_delivery_id) !== deliveryId)
398
+ integrity();
399
+ if (storedString(row.linked_entry_id) !== entryId)
400
+ integrity();
401
+ const origin = isContextEntryOrigin(row.origin_scope) ? row.origin_scope : integrity();
402
+ const entryWorkspace = storedString(row.entry_workspace);
403
+ if (storedString(row.revision_workspace) !== entryWorkspace
404
+ || !entryOriginMatchesWorkspace({ origin, runWorkspace: workspace, entryWorkspace }))
405
+ integrity();
406
+ if (typeof row.verdict !== 'string' || !CONTEXT_FEEDBACK_VERDICTS.includes(row.verdict))
407
+ integrity();
408
+ const verdict = row.verdict;
409
+ let comment;
410
+ if (row.comment === null) {
411
+ comment = null;
412
+ }
413
+ else if (typeof row.comment === 'string') {
414
+ if (row.comment.length === 0 || Buffer.byteLength(row.comment, 'utf8') > MAX_FEEDBACK_COMMENT_BYTES)
415
+ integrity();
416
+ const sanitized = normalizeComment(row.comment, workspace);
417
+ if (sanitized !== row.comment)
418
+ integrity();
419
+ comment = row.comment;
420
+ }
421
+ else {
422
+ integrity();
423
+ }
424
+ return {
425
+ feedbackId,
426
+ workspace,
427
+ deliveryId,
428
+ entryId,
429
+ runId,
430
+ verdict,
431
+ comment,
432
+ actor,
433
+ idempotencyKeyHash: storedHash(row.idempotency_key),
434
+ createdAt: storedTimestamp(row.created_at),
435
+ };
436
+ }
437
+ function preflightContextFeedbackWrite(database, input) {
438
+ assertContextTarget(database, input);
439
+ const existingByKey = selectContextByKey(database, input);
440
+ if (existingByKey) {
441
+ const existing = rowToContextFeedback(existingByKey, input.workspace);
442
+ if (contextBodyHash(existing) === contextBodyHash(input))
443
+ return existing;
444
+ conflict();
445
+ }
446
+ if (hasContextFeedbackId(database, input.feedbackId))
447
+ conflict();
448
+ return undefined;
449
+ }
450
+ /** Validate a context-feedback write and its exact persisted target without mutating state. */
451
+ export function assertContextFeedbackRecordable(database, input) {
452
+ const validated = validateContextFeedbackInput(input);
453
+ try {
454
+ preflightContextFeedbackWrite(database, validated);
455
+ }
456
+ catch (error) {
457
+ normalizeDatabaseError(error, CONTEXT_FEEDBACK_UNIQUENESS_FAILURES);
458
+ }
459
+ }
460
+ function writeContextFeedback(database, input) {
461
+ const existing = preflightContextFeedbackWrite(database, input);
462
+ if (existing !== undefined)
463
+ return existing;
464
+ database.prepare(`
465
+ INSERT INTO context_feedback (
466
+ feedback_id, delivery_id, entry_id, run_id, verdict, comment, actor, idempotency_key, created_at
467
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
468
+ `).run(input.feedbackId, input.deliveryId, input.entryId, input.runId, input.verdict, input.comment, input.actor, input.idempotencyKeyHash, input.createdAt);
469
+ const row = selectContextByKey(database, input);
470
+ if (!row)
471
+ integrity();
472
+ return rowToContextFeedback(row, input.workspace);
473
+ }
474
+ export function recordContextFeedbackInTransaction(database, input) {
475
+ const validated = validateContextFeedbackInput(input);
476
+ try {
477
+ return writeContextFeedback(database, validated);
478
+ }
479
+ catch (error) {
480
+ normalizeDatabaseError(error, CONTEXT_FEEDBACK_UNIQUENESS_FAILURES);
481
+ }
482
+ }
483
+ export function recordContextFeedback(database, input) {
484
+ const validated = validateContextFeedbackInput(input);
485
+ try {
486
+ return withImmediateTransaction(database, () => writeContextFeedback(database, validated));
487
+ }
488
+ catch (error) {
489
+ normalizeDatabaseError(error, CONTEXT_FEEDBACK_UNIQUENESS_FAILURES);
490
+ }
491
+ }
492
+ function runOptionalStoredText(value, maximum) {
493
+ if (value === null)
494
+ return null;
495
+ if (typeof value !== 'string' || value.length === 0 || value.length > maximum)
496
+ integrity();
497
+ return value;
498
+ }
499
+ function runOptionalStoredUtf8Text(value, maximumBytes) {
500
+ if (value === null)
501
+ return null;
502
+ if (typeof value !== 'string' || value.length === 0 || Buffer.byteLength(value, 'utf8') > maximumBytes)
503
+ integrity();
504
+ return value;
505
+ }
506
+ function runStoredComment(value, workspace) {
507
+ if (value === null)
508
+ return null;
509
+ if (typeof value !== 'string' || value.length === 0 || Buffer.byteLength(value, 'utf8') > MAX_FEEDBACK_COMMENT_BYTES)
510
+ integrity();
511
+ const sanitized = normalizeComment(value, workspace);
512
+ if (sanitized !== value)
513
+ integrity();
514
+ return value;
515
+ }
516
+ function runBodyHashFromInput(input) {
517
+ return runBodyHash(input);
518
+ }
519
+ function assertRunTarget(database, input) {
520
+ const target = database.prepare('SELECT 1 AS present FROM ledger_runs WHERE run_id = ? AND workspace = ?').get(input.runId, input.workspace);
521
+ if (!target)
522
+ notFound();
523
+ }
524
+ function selectRunByKey(database, input) {
525
+ return database.prepare(`
526
+ SELECT
527
+ rf.feedback_id, rf.run_id, rf.outcome, rf.recommendation_code, rf.recommendation_verdict,
528
+ rf.rating, rf.comment, rf.actor, rf.idempotency_key, rf.created_at,
529
+ lr.workspace AS run_workspace
530
+ FROM run_feedback AS rf
531
+ LEFT JOIN ledger_runs AS lr ON lr.run_id = rf.run_id
532
+ WHERE rf.run_id = ? AND rf.actor = ? AND rf.idempotency_key = ?
533
+ `).get(input.runId, input.actor, input.idempotencyKeyHash);
534
+ }
535
+ function hasRunFeedbackId(database, feedbackId) {
536
+ return Boolean(database.prepare('SELECT 1 AS present FROM run_feedback WHERE feedback_id = ?').get(feedbackId));
537
+ }
538
+ function rowToRunFeedback(row, workspace) {
539
+ const feedbackId = storedString(row.feedback_id);
540
+ const runId = storedString(row.run_id);
541
+ const runWorkspace = storedString(row.run_workspace);
542
+ if (runWorkspace !== workspace)
543
+ integrity();
544
+ const outcome = runOptionalStoredUtf8Text(row.outcome, MAX_FEEDBACK_OUTCOME_BYTES);
545
+ const recommendationCode = runOptionalStoredText(row.recommendation_code, MAX_FEEDBACK_IDENTIFIER_LENGTH);
546
+ let recommendationVerdict;
547
+ if (row.recommendation_verdict === null) {
548
+ recommendationVerdict = null;
549
+ }
550
+ else if (typeof row.recommendation_verdict === 'string' && RUN_FEEDBACK_RECOMMENDATION_VERDICTS.includes(row.recommendation_verdict)) {
551
+ recommendationVerdict = row.recommendation_verdict;
552
+ }
553
+ else {
554
+ integrity();
555
+ }
556
+ if ((recommendationCode === null) !== (recommendationVerdict === null))
557
+ integrity();
558
+ const rating = row.rating === null
559
+ ? null
560
+ : typeof row.rating === 'number' && Number.isInteger(row.rating) && row.rating >= 1 && row.rating <= 5
561
+ ? row.rating
562
+ : integrity();
563
+ if (outcome === null && recommendationCode === null && rating === null)
564
+ integrity();
565
+ const actor = storedString(row.actor);
566
+ const comment = runStoredComment(row.comment, workspace);
567
+ return {
568
+ feedbackId,
569
+ workspace,
570
+ runId,
571
+ outcome,
572
+ recommendationCode,
573
+ recommendationVerdict,
574
+ rating,
575
+ comment,
576
+ actor,
577
+ idempotencyKeyHash: storedHash(row.idempotency_key),
578
+ createdAt: storedTimestamp(row.created_at),
579
+ };
580
+ }
581
+ function writeRunFeedback(database, input) {
582
+ assertRunTarget(database, input);
583
+ const existingByKey = selectRunByKey(database, input);
584
+ if (existingByKey) {
585
+ const existing = rowToRunFeedback(existingByKey, input.workspace);
586
+ if (runBodyHash(existing) === runBodyHashFromInput(input))
587
+ return existing;
588
+ conflict();
589
+ }
590
+ if (hasRunFeedbackId(database, input.feedbackId))
591
+ conflict();
592
+ database.prepare(`
593
+ INSERT INTO run_feedback (
594
+ feedback_id, run_id, outcome, recommendation_code, recommendation_verdict,
595
+ rating, comment, actor, idempotency_key, created_at
596
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
597
+ `).run(input.feedbackId, input.runId, input.outcome, input.recommendationCode, input.recommendationVerdict, input.rating, input.comment, input.actor, input.idempotencyKeyHash, input.createdAt);
598
+ const row = selectRunByKey(database, input);
599
+ if (!row)
600
+ integrity();
601
+ return rowToRunFeedback(row, input.workspace);
602
+ }
603
+ export function recordRunFeedbackInTransaction(database, input) {
604
+ const validated = validateRunFeedbackInput(input);
605
+ try {
606
+ return writeRunFeedback(database, validated);
607
+ }
608
+ catch (error) {
609
+ normalizeDatabaseError(error, RUN_FEEDBACK_UNIQUENESS_FAILURES);
610
+ }
611
+ }
612
+ export function recordRunFeedback(database, input) {
613
+ const validated = validateRunFeedbackInput(input);
614
+ try {
615
+ return withImmediateTransaction(database, () => writeRunFeedback(database, validated));
616
+ }
617
+ catch (error) {
618
+ normalizeDatabaseError(error, RUN_FEEDBACK_UNIQUENESS_FAILURES);
619
+ }
620
+ }
621
+ export function listRunFeedback(database, input) {
622
+ const validated = validateRunFeedbackListInput(input);
623
+ try {
624
+ const conditions = ['(lr.workspace = ? OR lr.workspace IS NULL)'];
625
+ const parameters = [validated.workspace];
626
+ if (validated.runId !== undefined) {
627
+ conditions.push('rf.run_id = ?');
628
+ parameters.push(validated.runId);
629
+ }
630
+ const rows = database.prepare(`
631
+ SELECT
632
+ rf.feedback_id, rf.run_id, rf.outcome, rf.recommendation_code, rf.recommendation_verdict,
633
+ rf.rating, rf.comment, rf.actor, rf.idempotency_key, rf.created_at,
634
+ lr.workspace AS run_workspace
635
+ FROM run_feedback AS rf
636
+ LEFT JOIN ledger_runs AS lr ON lr.run_id = rf.run_id
637
+ WHERE ${conditions.join(' AND ')}
638
+ ORDER BY rf.created_at ASC, rf.feedback_id ASC
639
+ LIMIT ?
640
+ `).all(...parameters, validated.limit + 1);
641
+ const records = rows.map((row) => rowToRunFeedback(row, validated.workspace));
642
+ return { records: records.slice(0, validated.limit), truncated: records.length > validated.limit };
643
+ }
644
+ catch (error) {
645
+ normalizeDatabaseError(error);
646
+ }
647
+ }
648
+ export function listContextFeedback(database, input) {
649
+ const validated = validateContextFeedbackListInput(input);
650
+ try {
651
+ const conditions = ['(lr.workspace = ? OR lr.workspace IS NULL)'];
652
+ const parameters = [validated.workspace];
653
+ if (validated.runId !== undefined) {
654
+ conditions.push('cf.run_id = ?');
655
+ parameters.push(validated.runId);
656
+ }
657
+ if (validated.deliveryId !== undefined) {
658
+ conditions.push('cf.delivery_id = ?');
659
+ parameters.push(validated.deliveryId);
660
+ }
661
+ if (validated.entryId !== undefined) {
662
+ conditions.push('cf.entry_id = ?');
663
+ parameters.push(validated.entryId);
664
+ }
665
+ const rows = database.prepare(`
666
+ SELECT
667
+ cf.feedback_id, cf.delivery_id, cf.entry_id, cf.run_id, cf.verdict, cf.comment,
668
+ cf.actor, cf.idempotency_key, cf.created_at,
669
+ lr.workspace AS run_workspace,
670
+ cd.run_id AS delivery_run_id,
671
+ cd.delivery_id AS joined_delivery_id,
672
+ cde.delivery_id AS linked_delivery_id,
673
+ cde.entry_id AS linked_entry_id,
674
+ cde.entry_revision AS entry_revision,
675
+ e.workspace AS entry_workspace,
676
+ er.workspace AS revision_workspace,
677
+ cde.origin_scope AS origin_scope
678
+ FROM context_feedback AS cf
679
+ LEFT JOIN ledger_runs AS lr ON lr.run_id = cf.run_id
680
+ LEFT JOIN context_deliveries AS cd ON cd.delivery_id = cf.delivery_id
681
+ LEFT JOIN context_delivery_entries AS cde
682
+ ON cde.delivery_id = cf.delivery_id AND cde.entry_id = cf.entry_id
683
+ LEFT JOIN entries AS e ON e.id = cf.entry_id
684
+ LEFT JOIN entry_revisions AS er
685
+ ON er.entry_id = cde.entry_id AND er.revision = cde.entry_revision
686
+ WHERE ${conditions.join(' AND ')}
687
+ ORDER BY cf.created_at ASC, cf.feedback_id ASC
688
+ LIMIT ?
689
+ `).all(...parameters, validated.limit + 1);
690
+ const records = rows.map((row) => rowToContextFeedback(row, validated.workspace));
691
+ return { records: records.slice(0, validated.limit), truncated: records.length > validated.limit };
692
+ }
693
+ catch (error) {
694
+ normalizeDatabaseError(error);
695
+ }
696
+ }
697
+ export const INTAKE_FEEDBACK_VERDICTS = ['helpful', 'unnecessary', 'corrected'];
698
+ const INTAKE_FEEDBACK_FIELDS = new Set([
699
+ 'workspace', 'feedbackId', 'runId', 'sessionId', 'questionId', 'profileField',
700
+ 'verdict', 'comment', 'actor', 'idempotencyKey', 'createdAt',
701
+ ]);
702
+ const INTAKE_PROFILE_FIELDS = new Set(['taskType', 'target', 'expected', 'constraints']);
703
+ function initialInputIdentifier(value) {
704
+ if (typeof value !== 'string' || value.length === 0 || Buffer.byteLength(value, 'utf8') > MAX_FEEDBACK_IDENTIFIER_LENGTH || /\p{Cc}/u.test(value))
705
+ validation();
706
+ return value;
707
+ }
708
+ function initialInputComment(value, workspace) {
709
+ if (value === null)
710
+ return null;
711
+ if (typeof value !== 'string' || value.length === 0)
712
+ validation();
713
+ const sanitized = sanitizeJson(value, { workspace }).value;
714
+ if (typeof sanitized !== 'string' || sanitized.length === 0 || Buffer.byteLength(sanitized, 'utf8') > MAX_FEEDBACK_COMMENT_BYTES)
715
+ validation();
716
+ return sanitized;
717
+ }
718
+ function validateInitialIntakeFeedbackInput(value) {
719
+ const fields = inputFields(value, INTAKE_FEEDBACK_FIELDS, true);
720
+ const workspace = initialInputIdentifier(fields.workspace);
721
+ const feedbackId = initialInputIdentifier(fields.feedbackId);
722
+ const runId = initialInputIdentifier(fields.runId);
723
+ const sessionId = initialInputIdentifier(fields.sessionId);
724
+ const questionId = fields.questionId === null
725
+ ? null
726
+ : typeof fields.questionId === 'string' && INTAKE_PROFILE_FIELDS.has(fields.questionId)
727
+ ? fields.questionId
728
+ : validation();
729
+ const profileField = fields.profileField === null
730
+ ? null
731
+ : typeof fields.profileField === 'string' && INTAKE_PROFILE_FIELDS.has(fields.profileField)
732
+ ? fields.profileField
733
+ : validation();
734
+ if ((questionId === null) === (profileField === null))
735
+ validation();
736
+ if (typeof fields.verdict !== 'string' || !INTAKE_FEEDBACK_VERDICTS.includes(fields.verdict))
737
+ validation();
738
+ const actor = initialInputIdentifier(fields.actor);
739
+ const idempotencyKey = initialInputIdentifier(fields.idempotencyKey);
740
+ return {
741
+ workspace,
742
+ feedbackId,
743
+ runId,
744
+ sessionId,
745
+ questionId,
746
+ profileField,
747
+ verdict: fields.verdict,
748
+ comment: initialInputComment(fields.comment, workspace),
749
+ actor,
750
+ idempotencyKeyHash: hashIdempotencyKey(idempotencyKey),
751
+ createdAt: validateFeedbackTimestamp(fields.createdAt),
752
+ };
753
+ }
754
+ function initialIntakeTarget(database, input) {
755
+ const linked = database.prepare(`
756
+ SELECT ri.run_id, ri.session_id
757
+ FROM run_intakes AS ri
758
+ JOIN ledger_runs AS lr ON lr.run_id = ri.run_id
759
+ JOIN akinator_sessions AS s ON s.id = ri.session_id
760
+ WHERE ri.run_id = ? AND ri.session_id = ?
761
+ AND lr.workspace = ? AND s.workspace = ?
762
+ `).get(input.runId, input.sessionId, input.workspace, input.workspace);
763
+ if (!linked)
764
+ notFound();
765
+ if (input.questionId !== null) {
766
+ const answer = database.prepare(`
767
+ SELECT 1 AS present
768
+ FROM akinator_answers
769
+ WHERE session_id = ? AND question_id = ?
770
+ `).get(input.sessionId, input.questionId);
771
+ if (!answer)
772
+ notFound();
773
+ }
774
+ }
775
+ function initialIntakeRecord(input) {
776
+ return {
777
+ feedbackId: input.feedbackId,
778
+ workspace: input.workspace,
779
+ runId: input.runId,
780
+ sessionId: input.sessionId,
781
+ questionId: input.questionId,
782
+ profileField: input.profileField,
783
+ verdict: input.verdict,
784
+ comment: input.comment,
785
+ actor: input.actor,
786
+ idempotencyKeyHash: input.idempotencyKeyHash,
787
+ createdAt: input.createdAt,
788
+ };
789
+ }
790
+ function initialIntakeBodyHash(input) {
791
+ return canonicalContentHash({
792
+ feedbackId: input.feedbackId,
793
+ workspace: input.workspace,
794
+ runId: input.runId,
795
+ sessionId: input.sessionId,
796
+ questionId: input.questionId,
797
+ profileField: input.profileField,
798
+ verdict: input.verdict,
799
+ comment: input.comment,
800
+ actor: input.actor,
801
+ createdAt: input.createdAt,
802
+ });
803
+ }
804
+ function selectInitialIntakeByKey(database, input) {
805
+ return database.prepare(`
806
+ SELECT
807
+ ifb.feedback_id, ifb.run_id, ifb.session_id, ifb.question_id, ifb.profile_field,
808
+ ifb.verdict, ifb.comment, ifb.actor, ifb.idempotency_key, ifb.created_at,
809
+ lr.workspace AS run_workspace,
810
+ s.workspace AS session_workspace,
811
+ ri.run_id AS linked_run_id,
812
+ ri.session_id AS linked_session_id,
813
+ aa.session_id AS question_answer_session_id
814
+ FROM intake_feedback AS ifb
815
+ LEFT JOIN ledger_runs AS lr ON lr.run_id = ifb.run_id
816
+ LEFT JOIN akinator_sessions AS s ON s.id = ifb.session_id
817
+ LEFT JOIN run_intakes AS ri ON ri.run_id = ifb.run_id AND ri.session_id = ifb.session_id
818
+ LEFT JOIN akinator_answers AS aa ON aa.session_id = ifb.session_id AND aa.question_id = ifb.question_id
819
+ WHERE ifb.run_id = ? AND ifb.actor = ? AND ifb.idempotency_key = ?
820
+ `).get(input.runId, input.actor, input.idempotencyKeyHash);
821
+ }
822
+ function hasInitialIntakeFeedbackId(database, feedbackId) {
823
+ return Boolean(database.prepare('SELECT 1 AS present FROM intake_feedback WHERE feedback_id = ?').get(feedbackId));
824
+ }
825
+ function initialStoredIdentifier(value) {
826
+ if (typeof value !== 'string' || value.length === 0 || Buffer.byteLength(value, 'utf8') > MAX_FEEDBACK_IDENTIFIER_LENGTH || /\p{Cc}/u.test(value))
827
+ integrity();
828
+ return value;
829
+ }
830
+ function initialStoredHash(value) {
831
+ if (typeof value !== 'string' || !/^[0-9a-f]{64}$/.test(value))
832
+ integrity();
833
+ return value;
834
+ }
835
+ function initialStoredComment(value, workspace) {
836
+ if (value === null)
837
+ return null;
838
+ if (typeof value !== 'string' || value.length === 0 || Buffer.byteLength(value, 'utf8') > MAX_FEEDBACK_COMMENT_BYTES)
839
+ integrity();
840
+ const sanitized = initialInputComment(value, workspace);
841
+ if (sanitized !== value)
842
+ integrity();
843
+ return value;
844
+ }
845
+ function rowToInitialIntakeFeedback(row, workspace) {
846
+ const feedbackId = initialStoredIdentifier(row.feedback_id);
847
+ const runId = initialStoredIdentifier(row.run_id);
848
+ const sessionId = initialStoredIdentifier(row.session_id);
849
+ const actor = initialStoredIdentifier(row.actor);
850
+ const runWorkspace = initialStoredIdentifier(row.run_workspace);
851
+ const sessionWorkspace = initialStoredIdentifier(row.session_workspace);
852
+ const linkedRunId = initialStoredIdentifier(row.linked_run_id);
853
+ const linkedSessionId = initialStoredIdentifier(row.linked_session_id);
854
+ if (runWorkspace !== workspace || sessionWorkspace !== workspace || linkedRunId !== runId || linkedSessionId !== sessionId)
855
+ integrity();
856
+ const questionId = row.question_id === null
857
+ ? null
858
+ : typeof row.question_id === 'string' && INTAKE_PROFILE_FIELDS.has(row.question_id)
859
+ ? row.question_id
860
+ : integrity();
861
+ const profileField = row.profile_field === null
862
+ ? null
863
+ : typeof row.profile_field === 'string' && INTAKE_PROFILE_FIELDS.has(row.profile_field)
864
+ ? row.profile_field
865
+ : integrity();
866
+ if ((questionId === null) === (profileField === null))
867
+ integrity();
868
+ if (questionId !== null && initialStoredIdentifier(row.question_answer_session_id) !== sessionId)
869
+ integrity();
870
+ if (typeof row.verdict !== 'string' || !INTAKE_FEEDBACK_VERDICTS.includes(row.verdict))
871
+ integrity();
872
+ return {
873
+ feedbackId,
874
+ workspace,
875
+ runId,
876
+ sessionId,
877
+ questionId,
878
+ profileField,
879
+ verdict: row.verdict,
880
+ comment: initialStoredComment(row.comment, workspace),
881
+ actor,
882
+ idempotencyKeyHash: initialStoredHash(row.idempotency_key),
883
+ createdAt: storedTimestamp(row.created_at),
884
+ };
885
+ }
886
+ function recordInitialIntakeFeedback(database, input) {
887
+ initialIntakeTarget(database, input);
888
+ const existingByKey = selectInitialIntakeByKey(database, input);
889
+ if (existingByKey) {
890
+ const existing = rowToInitialIntakeFeedback(existingByKey, input.workspace);
891
+ if (initialIntakeBodyHash(existing) === initialIntakeBodyHash(initialIntakeRecord(input)))
892
+ return existing;
893
+ conflict();
894
+ }
895
+ if (hasInitialIntakeFeedbackId(database, input.feedbackId))
896
+ conflict();
897
+ database.prepare(`
898
+ INSERT INTO intake_feedback (
899
+ feedback_id, run_id, session_id, question_id, profile_field, verdict, comment, actor, idempotency_key, created_at
900
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
901
+ `).run(input.feedbackId, input.runId, input.sessionId, input.questionId, input.profileField, input.verdict, input.comment, input.actor, input.idempotencyKeyHash, input.createdAt);
902
+ const row = selectInitialIntakeByKey(database, input);
903
+ if (!row)
904
+ integrity();
905
+ return rowToInitialIntakeFeedback(row, input.workspace);
906
+ }
907
+ export function recordIntakeFeedback(database, input) {
908
+ const validated = validateInitialIntakeFeedbackInput(input);
909
+ try {
910
+ return withImmediateTransaction(database, () => recordInitialIntakeFeedback(database, validated));
911
+ }
912
+ catch (error) {
913
+ normalizeDatabaseError(error, INTAKE_FEEDBACK_UNIQUENESS_FAILURES);
914
+ }
915
+ }
916
+ export function recordIntakeFeedbackInTransaction(database, input) {
917
+ const validated = validateInitialIntakeFeedbackInput(input);
918
+ try {
919
+ return recordInitialIntakeFeedback(database, validated);
920
+ }
921
+ catch (error) {
922
+ normalizeDatabaseError(error, INTAKE_FEEDBACK_UNIQUENESS_FAILURES);
923
+ }
924
+ }
925
+ const INTAKE_FEEDBACK_LIST_FIELDS = new Set(['workspace', 'runId', 'sessionId', 'questionId', 'profileField', 'limit']);
926
+ function validateInitialIntakeFeedbackListInput(value) {
927
+ const fields = inputFields(value, INTAKE_FEEDBACK_LIST_FIELDS);
928
+ const workspace = initialInputIdentifier(fields.workspace);
929
+ const runId = fields.runId === undefined ? undefined : initialInputIdentifier(fields.runId);
930
+ const sessionId = fields.sessionId === undefined ? undefined : initialInputIdentifier(fields.sessionId);
931
+ const questionId = fields.questionId === undefined ? undefined : initialInputIdentifier(fields.questionId);
932
+ const profileField = fields.profileField === undefined ? undefined : initialInputIdentifier(fields.profileField);
933
+ if (questionId !== undefined && !INTAKE_PROFILE_FIELDS.has(questionId))
934
+ validation();
935
+ if (profileField !== undefined && !INTAKE_PROFILE_FIELDS.has(profileField))
936
+ validation();
937
+ if (questionId !== undefined && profileField !== undefined)
938
+ validation();
939
+ const limit = fields.limit === undefined ? 100 : fields.limit;
940
+ if (typeof limit !== 'number' || !Number.isInteger(limit) || limit < 1 || limit > 100)
941
+ validation();
942
+ return { workspace, ...(runId === undefined ? {} : { runId }), ...(sessionId === undefined ? {} : { sessionId }), ...(questionId === undefined ? {} : { questionId }), ...(profileField === undefined ? {} : { profileField }), limit };
943
+ }
944
+ function selectInitialIntakeRows(database, input) {
945
+ const conditions = ['(lr.workspace = ? OR lr.workspace IS NULL)'];
946
+ const parameters = [input.workspace];
947
+ if (input.runId !== undefined) {
948
+ conditions.push('ifb.run_id = ?');
949
+ parameters.push(input.runId);
950
+ }
951
+ if (input.sessionId !== undefined) {
952
+ conditions.push('ifb.session_id = ?');
953
+ parameters.push(input.sessionId);
954
+ }
955
+ if (input.questionId !== undefined) {
956
+ conditions.push('ifb.question_id = ?');
957
+ parameters.push(input.questionId);
958
+ }
959
+ if (input.profileField !== undefined) {
960
+ conditions.push('ifb.profile_field = ?');
961
+ parameters.push(input.profileField);
962
+ }
963
+ return database.prepare(`
964
+ SELECT
965
+ ifb.feedback_id, ifb.run_id, ifb.session_id, ifb.question_id, ifb.profile_field,
966
+ ifb.verdict, ifb.comment, ifb.actor, ifb.idempotency_key, ifb.created_at,
967
+ lr.workspace AS run_workspace,
968
+ s.workspace AS session_workspace,
969
+ ri.run_id AS linked_run_id,
970
+ ri.session_id AS linked_session_id,
971
+ aa.session_id AS question_answer_session_id
972
+ FROM intake_feedback AS ifb
973
+ LEFT JOIN ledger_runs AS lr ON lr.run_id = ifb.run_id
974
+ LEFT JOIN akinator_sessions AS s ON s.id = ifb.session_id
975
+ LEFT JOIN run_intakes AS ri ON ri.run_id = ifb.run_id AND ri.session_id = ifb.session_id
976
+ LEFT JOIN akinator_answers AS aa ON aa.session_id = ifb.session_id AND aa.question_id = ifb.question_id
977
+ WHERE ${conditions.join(' AND ')}
978
+ ORDER BY ifb.created_at ASC, ifb.feedback_id ASC
979
+ LIMIT ?
980
+ `).all(...parameters, input.limit + 1);
981
+ }
982
+ export function listIntakeFeedback(database, input) {
983
+ const validated = validateInitialIntakeFeedbackListInput(input);
984
+ try {
985
+ const rows = selectInitialIntakeRows(database, validated);
986
+ const records = rows.map((row) => rowToInitialIntakeFeedback(row, validated.workspace));
987
+ return { records: records.slice(0, validated.limit), truncated: records.length > validated.limit };
988
+ }
989
+ catch (error) {
990
+ normalizeDatabaseError(error);
991
+ }
992
+ }
993
+ //# sourceMappingURL=feedback.js.map