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,929 @@
1
+ import { satisfiesFrameworkVersion } from '../repository/framework-version.js';
2
+ import { detectSkillGap } from './gap-detection.js';
3
+ import { buildSkillQueries } from './query-builder.js';
4
+ import { rankSkillCandidates } from './candidate-ranking.js';
5
+ import { documentsFromSkillSnapshot } from './import-preparation.js';
6
+ import { readSkillDiscoveryConfig } from './config.js';
7
+ import { SkillProviderError } from './providers/schema.js';
8
+ import { SkillDiscoveryCache } from './cache.js';
9
+ import { GitHubSkillSourceFetcher, SkillSourceError } from './source/github-fetcher.js';
10
+ import { validateSkillSnapshot } from './source/snapshot-validator.js';
11
+ import { clearPersistentSkillAuditFailure, clearPersistentSkillSourceFailure, externalSkillRefreshExpectation, externalSkillRequirement, externalSkillSourceFetchRequest, externalSkillWorkspace, markExternalSkillRefreshFailureInTransaction, persistExistingSkillImportInTransaction, persistNewSkillImportInTransaction, readExternalSkill, readPersistentSkillAuditFailure, readPersistentSkillSourceFailure, refreshExternalSkillSnapshotInTransaction, listExternalSkills, readPersistentSkillSearchCache, recordDiscoveredSkillInTransaction, writePersistentSkillAuditFailure, writePersistentSkillSearchCache, writePersistentSkillSourceFailure } from './store.js';
12
+ import { createSkillRegistryProvider, findSkills } from './find.js';
13
+ import { KiokukoError } from '../errors.js';
14
+ import { reviewedCatalogSkill, technologyDefinition } from './official-catalog.js';
15
+ import { isSqliteOperationalError } from '../db/sqlite-retry.js';
16
+ import { withImmediateTransaction } from '../db/transaction.js';
17
+ import { authorizeSkillMaterialization, hasSkillMaterializationAuthorization } from './materialization-authority.js';
18
+ import { DEFAULT_EXTERNAL_SKILL_FAILURE_TTL_MS, externalSkillFailureTtlMs } from './materialization-service.js';
19
+ import { compareCanonicalStrings } from '../serialization/validate.js';
20
+ function candidateId(candidate) { return `${candidate.sourceType}:${candidate.source}:${candidate.slug}`; }
21
+ function compatibilityProvider(provider) { return provider.startsWith('skills-sh-compat-'); }
22
+ function containsAlias(value, alias) {
23
+ const escaped = alias.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
24
+ return new RegExp(`(?:^|[^\\p{L}\\p{N}])${escaped}(?:$|[^\\p{L}\\p{N}])`, 'iu').test(value);
25
+ }
26
+ function providerFailureCode(error) {
27
+ if (!(error instanceof SkillProviderError))
28
+ return undefined;
29
+ const code = error.code;
30
+ switch (code) {
31
+ case 'registry_authentication_failed':
32
+ case 'registry_unavailable':
33
+ case 'registry_rate_limited':
34
+ case 'registry_invalid_response':
35
+ return code;
36
+ default:
37
+ throw error;
38
+ }
39
+ }
40
+ function sourceOrValidationFailureCode(error) {
41
+ if (!(error instanceof SkillSourceError))
42
+ return undefined;
43
+ const code = error.code;
44
+ switch (code) {
45
+ case 'source_missing':
46
+ return 'candidate_not_found_at_source';
47
+ case 'source_rate_limited':
48
+ case 'source_unavailable':
49
+ case 'candidate_not_found_at_source':
50
+ case 'source_tree_truncated':
51
+ case 'skill_disabled_for_model_invocation':
52
+ case 'skill_secret_detected':
53
+ case 'skill_too_large':
54
+ case 'skill_validation_failed':
55
+ case 'skill_blocked':
56
+ return code;
57
+ default:
58
+ throw error;
59
+ }
60
+ }
61
+ function persistenceFailureCode(error) {
62
+ if (error instanceof KiokukoError) {
63
+ if (error.code === 'CONFLICT')
64
+ return 'persistence_conflict';
65
+ if (error.code === 'BACKPRESSURE')
66
+ return 'persistence_failed';
67
+ return undefined;
68
+ }
69
+ return isSqliteOperationalError(error) ? 'persistence_failed' : undefined;
70
+ }
71
+ class CallerPersistenceAssertionError extends Error {
72
+ assertionError;
73
+ constructor(assertionError) {
74
+ super('Caller persistence assertion failed');
75
+ this.assertionError = assertionError;
76
+ this.name = 'CallerPersistenceAssertionError';
77
+ }
78
+ }
79
+ function cachedProviderFailure(value) {
80
+ if (value.failureCode === 'registry_authentication_failed')
81
+ return value.failureCode;
82
+ if (value.cacheOutcome === 'unavailable')
83
+ return 'registry_unavailable';
84
+ if (value.cacheOutcome === 'rate_limited')
85
+ return 'registry_rate_limited';
86
+ return undefined;
87
+ }
88
+ function requirementMatchScore(candidate, requirement, requirements) {
89
+ const values = [candidate.name, candidate.slug.split('/').at(-1) ?? candidate.slug].map((value) => value.toLowerCase());
90
+ const identities = [...new Set([requirement.id, requirement.technology].map((value) => value.toLowerCase()))];
91
+ if (values.some((value) => identities.includes(value)))
92
+ return 100;
93
+ if (values.some((value) => identities.some((identity) => containsAlias(value, identity))))
94
+ return 80;
95
+ const uniqueAliases = requirement.aliases.map((alias) => alias.toLowerCase()).filter((alias) => !requirements.some((other) => other !== requirement
96
+ && [other.id, other.technology, ...other.aliases].some((value) => value.toLowerCase() === alias)));
97
+ if (values.some((value) => uniqueAliases.some((alias) => containsAlias(value, alias))))
98
+ return 60;
99
+ return 0;
100
+ }
101
+ function requirementFor(candidate, requirements) {
102
+ return requirements.map((requirement) => ({ requirement, score: requirementMatchScore(candidate, requirement, requirements) }))
103
+ .filter(({ score }) => score > 0)
104
+ .sort((left, right) => right.score - left.score || compareCanonicalStrings(left.requirement.id, right.requirement.id))[0]?.requirement;
105
+ }
106
+ function normalizeOfficial(candidate, requirement) {
107
+ const official = reviewedCatalogSkill(candidate) !== undefined
108
+ ? 'catalog-verified'
109
+ : requirement.owners.some((owner) => candidate.source.toLowerCase().startsWith(`${owner.toLowerCase()}/`))
110
+ ? 'owner-verified'
111
+ : candidate.officialStatus;
112
+ return { ...candidate, officialStatus: official };
113
+ }
114
+ function requirementsForQuery(query, requirements) {
115
+ const normalized = query.normalize('NFKC').toLowerCase();
116
+ return requirements.filter((requirement) => {
117
+ const technology = requirement.technology.normalize('NFKC').toLowerCase();
118
+ return requirement.queries.some((value) => value.normalize('NFKC').toLowerCase() === normalized)
119
+ || normalized === `${technology} testing`
120
+ || normalized === `${technology} debug`
121
+ || normalized === `${technology} review`;
122
+ });
123
+ }
124
+ function locallySafeCommunityCandidate(candidate) {
125
+ return candidate.sourceType === 'github'
126
+ && !candidate.duplicate
127
+ && /^[A-Za-z0-9_.-]{1,100}\/[A-Za-z0-9_.-]{1,100}$/u.test(candidate.source)
128
+ && /^[A-Za-z0-9_.\-/]{1,240}$/u.test(candidate.slug)
129
+ && !candidate.slug.split('/').some((part) => part === '' || part === '.' || part === '..');
130
+ }
131
+ const CURATED_CACHE_QUERY = '__curated__';
132
+ const DEFAULT_AUTOMATIC_MATERIALIZATION_LIMIT = 1;
133
+ const MAX_AUTOMATIC_MATERIALIZATION_LIMIT = 2;
134
+ const MAX_SOURCE_ATTEMPTS = 6;
135
+ const MAX_COMMUNITY_AUDITS = 6;
136
+ const IMPORT_FRESHNESS_MS = 7 * 24 * 60 * 60_000;
137
+ function automaticMaterializationLimit(value) {
138
+ const resolved = value ?? DEFAULT_AUTOMATIC_MATERIALIZATION_LIMIT;
139
+ if (!Number.isSafeInteger(resolved) || resolved < 1 || resolved > MAX_AUTOMATIC_MATERIALIZATION_LIMIT) {
140
+ throw new KiokukoError('VALIDATION_ERROR', 'External skill materialization limit must be 1 or 2');
141
+ }
142
+ return resolved;
143
+ }
144
+ function providerNegativeCache(error) {
145
+ const code = error.code;
146
+ switch (code) {
147
+ case 'registry_rate_limited':
148
+ return { outcome: 'rate_limited', ttlMs: externalSkillFailureTtlMs(error.retryAfterSeconds) };
149
+ case 'registry_authentication_failed':
150
+ return { outcome: 'unavailable', ttlMs: DEFAULT_EXTERNAL_SKILL_FAILURE_TTL_MS, failureCode: code };
151
+ case 'registry_unavailable':
152
+ return { outcome: 'unavailable', ttlMs: DEFAULT_EXTERNAL_SKILL_FAILURE_TTL_MS };
153
+ case 'registry_invalid_response':
154
+ return undefined;
155
+ default:
156
+ throw error;
157
+ }
158
+ }
159
+ function frameworkVersionMatches(actual, expected) {
160
+ if (expected === undefined)
161
+ return true;
162
+ if (actual === undefined)
163
+ return false;
164
+ const compatibility = satisfiesFrameworkVersion(actual, expected);
165
+ return compatibility === 'exact' || compatibility === 'compatible';
166
+ }
167
+ function applicabilityMatchesFingerprint(requirement, fingerprint) {
168
+ const normalize = (value) => value.normalize('NFKC').toLowerCase();
169
+ const dimensionMatches = (expected, actual) => expected === undefined || expected.length === 0 || expected.some((value) => actual.some((candidate) => normalize(candidate) === normalize(value)));
170
+ if (!dimensionMatches(requirement.applicability.languages, fingerprint.languages)
171
+ || !dimensionMatches(requirement.applicability.databases, fingerprint.databases)
172
+ || !dimensionMatches(requirement.applicability.runtimes, fingerprint.runtimes)
173
+ || !dimensionMatches(requirement.applicability.tools, fingerprint.tools))
174
+ return false;
175
+ const frameworks = requirement.applicability.frameworks;
176
+ return frameworks === undefined || frameworks.length === 0 || frameworks.some((expected) => fingerprint.frameworks.some((actual) => normalize(actual.name) === normalize(expected.name) && frameworkVersionMatches(actual.version, expected.version)));
177
+ }
178
+ function officialStatus(value) {
179
+ return value === 'curated' || value === 'catalog-verified' || value === 'owner-verified' || value === 'registry-only' ? value : 'unknown';
180
+ }
181
+ function reusableImportedSkill(record, mode) {
182
+ if (reviewedCatalogSkill({ source: record.sourceLocator, slug: record.slug }) !== undefined)
183
+ return true;
184
+ // The materialized record itself crossed the runtime authority boundary.
185
+ // Its persisted audit label is descriptive and must not become a reusable
186
+ // authorization input for later discovery runs.
187
+ return mode === 'community';
188
+ }
189
+ function isReviewedCatalogCandidate(candidate, requirement) {
190
+ const definition = technologyDefinition(requirement.id);
191
+ return definition !== undefined
192
+ && requirement.repositories.some((source) => source.normalize('NFKC').toLowerCase() === candidate.source.normalize('NFKC').toLowerCase())
193
+ && (definition.reviewedSkills ?? []).some((skill) => skill.slug === candidate.slug);
194
+ }
195
+ function isReviewedCatalogIdentity(record, requirement) {
196
+ return isReviewedCatalogCandidate(candidateFromRecord(record), requirement);
197
+ }
198
+ function freshImportedSkill(database, requirement, rows, now, mode, fingerprint) {
199
+ const nowMs = Date.parse(now);
200
+ if (!Number.isFinite(nowMs))
201
+ return undefined;
202
+ return rows.find((record) => {
203
+ if (record.state !== 'imported' || record.sourceCommit === null || record.snapshotHash === null)
204
+ return false;
205
+ if (!reusableImportedSkill(record, mode))
206
+ return false;
207
+ const checkedAt = Date.parse(record.lastCheckedAt);
208
+ const age = nowMs - checkedAt;
209
+ if (!Number.isFinite(checkedAt) || age < 0 || age >= IMPORT_FRESHNESS_MS)
210
+ return false;
211
+ const importedRequirement = externalSkillRequirement(database, record.skillId);
212
+ if (importedRequirement === undefined)
213
+ return false;
214
+ return applicabilityMatchesFingerprint(importedRequirement, fingerprint)
215
+ && (requirementOverlaps(importedRequirement, requirement) || isReviewedCatalogIdentity(record, requirement));
216
+ });
217
+ }
218
+ function sourceSkillIdentity(value) {
219
+ return `${value.sourceType.normalize('NFKC').toLowerCase()}\u0000${value.source.normalize('NFKC').toLowerCase()}\u0000${value.slug}`;
220
+ }
221
+ function suppressAutomaticImport(record) {
222
+ return record !== undefined
223
+ && (record.disabledAt !== null || record.state === 'disabled' || record.state === 'blocked');
224
+ }
225
+ function sameSkillSource(record, candidate) {
226
+ return record.sourceType.normalize('NFKC').toLowerCase() === candidate.sourceType.normalize('NFKC').toLowerCase()
227
+ && record.sourceLocator.normalize('NFKC').toLowerCase() === candidate.source.normalize('NFKC').toLowerCase();
228
+ }
229
+ function requirementOverlaps(left, right) {
230
+ const normalize = (value) => value.normalize('NFKC').toLowerCase();
231
+ const leftCanonical = new Set([left.id, left.technology].map(normalize));
232
+ const rightCanonical = new Set([right.id, right.technology].map(normalize));
233
+ if ([...leftCanonical].some((value) => rightCanonical.has(value)))
234
+ return true;
235
+ const leftNames = new Set([left.id, left.technology, ...left.aliases].map(normalize));
236
+ const rightNames = new Set([right.id, right.technology, ...right.aliases].map(normalize));
237
+ return [...rightCanonical].some((value) => leftNames.has(value))
238
+ && [...leftCanonical].some((value) => rightNames.has(value));
239
+ }
240
+ function existingIdentityOwners(database, rows, candidate, canonical, requirement, fingerprint) {
241
+ const requestedIdentity = sourceSkillIdentity(candidate);
242
+ const canonicalIdentity = sourceSkillIdentity(canonical);
243
+ return rows.filter((record) => {
244
+ if (!sameSkillSource(record, canonical))
245
+ return false;
246
+ const identity = sourceSkillIdentity({ sourceType: record.sourceType, source: record.sourceLocator, slug: record.slug });
247
+ if (identity === requestedIdentity || identity === canonicalIdentity)
248
+ return true;
249
+ if (record.sourceCommit === null && record.snapshotHash === null && record.state === 'stale' && record.disabledAt === null)
250
+ return true;
251
+ const stored = externalSkillRequirement(database, record.skillId);
252
+ return stored !== undefined && requirementOverlaps(stored, requirement)
253
+ && (record.disabledAt !== null || record.state === 'disabled' || record.state === 'stale' || record.state === 'blocked'
254
+ || applicabilityMatchesFingerprint(stored, fingerprint));
255
+ });
256
+ }
257
+ function candidateFromRecord(record) {
258
+ if (record.sourceType !== 'github')
259
+ throw new KiokukoError('INTEGRITY_ERROR', 'External Skill source type is invalid');
260
+ return {
261
+ id: record.skillId,
262
+ provider: record.provider,
263
+ name: record.name,
264
+ slug: record.slug,
265
+ source: record.sourceLocator,
266
+ sourceType: record.sourceType,
267
+ installUrl: record.installUrl,
268
+ installs: record.installs,
269
+ duplicate: record.duplicate,
270
+ officialStatus: officialStatus(record.officialStatus),
271
+ auditStatus: record.auditStatus,
272
+ };
273
+ }
274
+ export class SkillDiscoveryService {
275
+ cache;
276
+ provider;
277
+ sourceFetcher;
278
+ sourceFlights = new Map();
279
+ now;
280
+ assertBeforePersist;
281
+ constructor(dependencies = {}) {
282
+ const config = readSkillDiscoveryConfig();
283
+ this.provider = dependencies.provider ?? createSkillRegistryProvider(dependencies.fetchImpl);
284
+ this.sourceFetcher = dependencies.sourceFetcher ?? new GitHubSkillSourceFetcher({ token: config.githubToken, ...(dependencies.fetchImpl ? { fetchImpl: dependencies.fetchImpl } : {}) });
285
+ this.cache = dependencies.cache ?? new SkillDiscoveryCache();
286
+ this.now = dependencies.now ?? (() => new Date().toISOString());
287
+ this.assertBeforePersist = dependencies.assertBeforePersist;
288
+ }
289
+ async fetchSnapshot(candidate, request, signal) {
290
+ const key = JSON.stringify([candidateId(candidate), request.purpose, request.purpose === 'refresh' ? request.expectedPrimaryPath : null]);
291
+ const active = signal === undefined ? this.sourceFlights.get(key) : undefined;
292
+ if (active)
293
+ return active;
294
+ const flight = this.sourceFetcher.fetch(candidate, request, signal);
295
+ if (signal !== undefined)
296
+ return flight;
297
+ this.sourceFlights.set(key, flight);
298
+ try {
299
+ return await flight;
300
+ }
301
+ finally {
302
+ if (this.sourceFlights.get(key) === flight)
303
+ this.sourceFlights.delete(key);
304
+ }
305
+ }
306
+ async searchWithCache(database, input) {
307
+ const persistent = readPersistentSkillSearchCache(database, { ...input, provider: input.provider.id });
308
+ if (persistent !== null) {
309
+ if (persistent.failureCode === 'registry_authentication_failed') {
310
+ if (!input.allowAuthenticationFallback || input.provider.authenticationFallback === undefined)
311
+ return { result: persistent, cacheHits: 1, authenticationFallbackUsed: false, failureCode: persistent.failureCode };
312
+ const fallback = await this.searchWithCache(database, { ...input, provider: input.provider.authenticationFallback, allowAuthenticationFallback: false });
313
+ return { ...fallback, cacheHits: fallback.cacheHits + 1, authenticationFallbackUsed: true };
314
+ }
315
+ const failureCode = cachedProviderFailure(persistent);
316
+ if (failureCode !== undefined)
317
+ return { result: persistent, cacheHits: 1, authenticationFallbackUsed: false, failureCode };
318
+ return { result: persistent, cacheHits: 1, authenticationFallbackUsed: false };
319
+ }
320
+ try {
321
+ const loaded = await this.cache.getOrLoad({
322
+ provider: input.provider.id,
323
+ query: input.query,
324
+ mode: input.mode,
325
+ owner: input.owner,
326
+ loader: () => findSkills({ query: input.query, limit: 20, ...(input.owner === null ? {} : { owner: input.owner }), ...(input.signal === undefined ? {} : { signal: input.signal }) }, {
327
+ provider: input.provider,
328
+ fallbackOnAuthentication: false,
329
+ }),
330
+ });
331
+ writePersistentSkillSearchCache(database, {
332
+ provider: input.provider.id,
333
+ query: input.query,
334
+ owner: input.owner,
335
+ mode: input.mode,
336
+ result: loaded.result,
337
+ outcome: loaded.result.candidates.length === 0 ? 'empty' : 'success',
338
+ ttlMs: loaded.result.candidates.length === 0 ? 6 * 60 * 60_000 : 24 * 60 * 60_000,
339
+ now: input.now,
340
+ });
341
+ return { result: loaded.result, cacheHits: loaded.hit ? 1 : 0, authenticationFallbackUsed: false };
342
+ }
343
+ catch (error) {
344
+ if (error instanceof SkillProviderError) {
345
+ const negativeCache = providerNegativeCache(error);
346
+ if (negativeCache !== undefined) {
347
+ writePersistentSkillSearchCache(database, {
348
+ provider: input.provider.id,
349
+ query: input.query,
350
+ owner: input.owner,
351
+ mode: input.mode,
352
+ result: { provider: input.provider.id, experimental: compatibilityProvider(input.provider.id), candidates: [] },
353
+ outcome: negativeCache.outcome,
354
+ ...(negativeCache.failureCode === undefined ? {} : { failureCode: negativeCache.failureCode }),
355
+ ttlMs: negativeCache.ttlMs,
356
+ now: input.now,
357
+ });
358
+ if (error.code === 'registry_authentication_failed' && input.allowAuthenticationFallback && input.provider.authenticationFallback !== undefined) {
359
+ const fallback = await this.searchWithCache(database, { ...input, provider: input.provider.authenticationFallback, allowAuthenticationFallback: false });
360
+ return { ...fallback, authenticationFallbackUsed: true };
361
+ }
362
+ }
363
+ }
364
+ throw error;
365
+ }
366
+ }
367
+ async discover(database, input, modeOverride) {
368
+ const selectedSkillLimit = automaticMaterializationLimit(input.maxSelectedSkills);
369
+ const requestedMode = modeOverride ?? input.mode;
370
+ const now = this.now();
371
+ if (requestedMode === 'off')
372
+ return { attempted: false, mode: requestedMode, requirements: [], queries: [], cacheHits: 0, candidates: 0, selected: [], failures: [] };
373
+ const gap = detectSkillGap({ fingerprint: input.fingerprint, task: input.task, profile: input.profile, recommendedTags: input.recommendedTags, capabilities: input.capabilities, mode: requestedMode });
374
+ const mode = requestedMode === 'community' && gap.catalogAvailability === 'unknown' ? 'official' : requestedMode;
375
+ const base = { attempted: false, mode, requirements: [], queries: [], cacheHits: 0, candidates: 0, selected: [], failures: [] };
376
+ base.requirements = gap.missing.map((requirement) => requirement.id);
377
+ if (!gap.shouldDiscover || gap.missing.length === 0)
378
+ return base;
379
+ const existingSkills = listExternalSkills(database);
380
+ const unresolved = [];
381
+ const reused = new Set();
382
+ for (const requirement of gap.missing) {
383
+ const existing = freshImportedSkill(database, requirement, existingSkills, now, mode, input.fingerprint);
384
+ if (!existing) {
385
+ unresolved.push(requirement);
386
+ continue;
387
+ }
388
+ if (!reused.has(existing.skillId) && base.selected.length < selectedSkillLimit) {
389
+ reused.add(existing.skillId);
390
+ base.selected.push({ skillId: existing.skillId, name: existing.name, source: existing.sourceLocator, officialStatus: officialStatus(existing.officialStatus), imported: true, updated: false });
391
+ }
392
+ }
393
+ const nowMs = Date.parse(now);
394
+ if (!Number.isFinite(nowMs))
395
+ throw new KiokukoError('INTEGRITY_ERROR', 'Skill discovery clock is invalid');
396
+ const requirementsToSearch = base.selected.length >= selectedSkillLimit ? [] : unresolved;
397
+ if (requirementsToSearch.length === 0)
398
+ return base;
399
+ base.attempted = true;
400
+ const queries = buildSkillQueries({ requirements: requirementsToSearch, profile: input.profile, mode })
401
+ .slice(0, input.maxQueries ?? 3);
402
+ base.queries = queries;
403
+ for (const query of queries) {
404
+ if (requirementsForQuery(query, requirementsToSearch).length === 0)
405
+ throw new KiokukoError('INTEGRITY_ERROR', 'Generated Skill query has no requirement provenance');
406
+ }
407
+ const seenCandidates = new Set();
408
+ const officialCandidates = new Map();
409
+ const communityCandidates = new Map();
410
+ const associateCandidate = (target, candidate, requirements, forcedRequirement) => {
411
+ seenCandidates.add(candidateId(candidate));
412
+ const requirement = forcedRequirement ?? requirementFor(candidate, requirements);
413
+ if (requirement === undefined)
414
+ return;
415
+ const normalized = normalizeOfficial(candidate, requirement);
416
+ const identity = sourceSkillIdentity(normalized);
417
+ const current = target.get(identity);
418
+ const score = requirementMatchScore(normalized, requirement, gap.missing);
419
+ const currentScore = current === undefined ? -1 : requirementMatchScore(current.candidate, current.requirement, gap.missing);
420
+ if (current === undefined || score > currentScore || (score === currentScore && compareCanonicalStrings(requirement.id, current.requirement.id) < 0)) {
421
+ target.set(identity, { candidate: normalized, requirement });
422
+ }
423
+ };
424
+ let primaryAuthenticationFailed = false;
425
+ let providerRequestsLatched = false;
426
+ const search = async (query, owner, requirements, target) => {
427
+ if (providerRequestsLatched)
428
+ return;
429
+ try {
430
+ const loaded = await this.searchWithCache(database, { provider: this.provider, query, owner, mode, now, allowAuthenticationFallback: true, ...(input.signal === undefined ? {} : { signal: input.signal }) });
431
+ base.cacheHits += loaded.cacheHits;
432
+ primaryAuthenticationFailed ||= loaded.authenticationFallbackUsed;
433
+ if (loaded.failureCode !== undefined) {
434
+ base.failures.push({ stage: 'search', code: loaded.failureCode });
435
+ providerRequestsLatched = true;
436
+ return;
437
+ }
438
+ for (const candidate of loaded.result.candidates)
439
+ associateCandidate(target, candidate, requirements);
440
+ }
441
+ catch (error) {
442
+ const code = providerFailureCode(error);
443
+ if (code === undefined)
444
+ throw error;
445
+ base.failures.push({ stage: 'search', code });
446
+ providerRequestsLatched = true;
447
+ }
448
+ };
449
+ // Phase 1: scoped searches against verified owners only.
450
+ for (const query of queries) {
451
+ const queryRequirements = requirementsForQuery(query, requirementsToSearch);
452
+ const owners = [...new Set(queryRequirements.flatMap((requirement) => requirement.owners))];
453
+ for (const owner of owners) {
454
+ await search(query, owner, queryRequirements.filter((requirement) => requirement.owners.includes(owner)), officialCandidates);
455
+ }
456
+ }
457
+ if (this.provider.curated && !primaryAuthenticationFailed && !providerRequestsLatched) {
458
+ const cachedCurated = readPersistentSkillSearchCache(database, { provider: this.provider.id, query: CURATED_CACHE_QUERY, owner: null, mode, now });
459
+ if (cachedCurated) {
460
+ base.cacheHits += 1;
461
+ const failureCode = cachedProviderFailure(cachedCurated);
462
+ if (failureCode !== undefined) {
463
+ base.failures.push({ stage: 'search', code: failureCode });
464
+ providerRequestsLatched = true;
465
+ }
466
+ else
467
+ for (const candidate of cachedCurated.candidates)
468
+ associateCandidate(officialCandidates, candidate, requirementsToSearch);
469
+ }
470
+ else {
471
+ try {
472
+ const curated = await this.provider.curated(input.signal);
473
+ const result = { provider: this.provider.id, experimental: compatibilityProvider(this.provider.id), candidates: curated ?? [] };
474
+ writePersistentSkillSearchCache(database, { provider: this.provider.id, query: CURATED_CACHE_QUERY, owner: null, mode, result, outcome: result.candidates.length === 0 ? 'empty' : 'success', ttlMs: 6 * 60 * 60_000, now });
475
+ for (const candidate of result.candidates)
476
+ associateCandidate(officialCandidates, candidate, requirementsToSearch);
477
+ }
478
+ catch (error) {
479
+ const code = providerFailureCode(error);
480
+ if (code === undefined)
481
+ throw error;
482
+ if (error instanceof SkillProviderError) {
483
+ const negativeCache = providerNegativeCache(error);
484
+ if (negativeCache !== undefined) {
485
+ writePersistentSkillSearchCache(database, {
486
+ provider: this.provider.id,
487
+ query: CURATED_CACHE_QUERY,
488
+ owner: null,
489
+ mode,
490
+ result: { provider: this.provider.id, experimental: compatibilityProvider(this.provider.id), candidates: [] },
491
+ outcome: negativeCache.outcome,
492
+ ...(negativeCache.failureCode === undefined ? {} : { failureCode: negativeCache.failureCode }),
493
+ ttlMs: negativeCache.ttlMs,
494
+ now,
495
+ });
496
+ }
497
+ }
498
+ base.failures.push({ stage: 'search', code });
499
+ providerRequestsLatched = true;
500
+ }
501
+ }
502
+ }
503
+ const communityAudit = new Map();
504
+ let auditAttempts = 0;
505
+ let auditLimitReported = false;
506
+ let communityAuditLatched = false;
507
+ let communityAuditUnavailableReported = false;
508
+ const communityAllowed = async (candidate) => {
509
+ if (!locallySafeCommunityCandidate(candidate))
510
+ return null;
511
+ if (reviewedCatalogSkill(candidate) !== undefined)
512
+ return { candidate: { ...candidate, officialStatus: 'catalog-verified', auditStatus: 'not-required' } };
513
+ const key = candidateId(candidate);
514
+ const known = communityAudit.get(key);
515
+ if (known !== undefined)
516
+ return known.allowed
517
+ ? { candidate: { ...candidate, auditStatus: 'passed' }, authorization: known.authorization }
518
+ : null;
519
+ if (providerRequestsLatched || primaryAuthenticationFailed || communityAuditLatched || this.provider.audit === undefined) {
520
+ providerRequestsLatched = true;
521
+ communityAudit.set(key, { allowed: false });
522
+ communityAuditLatched = true;
523
+ if (!communityAuditUnavailableReported) {
524
+ base.failures.push({ stage: 'validation', code: 'community_audit_unavailable' });
525
+ communityAuditUnavailableReported = true;
526
+ }
527
+ return null;
528
+ }
529
+ const cachedAuditFailure = readPersistentSkillAuditFailure(database, this.provider.id, candidate, now);
530
+ if (cachedAuditFailure !== null) {
531
+ providerRequestsLatched = true;
532
+ communityAudit.set(key, { allowed: false });
533
+ communityAuditLatched = true;
534
+ if (!communityAuditUnavailableReported) {
535
+ base.failures.push({ stage: 'validation', code: 'community_audit_unavailable' });
536
+ communityAuditUnavailableReported = true;
537
+ }
538
+ return null;
539
+ }
540
+ if (auditAttempts >= MAX_COMMUNITY_AUDITS) {
541
+ communityAudit.set(key, { allowed: false });
542
+ if (!auditLimitReported) {
543
+ base.failures.push({ stage: 'validation', code: 'community_audit_limit_reached' });
544
+ auditLimitReported = true;
545
+ }
546
+ return null;
547
+ }
548
+ auditAttempts += 1;
549
+ let audit;
550
+ try {
551
+ audit = await authorizeSkillMaterialization(this.provider, candidate, input.signal);
552
+ }
553
+ catch (error) {
554
+ const code = providerFailureCode(error);
555
+ if (code === undefined)
556
+ throw error;
557
+ if (error instanceof SkillProviderError && (error.code === 'registry_rate_limited' || error.code === 'registry_unavailable')) {
558
+ writePersistentSkillAuditFailure(database, this.provider.id, candidate, error.code, externalSkillFailureTtlMs(error.retryAfterSeconds), now);
559
+ }
560
+ providerRequestsLatched = true;
561
+ communityAudit.set(key, { allowed: false });
562
+ communityAuditLatched = true;
563
+ if (code === 'registry_invalid_response') {
564
+ base.failures.push({ stage: 'search', code });
565
+ }
566
+ else if (!communityAuditUnavailableReported) {
567
+ base.failures.push({ stage: 'validation', code: 'community_audit_unavailable' });
568
+ communityAuditUnavailableReported = true;
569
+ }
570
+ return null;
571
+ }
572
+ if (audit.status === 'unavailable') {
573
+ writePersistentSkillAuditFailure(database, this.provider.id, candidate, 'registry_unavailable', DEFAULT_EXTERNAL_SKILL_FAILURE_TTL_MS, now);
574
+ providerRequestsLatched = true;
575
+ communityAudit.set(key, { allowed: false });
576
+ communityAuditLatched = true;
577
+ if (!communityAuditUnavailableReported) {
578
+ base.failures.push({ stage: 'validation', code: 'community_audit_unavailable' });
579
+ communityAuditUnavailableReported = true;
580
+ }
581
+ return null;
582
+ }
583
+ clearPersistentSkillAuditFailure(database, this.provider.id, candidate);
584
+ const allowed = audit.status === 'passed' ? { candidate: audit.candidate, authorization: audit.authorization } : null;
585
+ communityAudit.set(key, allowed === null ? { allowed: false } : { allowed: true, authorization: allowed.authorization });
586
+ if (allowed === null)
587
+ base.failures.push({ stage: 'validation', code: 'community_audit_failed' });
588
+ return allowed;
589
+ };
590
+ const existingByIdentity = new Map(existingSkills.map((record) => [sourceSkillIdentity({ sourceType: record.sourceType, source: record.sourceLocator, slug: record.slug }), record]));
591
+ const successfulSkills = new Set(base.selected.flatMap((candidate) => {
592
+ const record = existingSkills.find((skill) => skill.skillId === candidate.skillId);
593
+ return record === undefined ? [] : [sourceSkillIdentity({ sourceType: record.sourceType, source: record.sourceLocator, slug: record.slug })];
594
+ }));
595
+ const successfulRequirements = new Set();
596
+ const attemptedSkills = new Set();
597
+ let sourceRequestsLatched = false;
598
+ const preparedSelections = [];
599
+ const pendingFailureTransitions = new Map();
600
+ const recordRecoverableFailure = (candidate, error, selectedExisting) => {
601
+ const code = sourceOrValidationFailureCode(error);
602
+ if (code === undefined)
603
+ return false;
604
+ const identity = sourceSkillIdentity(candidate);
605
+ const exactExisting = existingByIdentity.get(identity);
606
+ if (code === 'candidate_not_found_at_source') {
607
+ const selectedExact = selectedExisting !== undefined
608
+ && sourceSkillIdentity({ sourceType: selectedExisting.sourceType, source: selectedExisting.sourceLocator, slug: selectedExisting.slug }) === identity
609
+ ? selectedExisting
610
+ : undefined;
611
+ const existing = selectedExact ?? exactExisting;
612
+ if (existing === undefined)
613
+ pendingFailureTransitions.set(`new:${identity}`, { kind: 'new-stale', candidate });
614
+ else
615
+ pendingFailureTransitions.set(`existing:${existing.skillId}`, { kind: 'existing', record: existing, state: 'stale' });
616
+ }
617
+ else if ((code === 'skill_disabled_for_model_invocation' || code === 'skill_secret_detected' || code === 'skill_blocked') && exactExisting !== undefined) {
618
+ // A registry alias is only a hint. Never create or block that guessed
619
+ // identity when no verified canonical mapping exists.
620
+ pendingFailureTransitions.set(`existing:${exactExisting.skillId}`, { kind: 'existing', record: exactExisting, state: 'blocked' });
621
+ }
622
+ base.failures.push({ stage: /^(?:skill_|candidate_|source_tree)/u.test(code) ? 'validation' : 'source', code });
623
+ return true;
624
+ };
625
+ const processCandidates = async (candidates) => {
626
+ if (attemptedSkills.size >= MAX_SOURCE_ATTEMPTS || base.selected.length + preparedSelections.length >= selectedSkillLimit)
627
+ return;
628
+ const selected = new Map();
629
+ for (const requirement of requirementsToSearch) {
630
+ if (successfulRequirements.has(requirement.id))
631
+ continue;
632
+ const ranked = rankSkillCandidates({
633
+ candidates: [...candidates.values()].filter((item) => item.requirement.id === requirement.id).map((item) => item.candidate),
634
+ requirement,
635
+ task: input.task,
636
+ profile: input.profile,
637
+ mode,
638
+ });
639
+ for (const rankedCandidate of ranked) {
640
+ const candidate = rankedCandidate.candidate;
641
+ const identity = sourceSkillIdentity(candidate);
642
+ if (candidate.duplicate || selected.has(identity) || attemptedSkills.has(identity))
643
+ continue;
644
+ const owners = existingIdentityOwners(database, listExternalSkills(database), candidate, candidate, requirement, input.fingerprint);
645
+ const exactOwners = owners.filter((record) => sourceSkillIdentity({ sourceType: record.sourceType, source: record.sourceLocator, slug: record.slug }) === identity);
646
+ if (exactOwners.length > 1 || (exactOwners.length === 0 && owners.length > 1))
647
+ throw new KiokukoError('CONFLICT', 'External Skill canonical identity is ambiguous');
648
+ const existing = exactOwners[0] ?? owners[0];
649
+ if (suppressAutomaticImport(existing))
650
+ continue;
651
+ const audited = await communityAllowed(candidate);
652
+ if (audited === null)
653
+ continue;
654
+ selected.set(identity, { candidate: audited.candidate, requirement, ...(existing === undefined ? {} : { existing }) });
655
+ attemptedSkills.add(identity);
656
+ if (attemptedSkills.size >= MAX_SOURCE_ATTEMPTS)
657
+ break;
658
+ }
659
+ if (attemptedSkills.size >= MAX_SOURCE_ATTEMPTS)
660
+ break;
661
+ }
662
+ for (const { candidate, requirement, existing: selectedExisting } of selected.values()) {
663
+ if (sourceRequestsLatched)
664
+ break;
665
+ const identity = sourceSkillIdentity(candidate);
666
+ if (successfulRequirements.has(requirement.id) || successfulSkills.has(identity))
667
+ continue;
668
+ const cachedSourceFailure = readPersistentSkillSourceFailure(database, candidate, now);
669
+ if (cachedSourceFailure !== null) {
670
+ base.failures.push({ stage: 'source', code: cachedSourceFailure.code });
671
+ continue;
672
+ }
673
+ let snapshot;
674
+ let documents;
675
+ let authorizedCanonicalCandidate;
676
+ let authorization;
677
+ try {
678
+ let fetchRequest = { purpose: 'discovery' };
679
+ if (selectedExisting !== undefined) {
680
+ const detail = readExternalSkill(database, selectedExisting.skillId);
681
+ if (detail === undefined)
682
+ throw new KiokukoError('CONFLICT', 'External Skill changed during discovery');
683
+ fetchRequest = externalSkillSourceFetchRequest(detail);
684
+ }
685
+ const fetched = await this.fetchSnapshot(candidate, fetchRequest, input.signal);
686
+ snapshot = validateSkillSnapshot({
687
+ candidate,
688
+ sourceCommit: fetched.sourceCommit,
689
+ files: fetched.files.map((file) => ({ path: file.path, content: file.content, primary: file.primary })),
690
+ });
691
+ const reviewedCatalog = isReviewedCatalogCandidate(candidate, requirement) ? reviewedCatalogSkill(candidate) : undefined;
692
+ const primaryPath = snapshot.files.find((file) => file.primary)?.path;
693
+ if (reviewedCatalog !== undefined && (primaryPath === undefined || !reviewedCatalog.primaryPaths.includes(primaryPath))) {
694
+ throw new SkillSourceError('skill_validation_failed');
695
+ }
696
+ if (requirementMatchScore(snapshot.candidate, requirement, gap.missing) === 0)
697
+ throw new SkillSourceError('skill_validation_failed');
698
+ snapshot = { ...snapshot, candidate: normalizeOfficial(snapshot.candidate, requirement) };
699
+ const authorized = await communityAllowed(snapshot.candidate);
700
+ if (authorized === null)
701
+ continue;
702
+ authorizedCanonicalCandidate = authorized.candidate;
703
+ authorization = authorized.authorization;
704
+ documents = documentsFromSkillSnapshot(snapshot);
705
+ clearPersistentSkillSourceFailure(database, candidate);
706
+ }
707
+ catch (error) {
708
+ if (error instanceof SkillSourceError && (error.code === 'source_rate_limited' || error.code === 'source_unavailable')) {
709
+ writePersistentSkillSourceFailure(database, candidate, error.code, externalSkillFailureTtlMs(error.retryAfterSeconds), now);
710
+ if (error.code === 'source_rate_limited')
711
+ sourceRequestsLatched = true;
712
+ }
713
+ if (!recordRecoverableFailure(candidate, error, selectedExisting))
714
+ throw error;
715
+ continue;
716
+ }
717
+ const canonicalCandidate = authorizedCanonicalCandidate;
718
+ const canonicalIdentity = sourceSkillIdentity(canonicalCandidate);
719
+ if (successfulSkills.has(canonicalIdentity))
720
+ continue;
721
+ preparedSelections.push({
722
+ requestedCandidate: candidate,
723
+ canonicalCandidate,
724
+ ...(authorization === undefined ? {} : { authorization }),
725
+ requirement,
726
+ ...(selectedExisting === undefined ? {} : { selectedExisting }),
727
+ ...(existingByIdentity.get(canonicalIdentity) === undefined ? {} : { observedCanonical: existingByIdentity.get(canonicalIdentity) }),
728
+ snapshot: { ...snapshot, candidate: canonicalCandidate },
729
+ documents,
730
+ });
731
+ successfulSkills.add(canonicalIdentity);
732
+ successfulRequirements.add(requirement.id);
733
+ if (base.selected.length + preparedSelections.length >= selectedSkillLimit)
734
+ break;
735
+ }
736
+ };
737
+ // Owner-scoped and curated candidates are source-validated before any
738
+ // unscoped community query leaves the process.
739
+ await processCandidates(officialCandidates);
740
+ // Phase 3: general registry search is community-only and runs only for
741
+ // requirements that direct/owner-verified discovery did not satisfy.
742
+ if (mode === 'community' && base.selected.length + preparedSelections.length < selectedSkillLimit && attemptedSkills.size < MAX_SOURCE_ATTEMPTS) {
743
+ const remaining = requirementsToSearch.filter((requirement) => !successfulRequirements.has(requirement.id));
744
+ for (const query of queries) {
745
+ const queryRequirements = requirementsForQuery(query, remaining);
746
+ if (queryRequirements.length > 0)
747
+ await search(query, null, queryRequirements, communityCandidates);
748
+ }
749
+ await processCandidates(communityCandidates);
750
+ }
751
+ if (preparedSelections.length > 0 || pendingFailureTransitions.size > 0) {
752
+ let outcomes;
753
+ try {
754
+ outcomes = withImmediateTransaction(database, () => {
755
+ // Every current-state and CAS check runs under the same write lock,
756
+ // before the first candidate import mutates durable state.
757
+ try {
758
+ this.assertBeforePersist?.();
759
+ }
760
+ catch (error) {
761
+ // Caller-owned state assertions are not persistence failures. Keep
762
+ // them out of the recoverable CAS/SQLite summary boundary below.
763
+ throw new CallerPersistenceAssertionError(error);
764
+ }
765
+ const currentSkills = listExternalSkills(database);
766
+ const failureTransitions = [];
767
+ for (const transition of pendingFailureTransitions.values()) {
768
+ if (transition.kind === 'new-stale') {
769
+ const identity = sourceSkillIdentity(transition.candidate);
770
+ if (!currentSkills.some((record) => sourceSkillIdentity({ sourceType: record.sourceType, source: record.sourceLocator, slug: record.slug }) === identity)) {
771
+ failureTransitions.push(transition);
772
+ }
773
+ continue;
774
+ }
775
+ const current = currentSkills.find((record) => record.skillId === transition.record.skillId);
776
+ const expected = externalSkillRefreshExpectation(transition.record);
777
+ if (current === undefined
778
+ || current.generation !== expected.generation
779
+ || current.sourceCommit !== expected.sourceCommit
780
+ || current.snapshotHash !== expected.snapshotHash
781
+ || current.state !== expected.state
782
+ || current.lastCheckedAt !== expected.lastCheckedAt) {
783
+ throw new KiokukoError('CONFLICT', 'External Skill changed during discovery');
784
+ }
785
+ failureTransitions.push(transition);
786
+ }
787
+ const resolvedSelections = preparedSelections.map((plan) => {
788
+ const { requestedCandidate, canonicalCandidate, requirement, selectedExisting, observedCanonical, snapshot, documents } = plan;
789
+ const canonicalIdentity = sourceSkillIdentity(canonicalCandidate);
790
+ const selectedMaterialized = selectedExisting !== undefined && (selectedExisting.sourceCommit !== null || selectedExisting.snapshotHash !== null);
791
+ const canonicalTarget = selectedExisting !== undefined && !selectedMaterialized && observedCanonical !== undefined && selectedExisting.skillId !== observedCanonical.skillId
792
+ ? { skillId: observedCanonical.skillId, expected: externalSkillRefreshExpectation(observedCanonical) }
793
+ : undefined;
794
+ const observedExisting = selectedExisting ?? observedCanonical;
795
+ const currentOwners = existingIdentityOwners(database, currentSkills, requestedCandidate, canonicalCandidate, requirement, input.fingerprint);
796
+ const concurrentlyImported = observedExisting === undefined && currentOwners.length === 1
797
+ ? currentOwners.find((record) => {
798
+ if (sourceSkillIdentity({ sourceType: record.sourceType, source: record.sourceLocator, slug: record.slug }) !== canonicalIdentity
799
+ || record.state !== 'imported' || record.sourceCommit !== snapshot.sourceCommit || record.snapshotHash !== snapshot.snapshotHash
800
+ || !hasSkillMaterializationAuthorization(canonicalCandidate, plan.authorization))
801
+ return false;
802
+ const storedRequirement = externalSkillRequirement(database, record.skillId);
803
+ return storedRequirement !== undefined && requirementOverlaps(storedRequirement, requirement)
804
+ && applicabilityMatchesFingerprint(storedRequirement, input.fingerprint);
805
+ })
806
+ : undefined;
807
+ if (concurrentlyImported !== undefined)
808
+ return { kind: 'reused', plan, record: concurrentlyImported };
809
+ const allowedOwnerIds = new Set([selectedExisting?.skillId, observedCanonical?.skillId].filter((value) => value !== undefined));
810
+ if (currentOwners.some((record) => !allowedOwnerIds.has(record.skillId))
811
+ || observedExisting === undefined && currentOwners.length > 0
812
+ || selectedExisting === undefined && currentOwners.length > 1
813
+ || selectedExisting !== undefined && !selectedMaterialized && currentOwners.length > (canonicalTarget === undefined ? 1 : 2)) {
814
+ throw new KiokukoError('CONFLICT', 'External Skill changed during discovery');
815
+ }
816
+ const currentObserved = observedExisting === undefined ? undefined : currentSkills.find((record) => record.skillId === observedExisting.skillId);
817
+ if (observedExisting !== undefined && currentObserved === undefined)
818
+ throw new KiokukoError('CONFLICT', 'External Skill changed during discovery');
819
+ if (suppressAutomaticImport(currentObserved))
820
+ return { kind: 'skipped', plan };
821
+ const prepared = {
822
+ skill: canonicalCandidate,
823
+ sourceWorkspace: externalSkillWorkspace(canonicalCandidate),
824
+ sourceCommit: snapshot.sourceCommit,
825
+ snapshotHash: snapshot.snapshotHash,
826
+ frontmatter: snapshot.frontmatter,
827
+ documents,
828
+ requirement,
829
+ };
830
+ if (observedExisting === undefined)
831
+ return { kind: 'new', plan, input: prepared };
832
+ if (observedExisting.sourceCommit === null && observedExisting.snapshotHash === null) {
833
+ return { kind: 'existing', plan, input: prepared, existing: observedExisting, ...(canonicalTarget === undefined ? {} : { canonicalTarget }) };
834
+ }
835
+ return { kind: 'refresh', plan, input: prepared, existing: observedExisting };
836
+ });
837
+ for (const transition of failureTransitions) {
838
+ if (transition.kind === 'existing') {
839
+ markExternalSkillRefreshFailureInTransaction(database, transition.record.skillId, transition.state, externalSkillRefreshExpectation(transition.record), now);
840
+ }
841
+ else {
842
+ const discovered = recordDiscoveredSkillInTransaction(database, transition.candidate, now);
843
+ markExternalSkillRefreshFailureInTransaction(database, discovered.skillId, 'stale', externalSkillRefreshExpectation(discovered), now);
844
+ }
845
+ }
846
+ return resolvedSelections.map((selection) => {
847
+ if (selection.kind === 'reused' || selection.kind === 'skipped')
848
+ return selection;
849
+ if (selection.kind === 'new') {
850
+ return { kind: 'selected', plan: selection.plan, result: persistNewSkillImportInTransaction(database, selection.input, now, selection.plan.authorization) };
851
+ }
852
+ if (selection.kind === 'existing') {
853
+ return {
854
+ kind: 'selected',
855
+ plan: selection.plan,
856
+ result: persistExistingSkillImportInTransaction(database, selection.existing.skillId, selection.input, externalSkillRefreshExpectation(selection.existing), now, selection.canonicalTarget, selection.plan.authorization),
857
+ };
858
+ }
859
+ const result = refreshExternalSkillSnapshotInTransaction(database, selection.existing.skillId, selection.plan.snapshot, selection.input.documents, selection.plan.requirement, externalSkillRefreshExpectation(selection.existing), now, selection.plan.authorization);
860
+ return result.kind === 'staled'
861
+ ? { kind: 'staled', plan: selection.plan }
862
+ : { kind: 'selected', plan: selection.plan, result: result.result };
863
+ });
864
+ });
865
+ }
866
+ catch (error) {
867
+ if (error instanceof CallerPersistenceAssertionError)
868
+ throw error.assertionError;
869
+ const code = persistenceFailureCode(error);
870
+ if (code === undefined)
871
+ throw error;
872
+ base.failures.push({ stage: 'persistence', code });
873
+ outcomes = [];
874
+ }
875
+ for (const outcome of outcomes) {
876
+ if (outcome.kind === 'staled') {
877
+ base.failures.push({ stage: 'persistence', code: 'persistence_conflict' });
878
+ continue;
879
+ }
880
+ if (outcome.kind === 'skipped' || base.selected.length >= selectedSkillLimit)
881
+ continue;
882
+ if (outcome.kind === 'reused') {
883
+ if (!base.selected.some((item) => item.skillId === outcome.record.skillId)) {
884
+ base.selected.push({ skillId: outcome.record.skillId, name: outcome.record.name, source: outcome.record.sourceLocator, officialStatus: officialStatus(outcome.record.officialStatus), imported: true, updated: false });
885
+ }
886
+ continue;
887
+ }
888
+ if (!base.selected.some((item) => item.skillId === outcome.result.skillId)) {
889
+ base.selected.push({
890
+ skillId: outcome.result.skillId,
891
+ name: outcome.plan.canonicalCandidate.name,
892
+ source: outcome.plan.canonicalCandidate.source,
893
+ officialStatus: outcome.plan.canonicalCandidate.officialStatus,
894
+ imported: outcome.result.imported > 0,
895
+ updated: outcome.result.updated,
896
+ });
897
+ }
898
+ }
899
+ }
900
+ base.candidates = seenCandidates.size;
901
+ return base;
902
+ }
903
+ }
904
+ export async function discoverSkills(database, input, dependencies = {}) {
905
+ const effectiveDependencies = dependencies.fetchImpl === undefined && input.fetchImpl !== undefined
906
+ ? { ...dependencies, fetchImpl: input.fetchImpl }
907
+ : dependencies;
908
+ return discoveryServiceFor(effectiveDependencies).discover(database, input);
909
+ }
910
+ let sharedDiscoveryService;
911
+ const fetchDiscoveryServices = new WeakMap();
912
+ function discoveryServiceFor(dependencies) {
913
+ const keys = Object.keys(dependencies);
914
+ if (keys.length === 0) {
915
+ sharedDiscoveryService ??= new SkillDiscoveryService();
916
+ return sharedDiscoveryService;
917
+ }
918
+ if (keys.length === 1 && dependencies.fetchImpl !== undefined) {
919
+ const key = dependencies.fetchImpl;
920
+ const existing = fetchDiscoveryServices.get(key);
921
+ if (existing)
922
+ return existing;
923
+ const service = new SkillDiscoveryService(dependencies);
924
+ fetchDiscoveryServices.set(key, service);
925
+ return service;
926
+ }
927
+ return new SkillDiscoveryService(dependencies);
928
+ }
929
+ //# sourceMappingURL=discovery-service.js.map