@askdkc/kiokuko 0.1.17 → 0.1.19

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 (534) hide show
  1. package/README.ja.md +91 -112
  2. package/README.ko.md +90 -102
  3. package/README.md +103 -262
  4. package/README.zh-CN.md +88 -102
  5. package/dist/agent-file/atomic-write.d.ts +90 -3
  6. package/dist/agent-file/atomic-write.d.ts.map +1 -1
  7. package/dist/agent-file/atomic-write.js +990 -14
  8. package/dist/agent-file/atomic-write.js.map +1 -1
  9. package/dist/agent-file/managed-block.d.ts +12 -1
  10. package/dist/agent-file/managed-block.d.ts.map +1 -1
  11. package/dist/agent-file/managed-block.js +49 -4
  12. package/dist/agent-file/managed-block.js.map +1 -1
  13. package/dist/agent-file/render.d.ts +1 -1
  14. package/dist/agent-file/render.d.ts.map +1 -1
  15. package/dist/agent-file/render.js +10 -7
  16. package/dist/agent-file/render.js.map +1 -1
  17. package/dist/akinator/agent-task.d.ts +11 -22
  18. package/dist/akinator/agent-task.d.ts.map +1 -1
  19. package/dist/akinator/agent-task.js +454 -99
  20. package/dist/akinator/agent-task.js.map +1 -1
  21. package/dist/akinator/capabilities.d.ts +18 -6
  22. package/dist/akinator/capabilities.d.ts.map +1 -1
  23. package/dist/akinator/capabilities.js +72 -35
  24. package/dist/akinator/capabilities.js.map +1 -1
  25. package/dist/akinator/capability-binding.d.ts +11 -0
  26. package/dist/akinator/capability-binding.d.ts.map +1 -0
  27. package/dist/akinator/capability-binding.js +56 -0
  28. package/dist/akinator/capability-binding.js.map +1 -0
  29. package/dist/akinator/domain.js +2 -2
  30. package/dist/akinator/domain.js.map +1 -1
  31. package/dist/akinator/knowledge-path.d.ts.map +1 -1
  32. package/dist/akinator/knowledge-path.js +409 -39
  33. package/dist/akinator/knowledge-path.js.map +1 -1
  34. package/dist/akinator/orchestrator.d.ts +3 -4
  35. package/dist/akinator/orchestrator.d.ts.map +1 -1
  36. package/dist/akinator/orchestrator.js +1 -4
  37. package/dist/akinator/orchestrator.js.map +1 -1
  38. package/dist/akinator/service.d.ts +0 -4
  39. package/dist/akinator/service.d.ts.map +1 -1
  40. package/dist/akinator/service.js +19 -35
  41. package/dist/akinator/service.js.map +1 -1
  42. package/dist/akinator/skill-discovery-attempt.d.ts +20 -0
  43. package/dist/akinator/skill-discovery-attempt.d.ts.map +1 -0
  44. package/dist/akinator/skill-discovery-attempt.js +390 -0
  45. package/dist/akinator/skill-discovery-attempt.js.map +1 -0
  46. package/dist/akinator/store.d.ts.map +1 -1
  47. package/dist/akinator/store.js +107 -52
  48. package/dist/akinator/store.js.map +1 -1
  49. package/dist/akinator/types.d.ts +0 -12
  50. package/dist/akinator/types.d.ts.map +1 -1
  51. package/dist/bin/kiokuko.js +0 -0
  52. package/dist/cli.d.ts +2 -0
  53. package/dist/cli.d.ts.map +1 -1
  54. package/dist/cli.js +534 -148
  55. package/dist/cli.js.map +1 -1
  56. package/dist/client/server-client.d.ts +5 -3
  57. package/dist/client/server-client.d.ts.map +1 -1
  58. package/dist/client/server-client.js +486 -181
  59. package/dist/client/server-client.js.map +1 -1
  60. package/dist/commands/agent.d.ts +2 -0
  61. package/dist/commands/agent.d.ts.map +1 -1
  62. package/dist/commands/agent.js +861 -86
  63. package/dist/commands/agent.js.map +1 -1
  64. package/dist/commands/backup.d.ts +2 -1
  65. package/dist/commands/backup.d.ts.map +1 -1
  66. package/dist/commands/backup.js +64 -8
  67. package/dist/commands/backup.js.map +1 -1
  68. package/dist/commands/doctor.d.ts +5 -1
  69. package/dist/commands/doctor.d.ts.map +1 -1
  70. package/dist/commands/doctor.js +70 -26
  71. package/dist/commands/doctor.js.map +1 -1
  72. package/dist/commands/export.d.ts +0 -4
  73. package/dist/commands/export.d.ts.map +1 -1
  74. package/dist/commands/export.js +191 -32
  75. package/dist/commands/export.js.map +1 -1
  76. package/dist/commands/import.d.ts +10 -1
  77. package/dist/commands/import.d.ts.map +1 -1
  78. package/dist/commands/import.js +592 -113
  79. package/dist/commands/import.js.map +1 -1
  80. package/dist/commands/init.d.ts +19 -1
  81. package/dist/commands/init.d.ts.map +1 -1
  82. package/dist/commands/init.js +569 -22
  83. package/dist/commands/init.js.map +1 -1
  84. package/dist/commands/purge.d.ts.map +1 -1
  85. package/dist/commands/purge.js +3 -0
  86. package/dist/commands/purge.js.map +1 -1
  87. package/dist/commands/setup.d.ts +34 -8
  88. package/dist/commands/setup.d.ts.map +1 -1
  89. package/dist/commands/setup.js +418 -86
  90. package/dist/commands/setup.js.map +1 -1
  91. package/dist/commands/skills.d.ts +9 -0
  92. package/dist/commands/skills.d.ts.map +1 -0
  93. package/dist/commands/skills.js +317 -0
  94. package/dist/commands/skills.js.map +1 -0
  95. package/dist/commands/use.d.ts +10 -2
  96. package/dist/commands/use.d.ts.map +1 -1
  97. package/dist/commands/use.js +851 -73
  98. package/dist/commands/use.js.map +1 -1
  99. package/dist/config/paths.d.ts +11 -1
  100. package/dist/config/paths.d.ts.map +1 -1
  101. package/dist/config/paths.js +64 -29
  102. package/dist/config/paths.js.map +1 -1
  103. package/dist/config/project-config.d.ts +1 -0
  104. package/dist/config/project-config.d.ts.map +1 -1
  105. package/dist/config/project-config.js +70 -32
  106. package/dist/config/project-config.js.map +1 -1
  107. package/dist/context/broker.d.ts +28 -14
  108. package/dist/context/broker.d.ts.map +1 -1
  109. package/dist/context/broker.js +604 -145
  110. package/dist/context/broker.js.map +1 -1
  111. package/dist/context/delivery.d.ts +6 -21
  112. package/dist/context/delivery.d.ts.map +1 -1
  113. package/dist/context/delivery.js +196 -147
  114. package/dist/context/delivery.js.map +1 -1
  115. package/dist/context/feedback.d.ts +11 -12
  116. package/dist/context/feedback.d.ts.map +1 -1
  117. package/dist/context/feedback.js +229 -261
  118. package/dist/context/feedback.js.map +1 -1
  119. package/dist/context/ranking.d.ts +1 -12
  120. package/dist/context/ranking.d.ts.map +1 -1
  121. package/dist/context/ranking.js +13 -4
  122. package/dist/context/ranking.js.map +1 -1
  123. package/dist/context/recommendations.d.ts +0 -5
  124. package/dist/context/recommendations.d.ts.map +1 -1
  125. package/dist/context/recommendations.js +0 -1
  126. package/dist/context/recommendations.js.map +1 -1
  127. package/dist/context/run-state.d.ts +26 -0
  128. package/dist/context/run-state.d.ts.map +1 -0
  129. package/dist/context/run-state.js +399 -0
  130. package/dist/context/run-state.js.map +1 -0
  131. package/dist/context/scoped-broker.d.ts +17 -5
  132. package/dist/context/scoped-broker.d.ts.map +1 -1
  133. package/dist/context/scoped-broker.js +512 -106
  134. package/dist/context/scoped-broker.js.map +1 -1
  135. package/dist/context/selection-state.d.ts +19 -0
  136. package/dist/context/selection-state.d.ts.map +1 -0
  137. package/dist/context/selection-state.js +250 -0
  138. package/dist/context/selection-state.js.map +1 -0
  139. package/dist/db/adapter.d.ts +5 -3
  140. package/dist/db/adapter.d.ts.map +1 -1
  141. package/dist/db/adapter.js +6 -3
  142. package/dist/db/adapter.js.map +1 -1
  143. package/dist/db/capabilities.d.ts.map +1 -1
  144. package/dist/db/capabilities.js +34 -16
  145. package/dist/db/capabilities.js.map +1 -1
  146. package/dist/db/connection.d.ts +8 -0
  147. package/dist/db/connection.d.ts.map +1 -1
  148. package/dist/db/connection.js +55 -26
  149. package/dist/db/connection.js.map +1 -1
  150. package/dist/db/migrate.d.ts +28 -7
  151. package/dist/db/migrate.d.ts.map +1 -1
  152. package/dist/db/migrate.js +106 -78
  153. package/dist/db/migrate.js.map +1 -1
  154. package/dist/db/sqlite-retry.d.ts +11 -0
  155. package/dist/db/sqlite-retry.d.ts.map +1 -0
  156. package/dist/db/sqlite-retry.js +66 -0
  157. package/dist/db/sqlite-retry.js.map +1 -0
  158. package/dist/db/transaction.d.ts +13 -0
  159. package/dist/db/transaction.d.ts.map +1 -1
  160. package/dist/db/transaction.js +53 -24
  161. package/dist/db/transaction.js.map +1 -1
  162. package/dist/db/upgrade-backup.d.ts +58 -2
  163. package/dist/db/upgrade-backup.d.ts.map +1 -1
  164. package/dist/db/upgrade-backup.js +757 -28
  165. package/dist/db/upgrade-backup.js.map +1 -1
  166. package/dist/errors.js +1 -1
  167. package/dist/errors.js.map +1 -1
  168. package/dist/gateway/agent-service.d.ts +4 -1
  169. package/dist/gateway/agent-service.d.ts.map +1 -1
  170. package/dist/gateway/agent-service.js +71 -58
  171. package/dist/gateway/agent-service.js.map +1 -1
  172. package/dist/gateway/checkpoint-service.d.ts +1 -0
  173. package/dist/gateway/checkpoint-service.d.ts.map +1 -1
  174. package/dist/gateway/checkpoint-service.js +47 -24
  175. package/dist/gateway/checkpoint-service.js.map +1 -1
  176. package/dist/ledger/archive.d.ts +1 -4
  177. package/dist/ledger/archive.d.ts.map +1 -1
  178. package/dist/ledger/archive.js +77 -39
  179. package/dist/ledger/archive.js.map +1 -1
  180. package/dist/ledger/maintenance.d.ts +0 -11
  181. package/dist/ledger/maintenance.d.ts.map +1 -1
  182. package/dist/ledger/maintenance.js +24 -40
  183. package/dist/ledger/maintenance.js.map +1 -1
  184. package/dist/ledger/projection.d.ts +0 -1
  185. package/dist/ledger/projection.d.ts.map +1 -1
  186. package/dist/ledger/projection.js.map +1 -1
  187. package/dist/ledger/promotion.d.ts +0 -9
  188. package/dist/ledger/promotion.d.ts.map +1 -1
  189. package/dist/ledger/promotion.js.map +1 -1
  190. package/dist/ledger/query.d.ts +1 -15
  191. package/dist/ledger/query.d.ts.map +1 -1
  192. package/dist/ledger/query.js.map +1 -1
  193. package/dist/ledger/store.d.ts +0 -1
  194. package/dist/ledger/store.d.ts.map +1 -1
  195. package/dist/ledger/store.js +11 -8
  196. package/dist/ledger/store.js.map +1 -1
  197. package/dist/ledger/types.d.ts +0 -4
  198. package/dist/ledger/types.d.ts.map +1 -1
  199. package/dist/ledger/types.js.map +1 -1
  200. package/dist/ledger/validate.d.ts.map +1 -1
  201. package/dist/ledger/validate.js +0 -5
  202. package/dist/ledger/validate.js.map +1 -1
  203. package/dist/mcp/server.d.ts +4 -0
  204. package/dist/mcp/server.d.ts.map +1 -1
  205. package/dist/mcp/server.js +105 -54
  206. package/dist/mcp/server.js.map +1 -1
  207. package/dist/memory/audit.d.ts +0 -1
  208. package/dist/memory/audit.d.ts.map +1 -1
  209. package/dist/memory/audit.js +0 -1
  210. package/dist/memory/audit.js.map +1 -1
  211. package/dist/memory/curator.d.ts.map +1 -1
  212. package/dist/memory/curator.js +172 -96
  213. package/dist/memory/curator.js.map +1 -1
  214. package/dist/memory/entries.d.ts +12 -2
  215. package/dist/memory/entries.d.ts.map +1 -1
  216. package/dist/memory/entries.js +198 -114
  217. package/dist/memory/entries.js.map +1 -1
  218. package/dist/memory/federated-retrieval.d.ts +12 -1
  219. package/dist/memory/federated-retrieval.d.ts.map +1 -1
  220. package/dist/memory/federated-retrieval.js +183 -70
  221. package/dist/memory/federated-retrieval.js.map +1 -1
  222. package/dist/memory/hybrid-retrieval.d.ts +5 -11
  223. package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
  224. package/dist/memory/hybrid-retrieval.js +78 -58
  225. package/dist/memory/hybrid-retrieval.js.map +1 -1
  226. package/dist/memory/lifecycle.d.ts.map +1 -1
  227. package/dist/memory/lifecycle.js +17 -13
  228. package/dist/memory/lifecycle.js.map +1 -1
  229. package/dist/memory/rebuild-search.d.ts +5 -0
  230. package/dist/memory/rebuild-search.d.ts.map +1 -1
  231. package/dist/memory/rebuild-search.js +101 -76
  232. package/dist/memory/rebuild-search.js.map +1 -1
  233. package/dist/memory/retrieval-query.d.ts +0 -5
  234. package/dist/memory/retrieval-query.d.ts.map +1 -1
  235. package/dist/memory/retrieval-query.js +0 -5
  236. package/dist/memory/retrieval-query.js.map +1 -1
  237. package/dist/memory/retrieval.d.ts.map +1 -1
  238. package/dist/memory/retrieval.js +25 -131
  239. package/dist/memory/retrieval.js.map +1 -1
  240. package/dist/memory/revisions.d.ts +76 -1
  241. package/dist/memory/revisions.d.ts.map +1 -1
  242. package/dist/memory/revisions.js +539 -35
  243. package/dist/memory/revisions.js.map +1 -1
  244. package/dist/memory/scoped-memory.d.ts +16 -1
  245. package/dist/memory/scoped-memory.d.ts.map +1 -1
  246. package/dist/memory/scoped-memory.js +240 -107
  247. package/dist/memory/scoped-memory.js.map +1 -1
  248. package/dist/memory/secrets.d.ts +2 -0
  249. package/dist/memory/secrets.d.ts.map +1 -1
  250. package/dist/memory/secrets.js +36 -0
  251. package/dist/memory/secrets.js.map +1 -1
  252. package/dist/memory/structured-memory.d.ts +3 -2
  253. package/dist/memory/structured-memory.d.ts.map +1 -1
  254. package/dist/memory/structured-memory.js +54 -22
  255. package/dist/memory/structured-memory.js.map +1 -1
  256. package/dist/memory/workspaces.d.ts +9 -0
  257. package/dist/memory/workspaces.d.ts.map +1 -1
  258. package/dist/memory/workspaces.js +67 -0
  259. package/dist/memory/workspaces.js.map +1 -1
  260. package/dist/package-version.d.ts +2 -0
  261. package/dist/package-version.d.ts.map +1 -0
  262. package/dist/package-version.js +7 -0
  263. package/dist/package-version.js.map +1 -0
  264. package/dist/repository/binding.d.ts +5 -0
  265. package/dist/repository/binding.d.ts.map +1 -1
  266. package/dist/repository/binding.js +117 -17
  267. package/dist/repository/binding.js.map +1 -1
  268. package/dist/repository/framework-version.d.ts +8 -0
  269. package/dist/repository/framework-version.d.ts.map +1 -0
  270. package/dist/repository/framework-version.js +29 -0
  271. package/dist/repository/framework-version.js.map +1 -0
  272. package/dist/repository/identity-value.d.ts +4 -0
  273. package/dist/repository/identity-value.d.ts.map +1 -0
  274. package/dist/repository/identity-value.js +24 -0
  275. package/dist/repository/identity-value.js.map +1 -0
  276. package/dist/repository/identity.d.ts.map +1 -1
  277. package/dist/repository/identity.js +2 -0
  278. package/dist/repository/identity.js.map +1 -1
  279. package/dist/repository/project-fingerprint.d.ts +14 -2
  280. package/dist/repository/project-fingerprint.d.ts.map +1 -1
  281. package/dist/repository/project-fingerprint.js +312 -33
  282. package/dist/repository/project-fingerprint.js.map +1 -1
  283. package/dist/repository/remote-url.d.ts +0 -1
  284. package/dist/repository/remote-url.d.ts.map +1 -1
  285. package/dist/repository/remote-url.js +0 -1
  286. package/dist/repository/remote-url.js.map +1 -1
  287. package/dist/runtime-version.d.ts +2 -1
  288. package/dist/runtime-version.d.ts.map +1 -1
  289. package/dist/runtime-version.js +21 -4
  290. package/dist/runtime-version.js.map +1 -1
  291. package/dist/serialization/boundary-json.d.ts +20 -0
  292. package/dist/serialization/boundary-json.d.ts.map +1 -0
  293. package/dist/serialization/boundary-json.js +129 -0
  294. package/dist/serialization/boundary-json.js.map +1 -0
  295. package/dist/serialization/envelope.js +1 -1
  296. package/dist/serialization/envelope.js.map +1 -1
  297. package/dist/serialization/validate.d.ts +7 -0
  298. package/dist/serialization/validate.d.ts.map +1 -1
  299. package/dist/serialization/validate.js +53 -13
  300. package/dist/serialization/validate.js.map +1 -1
  301. package/dist/server/app.js +1 -1
  302. package/dist/server/app.js.map +1 -1
  303. package/dist/server/http.d.ts +4 -3
  304. package/dist/server/http.d.ts.map +1 -1
  305. package/dist/server/http.js +90 -50
  306. package/dist/server/http.js.map +1 -1
  307. package/dist/server/idempotency.d.ts +0 -6
  308. package/dist/server/idempotency.d.ts.map +1 -1
  309. package/dist/server/idempotency.js.map +1 -1
  310. package/dist/server/router.d.ts.map +1 -1
  311. package/dist/server/router.js +21 -4
  312. package/dist/server/router.js.map +1 -1
  313. package/dist/server/routes/agent-capability-gate.d.ts +40 -0
  314. package/dist/server/routes/agent-capability-gate.d.ts.map +1 -0
  315. package/dist/server/routes/agent-capability-gate.js +182 -0
  316. package/dist/server/routes/agent-capability-gate.js.map +1 -0
  317. package/dist/server/routes/agent-events.d.ts.map +1 -1
  318. package/dist/server/routes/agent-events.js +8 -1
  319. package/dist/server/routes/agent-events.js.map +1 -1
  320. package/dist/server/routes/agent-intake.d.ts.map +1 -1
  321. package/dist/server/routes/agent-intake.js +10 -2
  322. package/dist/server/routes/agent-intake.js.map +1 -1
  323. package/dist/server/routes/agent-promotions.d.ts.map +1 -1
  324. package/dist/server/routes/agent-promotions.js +5 -2
  325. package/dist/server/routes/agent-promotions.js.map +1 -1
  326. package/dist/server/routes/agent-runs.d.ts.map +1 -1
  327. package/dist/server/routes/agent-runs.js +18 -4
  328. package/dist/server/routes/agent-runs.js.map +1 -1
  329. package/dist/server/routes/request-binding.d.ts +5 -0
  330. package/dist/server/routes/request-binding.d.ts.map +1 -0
  331. package/dist/server/routes/request-binding.js +49 -0
  332. package/dist/server/routes/request-binding.js.map +1 -0
  333. package/dist/server/routes/task5-support.d.ts +1 -8
  334. package/dist/server/routes/task5-support.d.ts.map +1 -1
  335. package/dist/server/routes/task5-support.js +1 -17
  336. package/dist/server/routes/task5-support.js.map +1 -1
  337. package/dist/server/routes/task5.d.ts.map +1 -1
  338. package/dist/server/routes/task5.js +106 -36
  339. package/dist/server/routes/task5.js.map +1 -1
  340. package/dist/server/write-queue.js +2 -2
  341. package/dist/server/write-queue.js.map +1 -1
  342. package/dist/setup/claude-config.d.ts +2 -1
  343. package/dist/setup/claude-config.d.ts.map +1 -1
  344. package/dist/setup/claude-config.js +54 -4
  345. package/dist/setup/claude-config.js.map +1 -1
  346. package/dist/setup/client-detection.d.ts +7 -2
  347. package/dist/setup/client-detection.d.ts.map +1 -1
  348. package/dist/setup/client-detection.js +27 -9
  349. package/dist/setup/client-detection.js.map +1 -1
  350. package/dist/setup/hermes-config.d.ts +2 -1
  351. package/dist/setup/hermes-config.d.ts.map +1 -1
  352. package/dist/setup/hermes-config.js +53 -12
  353. package/dist/setup/hermes-config.js.map +1 -1
  354. package/dist/setup/legacy-client-cleanup.d.ts +6 -0
  355. package/dist/setup/legacy-client-cleanup.d.ts.map +1 -0
  356. package/dist/setup/legacy-client-cleanup.js +152 -0
  357. package/dist/setup/legacy-client-cleanup.js.map +1 -0
  358. package/dist/setup/managed-text.d.ts.map +1 -1
  359. package/dist/setup/managed-text.js +11 -1
  360. package/dist/setup/managed-text.js.map +1 -1
  361. package/dist/setup/opencode-config.d.ts +2 -1
  362. package/dist/setup/opencode-config.d.ts.map +1 -1
  363. package/dist/setup/opencode-config.js +57 -5
  364. package/dist/setup/opencode-config.js.map +1 -1
  365. package/dist/setup/render.d.ts +2 -1
  366. package/dist/setup/render.d.ts.map +1 -1
  367. package/dist/setup/render.js +91 -17
  368. package/dist/setup/render.js.map +1 -1
  369. package/dist/setup/standard-skills.d.ts +16 -2
  370. package/dist/setup/standard-skills.d.ts.map +1 -1
  371. package/dist/setup/standard-skills.js +37 -13
  372. package/dist/setup/standard-skills.js.map +1 -1
  373. package/dist/setup/strict-json.d.ts +7 -0
  374. package/dist/setup/strict-json.d.ts.map +1 -0
  375. package/dist/setup/strict-json.js +98 -0
  376. package/dist/setup/strict-json.js.map +1 -0
  377. package/dist/setup/strict-toml.d.ts +7 -0
  378. package/dist/setup/strict-toml.d.ts.map +1 -0
  379. package/dist/setup/strict-toml.js +470 -0
  380. package/dist/setup/strict-toml.js.map +1 -0
  381. package/dist/skills/cache.d.ts +15 -0
  382. package/dist/skills/cache.d.ts.map +1 -0
  383. package/dist/skills/cache.js +19 -0
  384. package/dist/skills/cache.js.map +1 -0
  385. package/dist/skills/candidate-ranking.d.ts +15 -0
  386. package/dist/skills/candidate-ranking.d.ts.map +1 -0
  387. package/dist/skills/candidate-ranking.js +52 -0
  388. package/dist/skills/candidate-ranking.js.map +1 -0
  389. package/dist/skills/chunking.d.ts +11 -0
  390. package/dist/skills/chunking.d.ts.map +1 -0
  391. package/dist/skills/chunking.js +291 -0
  392. package/dist/skills/chunking.js.map +1 -0
  393. package/dist/skills/config.d.ts +19 -0
  394. package/dist/skills/config.d.ts.map +1 -0
  395. package/dist/skills/config.js +103 -0
  396. package/dist/skills/config.js.map +1 -0
  397. package/dist/skills/discovery-service.d.ts +26 -0
  398. package/dist/skills/discovery-service.d.ts.map +1 -0
  399. package/dist/skills/discovery-service.js +921 -0
  400. package/dist/skills/discovery-service.js.map +1 -0
  401. package/dist/skills/external-transport.d.ts +2 -0
  402. package/dist/skills/external-transport.d.ts.map +1 -0
  403. package/dist/skills/external-transport.js +30 -0
  404. package/dist/skills/external-transport.js.map +1 -0
  405. package/dist/skills/find.d.ts +16 -0
  406. package/dist/skills/find.d.ts.map +1 -0
  407. package/dist/skills/find.js +58 -0
  408. package/dist/skills/find.js.map +1 -0
  409. package/dist/skills/gap-detection.d.ts +23 -0
  410. package/dist/skills/gap-detection.d.ts.map +1 -0
  411. package/dist/skills/gap-detection.js +62 -0
  412. package/dist/skills/gap-detection.js.map +1 -0
  413. package/dist/skills/import-preparation.d.ts +4 -0
  414. package/dist/skills/import-preparation.d.ts.map +1 -0
  415. package/dist/skills/import-preparation.js +20 -0
  416. package/dist/skills/import-preparation.js.map +1 -0
  417. package/dist/skills/materialization-authority.d.ts +11 -0
  418. package/dist/skills/materialization-authority.d.ts.map +1 -0
  419. package/dist/skills/materialization-authority.js +92 -0
  420. package/dist/skills/materialization-authority.js.map +1 -0
  421. package/dist/skills/materialization-service.d.ts +22 -0
  422. package/dist/skills/materialization-service.d.ts.map +1 -0
  423. package/dist/skills/materialization-service.js +101 -0
  424. package/dist/skills/materialization-service.js.map +1 -0
  425. package/dist/skills/official-catalog.d.ts +31 -0
  426. package/dist/skills/official-catalog.d.ts.map +1 -0
  427. package/dist/skills/official-catalog.js +110 -0
  428. package/dist/skills/official-catalog.js.map +1 -0
  429. package/dist/skills/providers/schema.d.ts +30 -0
  430. package/dist/skills/providers/schema.d.ts.map +1 -0
  431. package/dist/skills/providers/schema.js +354 -0
  432. package/dist/skills/providers/schema.js.map +1 -0
  433. package/dist/skills/providers/skills-sh-compat.d.ts +17 -0
  434. package/dist/skills/providers/skills-sh-compat.d.ts.map +1 -0
  435. package/dist/skills/providers/skills-sh-compat.js +71 -0
  436. package/dist/skills/providers/skills-sh-compat.js.map +1 -0
  437. package/dist/skills/providers/skills-sh-v1.d.ts +23 -0
  438. package/dist/skills/providers/skills-sh-v1.d.ts.map +1 -0
  439. package/dist/skills/providers/skills-sh-v1.js +134 -0
  440. package/dist/skills/providers/skills-sh-v1.js.map +1 -0
  441. package/dist/skills/query-builder.d.ts +18 -0
  442. package/dist/skills/query-builder.d.ts.map +1 -0
  443. package/dist/skills/query-builder.js +93 -0
  444. package/dist/skills/query-builder.js.map +1 -0
  445. package/dist/skills/source/errors.d.ts +9 -0
  446. package/dist/skills/source/errors.d.ts.map +1 -0
  447. package/dist/skills/source/errors.js +15 -0
  448. package/dist/skills/source/errors.js.map +1 -0
  449. package/dist/skills/source/frontmatter.d.ts +9 -0
  450. package/dist/skills/source/frontmatter.d.ts.map +1 -0
  451. package/dist/skills/source/frontmatter.js +77 -0
  452. package/dist/skills/source/frontmatter.js.map +1 -0
  453. package/dist/skills/source/github-fetcher.d.ts +20 -0
  454. package/dist/skills/source/github-fetcher.d.ts.map +1 -0
  455. package/dist/skills/source/github-fetcher.js +292 -0
  456. package/dist/skills/source/github-fetcher.js.map +1 -0
  457. package/dist/skills/source/snapshot-validator.d.ts +28 -0
  458. package/dist/skills/source/snapshot-validator.d.ts.map +1 -0
  459. package/dist/skills/source/snapshot-validator.js +186 -0
  460. package/dist/skills/source/snapshot-validator.js.map +1 -0
  461. package/dist/skills/store.d.ts +181 -0
  462. package/dist/skills/store.d.ts.map +1 -0
  463. package/dist/skills/store.js +1710 -0
  464. package/dist/skills/store.js.map +1 -0
  465. package/dist/skills/types.d.ts +169 -0
  466. package/dist/skills/types.d.ts.map +1 -0
  467. package/dist/skills/types.js +2 -0
  468. package/dist/skills/types.js.map +1 -0
  469. package/dist/web/i18n.d.ts +32 -0
  470. package/dist/web/i18n.d.ts.map +1 -1
  471. package/dist/web/i18n.js +128 -0
  472. package/dist/web/i18n.js.map +1 -1
  473. package/dist/web/server.d.ts.map +1 -1
  474. package/dist/web/server.js +386 -38
  475. package/dist/web/server.js.map +1 -1
  476. package/dist/web/ui.d.ts +4 -0
  477. package/dist/web/ui.d.ts.map +1 -1
  478. package/dist/web/ui.js +382 -6
  479. package/dist/web/ui.js.map +1 -1
  480. package/migrations/009_external_skill_discovery.sql +126 -0
  481. package/package.json +4 -3
  482. package/skills/kiokuko-single-purpose-functions/SKILL.md +288 -0
  483. package/skills/kiokuko-single-purpose-functions/references/kiokuko-patterns.md +344 -0
  484. package/skills/kiokuko-single-purpose-functions/references/review-checklist.md +97 -0
  485. package/skills/kiokuko-ui-design-soul/SKILL.md +1186 -28
  486. package/templates/AGENTS.md +8 -7
  487. package/dist/client/runtime-discovery.d.ts +0 -15
  488. package/dist/client/runtime-discovery.d.ts.map +0 -1
  489. package/dist/client/runtime-discovery.js +0 -45
  490. package/dist/client/runtime-discovery.js.map +0 -1
  491. package/dist/commands/call.d.ts +0 -7
  492. package/dist/commands/call.d.ts.map +0 -1
  493. package/dist/commands/call.js +0 -10
  494. package/dist/commands/call.js.map +0 -1
  495. package/dist/commands/link.d.ts +0 -6
  496. package/dist/commands/link.d.ts.map +0 -1
  497. package/dist/commands/link.js +0 -6
  498. package/dist/commands/link.js.map +0 -1
  499. package/dist/commands/promote.d.ts +0 -6
  500. package/dist/commands/promote.d.ts.map +0 -1
  501. package/dist/commands/promote.js +0 -6
  502. package/dist/commands/promote.js.map +0 -1
  503. package/dist/commands/read.d.ts +0 -6
  504. package/dist/commands/read.d.ts.map +0 -1
  505. package/dist/commands/read.js +0 -4
  506. package/dist/commands/read.js.map +0 -1
  507. package/dist/commands/recall.d.ts +0 -6
  508. package/dist/commands/recall.d.ts.map +0 -1
  509. package/dist/commands/recall.js +0 -4
  510. package/dist/commands/recall.js.map +0 -1
  511. package/dist/commands/record.d.ts +0 -6
  512. package/dist/commands/record.d.ts.map +0 -1
  513. package/dist/commands/record.js +0 -4
  514. package/dist/commands/record.js.map +0 -1
  515. package/dist/commands/search.d.ts +0 -6
  516. package/dist/commands/search.d.ts.map +0 -1
  517. package/dist/commands/search.js +0 -4
  518. package/dist/commands/search.js.map +0 -1
  519. package/dist/commands/supersede.d.ts +0 -6
  520. package/dist/commands/supersede.d.ts.map +0 -1
  521. package/dist/commands/supersede.js +0 -6
  522. package/dist/commands/supersede.js.map +0 -1
  523. package/dist/knowledge/sources.d.ts +0 -72
  524. package/dist/knowledge/sources.d.ts.map +0 -1
  525. package/dist/knowledge/sources.js +0 -388
  526. package/dist/knowledge/sources.js.map +0 -1
  527. package/dist/setup/opencode-evidence.d.ts +0 -37
  528. package/dist/setup/opencode-evidence.d.ts.map +0 -1
  529. package/dist/setup/opencode-evidence.js +0 -58
  530. package/dist/setup/opencode-evidence.js.map +0 -1
  531. package/dist/setup/opencode-loop-guard.d.ts +0 -9
  532. package/dist/setup/opencode-loop-guard.d.ts.map +0 -1
  533. package/dist/setup/opencode-loop-guard.js +0 -248
  534. package/dist/setup/opencode-loop-guard.js.map +0 -1
