@hashicorp/kits 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 (392) hide show
  1. package/README.md +619 -0
  2. package/bin/kits.js +8 -0
  3. package/dist/adapters/base-adapter.d.ts +231 -0
  4. package/dist/adapters/base-adapter.d.ts.map +1 -0
  5. package/dist/adapters/base-adapter.js +703 -0
  6. package/dist/adapters/base-adapter.js.map +1 -0
  7. package/dist/adapters/claude-code/detection.d.ts +63 -0
  8. package/dist/adapters/claude-code/detection.d.ts.map +1 -0
  9. package/dist/adapters/claude-code/detection.js +154 -0
  10. package/dist/adapters/claude-code/detection.js.map +1 -0
  11. package/dist/adapters/claude-code/index.d.ts +178 -0
  12. package/dist/adapters/claude-code/index.d.ts.map +1 -0
  13. package/dist/adapters/claude-code/index.js +643 -0
  14. package/dist/adapters/claude-code/index.js.map +1 -0
  15. package/dist/adapters/claude-code/installer.d.ts +161 -0
  16. package/dist/adapters/claude-code/installer.d.ts.map +1 -0
  17. package/dist/adapters/claude-code/installer.js +413 -0
  18. package/dist/adapters/claude-code/installer.js.map +1 -0
  19. package/dist/adapters/claude-code/model-mapping.d.ts +7 -0
  20. package/dist/adapters/claude-code/model-mapping.d.ts.map +1 -0
  21. package/dist/adapters/claude-code/model-mapping.js +14 -0
  22. package/dist/adapters/claude-code/model-mapping.js.map +1 -0
  23. package/dist/adapters/claude-code/tool-mapping.d.ts +18 -0
  24. package/dist/adapters/claude-code/tool-mapping.d.ts.map +1 -0
  25. package/dist/adapters/claude-code/tool-mapping.js +31 -0
  26. package/dist/adapters/claude-code/tool-mapping.js.map +1 -0
  27. package/dist/adapters/codex/detection.d.ts +60 -0
  28. package/dist/adapters/codex/detection.d.ts.map +1 -0
  29. package/dist/adapters/codex/detection.js +146 -0
  30. package/dist/adapters/codex/detection.js.map +1 -0
  31. package/dist/adapters/codex/index.d.ts +167 -0
  32. package/dist/adapters/codex/index.d.ts.map +1 -0
  33. package/dist/adapters/codex/index.js +344 -0
  34. package/dist/adapters/codex/index.js.map +1 -0
  35. package/dist/adapters/codex/installer.d.ts +147 -0
  36. package/dist/adapters/codex/installer.d.ts.map +1 -0
  37. package/dist/adapters/codex/installer.js +229 -0
  38. package/dist/adapters/codex/installer.js.map +1 -0
  39. package/dist/adapters/codex/model-mapping.d.ts +7 -0
  40. package/dist/adapters/codex/model-mapping.d.ts.map +1 -0
  41. package/dist/adapters/codex/model-mapping.js +14 -0
  42. package/dist/adapters/codex/model-mapping.js.map +1 -0
  43. package/dist/adapters/codex/tool-mapping.d.ts +19 -0
  44. package/dist/adapters/codex/tool-mapping.d.ts.map +1 -0
  45. package/dist/adapters/codex/tool-mapping.js +32 -0
  46. package/dist/adapters/codex/tool-mapping.js.map +1 -0
  47. package/dist/adapters/command-parser.d.ts +72 -0
  48. package/dist/adapters/command-parser.d.ts.map +1 -0
  49. package/dist/adapters/command-parser.js +222 -0
  50. package/dist/adapters/command-parser.js.map +1 -0
  51. package/dist/adapters/file-operations.d.ts +164 -0
  52. package/dist/adapters/file-operations.d.ts.map +1 -0
  53. package/dist/adapters/file-operations.js +526 -0
  54. package/dist/adapters/file-operations.js.map +1 -0
  55. package/dist/adapters/gemini-cli/detection.d.ts +57 -0
  56. package/dist/adapters/gemini-cli/detection.d.ts.map +1 -0
  57. package/dist/adapters/gemini-cli/detection.js +143 -0
  58. package/dist/adapters/gemini-cli/detection.js.map +1 -0
  59. package/dist/adapters/gemini-cli/index.d.ts +182 -0
  60. package/dist/adapters/gemini-cli/index.d.ts.map +1 -0
  61. package/dist/adapters/gemini-cli/index.js +598 -0
  62. package/dist/adapters/gemini-cli/index.js.map +1 -0
  63. package/dist/adapters/gemini-cli/installer.d.ts +158 -0
  64. package/dist/adapters/gemini-cli/installer.d.ts.map +1 -0
  65. package/dist/adapters/gemini-cli/installer.js +457 -0
  66. package/dist/adapters/gemini-cli/installer.js.map +1 -0
  67. package/dist/adapters/gemini-cli/model-mapping.d.ts +7 -0
  68. package/dist/adapters/gemini-cli/model-mapping.d.ts.map +1 -0
  69. package/dist/adapters/gemini-cli/model-mapping.js +14 -0
  70. package/dist/adapters/gemini-cli/model-mapping.js.map +1 -0
  71. package/dist/adapters/gemini-cli/tool-mapping.d.ts +18 -0
  72. package/dist/adapters/gemini-cli/tool-mapping.d.ts.map +1 -0
  73. package/dist/adapters/gemini-cli/tool-mapping.js +31 -0
  74. package/dist/adapters/gemini-cli/tool-mapping.js.map +1 -0
  75. package/dist/adapters/github-copilot/detection.d.ts +58 -0
  76. package/dist/adapters/github-copilot/detection.d.ts.map +1 -0
  77. package/dist/adapters/github-copilot/detection.js +144 -0
  78. package/dist/adapters/github-copilot/detection.js.map +1 -0
  79. package/dist/adapters/github-copilot/index.d.ts +203 -0
  80. package/dist/adapters/github-copilot/index.d.ts.map +1 -0
  81. package/dist/adapters/github-copilot/index.js +595 -0
  82. package/dist/adapters/github-copilot/index.js.map +1 -0
  83. package/dist/adapters/github-copilot/installer.d.ts +124 -0
  84. package/dist/adapters/github-copilot/installer.d.ts.map +1 -0
  85. package/dist/adapters/github-copilot/installer.js +343 -0
  86. package/dist/adapters/github-copilot/installer.js.map +1 -0
  87. package/dist/adapters/github-copilot/model-mapping.d.ts +7 -0
  88. package/dist/adapters/github-copilot/model-mapping.d.ts.map +1 -0
  89. package/dist/adapters/github-copilot/model-mapping.js +14 -0
  90. package/dist/adapters/github-copilot/model-mapping.js.map +1 -0
  91. package/dist/adapters/github-copilot/tool-mapping.d.ts +18 -0
  92. package/dist/adapters/github-copilot/tool-mapping.d.ts.map +1 -0
  93. package/dist/adapters/github-copilot/tool-mapping.js +31 -0
  94. package/dist/adapters/github-copilot/tool-mapping.js.map +1 -0
  95. package/dist/adapters/index.d.ts +39 -0
  96. package/dist/adapters/index.d.ts.map +1 -0
  97. package/dist/adapters/index.js +76 -0
  98. package/dist/adapters/index.js.map +1 -0
  99. package/dist/adapters/interface.d.ts +9 -0
  100. package/dist/adapters/interface.d.ts.map +1 -0
  101. package/dist/adapters/interface.js +8 -0
  102. package/dist/adapters/interface.js.map +1 -0
  103. package/dist/adapters/model-templating.d.ts +16 -0
  104. package/dist/adapters/model-templating.d.ts.map +1 -0
  105. package/dist/adapters/model-templating.js +52 -0
  106. package/dist/adapters/model-templating.js.map +1 -0
  107. package/dist/adapters/opencode/detection.d.ts +57 -0
  108. package/dist/adapters/opencode/detection.d.ts.map +1 -0
  109. package/dist/adapters/opencode/detection.js +140 -0
  110. package/dist/adapters/opencode/detection.js.map +1 -0
  111. package/dist/adapters/opencode/index.d.ts +168 -0
  112. package/dist/adapters/opencode/index.d.ts.map +1 -0
  113. package/dist/adapters/opencode/index.js +494 -0
  114. package/dist/adapters/opencode/index.js.map +1 -0
  115. package/dist/adapters/opencode/installer.d.ts +91 -0
  116. package/dist/adapters/opencode/installer.d.ts.map +1 -0
  117. package/dist/adapters/opencode/installer.js +290 -0
  118. package/dist/adapters/opencode/installer.js.map +1 -0
  119. package/dist/adapters/opencode/model-mapping.d.ts +7 -0
  120. package/dist/adapters/opencode/model-mapping.d.ts.map +1 -0
  121. package/dist/adapters/opencode/model-mapping.js +14 -0
  122. package/dist/adapters/opencode/model-mapping.js.map +1 -0
  123. package/dist/adapters/opencode/tool-mapping.d.ts +18 -0
  124. package/dist/adapters/opencode/tool-mapping.d.ts.map +1 -0
  125. package/dist/adapters/opencode/tool-mapping.js +31 -0
  126. package/dist/adapters/opencode/tool-mapping.js.map +1 -0
  127. package/dist/adapters/registry.d.ts +154 -0
  128. package/dist/adapters/registry.d.ts.map +1 -0
  129. package/dist/adapters/registry.js +223 -0
  130. package/dist/adapters/registry.js.map +1 -0
  131. package/dist/adapters/skill-frontmatter.d.ts +34 -0
  132. package/dist/adapters/skill-frontmatter.d.ts.map +1 -0
  133. package/dist/adapters/skill-frontmatter.js +110 -0
  134. package/dist/adapters/skill-frontmatter.js.map +1 -0
  135. package/dist/adapters/subagent-frontmatter.d.ts +22 -0
  136. package/dist/adapters/subagent-frontmatter.d.ts.map +1 -0
  137. package/dist/adapters/subagent-frontmatter.js +80 -0
  138. package/dist/adapters/subagent-frontmatter.js.map +1 -0
  139. package/dist/adapters/tool-templating.d.ts +162 -0
  140. package/dist/adapters/tool-templating.d.ts.map +1 -0
  141. package/dist/adapters/tool-templating.js +273 -0
  142. package/dist/adapters/tool-templating.js.map +1 -0
  143. package/dist/adapters/types.d.ts +347 -0
  144. package/dist/adapters/types.d.ts.map +1 -0
  145. package/dist/adapters/types.js +33 -0
  146. package/dist/adapters/types.js.map +1 -0
  147. package/dist/cli/index.d.ts +10 -0
  148. package/dist/cli/index.d.ts.map +1 -0
  149. package/dist/cli/index.js +261 -0
  150. package/dist/cli/index.js.map +1 -0
  151. package/dist/cli/info.d.ts +20 -0
  152. package/dist/cli/info.d.ts.map +1 -0
  153. package/dist/cli/info.js +194 -0
  154. package/dist/cli/info.js.map +1 -0
  155. package/dist/cli/install.d.ts +21 -0
  156. package/dist/cli/install.d.ts.map +1 -0
  157. package/dist/cli/install.js +1624 -0
  158. package/dist/cli/install.js.map +1 -0
  159. package/dist/cli/list.d.ts +19 -0
  160. package/dist/cli/list.d.ts.map +1 -0
  161. package/dist/cli/list.js +216 -0
  162. package/dist/cli/list.js.map +1 -0
  163. package/dist/cli/types.d.ts +246 -0
  164. package/dist/cli/types.d.ts.map +1 -0
  165. package/dist/cli/types.js +25 -0
  166. package/dist/cli/types.js.map +1 -0
  167. package/dist/cli/uninstall.d.ts +20 -0
  168. package/dist/cli/uninstall.d.ts.map +1 -0
  169. package/dist/cli/uninstall.js +393 -0
  170. package/dist/cli/uninstall.js.map +1 -0
  171. package/dist/cli/upgrade.d.ts +20 -0
  172. package/dist/cli/upgrade.d.ts.map +1 -0
  173. package/dist/cli/upgrade.js +372 -0
  174. package/dist/cli/upgrade.js.map +1 -0
  175. package/dist/cli/validate.d.ts +14 -0
  176. package/dist/cli/validate.d.ts.map +1 -0
  177. package/dist/cli/validate.js +307 -0
  178. package/dist/cli/validate.js.map +1 -0
  179. package/dist/core/debug.d.ts +23 -0
  180. package/dist/core/debug.d.ts.map +1 -0
  181. package/dist/core/debug.js +69 -0
  182. package/dist/core/debug.js.map +1 -0
  183. package/dist/core/hook-instance.d.ts +8 -0
  184. package/dist/core/hook-instance.d.ts.map +1 -0
  185. package/dist/core/hook-instance.js +62 -0
  186. package/dist/core/hook-instance.js.map +1 -0
  187. package/dist/core/mcp-instance.d.ts +13 -0
  188. package/dist/core/mcp-instance.d.ts.map +1 -0
  189. package/dist/core/mcp-instance.js +80 -0
  190. package/dist/core/mcp-instance.js.map +1 -0
  191. package/dist/core/types.d.ts +461 -0
  192. package/dist/core/types.d.ts.map +1 -0
  193. package/dist/core/types.js +42 -0
  194. package/dist/core/types.js.map +1 -0
  195. package/dist/core/upgrade-executor.d.ts +70 -0
  196. package/dist/core/upgrade-executor.d.ts.map +1 -0
  197. package/dist/core/upgrade-executor.js +368 -0
  198. package/dist/core/upgrade-executor.js.map +1 -0
  199. package/dist/discovery/fetcher-registry.d.ts +87 -0
  200. package/dist/discovery/fetcher-registry.d.ts.map +1 -0
  201. package/dist/discovery/fetcher-registry.js +119 -0
  202. package/dist/discovery/fetcher-registry.js.map +1 -0
  203. package/dist/discovery/git-fetcher.d.ts +61 -0
  204. package/dist/discovery/git-fetcher.d.ts.map +1 -0
  205. package/dist/discovery/git-fetcher.js +150 -0
  206. package/dist/discovery/git-fetcher.js.map +1 -0
  207. package/dist/discovery/index.d.ts +13 -0
  208. package/dist/discovery/index.d.ts.map +1 -0
  209. package/dist/discovery/index.js +15 -0
  210. package/dist/discovery/index.js.map +1 -0
  211. package/dist/discovery/kit-scanner.d.ts +55 -0
  212. package/dist/discovery/kit-scanner.d.ts.map +1 -0
  213. package/dist/discovery/kit-scanner.js +305 -0
  214. package/dist/discovery/kit-scanner.js.map +1 -0
  215. package/dist/discovery/local-fetcher.d.ts +38 -0
  216. package/dist/discovery/local-fetcher.d.ts.map +1 -0
  217. package/dist/discovery/local-fetcher.js +100 -0
  218. package/dist/discovery/local-fetcher.js.map +1 -0
  219. package/dist/discovery/source-parser.d.ts +33 -0
  220. package/dist/discovery/source-parser.d.ts.map +1 -0
  221. package/dist/discovery/source-parser.js +136 -0
  222. package/dist/discovery/source-parser.js.map +1 -0
  223. package/dist/discovery/types.d.ts +145 -0
  224. package/dist/discovery/types.d.ts.map +1 -0
  225. package/dist/discovery/types.js +18 -0
  226. package/dist/discovery/types.js.map +1 -0
  227. package/dist/index.d.ts +13 -0
  228. package/dist/index.d.ts.map +1 -0
  229. package/dist/index.js +19 -0
  230. package/dist/index.js.map +1 -0
  231. package/dist/manifest/index.d.ts +79 -0
  232. package/dist/manifest/index.d.ts.map +1 -0
  233. package/dist/manifest/index.js +200 -0
  234. package/dist/manifest/index.js.map +1 -0
  235. package/dist/manifest/read.d.ts +32 -0
  236. package/dist/manifest/read.d.ts.map +1 -0
  237. package/dist/manifest/read.js +88 -0
  238. package/dist/manifest/read.js.map +1 -0
  239. package/dist/manifest/types.d.ts +119 -0
  240. package/dist/manifest/types.d.ts.map +1 -0
  241. package/dist/manifest/types.js +44 -0
  242. package/dist/manifest/types.js.map +1 -0
  243. package/dist/manifest/upgrade-check.d.ts +72 -0
  244. package/dist/manifest/upgrade-check.d.ts.map +1 -0
  245. package/dist/manifest/upgrade-check.js +215 -0
  246. package/dist/manifest/upgrade-check.js.map +1 -0
  247. package/dist/manifest/utils.d.ts +35 -0
  248. package/dist/manifest/utils.d.ts.map +1 -0
  249. package/dist/manifest/utils.js +57 -0
  250. package/dist/manifest/utils.js.map +1 -0
  251. package/dist/manifest/write.d.ts +44 -0
  252. package/dist/manifest/write.d.ts.map +1 -0
  253. package/dist/manifest/write.js +77 -0
  254. package/dist/manifest/write.js.map +1 -0
  255. package/dist/resolution/env-resolver.d.ts +81 -0
  256. package/dist/resolution/env-resolver.d.ts.map +1 -0
  257. package/dist/resolution/env-resolver.js +233 -0
  258. package/dist/resolution/env-resolver.js.map +1 -0
  259. package/dist/resolution/index.d.ts +55 -0
  260. package/dist/resolution/index.d.ts.map +1 -0
  261. package/dist/resolution/index.js +412 -0
  262. package/dist/resolution/index.js.map +1 -0
  263. package/dist/resolution/multi-kit-resolver.d.ts +43 -0
  264. package/dist/resolution/multi-kit-resolver.d.ts.map +1 -0
  265. package/dist/resolution/multi-kit-resolver.js +258 -0
  266. package/dist/resolution/multi-kit-resolver.js.map +1 -0
  267. package/dist/resolution/primitive-paths.d.ts +17 -0
  268. package/dist/resolution/primitive-paths.d.ts.map +1 -0
  269. package/dist/resolution/primitive-paths.js +59 -0
  270. package/dist/resolution/primitive-paths.js.map +1 -0
  271. package/dist/resolution/primitives-registry.d.ts +137 -0
  272. package/dist/resolution/primitives-registry.d.ts.map +1 -0
  273. package/dist/resolution/primitives-registry.js +295 -0
  274. package/dist/resolution/primitives-registry.js.map +1 -0
  275. package/dist/resolution/reference-parser.d.ts +62 -0
  276. package/dist/resolution/reference-parser.d.ts.map +1 -0
  277. package/dist/resolution/reference-parser.js +182 -0
  278. package/dist/resolution/reference-parser.js.map +1 -0
  279. package/dist/resolution/types.d.ts +77 -0
  280. package/dist/resolution/types.d.ts.map +1 -0
  281. package/dist/resolution/types.js +13 -0
  282. package/dist/resolution/types.js.map +1 -0
  283. package/dist/resolution/version-resolver.d.ts +76 -0
  284. package/dist/resolution/version-resolver.d.ts.map +1 -0
  285. package/dist/resolution/version-resolver.js +269 -0
  286. package/dist/resolution/version-resolver.js.map +1 -0
  287. package/dist/tui/compatibility.d.ts +80 -0
  288. package/dist/tui/compatibility.d.ts.map +1 -0
  289. package/dist/tui/compatibility.js +355 -0
  290. package/dist/tui/compatibility.js.map +1 -0
  291. package/dist/tui/env-prompt.d.ts +129 -0
  292. package/dist/tui/env-prompt.d.ts.map +1 -0
  293. package/dist/tui/env-prompt.js +488 -0
  294. package/dist/tui/env-prompt.js.map +1 -0
  295. package/dist/tui/harness-select.d.ts +54 -0
  296. package/dist/tui/harness-select.d.ts.map +1 -0
  297. package/dist/tui/harness-select.js +171 -0
  298. package/dist/tui/harness-select.js.map +1 -0
  299. package/dist/tui/index.d.ts +112 -0
  300. package/dist/tui/index.d.ts.map +1 -0
  301. package/dist/tui/index.js +213 -0
  302. package/dist/tui/index.js.map +1 -0
  303. package/dist/tui/kit-select.d.ts +72 -0
  304. package/dist/tui/kit-select.d.ts.map +1 -0
  305. package/dist/tui/kit-select.js +209 -0
  306. package/dist/tui/kit-select.js.map +1 -0
  307. package/dist/tui/progress.d.ts +75 -0
  308. package/dist/tui/progress.d.ts.map +1 -0
  309. package/dist/tui/progress.js +267 -0
  310. package/dist/tui/progress.js.map +1 -0
  311. package/dist/tui/resolution.d.ts +62 -0
  312. package/dist/tui/resolution.d.ts.map +1 -0
  313. package/dist/tui/resolution.js +261 -0
  314. package/dist/tui/resolution.js.map +1 -0
  315. package/dist/tui/scope-compatibility.d.ts +139 -0
  316. package/dist/tui/scope-compatibility.d.ts.map +1 -0
  317. package/dist/tui/scope-compatibility.js +230 -0
  318. package/dist/tui/scope-compatibility.js.map +1 -0
  319. package/dist/tui/scope-select.d.ts +67 -0
  320. package/dist/tui/scope-select.d.ts.map +1 -0
  321. package/dist/tui/scope-select.js +134 -0
  322. package/dist/tui/scope-select.js.map +1 -0
  323. package/dist/tui/spinner.d.ts +114 -0
  324. package/dist/tui/spinner.d.ts.map +1 -0
  325. package/dist/tui/spinner.js +186 -0
  326. package/dist/tui/spinner.js.map +1 -0
  327. package/dist/tui/summary.d.ts +71 -0
  328. package/dist/tui/summary.d.ts.map +1 -0
  329. package/dist/tui/summary.js +343 -0
  330. package/dist/tui/summary.js.map +1 -0
  331. package/dist/tui/types.d.ts +234 -0
  332. package/dist/tui/types.d.ts.map +1 -0
  333. package/dist/tui/types.js +7 -0
  334. package/dist/tui/types.js.map +1 -0
  335. package/dist/tui/upgrade-select.d.ts +73 -0
  336. package/dist/tui/upgrade-select.d.ts.map +1 -0
  337. package/dist/tui/upgrade-select.js +324 -0
  338. package/dist/tui/upgrade-select.js.map +1 -0
  339. package/dist/validation/index.d.ts +13 -0
  340. package/dist/validation/index.d.ts.map +1 -0
  341. package/dist/validation/index.js +13 -0
  342. package/dist/validation/index.js.map +1 -0
  343. package/dist/validation/source.d.ts +14 -0
  344. package/dist/validation/source.d.ts.map +1 -0
  345. package/dist/validation/source.js +51 -0
  346. package/dist/validation/source.js.map +1 -0
  347. package/dist/validation/utils.d.ts +29 -0
  348. package/dist/validation/utils.d.ts.map +1 -0
  349. package/dist/validation/utils.js +89 -0
  350. package/dist/validation/utils.js.map +1 -0
  351. package/dist/validation/validate-commands.d.ts +28 -0
  352. package/dist/validation/validate-commands.d.ts.map +1 -0
  353. package/dist/validation/validate-commands.js +151 -0
  354. package/dist/validation/validate-commands.js.map +1 -0
  355. package/dist/validation/validate-hooks.d.ts +13 -0
  356. package/dist/validation/validate-hooks.d.ts.map +1 -0
  357. package/dist/validation/validate-hooks.js +272 -0
  358. package/dist/validation/validate-hooks.js.map +1 -0
  359. package/dist/validation/validate-kits.d.ts +15 -0
  360. package/dist/validation/validate-kits.d.ts.map +1 -0
  361. package/dist/validation/validate-kits.js +185 -0
  362. package/dist/validation/validate-kits.js.map +1 -0
  363. package/dist/validation/validate-mcp.d.ts +12 -0
  364. package/dist/validation/validate-mcp.d.ts.map +1 -0
  365. package/dist/validation/validate-mcp.js +132 -0
  366. package/dist/validation/validate-mcp.js.map +1 -0
  367. package/dist/validation/validate-skills.d.ts +24 -0
  368. package/dist/validation/validate-skills.d.ts.map +1 -0
  369. package/dist/validation/validate-skills.js +223 -0
  370. package/dist/validation/validate-skills.js.map +1 -0
  371. package/dist/validation/validate-subagents.d.ts +27 -0
  372. package/dist/validation/validate-subagents.d.ts.map +1 -0
  373. package/dist/validation/validate-subagents.js +269 -0
  374. package/dist/validation/validate-subagents.js.map +1 -0
  375. package/package.json +91 -0
  376. package/schemas/command.schema.json +23 -0
  377. package/schemas/examples/hook-binding-valid.json +20 -0
  378. package/schemas/examples/hook-program-valid.json +25 -0
  379. package/schemas/examples/http-server-valid.json +82 -0
  380. package/schemas/examples/invalid-sensitive-header-no-envvar.json +16 -0
  381. package/schemas/examples/invalid-sensitive-header-with-value.json +17 -0
  382. package/schemas/examples/invalid-sensitive-var-with-default.json +19 -0
  383. package/schemas/examples/stdio-server-valid.json +55 -0
  384. package/schemas/hook-binding.schema.json +63 -0
  385. package/schemas/hook-program.schema.json +104 -0
  386. package/schemas/kit.schema.json +338 -0
  387. package/schemas/kits.schema.json +117 -0
  388. package/schemas/manifest.schema.json +200 -0
  389. package/schemas/mcp-server.schema.json +305 -0
  390. package/schemas/primitives.schema.json +118 -0
  391. package/schemas/skill.schema.json +96 -0
  392. package/schemas/subagent.schema.json +107 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Command primitive validation script.
