@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,150 @@
1
+ /**
2
+ * Git fetcher for cloning repositories.
3
+ *
4
+ * Clones GitHub repositories to temporary directories with support for
5
+ * branch/tag checkout and automatic cleanup.
6
+ */
7
+ import fs from "node:fs/promises";
8
+ import os from "node:os";
9
+ import path from "node:path";
10
+ import { simpleGit } from "simple-git";
11
+ import { parseSource, SourceParseError } from "./source-parser.js";
12
+ /**
13
+ * Error thrown when git operations fail.
14
+ */
15
+ export class GitFetchError extends Error {
16
+ gitSource;
17
+ gitCause;
18
+ constructor(message, source, cause) {
19
+ super(message);
20
+ this.name = "GitFetchError";
21
+ this.gitSource = source;
22
+ if (cause) {
23
+ this.gitCause = cause;
24
+ }
25
+ }
26
+ }
27
+ const DEFAULT_OPTIONS = {
28
+ tempDir: os.tmpdir(),
29
+ timeout: 60000,
30
+ shallow: true,
31
+ };
32
+ /**
33
+ * Git fetcher implementation for cloning GitHub repositories.
34
+ */
35
+ export class GitFetcher {
36
+ options;
37
+ constructor(options = {}) {
38
+ this.options = { ...DEFAULT_OPTIONS, ...options };
39
+ }
40
+ /**
41
+ * Check if this fetcher can handle the given source.
42
+ *
43
+ * Handles GitHub shorthand format: org/repo or org/repo@ref
44
+ */
45
+ canHandle(source) {
46
+ try {
47
+ const descriptor = parseSource(source);
48
+ return descriptor.type === "github";
49
+ }
50
+ catch {
51
+ return false;
52
+ }
53
+ }
54
+ /**
55
+ * Fetch (clone) a GitHub repository to a local temporary directory.
56
+ *
57
+ * @param source - GitHub shorthand (e.g., "example-org/kits@v1.0.0")
58
+ * @returns Fetch result with local path and cleanup function
59
+ * @throws GitFetchError if cloning fails
60
+ */
61
+ async fetch(source) {
62
+ let descriptor;
63
+ try {
64
+ const parsed = parseSource(source);
65
+ if (parsed.type !== "github") {
66
+ throw new SourceParseError("Not a GitHub source", source);
67
+ }
68
+ descriptor = parsed;
69
+ }
70
+ catch (error) {
71
+ throw new GitFetchError(`Failed to parse source: ${source}`, source, error instanceof Error ? error : undefined);
72
+ }
73
+ // Create temp directory
74
+ const tempPrefix = path.join(this.options.tempDir, "agent-kit-");
75
+ let tempDir;
76
+ try {
77
+ tempDir = await fs.mkdtemp(tempPrefix);
78
+ }
79
+ catch (error) {
80
+ throw new GitFetchError(`Failed to create temporary directory`, source, error instanceof Error ? error : undefined);
81
+ }
82
+ // Configure git
83
+ const gitOptions = {
84
+ baseDir: tempDir,
85
+ binary: "git",
86
+ maxConcurrentProcesses: 1,
87
+ timeout: {
88
+ block: this.options.timeout,
89
+ },
90
+ };
91
+ const git = simpleGit(gitOptions);
92
+ // Build clone URL
93
+ const cloneUrl = `https://github.com/${descriptor.owner}/${descriptor.repo}.git`;
94
+ try {
95
+ // Clone with options
96
+ const cloneOptions = [];
97
+ if (this.options.shallow) {
98
+ cloneOptions.push("--depth", "1");
99
+ }
100
+ if (descriptor.ref) {
101
+ cloneOptions.push("--branch", descriptor.ref);
102
+ }
103
+ await git.clone(cloneUrl, tempDir, cloneOptions);
104
+ // Return result with cleanup function
105
+ return {
106
+ localPath: tempDir,
107
+ cleanup: async () => {
108
+ try {
109
+ await fs.rm(tempDir, { recursive: true, force: true });
110
+ }
111
+ catch {
112
+ // Ignore cleanup errors
113
+ }
114
+ },
115
+ };
116
+ }
117
+ catch (error) {
118
+ // Clean up on failure
119
+ try {
120
+ await fs.rm(tempDir, { recursive: true, force: true });
121
+ }
122
+ catch {
123
+ // Ignore cleanup errors
124
+ }
125
+ const errorMessage = error instanceof Error ? error.message : String(error);
126
+ // Provide helpful error messages
127
+ if (errorMessage.includes("not found")) {
128
+ throw new GitFetchError(`Repository not found: ${descriptor.owner}/${descriptor.repo}`, source, error instanceof Error ? error : undefined);
129
+ }
130
+ if (descriptor.ref &&
131
+ (errorMessage.includes("did not match any") ||
132
+ errorMessage.includes("Remote branch") ||
133
+ errorMessage.includes("not found in upstream"))) {
134
+ throw new GitFetchError(`Branch or tag not found: ${descriptor.ref}`, source, error instanceof Error ? error : undefined);
135
+ }
136
+ if (errorMessage.includes("Authentication failed") ||
137
+ errorMessage.includes("could not read Username")) {
138
+ throw new GitFetchError(`Authentication failed. Private repositories are not supported.`, source, error instanceof Error ? error : undefined);
139
+ }
140
+ throw new GitFetchError(`Failed to clone repository: ${errorMessage}`, source, error instanceof Error ? error : undefined);
141
+ }
142
+ }
143
+ }
144
+ /**
145
+ * Create a git fetcher with default options.
146
+ */
147
+ export function createGitFetcher(options) {
148
+ return new GitFetcher(options);
149
+ }
150
+ //# sourceMappingURL=git-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-fetcher.js","sourceRoot":"","sources":["../../src/discovery/git-fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Discovery module for the kit installer.
3
+ *
4
+ * This module handles source parsing, fetching, and kit discovery.
5
+ */
6
+ export type { SourceType, GitHubSource, LocalSource, SourceDescriptor, FetchResult, PrimitiveCounts, DiscoveredKit, RepositoryMetadata, KitDiscoveryResult, DiscoveryError, SourceFetcher, DetectedHarness, KitCompatibility, CompatibilityMatrix, } from "./types.js";
7
+ export { isGitHubSource, isLocalSource } from "./types.js";
8
+ export { parseSource, formatSource, SourceParseError } from "./source-parser.js";
9
+ export { GitFetcher, GitFetchError, createGitFetcher, type GitFetcherOptions } from "./git-fetcher.js";
10
+ export { LocalFetcher, LocalFetchError, createLocalFetcher } from "./local-fetcher.js";
11
+ export { FetcherRegistry, NoFetcherError, createFetcherRegistry, getDefaultFetcherRegistry, fetchSource, type FetcherRegistryOptions, } from "./fetcher-registry.js";
12
+ export { scanKits, filterKitsByName, getMissingKitNames, KitScanError, type KitScannerOptions, } from "./kit-scanner.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EACL,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,WAAW,EACX,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Discovery module for the kit installer.
3
+ *
4
+ * This module handles source parsing, fetching, and kit discovery.
5
+ */
6
+ export { isGitHubSource, isLocalSource } from "./types.js";
7
+ // Source parsing
8
+ export { parseSource, formatSource, SourceParseError } from "./source-parser.js";
9
+ // Fetchers
10
+ export { GitFetcher, GitFetchError, createGitFetcher } from "./git-fetcher.js";
11
+ export { LocalFetcher, LocalFetchError, createLocalFetcher } from "./local-fetcher.js";
12
+ export { FetcherRegistry, NoFetcherError, createFetcherRegistry, getDefaultFetcherRegistry, fetchSource, } from "./fetcher-registry.js";
13
+ // Kit scanning
14
+ export { scanKits, filterKitsByName, getMissingKitNames, KitScanError, } from "./kit-scanner.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3D,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEjF,WAAW;AACX,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAA0B,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EACL,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,WAAW,GAEZ,MAAM,uBAAuB,CAAC;AAE/B,eAAe;AACf,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GAEb,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Kit scanner for discovering kits in a repository.
3
+ *
4
+ * Loads and validates kits.json, primitives.json, and kit manifests.
5
+ */
6
+ import type { KitDiscoveryResult } from "./types.js";
7
+ /**
8
+ * Error thrown during kit scanning.
9
+ */
10
+ export declare class KitScanError extends Error {
11
+ readonly scanPath?: string | undefined;
12
+ readonly scanCause?: Error | undefined;
13
+ constructor(message: string, path?: string, cause?: Error);
14
+ }
15
+ /**
16
+ * Options for the kit scanner.
17
+ */
18
+ export interface KitScannerOptions {
19
+ /**
20
+ * Whether to validate JSON against schemas.
21
+ * Defaults to true.
22
+ */
23
+ validate?: boolean;
24
+ }
25
+ /**
26
+ * Scan for kits in a repository.
27
+ *
28
+ * Discovers kits by:
29
+ * 1. Looking for kits.json at repository root
30
+ * 2. Loading kit manifests from paths specified in kits.json
31
+ * 3. Handling single-kit repositories (no kits/ directory)
32
+ *
33
+ * @param localPath - Path to the repository root
34
+ * @param source - Original source string for reference
35
+ * @param options - Scanner options
36
+ * @returns Kit discovery result with all discovered kits
37
+ */
38
+ export declare function scanKits(localPath: string, source: string, _options?: KitScannerOptions): Promise<KitDiscoveryResult>;
39
+ /**
40
+ * Filter kits by name.
41
+ *
42
+ * @param result - Kit discovery result
43
+ * @param kitNames - Kit names to include (empty means all)
44
+ * @returns Filtered discovery result
45
+ */
46
+ export declare function filterKitsByName(result: KitDiscoveryResult, kitNames: string[]): KitDiscoveryResult;
47
+ /**
48
+ * Get kit names that were not found.
49
+ *
50
+ * @param result - Kit discovery result
51
+ * @param requestedNames - Names that were requested
52
+ * @returns Names that were not found
53
+ */
54
+ export declare function getMissingKitNames(result: KitDiscoveryResult, requestedNames: string[]): string[];
55
+ //# sourceMappingURL=kit-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kit-scanner.d.ts","sourceRoot":"","sources":["../../src/discovery/kit-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;gBAE3B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAU1D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA0ID;;;;;;;;;;;;GAYG;AACH,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,iBAAsB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAoI7B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,MAAM,EAAE,GACjB,kBAAkB,CAcpB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,cAAc,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAGV"}
@@ -0,0 +1,305 @@
1
+ /**
2
+ * Kit scanner for discovering kits in a repository.
3
+ *
4
+ * Loads and validates kits.json, primitives.json, and kit manifests.
5
+ */
6
+ import fs from "node:fs/promises";
7
+ import path from "node:path";
8
+ /**
9
+ * Error thrown during kit scanning.
10
+ */
11
+ export class KitScanError extends Error {
12
+ scanPath;
13
+ scanCause;
14
+ constructor(message, path, cause) {
15
+ super(message);
16
+ this.name = "KitScanError";
17
+ if (path) {
18
+ this.scanPath = path;
19
+ }
20
+ if (cause) {
21
+ this.scanCause = cause;
22
+ }
23
+ }
24
+ }
25
+ /**
26
+ * Check if a file exists.
27
+ */
28
+ async function fileExists(filePath) {
29
+ try {
30
+ await fs.access(filePath);
31
+ return true;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ /**
38
+ * Read and parse a JSON file.
39
+ */
40
+ async function readJsonFile(filePath) {
41
+ const content = await fs.readFile(filePath, "utf-8");
42
+ return JSON.parse(content);
43
+ }
44
+ /**
45
+ * Count primitives in a kit manifest.
46
+ */
47
+ function countPrimitives(manifest) {
48
+ return {
49
+ commands: manifest.primitives.commands?.length ?? 0,
50
+ skills: manifest.primitives.skills?.length ?? 0,
51
+ subagents: manifest.primitives.subagents?.length ?? 0,
52
+ mcp: manifest.primitives.mcp?.length ?? 0,
53
+ hooks: manifest.primitives.hooks?.length ?? 0,
54
+ };
55
+ }
56
+ /**
57
+ * Extract required primitives from a kit manifest.
58
+ */
59
+ function extractRequiredPrimitives(manifest) {
60
+ return manifest.requires?.primitives ?? [];
61
+ }
62
+ /**
63
+ * Infer repository metadata from directory structure.
64
+ */
65
+ async function inferMetadata(localPath) {
66
+ // Try to read package.json for metadata
67
+ const packageJsonPath = path.join(localPath, "package.json");
68
+ if (await fileExists(packageJsonPath)) {
69
+ try {
70
+ const pkg = await readJsonFile(packageJsonPath);
71
+ const result = {
72
+ name: pkg.name ?? path.basename(localPath),
73
+ };
74
+ if (pkg.description) {
75
+ result.description = pkg.description;
76
+ }
77
+ if (pkg.version) {
78
+ result.version = pkg.version;
79
+ }
80
+ if (typeof pkg.author === "string") {
81
+ result.owner = { name: pkg.author };
82
+ }
83
+ else if (pkg.author) {
84
+ result.owner = { name: pkg.author.name };
85
+ }
86
+ return result;
87
+ }
88
+ catch {
89
+ // Ignore parse errors
90
+ }
91
+ }
92
+ // Fall back to directory name
93
+ return {
94
+ name: path.basename(localPath),
95
+ };
96
+ }
97
+ /**
98
+ * Load a kit manifest from a directory.
99
+ */
100
+ async function loadKitManifest(kitPath, errors) {
101
+ const manifestPath = path.join(kitPath, "kit.json");
102
+ if (!(await fileExists(manifestPath))) {
103
+ errors.push({
104
+ type: "missing-file",
105
+ path: manifestPath,
106
+ message: `Kit manifest not found: ${manifestPath}`,
107
+ });
108
+ return null;
109
+ }
110
+ try {
111
+ const manifest = await readJsonFile(manifestPath);
112
+ // Basic validation
113
+ if (!manifest.name) {
114
+ errors.push({
115
+ type: "validation-error",
116
+ path: manifestPath,
117
+ message: "Kit manifest missing required field: name",
118
+ });
119
+ return null;
120
+ }
121
+ if (!manifest.version) {
122
+ errors.push({
123
+ type: "validation-error",
124
+ path: manifestPath,
125
+ message: "Kit manifest missing required field: version",
126
+ });
127
+ return null;
128
+ }
129
+ return manifest;
130
+ }
131
+ catch (error) {
132
+ errors.push({
133
+ type: "parse-error",
134
+ path: manifestPath,
135
+ message: `Failed to parse kit manifest: ${error instanceof Error ? error.message : String(error)}`,
136
+ });
137
+ return null;
138
+ }
139
+ }
140
+ /**
141
+ * Scan for kits in a repository.
142
+ *
143
+ * Discovers kits by:
144
+ * 1. Looking for kits.json at repository root
145
+ * 2. Loading kit manifests from paths specified in kits.json
146
+ * 3. Handling single-kit repositories (no kits/ directory)
147
+ *
148
+ * @param localPath - Path to the repository root
149
+ * @param source - Original source string for reference
150
+ * @param options - Scanner options
151
+ * @returns Kit discovery result with all discovered kits
152
+ */
153
+ export async function scanKits(localPath, source, _options = {}) {
154
+ const errors = [];
155
+ const kits = [];
156
+ let registry;
157
+ let primitivesRegistry;
158
+ let repository;
159
+ // Try to load kits.json
160
+ const registryPath = path.join(localPath, "kits.json");
161
+ if (await fileExists(registryPath)) {
162
+ try {
163
+ registry = await readJsonFile(registryPath);
164
+ repository = {
165
+ name: registry.name,
166
+ };
167
+ if (registry.description) {
168
+ repository.description = registry.description;
169
+ }
170
+ if (registry.version) {
171
+ repository.version = registry.version;
172
+ }
173
+ if (registry.owner) {
174
+ repository.owner = registry.owner;
175
+ }
176
+ // Load kits from registry
177
+ for (const entry of registry.kits) {
178
+ const kitPath = path.join(localPath, entry.path);
179
+ const manifest = await loadKitManifest(kitPath, errors);
180
+ if (manifest) {
181
+ kits.push({
182
+ name: manifest.name,
183
+ path: entry.path,
184
+ manifest,
185
+ requiredPrimitives: extractRequiredPrimitives(manifest),
186
+ primitiveCounts: countPrimitives(manifest),
187
+ });
188
+ }
189
+ }
190
+ }
191
+ catch (error) {
192
+ errors.push({
193
+ type: "parse-error",
194
+ path: registryPath,
195
+ message: `Failed to parse kits.json: ${error instanceof Error ? error.message : String(error)}`,
196
+ });
197
+ repository = await inferMetadata(localPath);
198
+ }
199
+ }
200
+ else {
201
+ // No kits.json - try to find kits
202
+ repository = await inferMetadata(localPath);
203
+ // Check for kits/ directory
204
+ const kitsDir = path.join(localPath, "kits");
205
+ if (await fileExists(kitsDir)) {
206
+ try {
207
+ const entries = await fs.readdir(kitsDir, { withFileTypes: true });
208
+ for (const entry of entries) {
209
+ if (entry.isDirectory()) {
210
+ const kitPath = path.join(kitsDir, entry.name);
211
+ const manifest = await loadKitManifest(kitPath, errors);
212
+ if (manifest) {
213
+ kits.push({
214
+ name: manifest.name,
215
+ path: `./kits/${entry.name}`,
216
+ manifest,
217
+ requiredPrimitives: extractRequiredPrimitives(manifest),
218
+ primitiveCounts: countPrimitives(manifest),
219
+ });
220
+ }
221
+ }
222
+ }
223
+ }
224
+ catch (error) {
225
+ errors.push({
226
+ type: "parse-error",
227
+ path: kitsDir,
228
+ message: `Failed to scan kits directory: ${error instanceof Error ? error.message : String(error)}`,
229
+ });
230
+ }
231
+ }
232
+ else {
233
+ // Check for single-kit repository (kit.json at root)
234
+ const manifest = await loadKitManifest(localPath, errors);
235
+ if (manifest) {
236
+ kits.push({
237
+ name: manifest.name,
238
+ path: ".",
239
+ manifest,
240
+ requiredPrimitives: extractRequiredPrimitives(manifest),
241
+ primitiveCounts: countPrimitives(manifest),
242
+ });
243
+ }
244
+ }
245
+ }
246
+ // Try to load primitives.json
247
+ const primitivesPath = path.join(localPath, "primitives.json");
248
+ if (await fileExists(primitivesPath)) {
249
+ try {
250
+ primitivesRegistry =
251
+ await readJsonFile(primitivesPath);
252
+ }
253
+ catch (error) {
254
+ errors.push({
255
+ type: "parse-error",
256
+ path: primitivesPath,
257
+ message: `Failed to parse primitives.json: ${error instanceof Error ? error.message : String(error)}`,
258
+ });
259
+ }
260
+ }
261
+ const result = {
262
+ source,
263
+ localPath,
264
+ repository,
265
+ kits,
266
+ errors,
267
+ };
268
+ if (registry) {
269
+ result.registry = registry;
270
+ }
271
+ if (primitivesRegistry) {
272
+ result.primitivesRegistry = primitivesRegistry;
273
+ }
274
+ return result;
275
+ }
276
+ /**
277
+ * Filter kits by name.
278
+ *
279
+ * @param result - Kit discovery result
280
+ * @param kitNames - Kit names to include (empty means all)
281
+ * @returns Filtered discovery result
282
+ */
283
+ export function filterKitsByName(result, kitNames) {
284
+ if (kitNames.length === 0) {
285
+ return result;
286
+ }
287
+ const nameSet = new Set(kitNames.map((n) => n.toLowerCase()));
288
+ const filteredKits = result.kits.filter((kit) => nameSet.has(kit.name.toLowerCase()));
289
+ return {
290
+ ...result,
291
+ kits: filteredKits,
292
+ };
293
+ }
294
+ /**
295
+ * Get kit names that were not found.
296
+ *
297
+ * @param result - Kit discovery result
298
+ * @param requestedNames - Names that were requested
299
+ * @returns Names that were not found
300
+ */
301
+ export function getMissingKitNames(result, requestedNames) {
302
+ const foundNames = new Set(result.kits.map((kit) => kit.name.toLowerCase()));
303
+ return requestedNames.filter((name) => !foundNames.has(name.toLowerCase()));
304
+ }
305
+ //# sourceMappingURL=kit-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kit-scanner.js","sourceRoot":"","sources":["../../src/discovery/kit-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Local fetcher for handling local path sources.
3
+ *
4
+ * Validates that local paths exist and are accessible.
5
+ */
6
+ import type { SourceFetcher, FetchResult } from "./types.js";
7
+ /**
8
+ * Error thrown when local path operations fail.
9
+ */
10
+ export declare class LocalFetchError extends Error {
11
+ readonly localSource: string;
12
+ readonly localCause?: Error | undefined;
13
+ constructor(message: string, source: string, cause?: Error);
14
+ }
15
+ /**
16
+ * Local fetcher implementation for local path sources.
17
+ */
18
+ export declare class LocalFetcher implements SourceFetcher {
19
+ /**
20
+ * Check if this fetcher can handle the given source.
21
+ *
22
+ * Handles local paths: ./path, ../path, /absolute/path, ~/path
23
+ */
24
+ canHandle(source: string): boolean;
25
+ /**
26
+ * Fetch (validate) a local path.
27
+ *
28
+ * @param source - Local path (e.g., "./my-kits" or "/absolute/path")
29
+ * @returns Fetch result with local path (no cleanup needed)
30
+ * @throws LocalFetchError if the path does not exist or is not accessible
31
+ */
32
+ fetch(source: string): Promise<FetchResult>;
33
+ }
34
+ /**
35
+ * Create a local fetcher.
36
+ */
37
+ export declare function createLocalFetcher(): LocalFetcher;
38
+ //# sourceMappingURL=local-fetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-fetcher.d.ts","sourceRoot":"","sources":["../../src/discovery/local-fetcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAG1E;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAQ3D;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,aAAa;IAChD;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASlC;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA0ElD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD"}