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,778 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { constants } from 'node:fs';
3
+ import { lstat, open } from 'node:fs/promises';
4
+ import { TextDecoder } from 'node:util';
5
+ import { enqueueCurrentEntryEmbeddingInTransaction } from '../embedding/jobs.js';
6
+ import { withDeferredReadTransaction, withImmediateTransaction } from '../db/transaction.js';
7
+ import { KiokukoError } from '../errors.js';
8
+ import { findSecretInValue } from '../memory/secrets.js';
9
+ import { readEntry } from '../memory/entries.js';
10
+ import { insertEntryRevisionInTransaction } from '../memory/revisions.js';
11
+ import { syncEntrySearchProjection } from '../memory/structured-memory.js';
12
+ import { isWellFormedUnicode } from '../serialization/boundary-json.js';
13
+ import { canonicalEntryRevisionContentHash, canonicalJson, requireWorkspace, validateRecordInput, } from '../serialization/validate.js';
14
+ import { parseStrictJson } from '../setup/strict-json.js';
15
+ export const WORKSPACE_ARCHIVE_MAX_BYTES = 64 * 1024 * 1024;
16
+ export const WORKSPACE_ARCHIVE_MAX_LINES = 10_000;
17
+ export const WORKSPACE_ARCHIVE_MAX_LINE_BYTES = 512 * 1024;
18
+ const RELATIONS = new Set(['supports', 'contradicts', 'derived_from', 'related_to']);
19
+ const AUDIT_OPERATIONS = new Set(['record', 'promote', 'supersede', 'link', 'import', 'purge']);
20
+ const HASH_PATTERN = /^[0-9a-f]{64}$/u;
21
+ const TIMESTAMP_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/u;
22
+ const RECORD_FIELDS = {
23
+ checksum: ['type', 'sha256'],
24
+ manifest: ['type', 'apiVersion', 'workspace', 'format', 'version', 'counts'],
25
+ entry: [
26
+ 'type', 'id', 'workspace', 'kind', 'status', 'title', 'body', 'summary',
27
+ 'scope_json', 'provenance_json', 'trust_level', 'confidence', 'content_hash',
28
+ 'revision', 'superseded_by', 'created_by', 'created_at', 'updated_at', 'verified_at',
29
+ ],
30
+ tag: ['type', 'entry_id', 'tag'],
31
+ link: ['type', 'from_entry_id', 'to_entry_id', 'relation', 'created_at', 'created_by'],
32
+ audit: ['type', 'event_id', 'entry_id', 'workspace', 'operation', 'actor', 'details_json', 'created_at'],
33
+ };
34
+ const COUNT_FIELDS = ['entries', 'tags', 'links', 'audit'];
35
+ const STRICT_JSON_OPTIONS = {
36
+ allowTrailingComma: false,
37
+ disallowComments: true,
38
+ allowEmptyContent: false,
39
+ };
40
+ function archiveChanged() {
41
+ return new KiokukoError('CONFLICT', 'Import input changed while it was being read');
42
+ }
43
+ function isSameArchiveFileState(left, right) {
44
+ return left.isFile()
45
+ && right.isFile()
46
+ && left.dev === right.dev
47
+ && left.ino === right.ino
48
+ && left.mode === right.mode
49
+ && left.nlink === right.nlink
50
+ && left.uid === right.uid
51
+ && left.gid === right.gid
52
+ && left.rdev === right.rdev
53
+ && left.size === right.size
54
+ && left.mtimeNs === right.mtimeNs
55
+ && left.ctimeNs === right.ctimeNs;
56
+ }
57
+ function assertBindableArchiveFile(state) {
58
+ if (!state.isFile())
59
+ throw new KiokukoError('VALIDATION_ERROR', 'Import input must be a regular file');
60
+ if (state.ino === 0n) {
61
+ throw new KiokukoError('SECURITY_REJECTION', 'Import input does not expose a stable file identity');
62
+ }
63
+ }
64
+ function archiveOpenFlags() {
65
+ if (process.platform === 'win32')
66
+ return constants.O_RDONLY;
67
+ if (!Number.isSafeInteger(constants.O_NOFOLLOW) || constants.O_NOFOLLOW <= 0
68
+ || !Number.isSafeInteger(constants.O_NONBLOCK) || constants.O_NONBLOCK <= 0) {
69
+ throw new KiokukoError('SECURITY_REJECTION', 'This platform cannot safely open an import archive');
70
+ }
71
+ return constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK;
72
+ }
73
+ async function readBoundedArchive(filePath, dependencies) {
74
+ const planned = await lstat(filePath, { bigint: true });
75
+ assertBindableArchiveFile(planned);
76
+ if (planned.size > BigInt(WORKSPACE_ARCHIVE_MAX_BYTES)) {
77
+ throw new KiokukoError('VALIDATION_ERROR', `Workspace archive exceeds the ${WORKSPACE_ARCHIVE_MAX_BYTES}-byte maximum`);
78
+ }
79
+ await dependencies.afterInputPlanned?.(filePath);
80
+ const handle = await open(filePath, archiveOpenFlags());
81
+ let result;
82
+ let operationError;
83
+ try {
84
+ const initial = await handle.stat({ bigint: true });
85
+ assertBindableArchiveFile(initial);
86
+ if (!isSameArchiveFileState(planned, initial))
87
+ throw archiveChanged();
88
+ await dependencies.afterInputBound?.(filePath);
89
+ if (initial.size > BigInt(WORKSPACE_ARCHIVE_MAX_BYTES)) {
90
+ throw new KiokukoError('VALIDATION_ERROR', `Workspace archive exceeds the ${WORKSPACE_ARCHIVE_MAX_BYTES}-byte maximum`);
91
+ }
92
+ const expectedSize = Number(initial.size);
93
+ const buffer = Buffer.alloc(expectedSize);
94
+ let offset = 0;
95
+ while (offset < expectedSize) {
96
+ const { bytesRead } = await handle.read(buffer, offset, expectedSize - offset, offset);
97
+ if (bytesRead === 0)
98
+ throw archiveChanged();
99
+ offset += bytesRead;
100
+ }
101
+ const extra = Buffer.allocUnsafe(1);
102
+ const { bytesRead: extraBytesRead } = await handle.read(extra, 0, 1, expectedSize);
103
+ if (extraBytesRead !== 0)
104
+ throw archiveChanged();
105
+ await dependencies.afterInputRead?.(filePath);
106
+ const final = await handle.stat({ bigint: true });
107
+ if (!isSameArchiveFileState(initial, final))
108
+ throw archiveChanged();
109
+ const finalPath = await lstat(filePath, { bigint: true });
110
+ if (!isSameArchiveFileState(final, finalPath))
111
+ throw archiveChanged();
112
+ result = buffer;
113
+ }
114
+ catch (error) {
115
+ operationError = error;
116
+ }
117
+ try {
118
+ await handle.close();
119
+ }
120
+ catch (closeError) {
121
+ if (operationError !== undefined) {
122
+ throw new AggregateError([operationError, closeError], 'Import read failed and the input file could not be closed');
123
+ }
124
+ throw closeError;
125
+ }
126
+ if (operationError !== undefined)
127
+ throw operationError;
128
+ if (result === undefined)
129
+ throw new KiokukoError('INTEGRITY_ERROR', 'Import read produced no result');
130
+ return result;
131
+ }
132
+ export function validateWorkspaceArchiveByteLayout(bytes) {
133
+ if (bytes.byteLength > WORKSPACE_ARCHIVE_MAX_BYTES) {
134
+ throw new KiokukoError('VALIDATION_ERROR', `Workspace archive exceeds the ${WORKSPACE_ARCHIVE_MAX_BYTES}-byte maximum`);
135
+ }
136
+ let lineBytes = 0;
137
+ let lines = 0;
138
+ for (const byte of bytes) {
139
+ if (byte === 0x0a) {
140
+ lines += 1;
141
+ lineBytes = 0;
142
+ }
143
+ else {
144
+ lineBytes += 1;
145
+ if (lineBytes > WORKSPACE_ARCHIVE_MAX_LINE_BYTES) {
146
+ throw new KiokukoError('VALIDATION_ERROR', `Workspace archive line exceeds the ${WORKSPACE_ARCHIVE_MAX_LINE_BYTES}-byte maximum`);
147
+ }
148
+ }
149
+ if (lines > WORKSPACE_ARCHIVE_MAX_LINES) {
150
+ throw new KiokukoError('VALIDATION_ERROR', `Workspace archive exceeds the ${WORKSPACE_ARCHIVE_MAX_LINES}-line maximum`);
151
+ }
152
+ }
153
+ if (lineBytes > 0)
154
+ lines += 1;
155
+ if (lines > WORKSPACE_ARCHIVE_MAX_LINES) {
156
+ throw new KiokukoError('VALIDATION_ERROR', `Workspace archive exceeds the ${WORKSPACE_ARCHIVE_MAX_LINES}-line maximum`);
157
+ }
158
+ }
159
+ function objectValue(value, label) {
160
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
161
+ throw new KiokukoError('VALIDATION_ERROR', `${label} must be a JSON object`);
162
+ }
163
+ return value;
164
+ }
165
+ function exactFields(value, fields, label) {
166
+ const actual = Object.keys(value);
167
+ const allowed = new Set(fields);
168
+ if (actual.length !== fields.length || actual.some((field) => !allowed.has(field))) {
169
+ throw new KiokukoError('VALIDATION_ERROR', `${label} has invalid fields`);
170
+ }
171
+ }
172
+ function rejectSecretValue(value) {
173
+ const finding = findSecretInValue(value);
174
+ if (finding !== undefined) {
175
+ throw new KiokukoError('SECURITY_REJECTION', 'Import contains secret-like content', { kind: finding.kind });
176
+ }
177
+ }
178
+ function stringValue(value, label, allowEmpty = false) {
179
+ if (typeof value !== 'string' || (!allowEmpty && value.length === 0)) {
180
+ throw new KiokukoError('VALIDATION_ERROR', `${label} must be a ${allowEmpty ? '' : 'non-empty '}string`);
181
+ }
182
+ if (!isWellFormedUnicode(value)) {
183
+ throw new KiokukoError('VALIDATION_ERROR', `${label} must contain well-formed Unicode`);
184
+ }
185
+ return value;
186
+ }
187
+ function inputPathValue(value) {
188
+ const filePath = stringValue(value, 'input');
189
+ if (/\p{Cc}/u.test(filePath)) {
190
+ throw new KiokukoError('VALIDATION_ERROR', 'input must not contain control characters');
191
+ }
192
+ return filePath;
193
+ }
194
+ function nullableString(value, label) {
195
+ if (value === null)
196
+ return null;
197
+ return stringValue(value, label, true);
198
+ }
199
+ function parsedJsonObject(value, label) {
200
+ const text = stringValue(value, label);
201
+ const parsed = parseStrictJson(text, STRICT_JSON_OPTIONS, `${label} must contain valid JSON`);
202
+ const object = objectValue(parsed, label);
203
+ rejectSecretValue(object);
204
+ if (canonicalJson(object) !== text) {
205
+ throw new KiokukoError('VALIDATION_ERROR', `${label} must use canonical JSON encoding`);
206
+ }
207
+ return object;
208
+ }
209
+ function numberValue(value, label) {
210
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
211
+ throw new KiokukoError('VALIDATION_ERROR', `${label} must be a finite number`);
212
+ }
213
+ return value;
214
+ }
215
+ function integerValue(value, label, minimum = 0) {
216
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < minimum) {
217
+ throw new KiokukoError('VALIDATION_ERROR', `${label} must be an integer greater than or equal to ${minimum}`);
218
+ }
219
+ return value;
220
+ }
221
+ function timestampValue(value, label) {
222
+ const timestamp = stringValue(value, label);
223
+ const parsed = Date.parse(timestamp);
224
+ if (!TIMESTAMP_PATTERN.test(timestamp) || !Number.isFinite(parsed) || new Date(parsed).toISOString() !== timestamp) {
225
+ throw new KiokukoError('VALIDATION_ERROR', `${label} must be a canonical ISO-8601 UTC timestamp`);
226
+ }
227
+ return timestamp;
228
+ }
229
+ function hashValue(value, label) {
230
+ const hash = stringValue(value, label);
231
+ if (!HASH_PATTERN.test(hash))
232
+ throw new KiokukoError('VALIDATION_ERROR', `${label} must be a lowercase SHA-256 hash`);
233
+ return hash;
234
+ }
235
+ function parseJsonLine(text, label) {
236
+ const parsed = parseStrictJson(text, STRICT_JSON_OPTIONS, `${label} contains invalid JSON`);
237
+ const object = objectValue(parsed, label);
238
+ if (canonicalJson(object) !== text) {
239
+ throw new KiokukoError('VALIDATION_ERROR', `${label} must use canonical JSON encoding`);
240
+ }
241
+ return object;
242
+ }
243
+ function validateEntryRecord(record, workspace) {
244
+ if (record.type !== 'entry')
245
+ throw new KiokukoError('VALIDATION_ERROR', 'Entry record type is invalid');
246
+ stringValue(record.id, 'entry.id');
247
+ if (stringValue(record.workspace, 'entry.workspace') !== workspace) {
248
+ throw new KiokukoError('VALIDATION_ERROR', 'Entry workspace does not match manifest workspace');
249
+ }
250
+ stringValue(record.kind, 'entry.kind');
251
+ stringValue(record.status, 'entry.status');
252
+ stringValue(record.title, 'entry.title');
253
+ stringValue(record.body, 'entry.body', true);
254
+ nullableString(record.summary, 'entry.summary');
255
+ parsedJsonObject(record.scope_json, 'entry.scope_json');
256
+ parsedJsonObject(record.provenance_json, 'entry.provenance_json');
257
+ stringValue(record.trust_level, 'entry.trust_level');
258
+ numberValue(record.confidence, 'entry.confidence');
259
+ hashValue(record.content_hash, 'entry.content_hash');
260
+ if (integerValue(record.revision, 'entry.revision', 1) !== 1) {
261
+ throw new KiokukoError('VALIDATION_ERROR', 'Workspace archive v2 can import only revision 1 snapshots; higher revisions require a history-preserving archive format');
262
+ }
263
+ nullableString(record.superseded_by, 'entry.superseded_by');
264
+ stringValue(record.created_by, 'entry.created_by');
265
+ timestampValue(record.created_at, 'entry.created_at');
266
+ timestampValue(record.updated_at, 'entry.updated_at');
267
+ if (record.verified_at !== null)
268
+ timestampValue(record.verified_at, 'entry.verified_at');
269
+ }
270
+ function validateTagRecord(record) {
271
+ if (record.type !== 'tag')
272
+ throw new KiokukoError('VALIDATION_ERROR', 'Tag record type is invalid');
273
+ stringValue(record.entry_id, 'tag.entry_id');
274
+ stringValue(record.tag, 'tag.tag');
275
+ }
276
+ function validateLinkRecord(record) {
277
+ if (record.type !== 'link')
278
+ throw new KiokukoError('VALIDATION_ERROR', 'Link record type is invalid');
279
+ stringValue(record.from_entry_id, 'link.from_entry_id');
280
+ stringValue(record.to_entry_id, 'link.to_entry_id');
281
+ stringValue(record.relation, 'link.relation');
282
+ timestampValue(record.created_at, 'link.created_at');
283
+ stringValue(record.created_by, 'link.created_by');
284
+ }
285
+ function validateAuditRecord(record, workspace) {
286
+ if (record.type !== 'audit')
287
+ throw new KiokukoError('VALIDATION_ERROR', 'Audit record type is invalid');
288
+ stringValue(record.event_id, 'audit.event_id');
289
+ nullableString(record.entry_id, 'audit.entry_id');
290
+ if (stringValue(record.workspace, 'audit.workspace') !== workspace) {
291
+ throw new KiokukoError('VALIDATION_ERROR', 'Audit workspace does not match manifest workspace');
292
+ }
293
+ stringValue(record.operation, 'audit.operation');
294
+ stringValue(record.actor, 'audit.actor');
295
+ parsedJsonObject(record.details_json, 'audit.details_json');
296
+ timestampValue(record.created_at, 'audit.created_at');
297
+ }
298
+ function parseImport(text) {
299
+ if (!text.endsWith('\n'))
300
+ throw new KiokukoError('VALIDATION_ERROR', 'Import must end with exactly one newline');
301
+ const lines = text.slice(0, -1).split('\n');
302
+ if (lines.length < 2 || lines.some((line) => line.length === 0)) {
303
+ throw new KiokukoError('VALIDATION_ERROR', 'Import file is empty, truncated, or contains blank lines');
304
+ }
305
+ const checksumLine = parseJsonLine(lines[0], 'Import checksum line');
306
+ exactFields(checksumLine, RECORD_FIELDS.checksum, 'Import checksum line');
307
+ if (checksumLine.type !== 'checksum') {
308
+ throw new KiokukoError('VALIDATION_ERROR', 'Import checksum line is invalid');
309
+ }
310
+ const checksum = hashValue(checksumLine.sha256, 'Import checksum');
311
+ const payload = `${lines.slice(1).join('\n')}\n`;
312
+ const actual = createHash('sha256').update(payload, 'utf8').digest('hex');
313
+ if (actual !== checksum)
314
+ throw new KiokukoError('INTEGRITY_ERROR', 'Import checksum mismatch');
315
+ const payloadLines = lines.slice(1).map((line, index) => parseJsonLine(line, `Import payload line ${index + 1}`));
316
+ const manifest = payloadLines[0];
317
+ exactFields(manifest, RECORD_FIELDS.manifest, 'Import manifest');
318
+ if (manifest.format !== 'kiokuko-jsonl' || manifest.apiVersion !== '1' || manifest.version !== 2) {
319
+ throw new KiokukoError('VALIDATION_ERROR', 'Unsupported import format');
320
+ }
321
+ if (manifest.type !== 'manifest')
322
+ throw new KiokukoError('VALIDATION_ERROR', 'Import manifest is invalid');
323
+ rejectSecretValue(manifest);
324
+ const workspace = requireWorkspace(manifest.workspace);
325
+ const counts = objectValue(manifest.counts, 'manifest.counts');
326
+ exactFields(counts, COUNT_FIELDS, 'manifest.counts');
327
+ for (const field of COUNT_FIELDS)
328
+ integerValue(counts[field], `manifest.counts.${field}`);
329
+ const entries = [];
330
+ const tags = [];
331
+ const links = [];
332
+ const audit = [];
333
+ for (const line of payloadLines.slice(1)) {
334
+ if (line.type === 'manifest' || line.type === 'checksum') {
335
+ throw new KiokukoError('INTEGRITY_ERROR', `Import contains a duplicate ${String(line.type)} record`);
336
+ }
337
+ switch (line.type) {
338
+ case 'entry':
339
+ exactFields(line, RECORD_FIELDS.entry, 'Import entry record');
340
+ validateEntryRecord(line, workspace);
341
+ rejectSecretValue(line);
342
+ entries.push(line);
343
+ break;
344
+ case 'tag':
345
+ exactFields(line, RECORD_FIELDS.tag, 'Import tag record');
346
+ validateTagRecord(line);
347
+ rejectSecretValue(line);
348
+ tags.push(line);
349
+ break;
350
+ case 'link':
351
+ exactFields(line, RECORD_FIELDS.link, 'Import link record');
352
+ validateLinkRecord(line);
353
+ rejectSecretValue(line);
354
+ links.push(line);
355
+ break;
356
+ case 'audit':
357
+ exactFields(line, RECORD_FIELDS.audit, 'Import audit record');
358
+ validateAuditRecord(line, workspace);
359
+ rejectSecretValue(line);
360
+ audit.push(line);
361
+ break;
362
+ default:
363
+ throw new KiokukoError('VALIDATION_ERROR', `Import contains unsupported record type ${String(line.type)}`);
364
+ }
365
+ }
366
+ for (const [key, actualCount] of Object.entries({ entries, tags, links, audit })) {
367
+ if (counts[key] !== actualCount.length) {
368
+ throw new KiokukoError('INTEGRITY_ERROR', `Import ${key} count does not match manifest`);
369
+ }
370
+ }
371
+ return { manifest, entries, tags, links, audit };
372
+ }
373
+ function importedEntry(raw, workspace) {
374
+ const id = stringValue(raw.id, 'entry.id');
375
+ const kind = stringValue(raw.kind, 'entry.kind');
376
+ const status = stringValue(raw.status, 'entry.status');
377
+ const title = stringValue(raw.title, 'entry.title');
378
+ const body = stringValue(raw.body, 'entry.body', true);
379
+ const summary = nullableString(raw.summary, 'entry.summary');
380
+ const scope = parsedJsonObject(raw.scope_json, 'entry.scope_json');
381
+ const provenance = parsedJsonObject(raw.provenance_json, 'entry.provenance_json');
382
+ const trustLevel = stringValue(raw.trust_level, 'entry.trust_level');
383
+ const confidence = numberValue(raw.confidence, 'entry.confidence');
384
+ const persistedTags = Array.isArray(raw.tags) ? raw.tags : [];
385
+ const createdBy = stringValue(raw.created_by, 'entry.created_by');
386
+ const supersededBy = nullableString(raw.superseded_by, 'entry.superseded_by');
387
+ const createdAt = timestampValue(raw.created_at, 'entry.created_at');
388
+ const updatedAt = timestampValue(raw.updated_at, 'entry.updated_at');
389
+ const verifiedAt = raw.verified_at === null ? null : timestampValue(raw.verified_at, 'entry.verified_at');
390
+ const revision = integerValue(raw.revision, 'entry.revision', 1);
391
+ const contentHash = hashValue(raw.content_hash, 'entry.content_hash');
392
+ const validated = validateRecordInput({
393
+ workspace,
394
+ kind,
395
+ status,
396
+ title,
397
+ body,
398
+ summary,
399
+ scope,
400
+ provenance,
401
+ trustLevel,
402
+ confidence,
403
+ tags: persistedTags,
404
+ createdBy,
405
+ });
406
+ if ((status === 'superseded') !== (supersededBy !== null)) {
407
+ throw new KiokukoError('VALIDATION_ERROR', 'entry.status and entry.superseded_by are inconsistent');
408
+ }
409
+ if (status === 'candidate' && verifiedAt !== null) {
410
+ throw new KiokukoError('VALIDATION_ERROR', 'Candidate entries cannot have entry.verified_at');
411
+ }
412
+ if (status === 'verified' && verifiedAt === null) {
413
+ throw new KiokukoError('VALIDATION_ERROR', 'Verified entries require entry.verified_at');
414
+ }
415
+ if (createdAt > updatedAt
416
+ || verifiedAt !== null && (verifiedAt < createdAt || verifiedAt > updatedAt)) {
417
+ throw new KiokukoError('VALIDATION_ERROR', 'Entry lifecycle timestamps are inconsistent');
418
+ }
419
+ if (revision !== 1) {
420
+ throw new KiokukoError('VALIDATION_ERROR', 'Workspace archive v2 can import only revision 1 snapshots; higher revisions require a history-preserving archive format');
421
+ }
422
+ const hashInput = {
423
+ kind: validated.kind,
424
+ title: validated.title,
425
+ body: validated.body,
426
+ summary: validated.summary,
427
+ scope: validated.scope,
428
+ provenance: validated.provenance,
429
+ tags: validated.tags,
430
+ };
431
+ const expectedHash = canonicalEntryRevisionContentHash(hashInput);
432
+ if (expectedHash !== contentHash) {
433
+ throw new KiokukoError('INTEGRITY_ERROR', `Content hash mismatch for entry ${id}`);
434
+ }
435
+ if (persistedTags.length !== validated.tags.length
436
+ || persistedTags.some((tag, index) => tag !== validated.tags[index])) {
437
+ throw new KiokukoError('VALIDATION_ERROR', `Tags for entry ${id} are not in canonical archive order`);
438
+ }
439
+ return {
440
+ id,
441
+ workspace,
442
+ kind: validated.kind,
443
+ status: validated.status,
444
+ title: validated.title,
445
+ body: validated.body,
446
+ summary: validated.summary,
447
+ scope: validated.scope,
448
+ provenance: validated.provenance,
449
+ trustLevel: validated.trustLevel,
450
+ confidence: validated.confidence,
451
+ contentHash,
452
+ revision,
453
+ supersededBy,
454
+ createdBy: validated.createdBy,
455
+ createdAt,
456
+ updatedAt,
457
+ verifiedAt,
458
+ tags: validated.tags,
459
+ };
460
+ }
461
+ function validateSupersessionGraph(entries) {
462
+ const replacements = new Map(entries.map((entry) => [entry.id, entry.supersededBy]));
463
+ const state = new Map();
464
+ for (const entry of entries) {
465
+ if (state.get(entry.id) === 'complete')
466
+ continue;
467
+ const path = [];
468
+ let current = entry.id;
469
+ while (current !== null) {
470
+ if (!replacements.has(current)) {
471
+ throw new KiokukoError('VALIDATION_ERROR', `Supersession references unknown entry ${current}`);
472
+ }
473
+ const currentState = state.get(current);
474
+ if (currentState === 'visiting')
475
+ throw new KiokukoError('VALIDATION_ERROR', 'Import contains a supersession cycle');
476
+ if (currentState === 'complete')
477
+ break;
478
+ state.set(current, 'visiting');
479
+ path.push(current);
480
+ current = replacements.get(current) ?? null;
481
+ }
482
+ for (const visited of path)
483
+ state.set(visited, 'complete');
484
+ }
485
+ }
486
+ function validateRelatedLines(document, entryIds) {
487
+ const seenTags = new Set();
488
+ for (const tag of document.tags) {
489
+ const entryId = stringValue(tag.entry_id, 'tag.entry_id');
490
+ const value = stringValue(tag.tag, 'tag.tag');
491
+ if (!entryIds.has(entryId))
492
+ throw new KiokukoError('VALIDATION_ERROR', `Tag references unknown entry ${entryId}`);
493
+ const identity = `${entryId}\u0000${value}`;
494
+ if (seenTags.has(identity))
495
+ throw new KiokukoError('VALIDATION_ERROR', 'Import contains a duplicate tag record');
496
+ seenTags.add(identity);
497
+ }
498
+ const seenLinks = new Set();
499
+ for (const link of document.links) {
500
+ const from = stringValue(link.from_entry_id, 'link.from_entry_id');
501
+ const to = stringValue(link.to_entry_id, 'link.to_entry_id');
502
+ const relation = stringValue(link.relation, 'link.relation');
503
+ if (!entryIds.has(from) || !entryIds.has(to) || !RELATIONS.has(relation)) {
504
+ throw new KiokukoError('VALIDATION_ERROR', 'Import contains an invalid link');
505
+ }
506
+ const identity = `${from}\u0000${to}\u0000${relation}`;
507
+ if (seenLinks.has(identity))
508
+ throw new KiokukoError('VALIDATION_ERROR', 'Import contains a duplicate link record');
509
+ seenLinks.add(identity);
510
+ }
511
+ const seenAuditEvents = new Set();
512
+ for (const event of document.audit) {
513
+ const entryId = nullableString(event.entry_id, 'audit.entry_id');
514
+ const operation = stringValue(event.operation, 'audit.operation');
515
+ if (entryId !== null && !entryIds.has(entryId))
516
+ throw new KiokukoError('VALIDATION_ERROR', `Audit references unknown entry ${entryId}`);
517
+ if (!AUDIT_OPERATIONS.has(operation))
518
+ throw new KiokukoError('VALIDATION_ERROR', `Unsupported audit operation ${operation}`);
519
+ const eventId = stringValue(event.event_id, 'audit.event_id');
520
+ if (seenAuditEvents.has(eventId))
521
+ throw new KiokukoError('VALIDATION_ERROR', 'Import contains a duplicate audit event');
522
+ seenAuditEvents.add(eventId);
523
+ stringValue(event.workspace, 'audit.workspace');
524
+ stringValue(event.actor, 'audit.actor');
525
+ stringValue(event.details_json, 'audit.details_json', true);
526
+ stringValue(event.created_at, 'audit.created_at');
527
+ }
528
+ }
529
+ function sameStringArray(left, right) {
530
+ return left.length === right.length && left.every((value, index) => value === right[index]);
531
+ }
532
+ function entryMatchesArchive(existing, imported) {
533
+ return existing.id === imported.id
534
+ && existing.workspace === imported.workspace
535
+ && existing.kind === imported.kind
536
+ && existing.status === imported.status
537
+ && existing.title === imported.title
538
+ && existing.body === imported.body
539
+ && existing.summary === imported.summary
540
+ && canonicalJson(existing.scope) === canonicalJson(imported.scope)
541
+ && canonicalJson(existing.provenance) === canonicalJson(imported.provenance)
542
+ && existing.trustLevel === imported.trustLevel
543
+ && existing.confidence === imported.confidence
544
+ && existing.contentHash === imported.contentHash
545
+ && existing.revision === imported.revision
546
+ && existing.supersededBy === imported.supersededBy
547
+ && existing.createdBy === imported.createdBy
548
+ && existing.createdAt === imported.createdAt
549
+ && existing.updatedAt === imported.updatedAt
550
+ && existing.verifiedAt === imported.verifiedAt
551
+ && sameStringArray(existing.tags, imported.tags);
552
+ }
553
+ function planEntryImport(database, entries, workspace) {
554
+ const newEntries = [];
555
+ const duplicateIds = new Set();
556
+ if (database === undefined) {
557
+ return { newEntries: [...entries], duplicates: 0 };
558
+ }
559
+ for (const entry of entries) {
560
+ const owner = database.prepare('SELECT workspace FROM entries WHERE id = ?').get(entry.id);
561
+ if (owner !== undefined) {
562
+ if (typeof owner.workspace !== 'string')
563
+ throw new KiokukoError('INTEGRITY_ERROR', 'Stored entry workspace is invalid');
564
+ if (owner.workspace !== workspace) {
565
+ throw new KiokukoError('CONFLICT', `Entry ID ${entry.id} already belongs to another workspace`);
566
+ }
567
+ const existing = readEntry(database, { workspace, entryId: entry.id });
568
+ if (existing.contentHash !== entry.contentHash) {
569
+ throw new KiokukoError('CONFLICT', `Entry ID ${entry.id} already contains different content`);
570
+ }
571
+ duplicateIds.add(entry.id);
572
+ continue;
573
+ }
574
+ const hashMatch = database.prepare(`
575
+ SELECT entry_id
576
+ FROM entry_revisions
577
+ WHERE workspace = ? AND content_hash = ?
578
+ `).get(workspace, entry.contentHash);
579
+ if (hashMatch !== undefined) {
580
+ if (typeof hashMatch.entry_id !== 'string') {
581
+ throw new KiokukoError('INTEGRITY_ERROR', 'Stored content identity is invalid');
582
+ }
583
+ if (hashMatch.entry_id === entry.id) {
584
+ throw new KiokukoError('INTEGRITY_ERROR', 'Stored revision has no owning entry');
585
+ }
586
+ throw new KiokukoError('CONFLICT', 'Archive content already belongs to a different entry ID');
587
+ }
588
+ newEntries.push(entry);
589
+ }
590
+ for (const entry of entries) {
591
+ if (!duplicateIds.has(entry.id))
592
+ continue;
593
+ const existing = readEntry(database, { workspace, entryId: entry.id });
594
+ if (!entryMatchesArchive(existing, entry)) {
595
+ throw new KiokukoError('CONFLICT', `Entry ${entry.id} already exists with different archive metadata`);
596
+ }
597
+ }
598
+ return { newEntries, duplicates: duplicateIds.size };
599
+ }
600
+ function planRelatedImport(database, document, workspace) {
601
+ const links = [];
602
+ for (const link of document.links) {
603
+ const planned = {
604
+ from: stringValue(link.from_entry_id, 'link.from_entry_id'),
605
+ to: stringValue(link.to_entry_id, 'link.to_entry_id'),
606
+ relation: stringValue(link.relation, 'link.relation'),
607
+ createdAt: timestampValue(link.created_at, 'link.created_at'),
608
+ createdBy: stringValue(link.created_by, 'link.created_by'),
609
+ };
610
+ const existing = database?.prepare(`
611
+ SELECT created_at, created_by
612
+ FROM entry_links
613
+ WHERE from_entry_id = ? AND to_entry_id = ? AND relation = ?
614
+ `).get(planned.from, planned.to, planned.relation);
615
+ if (existing !== undefined) {
616
+ if (existing.created_at !== planned.createdAt || existing.created_by !== planned.createdBy) {
617
+ throw new KiokukoError('CONFLICT', 'Existing link has different archive metadata');
618
+ }
619
+ continue;
620
+ }
621
+ links.push(planned);
622
+ }
623
+ const audit = [];
624
+ for (const event of document.audit) {
625
+ const planned = {
626
+ eventId: stringValue(event.event_id, 'audit.event_id'),
627
+ entryId: nullableString(event.entry_id, 'audit.entry_id'),
628
+ operation: stringValue(event.operation, 'audit.operation'),
629
+ actor: stringValue(event.actor, 'audit.actor'),
630
+ detailsJson: stringValue(event.details_json, 'audit.details_json'),
631
+ createdAt: timestampValue(event.created_at, 'audit.created_at'),
632
+ };
633
+ const existing = database?.prepare(`
634
+ SELECT entry_id, workspace, operation, actor, details_json, created_at
635
+ FROM audit_events
636
+ WHERE event_id = ?
637
+ `).get(planned.eventId);
638
+ if (existing !== undefined) {
639
+ if (existing.entry_id !== planned.entryId
640
+ || existing.workspace !== workspace
641
+ || existing.operation !== planned.operation
642
+ || existing.actor !== planned.actor
643
+ || existing.details_json !== planned.detailsJson
644
+ || existing.created_at !== planned.createdAt) {
645
+ throw new KiokukoError('CONFLICT', `Audit event ${planned.eventId} already contains different metadata`);
646
+ }
647
+ continue;
648
+ }
649
+ audit.push(planned);
650
+ }
651
+ return { links, audit };
652
+ }
653
+ export async function importWorkspace(database, options, dependencies = {}) {
654
+ const archiveBytes = await readBoundedArchive(inputPathValue(options.input), dependencies);
655
+ validateWorkspaceArchiveByteLayout(archiveBytes);
656
+ if (archiveBytes[0] === 0xEF && archiveBytes[1] === 0xBB && archiveBytes[2] === 0xBF) {
657
+ throw new KiokukoError('VALIDATION_ERROR', 'Import must not begin with a UTF-8 BOM');
658
+ }
659
+ let archiveText;
660
+ try {
661
+ archiveText = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(archiveBytes);
662
+ }
663
+ catch {
664
+ throw new KiokukoError('VALIDATION_ERROR', 'Import is not valid UTF-8');
665
+ }
666
+ const parsed = parseImport(archiveText);
667
+ const sourceWorkspace = requireWorkspace(parsed.manifest.workspace);
668
+ const workspace = requireWorkspace(options.workspace === undefined ? sourceWorkspace : stringValue(options.workspace, 'workspace'));
669
+ rejectSecretValue(workspace);
670
+ const tagsByEntry = new Map();
671
+ for (const tag of parsed.tags) {
672
+ const entryId = stringValue(tag.entry_id, 'tag.entry_id');
673
+ const values = tagsByEntry.get(entryId) ?? [];
674
+ values.push(stringValue(tag.tag, 'tag.tag'));
675
+ tagsByEntry.set(entryId, values);
676
+ }
677
+ const entries = parsed.entries.map((entry) => importedEntry({ ...entry, tags: tagsByEntry.get(String(entry.id)) ?? [] }, workspace));
678
+ const sourceIds = new Set(entries.map((entry) => entry.id));
679
+ if (sourceIds.size !== entries.length)
680
+ throw new KiokukoError('VALIDATION_ERROR', 'Import contains duplicate entry IDs');
681
+ if (new Set(entries.map((entry) => entry.contentHash)).size !== entries.length) {
682
+ throw new KiokukoError('VALIDATION_ERROR', 'Import contains duplicate entry content');
683
+ }
684
+ validateSupersessionGraph(entries);
685
+ validateRelatedLines(parsed, sourceIds);
686
+ if (database === undefined && !options.dryRun)
687
+ throw new KiokukoError('DATABASE_ERROR', 'Database is required for a non-dry import');
688
+ if (options.dryRun) {
689
+ const preflight = () => {
690
+ const entryPlan = planEntryImport(database, entries, workspace);
691
+ planRelatedImport(database, parsed, workspace);
692
+ return entryPlan;
693
+ };
694
+ const plan = database === undefined ? preflight() : withDeferredReadTransaction(database, preflight);
695
+ return {
696
+ count: entries.length,
697
+ imported: plan.newEntries.length,
698
+ duplicates: plan.duplicates,
699
+ dryRun: true,
700
+ workspace,
701
+ };
702
+ }
703
+ const db = database;
704
+ const result = withImmediateTransaction(db, () => {
705
+ const plan = planEntryImport(db, entries, workspace);
706
+ const related = planRelatedImport(db, parsed, workspace);
707
+ const { newEntries } = plan;
708
+ const insertEntry = db.prepare(`
709
+ INSERT INTO entries (
710
+ id, workspace, status, trust_level, confidence, current_revision,
711
+ superseded_by, created_by, created_at, updated_at, verified_at
712
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
713
+ `);
714
+ for (const entry of newEntries) {
715
+ insertEntry.run(entry.id, workspace, 'candidate', entry.trustLevel, entry.confidence, 1, null, entry.createdBy, entry.createdAt, entry.updatedAt, null);
716
+ insertEntryRevisionInTransaction(db, {
717
+ entryId: entry.id,
718
+ workspace,
719
+ revision: 1,
720
+ kind: entry.kind,
721
+ title: entry.title,
722
+ body: entry.body,
723
+ summary: entry.summary,
724
+ scope: entry.scope,
725
+ provenance: entry.provenance,
726
+ tags: entry.tags,
727
+ contentHash: entry.contentHash,
728
+ createdBy: entry.createdBy,
729
+ createdAt: entry.createdAt,
730
+ });
731
+ syncEntrySearchProjection(db, {
732
+ entryId: entry.id,
733
+ title: entry.title,
734
+ body: entry.body,
735
+ summary: entry.summary,
736
+ tags: entry.tags,
737
+ scope: entry.scope,
738
+ });
739
+ enqueueCurrentEntryEmbeddingInTransaction(db, {
740
+ entryId: entry.id,
741
+ revision: 1,
742
+ contentHash: entry.contentHash,
743
+ now: entry.updatedAt,
744
+ });
745
+ }
746
+ const applyLifecycle = db.prepare(`
747
+ UPDATE entries
748
+ SET status = ?, superseded_by = ?, verified_at = ?
749
+ WHERE id = ? AND workspace = ? AND current_revision = 1
750
+ `);
751
+ for (const entry of newEntries) {
752
+ applyLifecycle.run(entry.status, entry.supersededBy, entry.verifiedAt, entry.id, workspace);
753
+ }
754
+ const insertLink = db.prepare(`
755
+ INSERT INTO entry_links (from_entry_id, to_entry_id, relation, created_at, created_by)
756
+ VALUES (?, ?, ?, ?, ?)
757
+ `);
758
+ for (const link of related.links) {
759
+ insertLink.run(link.from, link.to, link.relation, link.createdAt, link.createdBy);
760
+ }
761
+ const insertAudit = db.prepare(`
762
+ INSERT INTO audit_events (event_id, entry_id, workspace, operation, actor, details_json, created_at)
763
+ VALUES (?, ?, ?, ?, ?, ?, ?)
764
+ `);
765
+ for (const event of related.audit) {
766
+ insertAudit.run(event.eventId, event.entryId, workspace, event.operation, event.actor, event.detailsJson, event.createdAt);
767
+ }
768
+ return plan;
769
+ });
770
+ return {
771
+ count: entries.length,
772
+ imported: result.newEntries.length,
773
+ duplicates: result.duplicates,
774
+ dryRun: false,
775
+ workspace,
776
+ };
777
+ }
778
+ //# sourceMappingURL=import.js.map