@@ -0,0 +1,292 @@
1
+ import { SkillSourceError, skillSourceFailure } from './errors.js';
2
+ import { parseGitHubSource, validateSkillCandidate, validateSkillSnapshot, validateSourceCommit, MAX_FILE_BYTES, MAX_FILES_PER_SKILL, MAX_PRIMARY_SKILL_BYTES, MAX_TREE_ITEMS, MAX_TOTAL_SKILL_BYTES } from './snapshot-validator.js';
3
+ import { isBearerToken, parseRetryAfterSeconds } from '../config.js';
4
+ import { reviewedCatalogSkill } from '../official-catalog.js';
5
+ import { KiokukoError } from '../../errors.js';
6
+ import { parseStrictJson } from '../../setup/strict-json.js';
7
+ import { isExternalFetchFailure } from '../external-transport.js';
8
+ export { SkillSourceError } from './errors.js';
9
+ const MAX_API_RESPONSE_BYTES = 100_000;
10
+ const MAX_TREE_RESPONSE_BYTES = 3_000_000;
11
+ const INVALID_IDENTITY_CHARACTERS = /[\p{Cc}\p{Cf}\p{Cs}\uFFFD]/u;
12
+ const INVALID_UNICODE = /[\p{Cs}\uFFFD]/u;
13
+ function safeTreePath(value) {
14
+ return value.length > 0
15
+ && value.length <= 2_000
16
+ && !value.startsWith('/')
17
+ && !value.includes('\\')
18
+ && !INVALID_IDENTITY_CHARACTERS.test(value)
19
+ && !value.split('/').some((part) => part === '' || part === '.' || part === '..');
20
+ }
21
+ function hasUnsafeMode(item) { return item.mode === '120000' || item.mode === '100755'; }
22
+ function isAllowedReferencePath(root, value) {
23
+ const prefix = root === '' ? '' : `${root.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&')}/`;
24
+ return new RegExp(`^${prefix}references/.+\\.(?:md|txt)$`, 'u').test(value)
25
+ || new RegExp(`^${prefix}docs/.+\\.md$`, 'u').test(value);
26
+ }
27
+ function sourceParts(input) {
28
+ const candidate = validateSkillCandidate(input);
29
+ const { owner, repo } = parseGitHubSource(candidate.source);
30
+ return { candidate, owner, repo };
31
+ }
32
+ function sourceFetchRequest(value) {
33
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
34
+ skillSourceFailure('skill_validation_failed');
35
+ const request = value;
36
+ if (request.purpose === 'discovery' && Object.keys(request).length === 1)
37
+ return { purpose: 'discovery' };
38
+ if (request.purpose === 'refresh' && Object.keys(request).length === 2
39
+ && typeof request.expectedPrimaryPath === 'string'
40
+ && safeTreePath(request.expectedPrimaryPath)
41
+ && (request.expectedPrimaryPath === 'SKILL.md' || request.expectedPrimaryPath.endsWith('/SKILL.md'))) {
42
+ return { purpose: 'refresh', expectedPrimaryPath: request.expectedPrimaryPath };
43
+ }
44
+ skillSourceFailure('skill_validation_failed');
45
+ }
46
+ function githubUrl(path) {
47
+ const url = new URL(path);
48
+ const allowedQuery = url.hostname === 'api.github.com' && url.search === '?recursive=1';
49
+ if (url.protocol !== 'https:' || !['api.github.com', 'raw.githubusercontent.com'].includes(url.hostname) || url.port || url.username || url.password || url.hash || url.search && !allowedQuery)
50
+ skillSourceFailure('skill_validation_failed');
51
+ return url;
52
+ }
53
+ function isRateLimited(response) {
54
+ if (response.status === 429)
55
+ return true;
56
+ if (response.status !== 403)
57
+ return false;
58
+ return response.headers.get('x-ratelimit-remaining') === '0'
59
+ || parseRetryAfterSeconds(response.headers.get('retry-after')) !== null;
60
+ }
61
+ function hasAcceptedGitHubJsonContentType(response) {
62
+ const value = response.headers.get('content-type');
63
+ if (value === null)
64
+ return false;
65
+ const parts = value.split(';');
66
+ const mediaType = parts[0]?.trim().toLowerCase();
67
+ if (parts.length > 2 || mediaType !== 'application/json' && mediaType !== 'application/vnd.github+json')
68
+ return false;
69
+ return parts.length === 1 || /^charset\s*=\s*utf-8$/iu.test(parts[1]?.trim() ?? '');
70
+ }
71
+ function validDefaultBranch(value) {
72
+ return typeof value === 'string'
73
+ && value.length >= 1
74
+ && value.length <= 200
75
+ && value === value.trim()
76
+ && /^[A-Za-z0-9._/-]+$/u.test(value)
77
+ && !value.startsWith('/')
78
+ && !value.endsWith('/')
79
+ && !value.endsWith('.')
80
+ && !value.endsWith('.lock')
81
+ && !value.includes('..')
82
+ && !value.includes('//')
83
+ && !value.includes('@{')
84
+ && !value.split('/').some((part) => part === '.' || part === '..');
85
+ }
86
+ function treeItem(value) {
87
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
88
+ skillSourceFailure('skill_validation_failed');
89
+ const item = value;
90
+ if (typeof item.path !== 'string' || !safeTreePath(item.path)
91
+ || (item.type !== 'blob' && item.type !== 'tree' && item.type !== 'commit')
92
+ || typeof item.mode !== 'string')
93
+ skillSourceFailure('skill_validation_failed');
94
+ const validMode = item.type === 'blob'
95
+ ? ['100644', '100755', '120000'].includes(item.mode)
96
+ : item.type === 'tree' ? item.mode === '040000' : item.mode === '160000';
97
+ if (!validMode)
98
+ skillSourceFailure('skill_validation_failed');
99
+ return { path: item.path, type: item.type, mode: item.mode };
100
+ }
101
+ export class GitHubSkillSourceFetcher {
102
+ fetchImpl;
103
+ #token;
104
+ timeoutMs;
105
+ constructor(options = {}) {
106
+ this.fetchImpl = options.fetchImpl ?? fetch;
107
+ this.#token = options.token ?? null;
108
+ this.timeoutMs = options.timeoutMs ?? 5_000;
109
+ if (!Number.isSafeInteger(this.timeoutMs) || this.timeoutMs < 1 || this.timeoutMs > 60_000)
110
+ throw new Error('GitHub timeout is invalid');
111
+ if (this.#token !== null && !isBearerToken(this.#token))
112
+ throw new Error('GitHub token is invalid');
113
+ }
114
+ async request(url, signal) {
115
+ try {
116
+ const safeUrl = githubUrl(url.toString());
117
+ const response = await this.fetchImpl(safeUrl, { redirect: 'manual', headers: { accept: 'application/vnd.github+json', 'user-agent': 'kiokuko-skill-discovery', ...(this.#token && safeUrl.hostname === 'api.github.com' ? { authorization: `Bearer ${this.#token}` } : {}) }, ...(signal === undefined ? {} : { signal }) });
118
+ if (response.status >= 300 && response.status < 400) {
119
+ throw new SkillSourceError('source_unavailable');
120
+ }
121
+ if (response.status === 404 || response.status === 410)
122
+ throw new SkillSourceError('source_missing');
123
+ if (isRateLimited(response))
124
+ throw new SkillSourceError('source_rate_limited', parseRetryAfterSeconds(response.headers.get('retry-after')));
125
+ if (response.status !== 200)
126
+ throw new SkillSourceError('source_unavailable');
127
+ return response;
128
+ }
129
+ catch (error) {
130
+ if (error instanceof SkillSourceError)
131
+ throw error;
132
+ if (isExternalFetchFailure(error))
133
+ throw new SkillSourceError('source_unavailable');
134
+ throw error;
135
+ }
136
+ }
137
+ async text(url, signal, limit) {
138
+ const response = await this.request(url, signal);
139
+ return this.responseText(response, limit, 'skill_too_large');
140
+ }
141
+ async responseText(response, limit, overflowCode) {
142
+ const contentLength = response.headers.get('content-length');
143
+ if (contentLength !== null && !/^\d+$/u.test(contentLength))
144
+ skillSourceFailure('skill_validation_failed');
145
+ const declared = contentLength === null ? null : Number(contentLength);
146
+ if (declared !== null && (!Number.isSafeInteger(declared) || declared > limit))
147
+ skillSourceFailure(overflowCode);
148
+ try {
149
+ const reader = response.body?.getReader();
150
+ if (!reader) {
151
+ return '';
152
+ }
153
+ const chunks = [];
154
+ let size = 0;
155
+ for (;;) {
156
+ const next = await reader.read();
157
+ if (next.done)
158
+ break;
159
+ const chunk = Buffer.from(next.value);
160
+ size += chunk.byteLength;
161
+ if (size > limit) {
162
+ await reader.cancel();
163
+ skillSourceFailure(overflowCode);
164
+ }
165
+ chunks.push(chunk);
166
+ }
167
+ let content;
168
+ try {
169
+ content = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(Buffer.concat(chunks));
170
+ }
171
+ catch {
172
+ skillSourceFailure('skill_validation_failed');
173
+ }
174
+ if (INVALID_UNICODE.test(content))
175
+ skillSourceFailure('skill_validation_failed');
176
+ return content;
177
+ }
178
+ catch (error) {
179
+ if (isExternalFetchFailure(error))
180
+ throw new SkillSourceError('source_unavailable');
181
+ throw error;
182
+ }
183
+ }
184
+ async json(url, signal, limit = MAX_API_RESPONSE_BYTES, overflowCode = 'skill_validation_failed') {
185
+ const response = await this.request(url, signal);
186
+ if (!hasAcceptedGitHubJsonContentType(response))
187
+ skillSourceFailure('skill_validation_failed');
188
+ const body = await this.responseText(response, limit, overflowCode);
189
+ try {
190
+ return parseStrictJson(body, { allowTrailingComma: false, disallowComments: true, allowEmptyContent: false }, 'GitHub source response is not valid JSON with unique keys');
191
+ }
192
+ catch (error) {
193
+ if (error instanceof KiokukoError && error.code === 'VALIDATION_ERROR')
194
+ skillSourceFailure('skill_validation_failed');
195
+ throw error;
196
+ }
197
+ }
198
+ async fetch(input, request, signal) {
199
+ const { candidate, owner, repo } = sourceParts(input);
200
+ const fetchRequest = sourceFetchRequest(request);
201
+ const controller = new AbortController();
202
+ const timer = setTimeout(() => controller.abort(), this.timeoutMs);
203
+ const onAbort = () => controller.abort();
204
+ if (signal?.aborted)
205
+ controller.abort();
206
+ else
207
+ signal?.addEventListener('abort', onAbort, { once: true });
208
+ try {
209
+ const apiBase = `https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`;
210
+ const repositoryJson = await this.json(new URL(apiBase), controller.signal);
211
+ if (typeof repositoryJson !== 'object' || repositoryJson === null || Array.isArray(repositoryJson))
212
+ skillSourceFailure('skill_validation_failed');
213
+ const defaultBranch = repositoryJson.default_branch;
214
+ if (!validDefaultBranch(defaultBranch))
215
+ skillSourceFailure('skill_validation_failed');
216
+ const commitJson = await this.json(new URL(`${apiBase}/commits/${encodeURIComponent(defaultBranch)}`), controller.signal);
217
+ if (typeof commitJson !== 'object' || commitJson === null || Array.isArray(commitJson))
218
+ skillSourceFailure('skill_validation_failed');
219
+ const sha = validateSourceCommit(commitJson.sha);
220
+ const treeJson = await this.json(new URL(`${apiBase}/git/trees/${encodeURIComponent(sha)}?recursive=1`), controller.signal, MAX_TREE_RESPONSE_BYTES, 'source_tree_truncated');
221
+ if (typeof treeJson !== 'object' || treeJson === null || Array.isArray(treeJson) || treeJson.truncated !== false || !Array.isArray(treeJson.tree))
222
+ skillSourceFailure('source_tree_truncated');
223
+ const rawTree = treeJson.tree;
224
+ if (rawTree.length > MAX_TREE_ITEMS)
225
+ skillSourceFailure('source_tree_truncated');
226
+ const tree = rawTree.map(treeItem);
227
+ const reviewedSkill = reviewedCatalogSkill(candidate);
228
+ let primary;
229
+ if (fetchRequest.purpose === 'refresh') {
230
+ const expectedMatches = tree.filter((item) => item.type === 'blob' && item.path === fetchRequest.expectedPrimaryPath);
231
+ if (expectedMatches.length > 1)
232
+ skillSourceFailure('skill_validation_failed');
233
+ primary = expectedMatches[0];
234
+ if (primary === undefined) {
235
+ const skillSuffix = `${candidate.slug}/SKILL.md`;
236
+ const movedIdentityMatches = tree.filter((item) => item.type === 'blob'
237
+ && (reviewedSkill === undefined
238
+ ? item.path === skillSuffix || item.path.endsWith(`/${skillSuffix}`)
239
+ : reviewedSkill.primaryPaths.includes(item.path)));
240
+ if (movedIdentityMatches.length > 1)
241
+ skillSourceFailure('skill_validation_failed');
242
+ primary = movedIdentityMatches[0];
243
+ }
244
+ }
245
+ else {
246
+ const skillSuffix = `${candidate.slug}/SKILL.md`;
247
+ const exactMatches = tree.filter((item) => item.type === 'blob'
248
+ && (reviewedSkill === undefined
249
+ ? item.path === skillSuffix || item.path.endsWith(`/${skillSuffix}`)
250
+ : reviewedSkill.primaryPaths.includes(item.path)));
251
+ if (exactMatches.length > 1)
252
+ skillSourceFailure('skill_validation_failed');
253
+ primary = exactMatches[0];
254
+ if (primary === undefined && reviewedSkill === undefined) {
255
+ const fuzzyMatches = tree.filter((item) => item.type === 'blob' && (item.path === 'SKILL.md' || item.path.endsWith('/SKILL.md')));
256
+ if (fuzzyMatches.length > 1)
257
+ skillSourceFailure('skill_validation_failed');
258
+ primary = fuzzyMatches[0];
259
+ }
260
+ }
261
+ if (!primary)
262
+ skillSourceFailure('candidate_not_found_at_source');
263
+ if (hasUnsafeMode(primary))
264
+ skillSourceFailure('skill_validation_failed');
265
+ const root = primary.path === 'SKILL.md' ? '' : primary.path.slice(0, -'/SKILL.md'.length);
266
+ const related = tree.filter((item) => safeTreePath(item.path) && (item.path === primary.path || isAllowedReferencePath(root, item.path)));
267
+ if (related.some(hasUnsafeMode))
268
+ skillSourceFailure('skill_validation_failed');
269
+ const paths = related.filter((item) => item.type === 'blob');
270
+ if (paths.length > MAX_FILES_PER_SKILL)
271
+ skillSourceFailure('skill_too_large');
272
+ const files = [];
273
+ let total = 0;
274
+ for (const item of paths) {
275
+ const isPrimary = item.path === primary.path;
276
+ const fileLimit = isPrimary ? MAX_PRIMARY_SKILL_BYTES : MAX_FILE_BYTES;
277
+ const remainingTotalBytes = MAX_TOTAL_SKILL_BYTES - total;
278
+ const content = await this.text(new URL(`https://raw.githubusercontent.com/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/${encodeURIComponent(sha)}/${item.path.split('/').map(encodeURIComponent).join('/')}`), controller.signal, Math.min(fileLimit, remainingTotalBytes));
279
+ total += Buffer.byteLength(content, 'utf8');
280
+ if (total > MAX_TOTAL_SKILL_BYTES)
281
+ skillSourceFailure('skill_too_large');
282
+ files.push({ path: item.path, content, primary: isPrimary });
283
+ }
284
+ return validateSkillSnapshot({ candidate, sourceCommit: sha, files });
285
+ }
286
+ finally {
287
+ clearTimeout(timer);
288
+ signal?.removeEventListener('abort', onAbort);
289
+ }
290
+ }
291
+ }
292
+ //# sourceMappingURL=github-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-fetcher.js","sourceRoot":"","sources":["../../../src/skills/source/github-fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { SkillCandidate, SkillSnapshot } from '../types.js';
2
+ export declare const MAX_TREE_ITEMS = 1000;
3
+ export declare const MAX_FILES_PER_SKILL = 20;
4
+ export declare const MAX_FILE_BYTES = 100000;
5
+ export declare const MAX_TOTAL_SKILL_BYTES = 300000;
6
+ export declare const MAX_PRIMARY_SKILL_BYTES = 150000;
7
+ export declare function parseGitHubSource(value: unknown): {
8
+ owner: string;
9
+ repo: string;
10
+ source: string;
11
+ };
12
+ export declare function validateSourceCommit(value: unknown): string;
13
+ /** Validate and canonicalize a provider candidate before any source request. */
14
+ export declare function validateSkillCandidate(value: SkillCandidate): SkillCandidate;
15
+ /** Return the skill slug represented by a verified primary SKILL.md path. */
16
+ export declare function canonicalSkillSlugFromPrimaryPath(primaryPath: string): string;
17
+ export declare function validateSkillSnapshot(input: {
18
+ candidate: SkillCandidate;
19
+ sourceCommit: string;
20
+ files: Array<{
21
+ path: string;
22
+ content: string;
23
+ primary: boolean;
24
+ }>;
25
+ }): SkillSnapshot;
26
+ /** Recompute every derived field before a snapshot crosses the persistence boundary. */
27
+ export declare function revalidateSkillSnapshot(snapshot: SkillSnapshot): SkillSnapshot;
28
+ //# sourceMappingURL=snapshot-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-validator.d.ts","sourceRoot":"","sources":["../../../src/skills/source/snapshot-validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjE,eAAO,MAAM,cAAc,OAAQ,CAAC;AACpC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,cAAc,SAAU,CAAC;AACtC,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAC7C,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAsB/C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQjG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG3D;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA8B5E;AAED,6EAA6E;AAC7E,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAS7E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,aAAa,CAoDlL;AAED,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,CAsB9E"}
@@ -0,0 +1,186 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { canonicalContentHash } from '../../serialization/validate.js';
3
+ import { skillSourceFailure } from './errors.js';
4
+ import { parseSkillFrontmatter } from './frontmatter.js';
5
+ import { findSecret } from '../../memory/secrets.js';
6
+ import { reviewedCatalogSkill } from '../official-catalog.js';
7
+ export const MAX_TREE_ITEMS = 1_000;
8
+ export const MAX_FILES_PER_SKILL = 20;
9
+ export const MAX_FILE_BYTES = 100_000;
10
+ export const MAX_TOTAL_SKILL_BYTES = 300_000;
11
+ export const MAX_PRIMARY_SKILL_BYTES = 150_000;
12
+ const OFFICIAL_STATUSES = new Set(['curated', 'catalog-verified', 'owner-verified', 'registry-only', 'unknown']);
13
+ const AUDIT_STATUSES = new Set(['not-required', 'passed', 'failed', 'unavailable']);
14
+ const FULL_COMMIT_PATTERN = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u;
15
+ const INVALID_IDENTITY_CHARACTERS = /[\p{Cc}\p{Cf}\p{Cs}\uFFFD]/u;
16
+ const INVALID_UNICODE = /[\p{Cs}\uFFFD]/u;
17
+ const CANDIDATE_FIELDS = new Set([
18
+ 'id', 'provider', 'name', 'slug', 'source', 'sourceType', 'installUrl',
19
+ 'installs', 'duplicate', 'officialStatus', 'auditStatus',
20
+ ]);
21
+ const REQUIRED_CANDIDATE_FIELDS = [...CANDIDATE_FIELDS].filter((field) => field !== 'auditStatus');
22
+ function validPath(value) {
23
+ return typeof value === 'string'
24
+ && value.length > 0
25
+ && value.length <= 2_000
26
+ && /^[A-Za-z0-9_.\-/]+$/u.test(value)
27
+ && !value.startsWith('/')
28
+ && !value.split('/').some((part) => part === '' || part === '.' || part === '..');
29
+ }
30
+ export function parseGitHubSource(value) {
31
+ if (typeof value !== 'string' || value !== value.trim())
32
+ skillSourceFailure('skill_validation_failed');
33
+ const parts = value.split('/');
34
+ if (parts.length !== 2
35
+ || parts.some((part) => part === '.' || part === '..' || !/^[A-Za-z0-9_.-]{1,100}$/u.test(part)))
36
+ skillSourceFailure('skill_validation_failed');
37
+ const owner = parts[0].toLowerCase();
38
+ const repo = parts[1].toLowerCase();
39
+ return { owner, repo, source: `${owner}/${repo}` };
40
+ }
41
+ export function validateSourceCommit(value) {
42
+ if (typeof value !== 'string' || !FULL_COMMIT_PATTERN.test(value))
43
+ skillSourceFailure('skill_validation_failed');
44
+ return value;
45
+ }
46
+ /** Validate and canonicalize a provider candidate before any source request. */
47
+ export function validateSkillCandidate(value) {
48
+ if (typeof value !== 'object' || value === null || Array.isArray(value)
49
+ || REQUIRED_CANDIDATE_FIELDS.some((field) => !Object.prototype.hasOwnProperty.call(value, field))
50
+ || Object.keys(value).some((field) => !CANDIDATE_FIELDS.has(field)))
51
+ skillSourceFailure('skill_validation_failed');
52
+ const source = parseGitHubSource(value.source).source;
53
+ const installUrl = `https://github.com/${source}`;
54
+ if (value.sourceType !== 'github'
55
+ || typeof value.provider !== 'string' || !/^[A-Za-z0-9_.-]{1,50}$/u.test(value.provider) || value.provider === '.' || value.provider === '..'
56
+ || typeof value.id !== 'string' || value.id !== value.id.trim() || value.id.length < 1 || value.id.length > 500 || INVALID_IDENTITY_CHARACTERS.test(value.id)
57
+ || typeof value.name !== 'string' || value.name !== value.name.trim() || value.name.length < 1 || value.name.length > 500 || INVALID_IDENTITY_CHARACTERS.test(value.name) || findSecret(value.name) !== undefined
58
+ || !/^[A-Za-z0-9_.\-/]{1,240}$/u.test(value.slug) || value.slug.split('/').some((part) => part === '' || part === '.' || part === '..')
59
+ || findSecret(`${source}/${value.slug}`) !== undefined
60
+ || (value.installUrl !== null && value.installUrl !== installUrl)
61
+ || !Number.isSafeInteger(value.installs) || value.installs < 0
62
+ || typeof value.duplicate !== 'boolean'
63
+ || !OFFICIAL_STATUSES.has(value.officialStatus)
64
+ || (value.auditStatus !== undefined && !AUDIT_STATUSES.has(value.auditStatus)))
65
+ skillSourceFailure('skill_validation_failed');
66
+ return {
67
+ id: value.id,
68
+ provider: value.provider,
69
+ name: value.name,
70
+ slug: value.slug,
71
+ source,
72
+ sourceType: 'github',
73
+ installUrl,
74
+ installs: value.installs,
75
+ duplicate: value.duplicate,
76
+ officialStatus: value.officialStatus,
77
+ ...(value.auditStatus === undefined ? {} : { auditStatus: value.auditStatus }),
78
+ };
79
+ }
80
+ /** Return the skill slug represented by a verified primary SKILL.md path. */
81
+ export function canonicalSkillSlugFromPrimaryPath(primaryPath) {
82
+ if (!validPath(primaryPath) || !primaryPath.endsWith('/SKILL.md'))
83
+ skillSourceFailure('skill_validation_failed');
84
+ const root = primaryPath.slice(0, -'/SKILL.md'.length);
85
+ // These are reviewed repository layouts, not aliases. Keep this list exact:
86
+ // an arbitrary parent directory must remain part of the canonical identity.
87
+ const reviewedPrefix = ['skills/', 'tools/skills/'].find((prefix) => root.startsWith(prefix));
88
+ const slug = reviewedPrefix === undefined ? root : root.slice(reviewedPrefix.length);
89
+ if (!/^[A-Za-z0-9_.\-/]{1,240}$/u.test(slug) || slug.split('/').some((part) => part === '' || part === '.' || part === '..'))
90
+ skillSourceFailure('skill_validation_failed');
91
+ return slug;
92
+ }
93
+ export function validateSkillSnapshot(input) {
94
+ const candidate = validateSkillCandidate(input.candidate);
95
+ const sourceCommit = validateSourceCommit(input.sourceCommit);
96
+ if (input.files.length === 0 || input.files.length > MAX_FILES_PER_SKILL)
97
+ skillSourceFailure('skill_validation_failed');
98
+ const primaryInputs = input.files.filter((file) => file.primary);
99
+ if (primaryInputs.length !== 1 || !validPath(primaryInputs[0].path)
100
+ || primaryInputs[0].path !== 'SKILL.md' && !primaryInputs[0].path.endsWith('/SKILL.md'))
101
+ skillSourceFailure('skill_validation_failed');
102
+ const primaryPath = primaryInputs[0].path;
103
+ const reviewedSkill = reviewedCatalogSkill(candidate);
104
+ if (reviewedSkill !== undefined && !reviewedSkill.primaryPaths.includes(primaryPath))
105
+ skillSourceFailure('skill_validation_failed');
106
+ const canonicalSlug = reviewedSkill?.slug ?? (primaryPath === 'SKILL.md' ? candidate.slug : canonicalSkillSlugFromPrimaryPath(primaryPath));
107
+ const canonicalCandidate = {
108
+ ...candidate,
109
+ slug: canonicalSlug,
110
+ id: `${candidate.provider}:${candidate.source}:${canonicalSlug}`,
111
+ };
112
+ const root = primaryPath === 'SKILL.md' ? '' : primaryPath.slice(0, -'/SKILL.md'.length);
113
+ let total = 0;
114
+ let primaryCount = 0;
115
+ const seenPaths = new Set();
116
+ const orderedFiles = [...input.files].sort((left, right) => left.path < right.path ? -1 : left.path > right.path ? 1 : 0);
117
+ const files = orderedFiles.map((file) => {
118
+ const allowedReference = (file.path.startsWith(root === '' ? 'references/' : `${root}/references/`) && /\.(?:md|txt)$/u.test(file.path))
119
+ || (file.path.startsWith(root === '' ? 'docs/' : `${root}/docs/`) && /\.md$/u.test(file.path));
120
+ if (!validPath(file.path) || (file.path !== primaryPath && !allowedReference) || file.primary !== (file.path === primaryPath))
121
+ skillSourceFailure('skill_validation_failed');
122
+ if (seenPaths.has(file.path))
123
+ skillSourceFailure('skill_validation_failed');
124
+ seenPaths.add(file.path);
125
+ if (typeof file.content !== 'string' || INVALID_UNICODE.test(file.content))
126
+ skillSourceFailure('skill_validation_failed');
127
+ const bytes = Buffer.byteLength(file.content, 'utf8');
128
+ const fileLimit = file.primary ? MAX_PRIMARY_SKILL_BYTES : MAX_FILE_BYTES;
129
+ if (bytes > fileLimit)
130
+ skillSourceFailure('skill_too_large');
131
+ if (file.content.includes('\0'))
132
+ skillSourceFailure('skill_validation_failed');
133
+ if (findSecret(file.content))
134
+ skillSourceFailure('skill_secret_detected');
135
+ total += bytes;
136
+ if (total > MAX_TOTAL_SKILL_BYTES)
137
+ skillSourceFailure('skill_too_large');
138
+ if (file.primary)
139
+ primaryCount += 1;
140
+ const contentHash = createHash('sha256').update(file.content, 'utf8').digest('hex');
141
+ return { path: file.path, content: file.content, contentHash, primary: file.primary };
142
+ });
143
+ if (primaryCount !== 1)
144
+ skillSourceFailure('skill_validation_failed');
145
+ const primary = files.find((file) => file.primary);
146
+ const frontmatter = parseSkillFrontmatter(primary.content);
147
+ if (frontmatter.disableModelInvocation)
148
+ skillSourceFailure('skill_disabled_for_model_invocation');
149
+ if (primaryPath === 'SKILL.md' && (candidate.slug.includes('/') || candidate.slug !== frontmatter.name || candidate.name !== frontmatter.name)) {
150
+ skillSourceFailure('skill_validation_failed');
151
+ }
152
+ const persistedCandidate = { ...canonicalCandidate, name: frontmatter.name };
153
+ const sourceIdentity = {
154
+ sourceType: persistedCandidate.sourceType,
155
+ source: persistedCandidate.source,
156
+ slug: persistedCandidate.slug,
157
+ };
158
+ const snapshotHash = canonicalContentHash({ source: sourceIdentity, sourceCommit, files: files.map(({ path, contentHash, primary }) => ({ path, contentHash, primary })) });
159
+ return { candidate: persistedCandidate, sourceCommit, snapshotHash, files, frontmatter };
160
+ }
161
+ /** Recompute every derived field before a snapshot crosses the persistence boundary. */
162
+ export function revalidateSkillSnapshot(snapshot) {
163
+ const verified = validateSkillSnapshot({
164
+ candidate: snapshot.candidate,
165
+ sourceCommit: snapshot.sourceCommit,
166
+ files: snapshot.files.map(({ path, content, primary }) => ({ path, content, primary })),
167
+ });
168
+ const verifiedFiles = new Map(verified.files.map((file) => [file.path, file]));
169
+ const derivedFilesMatch = snapshot.files.length === verified.files.length && snapshot.files.every((file) => {
170
+ const verifiedFile = verifiedFiles.get(file.path);
171
+ return verifiedFile !== undefined && file.contentHash === verifiedFile.contentHash && file.primary === verifiedFile.primary;
172
+ });
173
+ const frontmatterMatches = snapshot.frontmatter.name === verified.frontmatter.name
174
+ && snapshot.frontmatter.description === verified.frontmatter.description
175
+ && snapshot.frontmatter.disableModelInvocation === verified.frontmatter.disableModelInvocation;
176
+ const identityMatches = snapshot.candidate.sourceType === verified.candidate.sourceType
177
+ && snapshot.candidate.source === verified.candidate.source
178
+ && snapshot.candidate.slug === verified.candidate.slug
179
+ && snapshot.candidate.id === verified.candidate.id
180
+ && snapshot.candidate.installUrl === verified.candidate.installUrl
181
+ && snapshot.candidate.name === verified.candidate.name;
182
+ if (snapshot.snapshotHash !== verified.snapshotHash || !derivedFilesMatch || !frontmatterMatches || !identityMatches)
183
+ skillSourceFailure('skill_validation_failed');
184
+ return verified;
185
+ }
186
+ //# sourceMappingURL=snapshot-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-validator.js","sourceRoot":"","sources":["../../../src/skills/source/snapshot-validator.ts"],"names":[],"mappings":"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"}