3
+ *
4
+ * Validates all command files in a kit repository against
5
+ * the canonical format specification:
6
+ * - YAML frontmatter required
7
+ * - `description` field required and non-empty
8
+ * - `argumentHint` field optional but must be string if present
9
+ * - Body content required and non-empty
10
+ *
11
+ * Exits with code 0 on success, 1 on validation failure.
12
+ */
13
+ import { type ValidationSummary } from "./utils.js";
14
+ /**
15
+ * Validate all command files in a kit repository.
16
+ *
17
+ * @param agentKitsPath - Path to kit repository
18
+ * @returns Validation summary with results for each file
19
+ */
20
+ export declare function validateCommands(agentKitsPath: string): Promise<ValidationSummary>;
21
+ /**
22
+ * Main entry point for CLI execution.
23
+ *
24
+ * @param args - Command line arguments
25
+ * @returns Exit code (0 = success, 1 = failure)
26
+ */
27
+ export declare function main(args: string[]): Promise<number>;
28
+ //# sourceMappingURL=validate-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-commands.d.ts","sourceRoot":"","sources":["../../src/validation/validate-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAkEpB;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAU5B;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoE1D"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Command primitive validation script.
3
+ *
4
+ * Validates all command files in a kit repository against
5
+ * the canonical format specification:
6
+ * - YAML frontmatter required
7
+ * - `description` field required and non-empty
8
+ * - `argumentHint` field optional but must be string if present
9
+ * - Body content required and non-empty
10
+ *
11
+ * Exits with code 0 on success, 1 on validation failure.
12
+ */
13
+ import * as fs from "fs/promises";
14
+ import * as path from "path";
15
+ import { fileURLToPath } from "node:url";
16
+ import { parseCommandFrontmatter, CommandParseError, } from "../adapters/command-parser.js";
17
+ import pc from "picocolors";
18
+ import { formatValidationSourceError, resolveValidationSource, } from "./source.js";
19
+ import { findMarkdownFiles, summarizeResults, printValidationResults, } from "./utils.js";
20
+ /**
21
+ * Find all command files in a kit repository.
22
+ *
23
+ * Searches for:
24
+ * - Shared primitives: primitives/commands/{name}/v{version}/{name}.md
25
+ * - Inline kit primitives: kits/{kit}/primitives/commands/{name}.md
26
+ *
27
+ * @param agentKitsPath - Path to kit repository
28
+ * @returns Array of absolute paths to command files
29
+ */
30
+ async function findCommandFiles(agentKitsPath) {
31
+ const commandFiles = [];
32
+ // Find shared primitive commands
33
+ const sharedCommandsDir = path.join(agentKitsPath, "primitives/commands");
34
+ const sharedFiles = await findMarkdownFiles(sharedCommandsDir);
35
+ commandFiles.push(...sharedFiles);
36
+ // Find inline kit commands - iterate through kits directory
37
+ const kitsDir = path.join(agentKitsPath, "kits");
38
+ try {
39
+ const kitEntries = await fs.readdir(kitsDir, { withFileTypes: true });
40
+ for (const kitEntry of kitEntries) {
41
+ if (kitEntry.isDirectory()) {
42
+ const kitCommandsDir = path.join(kitsDir, kitEntry.name, "primitives/commands");
43
+ const kitFiles = await findMarkdownFiles(kitCommandsDir);
44
+ commandFiles.push(...kitFiles);
45
+ }
46
+ }
47
+ }
48
+ catch {
49
+ // kits directory doesn't exist - ignore
50
+ }
51
+ return commandFiles;
52
+ }
53
+ /**
54
+ * Validate a single command file.
55
+ *
56
+ * @param filePath - Absolute path to command file
57
+ * @returns Validation result
58
+ */
59
+ async function validateCommandFile(filePath) {
60
+ try {
61
+ const content = await fs.readFile(filePath, "utf-8");
62
+ parseCommandFrontmatter(content);
63
+ return { file: filePath, valid: true };
64
+ }
65
+ catch (error) {
66
+ const errorMessage = error instanceof CommandParseError
67
+ ? error.message
68
+ : error instanceof Error
69
+ ? error.message
70
+ : String(error);
71
+ return { file: filePath, valid: false, error: errorMessage };
72
+ }
73
+ }
74
+ /**
75
+ * Validate all command files in a kit repository.
76
+ *
77
+ * @param agentKitsPath - Path to kit repository
78
+ * @returns Validation summary with results for each file
79
+ */
80
+ export async function validateCommands(agentKitsPath) {
81
+ const commandFiles = await findCommandFiles(agentKitsPath);
82
+ const results = [];
83
+ for (const file of commandFiles) {
84
+ const result = await validateCommandFile(file);
85
+ results.push(result);
86
+ }
87
+ return summarizeResults(results);
88
+ }
89
+ /**
90
+ * Main entry point for CLI execution.
91
+ *
92
+ * @param args - Command line arguments
93
+ * @returns Exit code (0 = success, 1 = failure)
94
+ */
95
+ export async function main(args) {
96
+ // Use provided source or fall back to local test-kits if present.
97
+ let source = args[0];
98
+ if (!source) {
99
+ const scriptDir = path.dirname(fileURLToPath(import.meta.url));
100
+ const fallbackPath = path.resolve(scriptDir, "../../test-kits");
101
+ try {
102
+ const stat = await fs.stat(fallbackPath);
103
+ if (stat.isDirectory()) {
104
+ source = fallbackPath;
105
+ }
106
+ }
107
+ catch {
108
+ source = undefined;
109
+ }
110
+ }
111
+ // Resolve to absolute path
112
+ if (!source) {
113
+ console.error(pc.red("Error: no kit repository path provided"));
114
+ console.error(pc.dim("Usage: validate-commands <path-to-kits-repo | org/repo[@ref]>"));
115
+ return 1;
116
+ }
117
+ let fetchResult;
118
+ try {
119
+ fetchResult = await resolveValidationSource(source);
120
+ }
121
+ catch (error) {
122
+ const message = formatValidationSourceError(error);
123
+ console.error(pc.red(`Error: ${message}`));
124
+ console.error(pc.dim("Usage: validate-commands <path-to-kits-repo | org/repo[@ref]>"));
125
+ return 1;
126
+ }
127
+ const agentKitsPath = fetchResult.localPath;
128
+ console.log(pc.dim(`Validating commands in: ${agentKitsPath}`));
129
+ try {
130
+ const summary = await validateCommands(agentKitsPath);
131
+ printValidationResults("Command Primitive Validation", summary, agentKitsPath);
132
+ if (summary.failed > 0) {
133
+ console.error(pc.red(`Validation failed: ${summary.failed} command(s) have invalid format`));
134
+ return 1;
135
+ }
136
+ if (summary.total === 0) {
137
+ console.log(pc.yellow("Warning: No command files found"));
138
+ return 0;
139
+ }
140
+ console.log(pc.green("All command files are valid"));
141
+ return 0;
142
+ }
143
+ catch (error) {
144
+ console.error(pc.red(`Error during validation: ${error}`));
145
+ return 1;
146
+ }
147
+ finally {
148
+ await fetchResult.cleanup?.();
149
+ }
150
+ }
151
+ //# sourceMappingURL=validate-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-commands.js","sourceRoot":"","sources":["../../src/validation/validate-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Hook program primitive validation script.
3
+ *
4
+ * Validates all hook config.json files in a kit repository against
5
+ * the canonical hook program JSON schema and ensures the runtime
6
+ * entrypoint file exists alongside the config.
7
+ */
8
+ import { type ValidationSummary } from "./utils.js";
9
+ export declare function validateHooks(agentKitsPath: string, options?: {
10
+ schemaRoot?: string;
11
+ }): Promise<ValidationSummary>;
12
+ export declare function main(args: string[]): Promise<number>;
13
+ //# sourceMappingURL=validate-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-hooks.d.ts","sourceRoot":"","sources":["../../src/validation/validate-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAsMpB,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,OAAO,CAAC,iBAAiB,CAAC,CAqC5B;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkE1D"}
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Hook program primitive validation script.
3
+ *
4
+ * Validates all hook config.json files in a kit repository against
5
+ * the canonical hook program JSON schema and ensures the runtime
6
+ * entrypoint file exists alongside the config.
7
+ */
8
+ import * as fs from "fs/promises";
9
+ import * as path from "path";
10
+ import { fileURLToPath } from "node:url";
11
+ import { Ajv2020 } from "ajv/dist/2020.js";
12
+ import addFormats from "ajv-formats";
13
+ import draft7MetaSchema from "ajv/dist/refs/json-schema-draft-07.json" with { type: "json" };
14
+ import pc from "picocolors";
15
+ import { formatValidationSourceError, resolveValidationSource, } from "./source.js";
16
+ import { findFilesByName, summarizeResults, printValidationResults, } from "./utils.js";
17
+ async function findKitFiles(agentKitsPath) {
18
+ const files = [];
19
+ const rootKitPath = path.join(agentKitsPath, "kit.json");
20
+ try {
21
+ const stat = await fs.stat(rootKitPath);
22
+ if (stat.isFile()) {
23
+ files.push(rootKitPath);
24
+ }
25
+ }
26
+ catch {
27
+ // root kit.json doesn't exist - ignore
28
+ }
29
+ const kitsDir = path.join(agentKitsPath, "kits");
30
+ try {
31
+ const kitEntries = await fs.readdir(kitsDir, { withFileTypes: true });
32
+ for (const kitEntry of kitEntries) {
33
+ if (!kitEntry.isDirectory()) {
34
+ continue;
35
+ }
36
+ const kitPath = path.join(kitsDir, kitEntry.name, "kit.json");
37
+ try {
38
+ const stat = await fs.stat(kitPath);
39
+ if (stat.isFile()) {
40
+ files.push(kitPath);
41
+ }
42
+ }
43
+ catch {
44
+ // kit.json missing - ignore
45
+ }
46
+ }
47
+ }
48
+ catch {
49
+ // kits directory doesn't exist - ignore
50
+ }
51
+ return files;
52
+ }
53
+ async function findHookConfigFiles(agentKitsPath) {
54
+ const files = [];
55
+ const sharedHooksDir = path.join(agentKitsPath, "primitives/hooks");
56
+ files.push(...(await findFilesByName(sharedHooksDir, "config.json")));
57
+ const kitsDir = path.join(agentKitsPath, "kits");
58
+ try {
59
+ const kitEntries = await fs.readdir(kitsDir, { withFileTypes: true });
60
+ for (const kitEntry of kitEntries) {
61
+ if (!kitEntry.isDirectory()) {
62
+ continue;
63
+ }
64
+ const kitHooksDir = path.join(kitsDir, kitEntry.name, "primitives/hooks");
65
+ files.push(...(await findFilesByName(kitHooksDir, "config.json")));
66
+ }
67
+ }
68
+ catch {
69
+ // kits directory doesn't exist - ignore
70
+ }
71
+ return files;
72
+ }
73
+ async function validateKitHookBindings(filePath, validateBinding) {
74
+ try {
75
+ const content = await fs.readFile(filePath, "utf-8");
76
+ const data = JSON.parse(content);
77
+ const primitives = data["primitives"];
78
+ const hooks = primitives?.["hooks"];
79
+ if (hooks === undefined) {
80
+ return { file: filePath, valid: true };
81
+ }
82
+ if (!Array.isArray(hooks)) {
83
+ return {
84
+ file: filePath,
85
+ valid: false,
86
+ error: "kit primitives.hooks must be an array when present",
87
+ };
88
+ }
89
+ const errors = [];
90
+ hooks.forEach((entry, index) => {
91
+ if (!entry || typeof entry !== "object") {
92
+ errors.push(`primitives.hooks[${index}] must be an object`);
93
+ return;
94
+ }
95
+ const binding = entry["binding"];
96
+ if (!binding || typeof binding !== "object") {
97
+ errors.push(`primitives.hooks[${index}].binding must be an object`);
98
+ return;
99
+ }
100
+ const valid = validateBinding(binding);
101
+ if (!valid) {
102
+ const bindingErrors = (validateBinding.errors ?? []);
103
+ const errorText = bindingErrors
104
+ .map((err) => {
105
+ const instancePath = err.instancePath ? `${err.instancePath} ` : "";
106
+ return `${instancePath}${err.message ?? "schema validation error"}`;
107
+ })
108
+ .join("; ");
109
+ errors.push(`primitives.hooks[${index}].binding: ${errorText}`);
110
+ }
111
+ const event = binding["event"];
112
+ if (event === "tool.before" || event === "tool.after") {
113
+ const matcher = binding["matcher"];
114
+ const matcherObj = matcher && typeof matcher === "object"
115
+ ? matcher
116
+ : undefined;
117
+ const hasMatcherField = matcherObj
118
+ ? ["tool", "command_pattern", "file_pattern", "prompt_pattern"].some((key) => typeof matcherObj[key] === "string" && matcherObj[key]?.length)
119
+ : false;
120
+ if (!hasMatcherField) {
121
+ errors.push(`primitives.hooks[${index}].binding: matcher is required for ${event} events`);
122
+ }
123
+ }
124
+ });
125
+ if (errors.length > 0) {
126
+ return {
127
+ file: filePath,
128
+ valid: false,
129
+ error: `Hook binding validation failed: ${errors.join(" | ")}`,
130
+ };
131
+ }
132
+ return { file: filePath, valid: true };
133
+ }
134
+ catch (error) {
135
+ const errorMessage = error instanceof Error ? error.message : String(error);
136
+ return { file: filePath, valid: false, error: errorMessage };
137
+ }
138
+ }
139
+ async function validateHookFile(filePath, validateSchema) {
140
+ try {
141
+ const content = await fs.readFile(filePath, "utf-8");
142
+ const data = JSON.parse(content);
143
+ const valid = validateSchema(data);
144
+ if (!valid) {
145
+ const errors = (validateSchema.errors ?? []);
146
+ const errorText = errors
147
+ .map((err) => {
148
+ const instancePath = err.instancePath ? `${err.instancePath} ` : "";
149
+ return `${instancePath}${err.message ?? "schema validation error"}`;
150
+ })
151
+ .join("; ");
152
+ return {
153
+ file: filePath,
154
+ valid: false,
155
+ error: `Schema validation failed: ${errorText}`,
156
+ };
157
+ }
158
+ const runtime = data["runtime"];
159
+ const entrypoint = runtime?.["entrypoint"];
160
+ if (typeof entrypoint === "string" && entrypoint.length > 0) {
161
+ const entryPath = path.join(path.dirname(filePath), entrypoint);
162
+ try {
163
+ const stat = await fs.stat(entryPath);
164
+ if (!stat.isFile()) {
165
+ return {
166
+ file: filePath,
167
+ valid: false,
168
+ error: `Hook entrypoint is not a file: ${entrypoint}`,
169
+ };
170
+ }
171
+ }
172
+ catch {
173
+ return {
174
+ file: filePath,
175
+ valid: false,
176
+ error: `Hook entrypoint not found: ${entrypoint}`,
177
+ };
178
+ }
179
+ }
180
+ return { file: filePath, valid: true };
181
+ }
182
+ catch (error) {
183
+ const errorMessage = error instanceof Error ? error.message : String(error);
184
+ return { file: filePath, valid: false, error: errorMessage };
185
+ }
186
+ }
187
+ export async function validateHooks(agentKitsPath, options = {}) {
188
+ const schemaRoot = options.schemaRoot ??
189
+ path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../schemas");
190
+ const programSchemaPath = path.join(schemaRoot, "hook-program.schema.json");
191
+ const programSchemaContent = await fs.readFile(programSchemaPath, "utf-8");
192
+ const programSchema = JSON.parse(programSchemaContent);
193
+ const bindingSchemaPath = path.join(schemaRoot, "hook-binding.schema.json");
194
+ const bindingSchemaContent = await fs.readFile(bindingSchemaPath, "utf-8");
195
+ const bindingSchema = JSON.parse(bindingSchemaContent);
196
+ const ajv = new Ajv2020({ allErrors: true, strict: false });
197
+ const applyFormats = addFormats;
198
+ applyFormats(ajv);
199
+ // Hook schemas are draft-07, so register that meta schema (both http/https IDs).
200
+ ajv.addMetaSchema(draft7MetaSchema);
201
+ ajv.addMetaSchema({
202
+ ...draft7MetaSchema,
203
+ $id: "https://json-schema.org/draft-07/schema#",
204
+ });
205
+ const validateProgramSchema = ajv.compile(programSchema);
206
+ const validateBindingSchema = ajv.compile(bindingSchema);
207
+ const hookFiles = await findHookConfigFiles(agentKitsPath);
208
+ const results = [];
209
+ for (const file of hookFiles) {
210
+ results.push(await validateHookFile(file, validateProgramSchema));
211
+ }
212
+ const kitFiles = await findKitFiles(agentKitsPath);
213
+ for (const file of kitFiles) {
214
+ results.push(await validateKitHookBindings(file, validateBindingSchema));
215
+ }
216
+ return summarizeResults(results);
217
+ }
218
+ export async function main(args) {
219
+ let source = args[0];
220
+ if (!source) {
221
+ const scriptDir = path.dirname(fileURLToPath(import.meta.url));
222
+ const fallbackPath = path.resolve(scriptDir, "../../test-kits");
223
+ try {
224
+ const stat = await fs.stat(fallbackPath);
225
+ if (stat.isDirectory()) {
226
+ source = fallbackPath;
227
+ }
228
+ }
229
+ catch {
230
+ source = undefined;
231
+ }
232
+ }
233
+ if (!source) {
234
+ console.error(pc.red("Error: no kit repository path provided"));
235
+ console.error(pc.dim("Usage: validate-hooks <path-to-kits-repo | org/repo[@ref]>"));
236
+ return 1;
237
+ }
238
+ let fetchResult;
239
+ try {
240
+ fetchResult = await resolveValidationSource(source);
241
+ }
242
+ catch (error) {
243
+ const message = formatValidationSourceError(error);
244
+ console.error(pc.red(`Error: ${message}`));
245
+ console.error(pc.dim("Usage: validate-hooks <path-to-kits-repo | org/repo[@ref]>"));
246
+ return 1;
247
+ }
248
+ const agentKitsPath = fetchResult.localPath;
249
+ console.log(pc.dim(`Validating hook programs in: ${agentKitsPath}`));
250
+ try {
251
+ const summary = await validateHooks(agentKitsPath);
252
+ printValidationResults("Hook Primitive Validation", summary, agentKitsPath);
253
+ if (summary.failed > 0) {
254
+ console.error(pc.red(`Validation failed: ${summary.failed} hook program(s) have invalid format`));
255
+ return 1;
256
+ }
257
+ if (summary.total === 0) {
258
+ console.log(pc.yellow("Warning: No hook config files found"));
259
+ return 0;
260
+ }
261
+ console.log(pc.green("All hook config files are valid"));
262
+ return 0;
263
+ }
264
+ catch (error) {
265
+ console.error(pc.red(`Error during validation: ${error}`));
266
+ return 1;
267
+ }
268
+ finally {
269
+ await fetchResult.cleanup?.();
270
+ }
271
+ }
272
+ //# sourceMappingURL=validate-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-hooks.js","sourceRoot":"","sources":["../../src/validation/validate-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Kit manifest and registry validation script.
3
+ *
4
+ * Validates kit.json files and kits.json registries in a kit repository
5
+ * against their canonical JSON schemas.
6
+ */
7
+ import type { ValidateFunction } from "ajv";
8
+ import { type ValidationResult, type ValidationSummary } from "./utils.js";
9
+ export declare function validateKitsRegistryFile(filePath: string, validateSchema: ValidateFunction): Promise<ValidationResult>;
10
+ export declare function validateKitManifestFile(filePath: string, validateSchema: ValidateFunction): Promise<ValidationResult>;
11
+ export declare function validateKits(agentKitsPath: string, options?: {
12
+ schemaRoot?: string;
13
+ }): Promise<ValidationSummary>;
14
+ export declare function main(args: string[]): Promise<number>;
15
+ //# sourceMappingURL=validate-kits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-kits.d.ts","sourceRoot":"","sources":["../../src/validation/validate-kits.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAoB,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAI9D,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAoDpB,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,gBAAgB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAoB3B;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,gBAAgB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAoB3B;AAED,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,OAAO,CAAC,iBAAiB,CAAC,CAoC5B;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkE1D"}