@modootoday/pmcp 0.13.1 → 0.14.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 (844) hide show
  1. package/.agents/plugins/marketplace.json +1157 -0
  2. package/.claude-plugin/marketplace.json +825 -0
  3. package/.claude-plugin/plugin.json +9 -0
  4. package/.mcp.json +9 -0
  5. package/README.md +48 -3
  6. package/dist/cli.js +1345 -741
  7. package/dist/{config-CJ43_oBS.d.ts → config-BkSpjUG6.d.ts} +1 -0
  8. package/dist/{embed-BBhv3y5x.d.ts → embed-CVCEz2FH.d.ts} +1 -1
  9. package/dist/http.d.ts +3 -3
  10. package/dist/http.js +216 -112
  11. package/dist/index.d.ts +7 -14
  12. package/dist/index.js +382 -262
  13. package/dist/mailbox/index.d.ts +1 -1
  14. package/dist/mailbox/index.js +18 -2
  15. package/dist/{server-CwWcRjqz.d.ts → server-DAcT89iv.d.ts} +1 -1
  16. package/dist/stdio.d.ts +1 -1
  17. package/dist/stdio.js +229 -121
  18. package/dist/tui-worker.js +18 -2
  19. package/docs/catalog.json +5422 -0
  20. package/docs/manual-library-skills.md +74 -0
  21. package/docs/skills.md +46 -0
  22. package/gemini-extension.json +11 -0
  23. package/mcp.json +10 -0
  24. package/package.json +22 -5
  25. package/plugin.json +10 -0
  26. package/plugins/agent-base-9/.claude-plugin/plugin.json +9 -0
  27. package/plugins/agent-base-9/LICENSE +93 -0
  28. package/plugins/agent-base-9/NOTICE +51 -0
  29. package/plugins/agent-base-9/gemini-extension.json +1 -0
  30. package/plugins/agent-base-9/plugin.json +10 -0
  31. package/plugins/agent-base-9/skills/agent-base/SKILL.md +118 -0
  32. package/plugins/ajv-formats-3/.claude-plugin/plugin.json +9 -0
  33. package/plugins/ajv-formats-3/LICENSE +93 -0
  34. package/plugins/ajv-formats-3/NOTICE +51 -0
  35. package/plugins/ajv-formats-3/gemini-extension.json +1 -0
  36. package/plugins/ajv-formats-3/plugin.json +10 -0
  37. package/plugins/ajv-formats-3/skills/ajv-formats/SKILL.md +178 -0
  38. package/plugins/allure-js-commons-3/.claude-plugin/plugin.json +9 -0
  39. package/plugins/allure-js-commons-3/LICENSE +93 -0
  40. package/plugins/allure-js-commons-3/NOTICE +51 -0
  41. package/plugins/allure-js-commons-3/gemini-extension.json +1 -0
  42. package/plugins/allure-js-commons-3/plugin.json +10 -0
  43. package/plugins/allure-js-commons-3/skills/allure-js-commons/SKILL.md +173 -0
  44. package/plugins/ansi-escapes-7/.claude-plugin/plugin.json +9 -0
  45. package/plugins/ansi-escapes-7/LICENSE +93 -0
  46. package/plugins/ansi-escapes-7/NOTICE +51 -0
  47. package/plugins/ansi-escapes-7/gemini-extension.json +1 -0
  48. package/plugins/ansi-escapes-7/plugin.json +10 -0
  49. package/plugins/ansi-escapes-7/skills/ansi-escapes/SKILL.md +189 -0
  50. package/plugins/ansi-styles-7/.claude-plugin/plugin.json +9 -0
  51. package/plugins/ansi-styles-7/LICENSE +93 -0
  52. package/plugins/ansi-styles-7/NOTICE +51 -0
  53. package/plugins/ansi-styles-7/gemini-extension.json +1 -0
  54. package/plugins/ansi-styles-7/plugin.json +10 -0
  55. package/plugins/ansi-styles-7/skills/ansi-styles/SKILL.md +161 -0
  56. package/plugins/app-builder-lib-26/.claude-plugin/plugin.json +9 -0
  57. package/plugins/app-builder-lib-26/LICENSE +93 -0
  58. package/plugins/app-builder-lib-26/NOTICE +51 -0
  59. package/plugins/app-builder-lib-26/gemini-extension.json +1 -0
  60. package/plugins/app-builder-lib-26/plugin.json +10 -0
  61. package/plugins/app-builder-lib-26/skills/app-builder-lib/SKILL.md +84 -0
  62. package/plugins/autoprefixer-10/.claude-plugin/plugin.json +9 -0
  63. package/plugins/autoprefixer-10/LICENSE +93 -0
  64. package/plugins/autoprefixer-10/NOTICE +51 -0
  65. package/plugins/autoprefixer-10/gemini-extension.json +1 -0
  66. package/plugins/autoprefixer-10/plugin.json +10 -0
  67. package/plugins/autoprefixer-10/skills/autoprefixer/SKILL.md +141 -0
  68. package/plugins/babel-plugin-transform-typescript-8/.claude-plugin/plugin.json +9 -0
  69. package/plugins/babel-plugin-transform-typescript-8/LICENSE +93 -0
  70. package/plugins/babel-plugin-transform-typescript-8/NOTICE +51 -0
  71. package/plugins/babel-plugin-transform-typescript-8/gemini-extension.json +1 -0
  72. package/plugins/babel-plugin-transform-typescript-8/plugin.json +10 -0
  73. package/plugins/babel-plugin-transform-typescript-8/skills/babel-plugin-transform-typescript/SKILL.md +135 -0
  74. package/plugins/bcryptjs-2/.claude-plugin/plugin.json +9 -0
  75. package/plugins/bcryptjs-2/LICENSE +93 -0
  76. package/plugins/bcryptjs-2/NOTICE +51 -0
  77. package/plugins/bcryptjs-2/gemini-extension.json +1 -0
  78. package/plugins/bcryptjs-2/plugin.json +10 -0
  79. package/plugins/bcryptjs-2/skills/bcryptjs/SKILL.md +78 -0
  80. package/plugins/bullmq-5/.claude-plugin/plugin.json +9 -0
  81. package/plugins/bullmq-5/LICENSE +93 -0
  82. package/plugins/bullmq-5/NOTICE +51 -0
  83. package/plugins/bullmq-5/gemini-extension.json +1 -0
  84. package/plugins/bullmq-5/plugin.json +10 -0
  85. package/plugins/bullmq-5/skills/bullmq/SKILL.md +59 -0
  86. package/plugins/bun-types-1/.claude-plugin/plugin.json +9 -0
  87. package/plugins/bun-types-1/LICENSE +93 -0
  88. package/plugins/bun-types-1/NOTICE +51 -0
  89. package/plugins/bun-types-1/gemini-extension.json +1 -0
  90. package/plugins/bun-types-1/plugin.json +10 -0
  91. package/plugins/bun-types-1/skills/bun-types/SKILL.md +119 -0
  92. package/plugins/chai-6/.claude-plugin/plugin.json +9 -0
  93. package/plugins/chai-6/LICENSE +93 -0
  94. package/plugins/chai-6/NOTICE +51 -0
  95. package/plugins/chai-6/gemini-extension.json +1 -0
  96. package/plugins/chai-6/plugin.json +10 -0
  97. package/plugins/chai-6/skills/chai/SKILL.md +160 -0
  98. package/plugins/chalk-6/.claude-plugin/plugin.json +9 -0
  99. package/plugins/chalk-6/LICENSE +93 -0
  100. package/plugins/chalk-6/NOTICE +51 -0
  101. package/plugins/chalk-6/gemini-extension.json +1 -0
  102. package/plugins/chalk-6/plugin.json +10 -0
  103. package/plugins/chalk-6/skills/chalk/SKILL.md +167 -0
  104. package/plugins/cli-cursor-5/.claude-plugin/plugin.json +9 -0
  105. package/plugins/cli-cursor-5/LICENSE +93 -0
  106. package/plugins/cli-cursor-5/NOTICE +51 -0
  107. package/plugins/cli-cursor-5/gemini-extension.json +1 -0
  108. package/plugins/cli-cursor-5/plugin.json +10 -0
  109. package/plugins/cli-cursor-5/skills/cli-cursor/SKILL.md +117 -0
  110. package/plugins/cli-spinners-3/.claude-plugin/plugin.json +9 -0
  111. package/plugins/cli-spinners-3/LICENSE +93 -0
  112. package/plugins/cli-spinners-3/NOTICE +51 -0
  113. package/plugins/cli-spinners-3/gemini-extension.json +1 -0
  114. package/plugins/cli-spinners-3/plugin.json +10 -0
  115. package/plugins/cli-spinners-3/skills/cli-spinners/SKILL.md +101 -0
  116. package/plugins/clickhouse-client-1/.claude-plugin/plugin.json +9 -0
  117. package/plugins/clickhouse-client-1/LICENSE +93 -0
  118. package/plugins/clickhouse-client-1/NOTICE +51 -0
  119. package/plugins/clickhouse-client-1/gemini-extension.json +1 -0
  120. package/plugins/clickhouse-client-1/plugin.json +10 -0
  121. package/plugins/clickhouse-client-1/skills/clickhouse-client/SKILL.md +54 -0
  122. package/plugins/clickhouse-client-web-1/.claude-plugin/plugin.json +9 -0
  123. package/plugins/clickhouse-client-web-1/LICENSE +93 -0
  124. package/plugins/clickhouse-client-web-1/NOTICE +51 -0
  125. package/plugins/clickhouse-client-web-1/gemini-extension.json +1 -0
  126. package/plugins/clickhouse-client-web-1/plugin.json +10 -0
  127. package/plugins/clickhouse-client-web-1/skills/clickhouse-client-web/SKILL.md +52 -0
  128. package/plugins/cliui-9/.claude-plugin/plugin.json +9 -0
  129. package/plugins/cliui-9/LICENSE +93 -0
  130. package/plugins/cliui-9/NOTICE +51 -0
  131. package/plugins/cliui-9/gemini-extension.json +1 -0
  132. package/plugins/cliui-9/plugin.json +10 -0
  133. package/plugins/cliui-9/skills/cliui/SKILL.md +163 -0
  134. package/plugins/cloudflare-workers-types-4/.claude-plugin/plugin.json +9 -0
  135. package/plugins/cloudflare-workers-types-4/LICENSE +93 -0
  136. package/plugins/cloudflare-workers-types-4/NOTICE +51 -0
  137. package/plugins/cloudflare-workers-types-4/gemini-extension.json +1 -0
  138. package/plugins/cloudflare-workers-types-4/plugin.json +10 -0
  139. package/plugins/cloudflare-workers-types-4/skills/cloudflare-workers-types/SKILL.md +63 -0
  140. package/plugins/commander-15/.claude-plugin/plugin.json +9 -0
  141. package/plugins/commander-15/LICENSE +93 -0
  142. package/plugins/commander-15/NOTICE +51 -0
  143. package/plugins/commander-15/gemini-extension.json +1 -0
  144. package/plugins/commander-15/plugin.json +10 -0
  145. package/plugins/commander-15/skills/commander/SKILL.md +204 -0
  146. package/plugins/content-type-3/.claude-plugin/plugin.json +9 -0
  147. package/plugins/content-type-3/LICENSE +93 -0
  148. package/plugins/content-type-3/NOTICE +51 -0
  149. package/plugins/content-type-3/gemini-extension.json +1 -0
  150. package/plugins/content-type-3/plugin.json +10 -0
  151. package/plugins/content-type-3/skills/content-type/SKILL.md +126 -0
  152. package/plugins/croner-10/.claude-plugin/plugin.json +9 -0
  153. package/plugins/croner-10/LICENSE +93 -0
  154. package/plugins/croner-10/NOTICE +51 -0
  155. package/plugins/croner-10/gemini-extension.json +1 -0
  156. package/plugins/croner-10/plugin.json +10 -0
  157. package/plugins/croner-10/skills/croner/SKILL.md +182 -0
  158. package/plugins/css-tree-3/.claude-plugin/plugin.json +9 -0
  159. package/plugins/css-tree-3/LICENSE +93 -0
  160. package/plugins/css-tree-3/NOTICE +51 -0
  161. package/plugins/css-tree-3/gemini-extension.json +1 -0
  162. package/plugins/css-tree-3/plugin.json +10 -0
  163. package/plugins/css-tree-3/skills/css-tree/SKILL.md +165 -0
  164. package/plugins/data-urls-7/.claude-plugin/plugin.json +9 -0
  165. package/plugins/data-urls-7/LICENSE +93 -0
  166. package/plugins/data-urls-7/NOTICE +51 -0
  167. package/plugins/data-urls-7/gemini-extension.json +1 -0
  168. package/plugins/data-urls-7/plugin.json +10 -0
  169. package/plugins/data-urls-7/skills/data-urls/SKILL.md +136 -0
  170. package/plugins/deep-eql-5/.claude-plugin/plugin.json +9 -0
  171. package/plugins/deep-eql-5/LICENSE +93 -0
  172. package/plugins/deep-eql-5/NOTICE +51 -0
  173. package/plugins/deep-eql-5/gemini-extension.json +1 -0
  174. package/plugins/deep-eql-5/plugin.json +10 -0
  175. package/plugins/deep-eql-5/skills/deep-eql/SKILL.md +130 -0
  176. package/plugins/dexie-4/.claude-plugin/plugin.json +9 -0
  177. package/plugins/dexie-4/LICENSE +93 -0
  178. package/plugins/dexie-4/NOTICE +51 -0
  179. package/plugins/dexie-4/gemini-extension.json +1 -0
  180. package/plugins/dexie-4/plugin.json +10 -0
  181. package/plugins/dexie-4/skills/dexie/SKILL.md +192 -0
  182. package/plugins/emittery-2/.claude-plugin/plugin.json +9 -0
  183. package/plugins/emittery-2/LICENSE +93 -0
  184. package/plugins/emittery-2/NOTICE +51 -0
  185. package/plugins/emittery-2/gemini-extension.json +1 -0
  186. package/plugins/emittery-2/plugin.json +10 -0
  187. package/plugins/emittery-2/skills/emittery/SKILL.md +234 -0
  188. package/plugins/eslint-10/.claude-plugin/plugin.json +9 -0
  189. package/plugins/eslint-10/LICENSE +93 -0
  190. package/plugins/eslint-10/NOTICE +51 -0
  191. package/plugins/eslint-10/gemini-extension.json +1 -0
  192. package/plugins/eslint-10/plugin.json +10 -0
  193. package/plugins/eslint-10/skills/eslint/SKILL.md +77 -0
  194. package/plugins/eslint-9/.claude-plugin/plugin.json +9 -0
  195. package/plugins/eslint-9/LICENSE +93 -0
  196. package/plugins/eslint-9/NOTICE +51 -0
  197. package/plugins/eslint-9/gemini-extension.json +1 -0
  198. package/plugins/eslint-9/plugin.json +10 -0
  199. package/plugins/eslint-9/skills/eslint/SKILL.md +93 -0
  200. package/plugins/eslint-plugin-react-hooks-7/.claude-plugin/plugin.json +9 -0
  201. package/plugins/eslint-plugin-react-hooks-7/LICENSE +93 -0
  202. package/plugins/eslint-plugin-react-hooks-7/NOTICE +51 -0
  203. package/plugins/eslint-plugin-react-hooks-7/gemini-extension.json +1 -0
  204. package/plugins/eslint-plugin-react-hooks-7/plugin.json +10 -0
  205. package/plugins/eslint-plugin-react-hooks-7/skills/eslint-plugin-react-hooks/SKILL.md +173 -0
  206. package/plugins/eslint-plugin-testing-library-7/.claude-plugin/plugin.json +9 -0
  207. package/plugins/eslint-plugin-testing-library-7/LICENSE +93 -0
  208. package/plugins/eslint-plugin-testing-library-7/NOTICE +51 -0
  209. package/plugins/eslint-plugin-testing-library-7/gemini-extension.json +1 -0
  210. package/plugins/eslint-plugin-testing-library-7/plugin.json +10 -0
  211. package/plugins/eslint-plugin-testing-library-7/skills/eslint-plugin-testing-library/SKILL.md +193 -0
  212. package/plugins/expect-type-1/.claude-plugin/plugin.json +9 -0
  213. package/plugins/expect-type-1/LICENSE +93 -0
  214. package/plugins/expect-type-1/NOTICE +51 -0
  215. package/plugins/expect-type-1/gemini-extension.json +1 -0
  216. package/plugins/expect-type-1/plugin.json +10 -0
  217. package/plugins/expect-type-1/skills/expect-type/SKILL.md +165 -0
  218. package/plugins/express-5/.claude-plugin/plugin.json +9 -0
  219. package/plugins/express-5/LICENSE +93 -0
  220. package/plugins/express-5/NOTICE +51 -0
  221. package/plugins/express-5/gemini-extension.json +1 -0
  222. package/plugins/express-5/plugin.json +10 -0
  223. package/plugins/express-5/skills/express/SKILL.md +179 -0
  224. package/plugins/fake-indexeddb-6/.claude-plugin/plugin.json +9 -0
  225. package/plugins/fake-indexeddb-6/LICENSE +93 -0
  226. package/plugins/fake-indexeddb-6/NOTICE +51 -0
  227. package/plugins/fake-indexeddb-6/gemini-extension.json +1 -0
  228. package/plugins/fake-indexeddb-6/plugin.json +10 -0
  229. package/plugins/fake-indexeddb-6/skills/fake-indexeddb/SKILL.md +147 -0
  230. package/plugins/fast-check-4/.claude-plugin/plugin.json +9 -0
  231. package/plugins/fast-check-4/LICENSE +93 -0
  232. package/plugins/fast-check-4/NOTICE +51 -0
  233. package/plugins/fast-check-4/gemini-extension.json +1 -0
  234. package/plugins/fast-check-4/plugin.json +10 -0
  235. package/plugins/fast-check-4/skills/fast-check/SKILL.md +168 -0
  236. package/plugins/figures-6/.claude-plugin/plugin.json +9 -0
  237. package/plugins/figures-6/LICENSE +93 -0
  238. package/plugins/figures-6/NOTICE +51 -0
  239. package/plugins/figures-6/gemini-extension.json +1 -0
  240. package/plugins/figures-6/plugin.json +10 -0
  241. package/plugins/figures-6/skills/figures/SKILL.md +99 -0
  242. package/plugins/firebase-12/.claude-plugin/plugin.json +9 -0
  243. package/plugins/firebase-12/LICENSE +93 -0
  244. package/plugins/firebase-12/NOTICE +51 -0
  245. package/plugins/firebase-12/gemini-extension.json +1 -0
  246. package/plugins/firebase-12/plugin.json +10 -0
  247. package/plugins/firebase-12/skills/firebase/SKILL.md +161 -0
  248. package/plugins/firebase-admin-14/.claude-plugin/plugin.json +9 -0
  249. package/plugins/firebase-admin-14/LICENSE +93 -0
  250. package/plugins/firebase-admin-14/NOTICE +51 -0
  251. package/plugins/firebase-admin-14/gemini-extension.json +1 -0
  252. package/plugins/firebase-admin-14/plugin.json +10 -0
  253. package/plugins/firebase-admin-14/skills/firebase-admin/SKILL.md +155 -0
  254. package/plugins/get-uri-8/.claude-plugin/plugin.json +9 -0
  255. package/plugins/get-uri-8/LICENSE +93 -0
  256. package/plugins/get-uri-8/NOTICE +51 -0
  257. package/plugins/get-uri-8/gemini-extension.json +1 -0
  258. package/plugins/get-uri-8/plugin.json +10 -0
  259. package/plugins/get-uri-8/skills/get-uri/SKILL.md +112 -0
  260. package/plugins/google-uuid-1/.claude-plugin/plugin.json +9 -0
  261. package/plugins/google-uuid-1/LICENSE +93 -0
  262. package/plugins/google-uuid-1/NOTICE +51 -0
  263. package/plugins/google-uuid-1/gemini-extension.json +1 -0
  264. package/plugins/google-uuid-1/plugin.json +10 -0
  265. package/plugins/google-uuid-1/skills/google-uuid/SKILL.md +70 -0
  266. package/plugins/graphql-16/.claude-plugin/plugin.json +9 -0
  267. package/plugins/graphql-16/LICENSE +93 -0
  268. package/plugins/graphql-16/NOTICE +51 -0
  269. package/plugins/graphql-16/gemini-extension.json +1 -0
  270. package/plugins/graphql-16/plugin.json +10 -0
  271. package/plugins/graphql-16/skills/graphql/SKILL.md +56 -0
  272. package/plugins/graphql-17/.claude-plugin/plugin.json +9 -0
  273. package/plugins/graphql-17/LICENSE +93 -0
  274. package/plugins/graphql-17/NOTICE +51 -0
  275. package/plugins/graphql-17/gemini-extension.json +1 -0
  276. package/plugins/graphql-17/plugin.json +10 -0
  277. package/plugins/graphql-17/skills/graphql/SKILL.md +159 -0
  278. package/plugins/graphql-yoga-5/.claude-plugin/plugin.json +9 -0
  279. package/plugins/graphql-yoga-5/LICENSE +93 -0
  280. package/plugins/graphql-yoga-5/NOTICE +51 -0
  281. package/plugins/graphql-yoga-5/gemini-extension.json +1 -0
  282. package/plugins/graphql-yoga-5/plugin.json +10 -0
  283. package/plugins/graphql-yoga-5/skills/graphql-yoga/SKILL.md +68 -0
  284. package/plugins/happy-dom-20/.claude-plugin/plugin.json +9 -0
  285. package/plugins/happy-dom-20/LICENSE +93 -0
  286. package/plugins/happy-dom-20/NOTICE +51 -0
  287. package/plugins/happy-dom-20/gemini-extension.json +1 -0
  288. package/plugins/happy-dom-20/plugin.json +10 -0
  289. package/plugins/happy-dom-20/skills/happy-dom/SKILL.md +172 -0
  290. package/plugins/hono-4/.claude-plugin/plugin.json +9 -0
  291. package/plugins/hono-4/LICENSE +93 -0
  292. package/plugins/hono-4/NOTICE +51 -0
  293. package/plugins/hono-4/gemini-extension.json +1 -0
  294. package/plugins/hono-4/plugin.json +10 -0
  295. package/plugins/hono-4/skills/hono/SKILL.md +203 -0
  296. package/plugins/http-proxy-agent-9/.claude-plugin/plugin.json +9 -0
  297. package/plugins/http-proxy-agent-9/LICENSE +93 -0
  298. package/plugins/http-proxy-agent-9/NOTICE +51 -0
  299. package/plugins/http-proxy-agent-9/gemini-extension.json +1 -0
  300. package/plugins/http-proxy-agent-9/plugin.json +10 -0
  301. package/plugins/http-proxy-agent-9/skills/http-proxy-agent/SKILL.md +142 -0
  302. package/plugins/human-signals-8/.claude-plugin/plugin.json +9 -0
  303. package/plugins/human-signals-8/LICENSE +93 -0
  304. package/plugins/human-signals-8/NOTICE +51 -0
  305. package/plugins/human-signals-8/gemini-extension.json +1 -0
  306. package/plugins/human-signals-8/plugin.json +10 -0
  307. package/plugins/human-signals-8/skills/human-signals/SKILL.md +81 -0
  308. package/plugins/inquirer-14/.claude-plugin/plugin.json +9 -0
  309. package/plugins/inquirer-14/LICENSE +93 -0
  310. package/plugins/inquirer-14/NOTICE +51 -0
  311. package/plugins/inquirer-14/gemini-extension.json +1 -0
  312. package/plugins/inquirer-14/plugin.json +10 -0
  313. package/plugins/inquirer-14/skills/inquirer/SKILL.md +152 -0
  314. package/plugins/ioredis-5/.claude-plugin/plugin.json +9 -0
  315. package/plugins/ioredis-5/LICENSE +93 -0
  316. package/plugins/ioredis-5/NOTICE +51 -0
  317. package/plugins/ioredis-5/gemini-extension.json +1 -0
  318. package/plugins/ioredis-5/plugin.json +10 -0
  319. package/plugins/ioredis-5/skills/ioredis/SKILL.md +63 -0
  320. package/plugins/ioredis-6/.claude-plugin/plugin.json +9 -0
  321. package/plugins/ioredis-6/LICENSE +93 -0
  322. package/plugins/ioredis-6/NOTICE +51 -0
  323. package/plugins/ioredis-6/gemini-extension.json +1 -0
  324. package/plugins/ioredis-6/plugin.json +10 -0
  325. package/plugins/ioredis-6/skills/ioredis/SKILL.md +204 -0
  326. package/plugins/ip-address-10/.claude-plugin/plugin.json +9 -0
  327. package/plugins/ip-address-10/LICENSE +93 -0
  328. package/plugins/ip-address-10/NOTICE +51 -0
  329. package/plugins/ip-address-10/gemini-extension.json +1 -0
  330. package/plugins/ip-address-10/plugin.json +10 -0
  331. package/plugins/ip-address-10/skills/ip-address/SKILL.md +184 -0
  332. package/plugins/jackspeak-4/.claude-plugin/plugin.json +9 -0
  333. package/plugins/jackspeak-4/LICENSE +93 -0
  334. package/plugins/jackspeak-4/NOTICE +51 -0
  335. package/plugins/jackspeak-4/gemini-extension.json +1 -0
  336. package/plugins/jackspeak-4/plugin.json +10 -0
  337. package/plugins/jackspeak-4/skills/jackspeak/SKILL.md +162 -0
  338. package/plugins/jake-12/.claude-plugin/plugin.json +9 -0
  339. package/plugins/jake-12/LICENSE +93 -0
  340. package/plugins/jake-12/NOTICE +51 -0
  341. package/plugins/jake-12/gemini-extension.json +1 -0
  342. package/plugins/jake-12/plugin.json +10 -0
  343. package/plugins/jake-12/skills/jake/SKILL.md +182 -0
  344. package/plugins/jasmine-core-7/.claude-plugin/plugin.json +9 -0
  345. package/plugins/jasmine-core-7/LICENSE +93 -0
  346. package/plugins/jasmine-core-7/NOTICE +51 -0
  347. package/plugins/jasmine-core-7/gemini-extension.json +1 -0
  348. package/plugins/jasmine-core-7/plugin.json +10 -0
  349. package/plugins/jasmine-core-7/skills/jasmine-core/SKILL.md +173 -0
  350. package/plugins/jest-cli-30/.claude-plugin/plugin.json +9 -0
  351. package/plugins/jest-cli-30/LICENSE +93 -0
  352. package/plugins/jest-cli-30/NOTICE +51 -0
  353. package/plugins/jest-cli-30/gemini-extension.json +1 -0
  354. package/plugins/jest-cli-30/plugin.json +10 -0
  355. package/plugins/jest-cli-30/skills/jest-cli/SKILL.md +121 -0
  356. package/plugins/jest-extended-7/.claude-plugin/plugin.json +9 -0
  357. package/plugins/jest-extended-7/LICENSE +93 -0
  358. package/plugins/jest-extended-7/NOTICE +51 -0
  359. package/plugins/jest-extended-7/gemini-extension.json +1 -0
  360. package/plugins/jest-extended-7/plugin.json +10 -0
  361. package/plugins/jest-extended-7/skills/jest-extended/SKILL.md +125 -0
  362. package/plugins/jsdom-30/.claude-plugin/plugin.json +9 -0
  363. package/plugins/jsdom-30/LICENSE +93 -0
  364. package/plugins/jsdom-30/NOTICE +51 -0
  365. package/plugins/jsdom-30/gemini-extension.json +1 -0
  366. package/plugins/jsdom-30/plugin.json +10 -0
  367. package/plugins/jsdom-30/skills/jsdom/SKILL.md +64 -0
  368. package/plugins/level-supports-6/.claude-plugin/plugin.json +9 -0
  369. package/plugins/level-supports-6/LICENSE +93 -0
  370. package/plugins/level-supports-6/NOTICE +51 -0
  371. package/plugins/level-supports-6/gemini-extension.json +1 -0
  372. package/plugins/level-supports-6/plugin.json +10 -0
  373. package/plugins/level-supports-6/skills/level-supports/SKILL.md +178 -0
  374. package/plugins/lowdb-7/.claude-plugin/plugin.json +9 -0
  375. package/plugins/lowdb-7/LICENSE +93 -0
  376. package/plugins/lowdb-7/NOTICE +51 -0
  377. package/plugins/lowdb-7/gemini-extension.json +1 -0
  378. package/plugins/lowdb-7/plugin.json +10 -0
  379. package/plugins/lowdb-7/skills/lowdb/SKILL.md +163 -0
  380. package/plugins/make-fetch-happen-16/.claude-plugin/plugin.json +9 -0
  381. package/plugins/make-fetch-happen-16/LICENSE +93 -0
  382. package/plugins/make-fetch-happen-16/NOTICE +51 -0
  383. package/plugins/make-fetch-happen-16/gemini-extension.json +1 -0
  384. package/plugins/make-fetch-happen-16/plugin.json +10 -0
  385. package/plugins/make-fetch-happen-16/skills/make-fetch-happen/SKILL.md +171 -0
  386. package/plugins/mdx-bundler-10/.claude-plugin/plugin.json +9 -0
  387. package/plugins/mdx-bundler-10/LICENSE +93 -0
  388. package/plugins/mdx-bundler-10/NOTICE +51 -0
  389. package/plugins/mdx-bundler-10/gemini-extension.json +1 -0
  390. package/plugins/mdx-bundler-10/plugin.json +10 -0
  391. package/plugins/mdx-bundler-10/skills/mdx-bundler/SKILL.md +133 -0
  392. package/plugins/mocha-12/.claude-plugin/plugin.json +9 -0
  393. package/plugins/mocha-12/LICENSE +93 -0
  394. package/plugins/mocha-12/NOTICE +51 -0
  395. package/plugins/mocha-12/gemini-extension.json +1 -0
  396. package/plugins/mocha-12/plugin.json +10 -0
  397. package/plugins/mocha-12/skills/mocha/SKILL.md +157 -0
  398. package/plugins/modelcontextprotocol-client-2/.claude-plugin/plugin.json +9 -0
  399. package/plugins/modelcontextprotocol-client-2/LICENSE +93 -0
  400. package/plugins/modelcontextprotocol-client-2/NOTICE +51 -0
  401. package/plugins/modelcontextprotocol-client-2/gemini-extension.json +1 -0
  402. package/plugins/modelcontextprotocol-client-2/plugin.json +10 -0
  403. package/plugins/modelcontextprotocol-client-2/skills/modelcontextprotocol-client/SKILL.md +86 -0
  404. package/plugins/modelcontextprotocol-sdk-1/.claude-plugin/plugin.json +9 -0
  405. package/plugins/modelcontextprotocol-sdk-1/LICENSE +93 -0
  406. package/plugins/modelcontextprotocol-sdk-1/NOTICE +51 -0
  407. package/plugins/modelcontextprotocol-sdk-1/gemini-extension.json +1 -0
  408. package/plugins/modelcontextprotocol-sdk-1/plugin.json +10 -0
  409. package/plugins/modelcontextprotocol-sdk-1/skills/modelcontextprotocol-sdk/SKILL.md +80 -0
  410. package/plugins/modelcontextprotocol-server-2/.claude-plugin/plugin.json +9 -0
  411. package/plugins/modelcontextprotocol-server-2/LICENSE +93 -0
  412. package/plugins/modelcontextprotocol-server-2/NOTICE +51 -0
  413. package/plugins/modelcontextprotocol-server-2/gemini-extension.json +1 -0
  414. package/plugins/modelcontextprotocol-server-2/plugin.json +10 -0
  415. package/plugins/modelcontextprotocol-server-2/skills/modelcontextprotocol-server/SKILL.md +80 -0
  416. package/plugins/msw-2/.claude-plugin/plugin.json +9 -0
  417. package/plugins/msw-2/LICENSE +93 -0
  418. package/plugins/msw-2/NOTICE +51 -0
  419. package/plugins/msw-2/gemini-extension.json +1 -0
  420. package/plugins/msw-2/plugin.json +10 -0
  421. package/plugins/msw-2/skills/msw/SKILL.md +182 -0
  422. package/plugins/negotiator-1/.claude-plugin/plugin.json +9 -0
  423. package/plugins/negotiator-1/LICENSE +93 -0
  424. package/plugins/negotiator-1/NOTICE +51 -0
  425. package/plugins/negotiator-1/gemini-extension.json +1 -0
  426. package/plugins/negotiator-1/plugin.json +10 -0
  427. package/plugins/negotiator-1/skills/negotiator/SKILL.md +180 -0
  428. package/plugins/npm-run-path-6/.claude-plugin/plugin.json +9 -0
  429. package/plugins/npm-run-path-6/LICENSE +93 -0
  430. package/plugins/npm-run-path-6/NOTICE +51 -0
  431. package/plugins/npm-run-path-6/gemini-extension.json +1 -0
  432. package/plugins/npm-run-path-6/plugin.json +10 -0
  433. package/plugins/npm-run-path-6/skills/npm-run-path/SKILL.md +137 -0
  434. package/plugins/nyc-18/.claude-plugin/plugin.json +9 -0
  435. package/plugins/nyc-18/LICENSE +93 -0
  436. package/plugins/nyc-18/NOTICE +51 -0
  437. package/plugins/nyc-18/gemini-extension.json +1 -0
  438. package/plugins/nyc-18/plugin.json +10 -0
  439. package/plugins/nyc-18/skills/nyc/SKILL.md +152 -0
  440. package/plugins/ow-3/.claude-plugin/plugin.json +9 -0
  441. package/plugins/ow-3/LICENSE +93 -0
  442. package/plugins/ow-3/NOTICE +51 -0
  443. package/plugins/ow-3/gemini-extension.json +1 -0
  444. package/plugins/ow-3/plugin.json +10 -0
  445. package/plugins/ow-3/skills/ow/SKILL.md +159 -0
  446. package/plugins/pac-proxy-agent-9/.claude-plugin/plugin.json +9 -0
  447. package/plugins/pac-proxy-agent-9/LICENSE +93 -0
  448. package/plugins/pac-proxy-agent-9/NOTICE +51 -0
  449. package/plugins/pac-proxy-agent-9/gemini-extension.json +1 -0
  450. package/plugins/pac-proxy-agent-9/plugin.json +10 -0
  451. package/plugins/pac-proxy-agent-9/skills/pac-proxy-agent/SKILL.md +111 -0
  452. package/plugins/pgsql-ast-parser-12/.claude-plugin/plugin.json +9 -0
  453. package/plugins/pgsql-ast-parser-12/LICENSE +93 -0
  454. package/plugins/pgsql-ast-parser-12/NOTICE +51 -0
  455. package/plugins/pgsql-ast-parser-12/gemini-extension.json +1 -0
  456. package/plugins/pgsql-ast-parser-12/plugin.json +10 -0
  457. package/plugins/pgsql-ast-parser-12/skills/pgsql-ast-parser/SKILL.md +136 -0
  458. package/plugins/playwright-test-1/.claude-plugin/plugin.json +9 -0
  459. package/plugins/playwright-test-1/LICENSE +93 -0
  460. package/plugins/playwright-test-1/NOTICE +51 -0
  461. package/plugins/playwright-test-1/gemini-extension.json +1 -0
  462. package/plugins/playwright-test-1/plugin.json +10 -0
  463. package/plugins/playwright-test-1/skills/playwright-test/SKILL.md +222 -0
  464. package/plugins/pmcp/.claude-plugin/plugin.json +9 -0
  465. package/plugins/pmcp/.mcp.json +9 -0
  466. package/plugins/pmcp/LICENSE +93 -0
  467. package/plugins/pmcp/NOTICE +51 -0
  468. package/plugins/pmcp/gemini-extension.json +11 -0
  469. package/plugins/pmcp/mcp.json +10 -0
  470. package/plugins/pmcp/plugin.json +10 -0
  471. package/plugins/pmcp/skills/package-skill-catalog/SKILL.md +54 -0
  472. package/plugins/pothos-core-4/.claude-plugin/plugin.json +9 -0
  473. package/plugins/pothos-core-4/LICENSE +93 -0
  474. package/plugins/pothos-core-4/NOTICE +51 -0
  475. package/plugins/pothos-core-4/gemini-extension.json +1 -0
  476. package/plugins/pothos-core-4/plugin.json +10 -0
  477. package/plugins/pothos-core-4/skills/pothos-core/SKILL.md +68 -0
  478. package/plugins/prettier-3/.claude-plugin/plugin.json +9 -0
  479. package/plugins/prettier-3/LICENSE +93 -0
  480. package/plugins/prettier-3/NOTICE +51 -0
  481. package/plugins/prettier-3/gemini-extension.json +1 -0
  482. package/plugins/prettier-3/plugin.json +10 -0
  483. package/plugins/prettier-3/skills/prettier/SKILL.md +69 -0
  484. package/plugins/protobufjs-8/.claude-plugin/plugin.json +9 -0
  485. package/plugins/protobufjs-8/LICENSE +93 -0
  486. package/plugins/protobufjs-8/NOTICE +51 -0
  487. package/plugins/protobufjs-8/gemini-extension.json +1 -0
  488. package/plugins/protobufjs-8/plugin.json +10 -0
  489. package/plugins/protobufjs-8/skills/protobufjs/SKILL.md +128 -0
  490. package/plugins/proxy-agent-8/.claude-plugin/plugin.json +9 -0
  491. package/plugins/proxy-agent-8/LICENSE +93 -0
  492. package/plugins/proxy-agent-8/NOTICE +51 -0
  493. package/plugins/proxy-agent-8/gemini-extension.json +1 -0
  494. package/plugins/proxy-agent-8/plugin.json +10 -0
  495. package/plugins/proxy-agent-8/skills/proxy-agent/SKILL.md +120 -0
  496. package/plugins/pydantic-2/.claude-plugin/plugin.json +9 -0
  497. package/plugins/pydantic-2/LICENSE +93 -0
  498. package/plugins/pydantic-2/NOTICE +51 -0
  499. package/plugins/pydantic-2/gemini-extension.json +1 -0
  500. package/plugins/pydantic-2/plugin.json +10 -0
  501. package/plugins/pydantic-2/skills/pydantic/SKILL.md +74 -0
  502. package/plugins/react-19/.claude-plugin/plugin.json +9 -0
  503. package/plugins/react-19/LICENSE +93 -0
  504. package/plugins/react-19/NOTICE +51 -0
  505. package/plugins/react-19/gemini-extension.json +1 -0
  506. package/plugins/react-19/plugin.json +10 -0
  507. package/plugins/react-19/skills/react/SKILL.md +150 -0
  508. package/plugins/react-dom-19/.claude-plugin/plugin.json +9 -0
  509. package/plugins/react-dom-19/LICENSE +93 -0
  510. package/plugins/react-dom-19/NOTICE +51 -0
  511. package/plugins/react-dom-19/gemini-extension.json +1 -0
  512. package/plugins/react-dom-19/plugin.json +10 -0
  513. package/plugins/react-dom-19/skills/react-dom/SKILL.md +178 -0
  514. package/plugins/react-icons-5/.claude-plugin/plugin.json +9 -0
  515. package/plugins/react-icons-5/LICENSE +93 -0
  516. package/plugins/react-icons-5/NOTICE +51 -0
  517. package/plugins/react-icons-5/gemini-extension.json +1 -0
  518. package/plugins/react-icons-5/plugin.json +10 -0
  519. package/plugins/react-icons-5/skills/react-icons/SKILL.md +194 -0
  520. package/plugins/react-is-19/.claude-plugin/plugin.json +9 -0
  521. package/plugins/react-is-19/LICENSE +93 -0
  522. package/plugins/react-is-19/NOTICE +51 -0
  523. package/plugins/react-is-19/gemini-extension.json +1 -0
  524. package/plugins/react-is-19/plugin.json +10 -0
  525. package/plugins/react-is-19/skills/react-is/SKILL.md +131 -0
  526. package/plugins/react-markdown-10/.claude-plugin/plugin.json +9 -0
  527. package/plugins/react-markdown-10/LICENSE +93 -0
  528. package/plugins/react-markdown-10/NOTICE +51 -0
  529. package/plugins/react-markdown-10/gemini-extension.json +1 -0
  530. package/plugins/react-markdown-10/plugin.json +10 -0
  531. package/plugins/react-markdown-10/skills/react-markdown/SKILL.md +163 -0
  532. package/plugins/react-router-8/.claude-plugin/plugin.json +9 -0
  533. package/plugins/react-router-8/LICENSE +93 -0
  534. package/plugins/react-router-8/NOTICE +51 -0
  535. package/plugins/react-router-8/gemini-extension.json +1 -0
  536. package/plugins/react-router-8/plugin.json +10 -0
  537. package/plugins/react-router-8/skills/react-router/SKILL.md +115 -0
  538. package/plugins/release-it-21/.claude-plugin/plugin.json +9 -0
  539. package/plugins/release-it-21/LICENSE +93 -0
  540. package/plugins/release-it-21/NOTICE +51 -0
  541. package/plugins/release-it-21/gemini-extension.json +1 -0
  542. package/plugins/release-it-21/plugin.json +10 -0
  543. package/plugins/release-it-21/skills/release-it/SKILL.md +202 -0
  544. package/plugins/reselect-5/.claude-plugin/plugin.json +9 -0
  545. package/plugins/reselect-5/LICENSE +93 -0
  546. package/plugins/reselect-5/NOTICE +51 -0
  547. package/plugins/reselect-5/gemini-extension.json +1 -0
  548. package/plugins/reselect-5/plugin.json +10 -0
  549. package/plugins/reselect-5/skills/reselect/SKILL.md +215 -0
  550. package/plugins/responselike-4/.claude-plugin/plugin.json +9 -0
  551. package/plugins/responselike-4/LICENSE +93 -0
  552. package/plugins/responselike-4/NOTICE +51 -0
  553. package/plugins/responselike-4/gemini-extension.json +1 -0
  554. package/plugins/responselike-4/plugin.json +10 -0
  555. package/plugins/responselike-4/skills/responselike/SKILL.md +173 -0
  556. package/plugins/rolldown-1/.claude-plugin/plugin.json +9 -0
  557. package/plugins/rolldown-1/LICENSE +93 -0
  558. package/plugins/rolldown-1/NOTICE +51 -0
  559. package/plugins/rolldown-1/gemini-extension.json +1 -0
  560. package/plugins/rolldown-1/plugin.json +10 -0
  561. package/plugins/rolldown-1/skills/rolldown/SKILL.md +182 -0
  562. package/plugins/semver-7/.claude-plugin/plugin.json +9 -0
  563. package/plugins/semver-7/LICENSE +93 -0
  564. package/plugins/semver-7/NOTICE +51 -0
  565. package/plugins/semver-7/gemini-extension.json +1 -0
  566. package/plugins/semver-7/plugin.json +10 -0
  567. package/plugins/semver-7/skills/semver/SKILL.md +55 -0
  568. package/plugins/serde-json-1/.claude-plugin/plugin.json +9 -0
  569. package/plugins/serde-json-1/LICENSE +93 -0
  570. package/plugins/serde-json-1/NOTICE +51 -0
  571. package/plugins/serde-json-1/gemini-extension.json +1 -0
  572. package/plugins/serde-json-1/plugin.json +10 -0
  573. package/plugins/serde-json-1/skills/serde-json/SKILL.md +68 -0
  574. package/plugins/sinon-22/.claude-plugin/plugin.json +9 -0
  575. package/plugins/sinon-22/LICENSE +93 -0
  576. package/plugins/sinon-22/NOTICE +51 -0
  577. package/plugins/sinon-22/gemini-extension.json +1 -0
  578. package/plugins/sinon-22/plugin.json +10 -0
  579. package/plugins/sinon-22/skills/sinon/SKILL.md +215 -0
  580. package/plugins/slice-ansi-9/.claude-plugin/plugin.json +9 -0
  581. package/plugins/slice-ansi-9/LICENSE +93 -0
  582. package/plugins/slice-ansi-9/NOTICE +51 -0
  583. package/plugins/slice-ansi-9/gemini-extension.json +1 -0
  584. package/plugins/slice-ansi-9/plugin.json +10 -0
  585. package/plugins/slice-ansi-9/skills/slice-ansi/SKILL.md +111 -0
  586. package/plugins/smol-toml-1/.claude-plugin/plugin.json +9 -0
  587. package/plugins/smol-toml-1/LICENSE +93 -0
  588. package/plugins/smol-toml-1/NOTICE +51 -0
  589. package/plugins/smol-toml-1/gemini-extension.json +1 -0
  590. package/plugins/smol-toml-1/plugin.json +10 -0
  591. package/plugins/smol-toml-1/skills/smol-toml/SKILL.md +63 -0
  592. package/plugins/socks-proxy-agent-10/.claude-plugin/plugin.json +9 -0
  593. package/plugins/socks-proxy-agent-10/LICENSE +93 -0
  594. package/plugins/socks-proxy-agent-10/NOTICE +51 -0
  595. package/plugins/socks-proxy-agent-10/gemini-extension.json +1 -0
  596. package/plugins/socks-proxy-agent-10/plugin.json +10 -0
  597. package/plugins/socks-proxy-agent-10/skills/socks-proxy-agent/SKILL.md +172 -0
  598. package/plugins/string-width-8/.claude-plugin/plugin.json +9 -0
  599. package/plugins/string-width-8/LICENSE +93 -0
  600. package/plugins/string-width-8/NOTICE +51 -0
  601. package/plugins/string-width-8/gemini-extension.json +1 -0
  602. package/plugins/string-width-8/plugin.json +10 -0
  603. package/plugins/string-width-8/skills/string-width/SKILL.md +101 -0
  604. package/plugins/superstruct-2/.claude-plugin/plugin.json +9 -0
  605. package/plugins/superstruct-2/LICENSE +93 -0
  606. package/plugins/superstruct-2/NOTICE +51 -0
  607. package/plugins/superstruct-2/gemini-extension.json +1 -0
  608. package/plugins/superstruct-2/plugin.json +10 -0
  609. package/plugins/superstruct-2/skills/superstruct/SKILL.md +170 -0
  610. package/plugins/supports-color-11/.claude-plugin/plugin.json +9 -0
  611. package/plugins/supports-color-11/LICENSE +93 -0
  612. package/plugins/supports-color-11/NOTICE +51 -0
  613. package/plugins/supports-color-11/gemini-extension.json +1 -0
  614. package/plugins/supports-color-11/plugin.json +10 -0
  615. package/plugins/supports-color-11/skills/supports-color/SKILL.md +115 -0
  616. package/plugins/tailwindcss-3/.claude-plugin/plugin.json +9 -0
  617. package/plugins/tailwindcss-3/LICENSE +93 -0
  618. package/plugins/tailwindcss-3/NOTICE +51 -0
  619. package/plugins/tailwindcss-3/gemini-extension.json +1 -0
  620. package/plugins/tailwindcss-3/plugin.json +10 -0
  621. package/plugins/tailwindcss-3/skills/tailwindcss/SKILL.md +72 -0
  622. package/plugins/tailwindcss-4/.claude-plugin/plugin.json +9 -0
  623. package/plugins/tailwindcss-4/LICENSE +93 -0
  624. package/plugins/tailwindcss-4/NOTICE +51 -0
  625. package/plugins/tailwindcss-4/gemini-extension.json +1 -0
  626. package/plugins/tailwindcss-4/plugin.json +10 -0
  627. package/plugins/tailwindcss-4/skills/tailwindcss/SKILL.md +82 -0
  628. package/plugins/tanstack-react-router-1/.claude-plugin/plugin.json +9 -0
  629. package/plugins/tanstack-react-router-1/LICENSE +93 -0
  630. package/plugins/tanstack-react-router-1/NOTICE +51 -0
  631. package/plugins/tanstack-react-router-1/gemini-extension.json +1 -0
  632. package/plugins/tanstack-react-router-1/plugin.json +10 -0
  633. package/plugins/tanstack-react-router-1/skills/tanstack-react-router/SKILL.md +96 -0
  634. package/plugins/tedious-20/.claude-plugin/plugin.json +9 -0
  635. package/plugins/tedious-20/LICENSE +93 -0
  636. package/plugins/tedious-20/NOTICE +51 -0
  637. package/plugins/tedious-20/gemini-extension.json +1 -0
  638. package/plugins/tedious-20/plugin.json +10 -0
  639. package/plugins/tedious-20/skills/tedious/SKILL.md +174 -0
  640. package/plugins/testing-library-react-16/.claude-plugin/plugin.json +9 -0
  641. package/plugins/testing-library-react-16/LICENSE +93 -0
  642. package/plugins/testing-library-react-16/NOTICE +51 -0
  643. package/plugins/testing-library-react-16/gemini-extension.json +1 -0
  644. package/plugins/testing-library-react-16/plugin.json +10 -0
  645. package/plugins/testing-library-react-16/skills/testing-library-react/SKILL.md +92 -0
  646. package/plugins/tinyspy-4/.claude-plugin/plugin.json +9 -0
  647. package/plugins/tinyspy-4/LICENSE +93 -0
  648. package/plugins/tinyspy-4/NOTICE +51 -0
  649. package/plugins/tinyspy-4/gemini-extension.json +1 -0
  650. package/plugins/tinyspy-4/plugin.json +10 -0
  651. package/plugins/tinyspy-4/skills/tinyspy/SKILL.md +158 -0
  652. package/plugins/tldts-7/.claude-plugin/plugin.json +9 -0
  653. package/plugins/tldts-7/LICENSE +93 -0
  654. package/plugins/tldts-7/NOTICE +51 -0
  655. package/plugins/tldts-7/gemini-extension.json +1 -0
  656. package/plugins/tldts-7/plugin.json +10 -0
  657. package/plugins/tldts-7/skills/tldts/SKILL.md +120 -0
  658. package/plugins/ts-morph-28/.claude-plugin/plugin.json +9 -0
  659. package/plugins/ts-morph-28/LICENSE +93 -0
  660. package/plugins/ts-morph-28/NOTICE +51 -0
  661. package/plugins/ts-morph-28/gemini-extension.json +1 -0
  662. package/plugins/ts-morph-28/plugin.json +10 -0
  663. package/plugins/ts-morph-28/skills/ts-morph/SKILL.md +219 -0
  664. package/plugins/tsup-8/.claude-plugin/plugin.json +9 -0
  665. package/plugins/tsup-8/LICENSE +93 -0
  666. package/plugins/tsup-8/NOTICE +51 -0
  667. package/plugins/tsup-8/gemini-extension.json +1 -0
  668. package/plugins/tsup-8/plugin.json +10 -0
  669. package/plugins/tsup-8/skills/tsup/SKILL.md +97 -0
  670. package/plugins/tsx-4/.claude-plugin/plugin.json +9 -0
  671. package/plugins/tsx-4/LICENSE +93 -0
  672. package/plugins/tsx-4/NOTICE +51 -0
  673. package/plugins/tsx-4/gemini-extension.json +1 -0
  674. package/plugins/tsx-4/plugin.json +10 -0
  675. package/plugins/tsx-4/skills/tsx/SKILL.md +159 -0
  676. package/plugins/type-fest-5/.claude-plugin/plugin.json +9 -0
  677. package/plugins/type-fest-5/LICENSE +93 -0
  678. package/plugins/type-fest-5/NOTICE +51 -0
  679. package/plugins/type-fest-5/gemini-extension.json +1 -0
  680. package/plugins/type-fest-5/plugin.json +10 -0
  681. package/plugins/type-fest-5/skills/type-fest/SKILL.md +132 -0
  682. package/plugins/typescript-5/.claude-plugin/plugin.json +9 -0
  683. package/plugins/typescript-5/LICENSE +93 -0
  684. package/plugins/typescript-5/NOTICE +51 -0
  685. package/plugins/typescript-5/gemini-extension.json +1 -0
  686. package/plugins/typescript-5/plugin.json +10 -0
  687. package/plugins/typescript-5/skills/typescript/SKILL.md +107 -0
  688. package/plugins/typescript-eslint-8/.claude-plugin/plugin.json +9 -0
  689. package/plugins/typescript-eslint-8/LICENSE +93 -0
  690. package/plugins/typescript-eslint-8/NOTICE +51 -0
  691. package/plugins/typescript-eslint-8/gemini-extension.json +1 -0
  692. package/plugins/typescript-eslint-8/plugin.json +10 -0
  693. package/plugins/typescript-eslint-8/skills/typescript-eslint/SKILL.md +179 -0
  694. package/plugins/typescript-eslint-eslint-plugin-8/.claude-plugin/plugin.json +9 -0
  695. package/plugins/typescript-eslint-eslint-plugin-8/LICENSE +93 -0
  696. package/plugins/typescript-eslint-eslint-plugin-8/NOTICE +51 -0
  697. package/plugins/typescript-eslint-eslint-plugin-8/gemini-extension.json +1 -0
  698. package/plugins/typescript-eslint-eslint-plugin-8/plugin.json +10 -0
  699. package/plugins/typescript-eslint-eslint-plugin-8/skills/typescript-eslint-eslint-plugin/SKILL.md +158 -0
  700. package/plugins/typescript-eslint-estree-8/.claude-plugin/plugin.json +9 -0
  701. package/plugins/typescript-eslint-estree-8/LICENSE +93 -0
  702. package/plugins/typescript-eslint-estree-8/NOTICE +51 -0
  703. package/plugins/typescript-eslint-estree-8/gemini-extension.json +1 -0
  704. package/plugins/typescript-eslint-estree-8/plugin.json +10 -0
  705. package/plugins/typescript-eslint-estree-8/skills/typescript-eslint-estree/SKILL.md +125 -0
  706. package/plugins/typescript-eslint-parser-8/.claude-plugin/plugin.json +9 -0
  707. package/plugins/typescript-eslint-parser-8/LICENSE +93 -0
  708. package/plugins/typescript-eslint-parser-8/NOTICE +51 -0
  709. package/plugins/typescript-eslint-parser-8/gemini-extension.json +1 -0
  710. package/plugins/typescript-eslint-parser-8/plugin.json +10 -0
  711. package/plugins/typescript-eslint-parser-8/skills/typescript-eslint-parser/SKILL.md +141 -0
  712. package/plugins/typescript-eslint-types-8/.claude-plugin/plugin.json +9 -0
  713. package/plugins/typescript-eslint-types-8/LICENSE +93 -0
  714. package/plugins/typescript-eslint-types-8/NOTICE +51 -0
  715. package/plugins/typescript-eslint-types-8/gemini-extension.json +1 -0
  716. package/plugins/typescript-eslint-types-8/plugin.json +10 -0
  717. package/plugins/typescript-eslint-types-8/skills/typescript-eslint-types/SKILL.md +117 -0
  718. package/plugins/typescript-eslint-utils-8/.claude-plugin/plugin.json +9 -0
  719. package/plugins/typescript-eslint-utils-8/LICENSE +93 -0
  720. package/plugins/typescript-eslint-utils-8/NOTICE +51 -0
  721. package/plugins/typescript-eslint-utils-8/gemini-extension.json +1 -0
  722. package/plugins/typescript-eslint-utils-8/plugin.json +10 -0
  723. package/plugins/typescript-eslint-utils-8/skills/typescript-eslint-utils/SKILL.md +195 -0
  724. package/plugins/typescript-eslint-visitor-keys-8/.claude-plugin/plugin.json +9 -0
  725. package/plugins/typescript-eslint-visitor-keys-8/LICENSE +93 -0
  726. package/plugins/typescript-eslint-visitor-keys-8/NOTICE +51 -0
  727. package/plugins/typescript-eslint-visitor-keys-8/gemini-extension.json +1 -0
  728. package/plugins/typescript-eslint-visitor-keys-8/plugin.json +10 -0
  729. package/plugins/typescript-eslint-visitor-keys-8/skills/typescript-eslint-visitor-keys/SKILL.md +116 -0
  730. package/plugins/valibot-1/.claude-plugin/plugin.json +9 -0
  731. package/plugins/valibot-1/LICENSE +93 -0
  732. package/plugins/valibot-1/NOTICE +51 -0
  733. package/plugins/valibot-1/gemini-extension.json +1 -0
  734. package/plugins/valibot-1/plugin.json +10 -0
  735. package/plugins/valibot-1/skills/valibot/SKILL.md +190 -0
  736. package/plugins/vite-7/.claude-plugin/plugin.json +9 -0
  737. package/plugins/vite-7/LICENSE +93 -0
  738. package/plugins/vite-7/NOTICE +51 -0
  739. package/plugins/vite-7/gemini-extension.json +1 -0
  740. package/plugins/vite-7/plugin.json +10 -0
  741. package/plugins/vite-7/skills/vite/SKILL.md +111 -0
  742. package/plugins/vite-8/.claude-plugin/plugin.json +9 -0
  743. package/plugins/vite-8/LICENSE +93 -0
  744. package/plugins/vite-8/NOTICE +51 -0
  745. package/plugins/vite-8/gemini-extension.json +1 -0
  746. package/plugins/vite-8/plugin.json +10 -0
  747. package/plugins/vite-8/skills/vite/SKILL.md +267 -0
  748. package/plugins/vitejs-plugin-react-5/.claude-plugin/plugin.json +9 -0
  749. package/plugins/vitejs-plugin-react-5/LICENSE +93 -0
  750. package/plugins/vitejs-plugin-react-5/NOTICE +51 -0
  751. package/plugins/vitejs-plugin-react-5/gemini-extension.json +1 -0
  752. package/plugins/vitejs-plugin-react-5/plugin.json +10 -0
  753. package/plugins/vitejs-plugin-react-5/skills/vitejs-plugin-react/SKILL.md +67 -0
  754. package/plugins/vitejs-plugin-react-6/.claude-plugin/plugin.json +9 -0
  755. package/plugins/vitejs-plugin-react-6/LICENSE +93 -0
  756. package/plugins/vitejs-plugin-react-6/NOTICE +51 -0
  757. package/plugins/vitejs-plugin-react-6/gemini-extension.json +1 -0
  758. package/plugins/vitejs-plugin-react-6/plugin.json +10 -0
  759. package/plugins/vitejs-plugin-react-6/skills/vitejs-plugin-react/SKILL.md +232 -0
  760. package/plugins/vitest-4/.claude-plugin/plugin.json +9 -0
  761. package/plugins/vitest-4/LICENSE +93 -0
  762. package/plugins/vitest-4/NOTICE +51 -0
  763. package/plugins/vitest-4/gemini-extension.json +1 -0
  764. package/plugins/vitest-4/plugin.json +10 -0
  765. package/plugins/vitest-4/skills/vitest/SKILL.md +127 -0
  766. package/plugins/vitest-5/.claude-plugin/plugin.json +9 -0
  767. package/plugins/vitest-5/LICENSE +93 -0
  768. package/plugins/vitest-5/NOTICE +51 -0
  769. package/plugins/vitest-5/gemini-extension.json +1 -0
  770. package/plugins/vitest-5/plugin.json +10 -0
  771. package/plugins/vitest-5/skills/vitest/SKILL.md +186 -0
  772. package/plugins/whatwg-mimetype-5/.claude-plugin/plugin.json +9 -0
  773. package/plugins/whatwg-mimetype-5/LICENSE +93 -0
  774. package/plugins/whatwg-mimetype-5/NOTICE +51 -0
  775. package/plugins/whatwg-mimetype-5/gemini-extension.json +1 -0
  776. package/plugins/whatwg-mimetype-5/plugin.json +10 -0
  777. package/plugins/whatwg-mimetype-5/skills/whatwg-mimetype/SKILL.md +150 -0
  778. package/plugins/wrangler-4/.claude-plugin/plugin.json +9 -0
  779. package/plugins/wrangler-4/LICENSE +93 -0
  780. package/plugins/wrangler-4/NOTICE +51 -0
  781. package/plugins/wrangler-4/gemini-extension.json +1 -0
  782. package/plugins/wrangler-4/plugin.json +10 -0
  783. package/plugins/wrangler-4/skills/wrangler/SKILL.md +87 -0
  784. package/plugins/wrap-ansi-10/.claude-plugin/plugin.json +9 -0
  785. package/plugins/wrap-ansi-10/LICENSE +93 -0
  786. package/plugins/wrap-ansi-10/NOTICE +51 -0
  787. package/plugins/wrap-ansi-10/gemini-extension.json +1 -0
  788. package/plugins/wrap-ansi-10/plugin.json +10 -0
  789. package/plugins/wrap-ansi-10/skills/wrap-ansi/SKILL.md +119 -0
  790. package/plugins/yaml-2/.claude-plugin/plugin.json +9 -0
  791. package/plugins/yaml-2/LICENSE +93 -0
  792. package/plugins/yaml-2/NOTICE +51 -0
  793. package/plugins/yaml-2/gemini-extension.json +1 -0
  794. package/plugins/yaml-2/plugin.json +10 -0
  795. package/plugins/yaml-2/skills/yaml/SKILL.md +56 -0
  796. package/plugins/yargs-18/.claude-plugin/plugin.json +9 -0
  797. package/plugins/yargs-18/LICENSE +93 -0
  798. package/plugins/yargs-18/NOTICE +51 -0
  799. package/plugins/yargs-18/gemini-extension.json +1 -0
  800. package/plugins/yargs-18/plugin.json +10 -0
  801. package/plugins/yargs-18/skills/yargs/SKILL.md +175 -0
  802. package/plugins/yargs-parser-22/.claude-plugin/plugin.json +9 -0
  803. package/plugins/yargs-parser-22/LICENSE +93 -0
  804. package/plugins/yargs-parser-22/NOTICE +51 -0
  805. package/plugins/yargs-parser-22/gemini-extension.json +1 -0
  806. package/plugins/yargs-parser-22/plugin.json +10 -0
  807. package/plugins/yargs-parser-22/skills/yargs-parser/SKILL.md +179 -0
  808. package/plugins/yeoman-environment-7/.claude-plugin/plugin.json +9 -0
  809. package/plugins/yeoman-environment-7/LICENSE +93 -0
  810. package/plugins/yeoman-environment-7/NOTICE +51 -0
  811. package/plugins/yeoman-environment-7/gemini-extension.json +1 -0
  812. package/plugins/yeoman-environment-7/plugin.json +10 -0
  813. package/plugins/yeoman-environment-7/skills/yeoman-environment/SKILL.md +136 -0
  814. package/plugins/z-schema-12/.claude-plugin/plugin.json +9 -0
  815. package/plugins/z-schema-12/LICENSE +93 -0
  816. package/plugins/z-schema-12/NOTICE +51 -0
  817. package/plugins/z-schema-12/gemini-extension.json +1 -0
  818. package/plugins/z-schema-12/plugin.json +10 -0
  819. package/plugins/z-schema-12/skills/z-schema/SKILL.md +179 -0
  820. package/plugins/zod-schema-validation-3/.claude-plugin/plugin.json +9 -0
  821. package/plugins/zod-schema-validation-3/LICENSE +93 -0
  822. package/plugins/zod-schema-validation-3/NOTICE +51 -0
  823. package/plugins/zod-schema-validation-3/gemini-extension.json +1 -0
  824. package/plugins/zod-schema-validation-3/plugin.json +10 -0
  825. package/plugins/zod-schema-validation-3/skills/zod-schema-validation/SKILL.md +188 -0
  826. package/plugins/zod-schema-validation-4/.claude-plugin/plugin.json +9 -0
  827. package/plugins/zod-schema-validation-4/LICENSE +93 -0
  828. package/plugins/zod-schema-validation-4/NOTICE +51 -0
  829. package/plugins/zod-schema-validation-4/gemini-extension.json +1 -0
  830. package/plugins/zod-schema-validation-4/plugin.json +10 -0
  831. package/plugins/zod-schema-validation-4/skills/zod-schema-validation/SKILL.md +181 -0
  832. package/plugins/zod-validation-error-5/.claude-plugin/plugin.json +9 -0
  833. package/plugins/zod-validation-error-5/LICENSE +93 -0
  834. package/plugins/zod-validation-error-5/NOTICE +51 -0
  835. package/plugins/zod-validation-error-5/gemini-extension.json +1 -0
  836. package/plugins/zod-validation-error-5/plugin.json +10 -0
  837. package/plugins/zod-validation-error-5/skills/zod-validation-error/SKILL.md +212 -0
  838. package/plugins/zustand-5/.claude-plugin/plugin.json +9 -0
  839. package/plugins/zustand-5/LICENSE +93 -0
  840. package/plugins/zustand-5/NOTICE +51 -0
  841. package/plugins/zustand-5/gemini-extension.json +1 -0
  842. package/plugins/zustand-5/plugin.json +10 -0
  843. package/plugins/zustand-5/skills/zustand/SKILL.md +128 -0
  844. package/skills/package-skill-catalog/SKILL.md +37 -222
package/dist/http.js CHANGED
@@ -4,8 +4,8 @@ import {
4
4
  } from "@modelcontextprotocol/server";
5
5
 
6
6
  // src/catalog.ts
7
- import { existsSync as existsSync2, readFileSync as readFileSync2, readdirSync as readdirSync2 } from "fs";
8
- import { basename as basename2, dirname as dirname2, isAbsolute, join as join2, relative } from "path";
7
+ import { existsSync as existsSync3, readFileSync as readFileSync3, readdirSync as readdirSync2 } from "fs";
8
+ import { basename as basename2, dirname as dirname2, isAbsolute as isAbsolute2, join as join3, relative as relative2 } from "path";
9
9
 
10
10
  // src/frontmatter.ts
11
11
  import { parse } from "yaml";
@@ -127,8 +127,122 @@ function specProblems(front, directory) {
127
127
  }
128
128
 
129
129
  // src/marketplace.ts
130
- import { existsSync, readFileSync, readdirSync } from "fs";
131
- import { basename, dirname, join, resolve } from "path";
130
+ import { existsSync as existsSync2, readFileSync as readFileSync2, readdirSync } from "fs";
131
+ import { basename, dirname, join as join2, resolve as resolve2 } from "path";
132
+
133
+ // src/marketplace/local.ts
134
+ import { existsSync, readFileSync, realpathSync, statSync } from "fs";
135
+ import { isAbsolute, join, relative, resolve, sep } from "path";
136
+ function object(value) {
137
+ return value !== null && typeof value === "object" && !Array.isArray(value);
138
+ }
139
+ function containedPath(root, path) {
140
+ const result = resolve(root, path);
141
+ const lexical = relative(resolve(root), result);
142
+ if (isAbsolute(lexical) || lexical === ".." || lexical.startsWith(`..${sep}`))
143
+ throw new Error("Path leaves the plugin root");
144
+ const physical = relative(realpathSync(root), realpathSync(result));
145
+ if (isAbsolute(physical) || physical === ".." || physical.startsWith(`..${sep}`))
146
+ throw new Error("Path leaves the plugin root through a symlink");
147
+ return result;
148
+ }
149
+ function pluginManifest(directory) {
150
+ for (const path of [
151
+ ".claude-plugin/plugin.json",
152
+ "plugin.json",
153
+ ".codex-plugin/plugin.json",
154
+ ".grok-plugin/plugin.json"
155
+ ]) {
156
+ if (!existsSync(join(directory, path))) continue;
157
+ const value = JSON.parse(
158
+ readFileSync(containedPath(directory, path), "utf8")
159
+ );
160
+ if (!object(value)) throw new Error("Plugin manifest must be an object");
161
+ return value;
162
+ }
163
+ return {};
164
+ }
165
+ function localSource(value) {
166
+ if (typeof value === "string") return value;
167
+ if (object(value) && value.source === "local" && typeof value.path === "string")
168
+ return value.path;
169
+ throw new Error(
170
+ "Only installed local plugin sources can be read; use the native installer for remote sources"
171
+ );
172
+ }
173
+ function readLocalMarketplace(directory, onReject) {
174
+ const filename = [
175
+ ".claude-plugin/marketplace.json",
176
+ ".agents/plugins/marketplace.json",
177
+ ".grok-plugin/marketplace.json"
178
+ ].find((path2) => existsSync(join(directory, path2)));
179
+ if (!filename) {
180
+ onReject?.({
181
+ path: directory,
182
+ reason: "No supported native marketplace.json found"
183
+ });
184
+ return null;
185
+ }
186
+ const path = join(directory, filename);
187
+ let manifest2;
188
+ try {
189
+ manifest2 = JSON.parse(
190
+ readFileSync(containedPath(directory, filename), "utf8")
191
+ );
192
+ } catch {
193
+ onReject?.({
194
+ path,
195
+ reason: "marketplace.json is not valid JSON or is outside its root"
196
+ });
197
+ return null;
198
+ }
199
+ if (!object(manifest2) || !Array.isArray(manifest2.plugins)) {
200
+ onReject?.({ path, reason: "marketplace.json requires a plugins array" });
201
+ return null;
202
+ }
203
+ const name = typeof manifest2.name === "string" ? manifest2.name : "marketplace";
204
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/u.test(name)) {
205
+ onReject?.({ path, reason: "Invalid marketplace name" });
206
+ return null;
207
+ }
208
+ const plugins = [];
209
+ const seen = /* @__PURE__ */ new Set();
210
+ for (const item of manifest2.plugins) {
211
+ try {
212
+ if (!object(item) || typeof item.name !== "string" || !/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/u.test(item.name))
213
+ throw new Error("Invalid plugin name");
214
+ if (seen.has(item.name)) throw new Error("Duplicate plugin name");
215
+ const source = localSource(item.source);
216
+ if (!source.startsWith("./") || source.split(/[\\/]/u).includes(".."))
217
+ throw new Error("Local plugin source must be a contained ./ path");
218
+ const pluginDirectory = containedPath(directory, source);
219
+ if (!statSync(pluginDirectory).isDirectory())
220
+ throw new Error("Plugin source must be a directory");
221
+ const metadata2 = pluginManifest(pluginDirectory);
222
+ if (metadata2.name !== void 0 && metadata2.name !== item.name)
223
+ throw new Error("Plugin manifest name differs from marketplace entry");
224
+ seen.add(item.name);
225
+ plugins.push({
226
+ name: item.name,
227
+ directory: pluginDirectory,
228
+ manifest: metadata2
229
+ });
230
+ } catch (error) {
231
+ onReject?.({
232
+ path,
233
+ reason: error instanceof Error ? error.message : "Invalid plugin source"
234
+ });
235
+ }
236
+ }
237
+ const metadata = object(manifest2.metadata) ? manifest2.metadata : {};
238
+ return {
239
+ name,
240
+ plugins,
241
+ ...typeof metadata.tier === "string" ? { tier: metadata.tier } : {}
242
+ };
243
+ }
244
+
245
+ // src/marketplace.ts
132
246
  function readMetadata(source) {
133
247
  return metadataOf(frontmatterObject(source));
134
248
  }
@@ -141,16 +255,27 @@ var asList = (value) => {
141
255
  if (typeof value === "string") return [value];
142
256
  return Array.isArray(value) ? value : [];
143
257
  };
144
- function readJson(path) {
258
+ function readJson(path, root) {
145
259
  try {
146
- const parsed = JSON.parse(readFileSync(path, "utf8"));
260
+ const parsed = JSON.parse(
261
+ readFileSync2(containedPath(root, path), "utf8")
262
+ );
147
263
  return parsed !== null && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : null;
148
264
  } catch {
149
265
  return null;
150
266
  }
151
267
  }
152
268
  function markdownEntry(context, path, fallbackSlug, shape) {
153
- const source = readFileSync(path, "utf8");
269
+ let source;
270
+ try {
271
+ source = readFileSync2(containedPath(context.pluginDir, path), "utf8");
272
+ } catch {
273
+ context.onReject?.({
274
+ path,
275
+ reason: "Asset is unreadable or outside the plugin root"
276
+ });
277
+ return null;
278
+ }
154
279
  const front = readFrontmatter(source);
155
280
  const description = front["description"] ?? "";
156
281
  if (description === "") {
@@ -182,25 +307,25 @@ function markdownEntry(context, path, fallbackSlug, shape) {
182
307
  };
183
308
  }
184
309
  function skillEntries(context) {
185
- const dir = join(context.pluginDir, "skills");
186
- if (!existsSync(dir)) return [];
310
+ const dir = join2(context.pluginDir, "skills");
311
+ if (!existsSync2(dir)) return [];
187
312
  const found = [];
188
313
  for (const child of readdirSync(dir, { withFileTypes: true })) {
189
314
  if (!child.isDirectory()) continue;
190
- const path = join(dir, child.name, "SKILL.md");
191
- if (!existsSync(path)) continue;
315
+ const path = join2(dir, child.name, "SKILL.md");
316
+ if (!existsSync2(path)) continue;
192
317
  const entry = markdownEntry(context, path, child.name, {});
193
318
  if (entry) found.push(entry);
194
319
  }
195
320
  return found;
196
321
  }
197
322
  function commandEntries(context) {
198
- const dir = join(context.pluginDir, "commands");
199
- if (!existsSync(dir)) return [];
323
+ const dir = join2(context.pluginDir, "commands");
324
+ if (!existsSync2(dir)) return [];
200
325
  const found = [];
201
326
  for (const child of readdirSync(dir, { withFileTypes: true })) {
202
327
  if (!child.isFile() || !child.name.endsWith(".md")) continue;
203
- const path = join(dir, child.name);
328
+ const path = join2(dir, child.name);
204
329
  const entry = markdownEntry(context, path, basename(child.name, ".md"), {
205
330
  root: path
206
331
  });
@@ -209,22 +334,22 @@ function commandEntries(context) {
209
334
  return found;
210
335
  }
211
336
  function agentEntries(context) {
212
- const dir = join(context.pluginDir, "agents");
213
- if (!existsSync(dir)) return [];
337
+ const dir = join2(context.pluginDir, "agents");
338
+ if (!existsSync2(dir)) return [];
214
339
  const found = [];
215
340
  for (const child of readdirSync(dir, { withFileTypes: true })) {
216
341
  let entry = null;
217
342
  if (child.isFile() && child.name.endsWith(".md")) {
218
- const path = join(dir, child.name);
343
+ const path = join2(dir, child.name);
219
344
  entry = markdownEntry(context, path, basename(child.name, ".md"), {
220
345
  kind: "agent",
221
346
  root: path,
222
347
  namespace: "agents"
223
348
  });
224
- } else if (child.isDirectory() && existsSync(join(dir, child.name, "agent.md"))) {
349
+ } else if (child.isDirectory() && existsSync2(join2(dir, child.name, "agent.md"))) {
225
350
  entry = markdownEntry(
226
351
  context,
227
- join(dir, child.name, "agent.md"),
352
+ join2(dir, child.name, "agent.md"),
228
353
  child.name,
229
354
  {
230
355
  kind: "agent",
@@ -238,9 +363,9 @@ function agentEntries(context) {
238
363
  }
239
364
  function hookEntries(context, manifest2) {
240
365
  const declared = typeof manifest2.hooks === "string" ? manifest2.hooks : void 0;
241
- const path = resolve(context.pluginDir, declared ?? "hooks/hooks.json");
242
- if (!existsSync(path)) return [];
243
- const hooks = readJson(path);
366
+ const path = resolve2(context.pluginDir, declared ?? "hooks/hooks.json");
367
+ if (!existsSync2(path)) return [];
368
+ const hooks = readJson(path, context.pluginDir);
244
369
  if (hooks === null) {
245
370
  context.onReject?.({ path, reason: "hooks.json is not a JSON object" });
246
371
  return [];
@@ -266,9 +391,12 @@ function hookEntries(context, manifest2) {
266
391
  ];
267
392
  }
268
393
  function mcpEntries(context) {
269
- const path = join(context.pluginDir, ".mcp.json");
270
- if (!existsSync(path)) return [];
271
- const config = readJson(path);
394
+ const filename = [".mcp.json", "mcp.json", "mcp_config.json"].find(
395
+ (name) => existsSync2(join2(context.pluginDir, name))
396
+ );
397
+ if (!filename) return [];
398
+ const path = join2(context.pluginDir, filename);
399
+ const config = readJson(path, context.pluginDir);
272
400
  const servers = config?.["mcpServers"];
273
401
  if (servers === null || typeof servers !== "object" || Array.isArray(servers)) {
274
402
  context.onReject?.({ path, reason: ".mcp.json has no mcpServers object" });
@@ -287,48 +415,24 @@ function mcpEntries(context) {
287
415
  }));
288
416
  }
289
417
  function readMarketplace(dir, onReject) {
290
- const manifestPath = join(dir, ".claude-plugin", "marketplace.json");
291
- if (!existsSync(manifestPath)) {
292
- onReject?.({
293
- path: dir,
294
- reason: "no .claude-plugin/marketplace.json here"
295
- });
296
- return [];
297
- }
298
- let manifest2;
299
- try {
300
- manifest2 = JSON.parse(
301
- readFileSync(manifestPath, "utf8")
302
- );
303
- } catch {
304
- onReject?.({
305
- path: manifestPath,
306
- reason: "marketplace.json is not valid JSON"
307
- });
308
- return [];
309
- }
310
- const marketplace = manifest2.name ?? "marketplace";
418
+ const marketplace = readLocalMarketplace(dir, onReject);
419
+ if (!marketplace) return [];
311
420
  const found = [];
312
- for (const plugin of manifest2.plugins ?? []) {
313
- if (!plugin.name || !plugin.source) continue;
314
- const pluginDir = resolve(dir, plugin.source);
315
- if (!existsSync(pluginDir)) continue;
316
- const pluginManifest = readJson(
317
- join(pluginDir, ".claude-plugin", "plugin.json")
318
- ) ?? {};
421
+ for (const plugin of marketplace.plugins) {
422
+ const pluginManifest2 = plugin.manifest;
319
423
  const context = {
320
- marketplace,
424
+ marketplace: marketplace.name,
321
425
  plugin: plugin.name,
322
- pluginDir,
323
- pluginDescription: typeof pluginManifest.description === "string" ? pluginManifest.description : void 0,
324
- tier: manifest2.metadata?.tier,
426
+ pluginDir: plugin.directory,
427
+ pluginDescription: typeof pluginManifest2.description === "string" ? pluginManifest2.description : void 0,
428
+ tier: marketplace.tier,
325
429
  onReject
326
430
  };
327
431
  found.push(
328
432
  ...skillEntries(context),
329
433
  ...commandEntries(context),
330
434
  ...agentEntries(context),
331
- ...hookEntries(context, pluginManifest),
435
+ ...hookEntries(context, pluginManifest2),
332
436
  ...mcpEntries(context)
333
437
  );
334
438
  }
@@ -370,29 +474,29 @@ function skillFiles(packageDir) {
370
474
  }
371
475
  for (const entry of entries) {
372
476
  if (entry.isFile()) {
373
- if (entry.name === "SKILL.md") found.push(join2(dir, entry.name));
477
+ if (entry.name === "SKILL.md") found.push(join3(dir, entry.name));
374
478
  continue;
375
479
  }
376
480
  if (!entry.isDirectory()) continue;
377
481
  if (SKIPPED_DIRS.has(entry.name)) continue;
378
482
  if (depth + 1 <= MAX_SKILL_DEPTH)
379
- stack.push([join2(dir, entry.name), depth + 1]);
483
+ stack.push([join3(dir, entry.name), depth + 1]);
380
484
  }
381
485
  }
382
486
  return found.sort();
383
487
  }
384
488
  function packageDirs(root) {
385
- if (!existsSync2(root)) return [];
489
+ if (!existsSync3(root)) return [];
386
490
  const found = [];
387
491
  for (const entry of readdirSync2(root, { withFileTypes: true })) {
388
492
  if (!entry.isDirectory() && !entry.isSymbolicLink()) continue;
389
493
  if (entry.name === ".bin" || entry.name === ".cache") continue;
390
- const path = join2(root, entry.name);
494
+ const path = join3(root, entry.name);
391
495
  if (entry.name.startsWith("@")) {
392
- if (!existsSync2(path)) continue;
496
+ if (!existsSync3(path)) continue;
393
497
  for (const scoped of readdirSync2(path, { withFileTypes: true })) {
394
498
  if (scoped.isDirectory() || scoped.isSymbolicLink()) {
395
- found.push(join2(path, scoped.name));
499
+ found.push(join3(path, scoped.name));
396
500
  }
397
501
  }
398
502
  continue;
@@ -404,7 +508,7 @@ function packageDirs(root) {
404
508
  function readManifest(dir) {
405
509
  try {
406
510
  const parsed = JSON.parse(
407
- readFileSync2(join2(dir, "package.json"), "utf8")
511
+ readFileSync3(join3(dir, "package.json"), "utf8")
408
512
  );
409
513
  return parsed !== null && typeof parsed === "object" ? parsed : null;
410
514
  } catch {
@@ -438,8 +542,8 @@ function globDirs(base, pattern) {
438
542
  }
439
543
  const segment = segments[index];
440
544
  if (!segment.includes("*")) {
441
- const next = join2(dir, segment);
442
- if (existsSync2(next)) walk(next, index + 1);
545
+ const next = join3(dir, segment);
546
+ if (existsSync3(next)) walk(next, index + 1);
443
547
  return;
444
548
  }
445
549
  let entries;
@@ -451,12 +555,12 @@ function globDirs(base, pattern) {
451
555
  const children = entries.filter((e) => e.isDirectory() || e.isSymbolicLink()).filter((e) => !SKIPPED_DIRS.has(e.name));
452
556
  if (segment === "**") {
453
557
  walk(dir, index + 1);
454
- for (const child of children) walk(join2(dir, child.name), index);
558
+ for (const child of children) walk(join3(dir, child.name), index);
455
559
  return;
456
560
  }
457
561
  const matcher = segmentMatcher(segment);
458
562
  for (const child of children) {
459
- if (matcher.test(child.name)) walk(join2(dir, child.name), index + 1);
563
+ if (matcher.test(child.name)) walk(join3(dir, child.name), index + 1);
460
564
  }
461
565
  };
462
566
  walk(base, 0);
@@ -481,7 +585,7 @@ function workspacePackageDirs(root) {
481
585
  }
482
586
  }
483
587
  }
484
- const members = [...included].filter((m) => !excluded.has(m) && existsSync2(join2(m, "package.json"))).sort();
588
+ const members = [...included].filter((m) => !excluded.has(m) && existsSync3(join3(m, "package.json"))).sort();
485
589
  for (const member of members) expand(member);
486
590
  ordered.push(dir);
487
591
  };
@@ -498,9 +602,9 @@ function nameOf(dir, named) {
498
602
  }
499
603
  function expandRootGlob(dir) {
500
604
  if (!dir.includes("*")) return [dir];
501
- const absolute = isAbsolute(dir);
605
+ const absolute = isAbsolute2(dir);
502
606
  const base = absolute ? "/" : ".";
503
- return globDirs(base, dir).filter((d) => existsSync2(join2(d, "package.json"))).sort();
607
+ return globDirs(base, dir).filter((d) => existsSync3(join3(d, "package.json"))).sort();
504
608
  }
505
609
  function readCatalog(options) {
506
610
  const scopes = options.scopes ?? [];
@@ -524,7 +628,7 @@ function readCatalog(options) {
524
628
  seenPaths.add(path);
525
629
  let source;
526
630
  try {
527
- source = readFileSync2(path, "utf8");
631
+ source = readFileSync3(path, "utf8");
528
632
  } catch {
529
633
  continue;
530
634
  }
@@ -568,7 +672,7 @@ function readCatalog(options) {
568
672
  }
569
673
  seen.add(entry.name);
570
674
  if (kindOf(entry) === "skill" && basename2(entry.path) === "SKILL.md") {
571
- const parsed = frontmatterObject(readFileSync2(entry.path, "utf8"));
675
+ const parsed = frontmatterObject(readFileSync3(entry.path, "utf8"));
572
676
  for (const problem of specProblems(
573
677
  parsed,
574
678
  basename2(dirname2(entry.path))
@@ -594,7 +698,7 @@ function normaliseIntent(intent) {
594
698
  }
595
699
 
596
700
  // src/embed.ts
597
- import { resolve as resolve2 } from "path";
701
+ import { resolve as resolve3 } from "path";
598
702
 
599
703
  // src/encoder.ts
600
704
  import { createHash } from "crypto";
@@ -762,7 +866,7 @@ async function loadEmbedder(modelId, options = {}) {
762
866
  const cache = options.cacheDir ?? module.env?.cacheDir;
763
867
  if (typeof cache !== "string")
764
868
  throw new Error("Provide modelPath or cacheDir for an offline encoder");
765
- source = resolve2(
869
+ source = resolve3(
766
870
  cache,
767
871
  selected.modelId,
768
872
  selected.revision === "main" ? "." : selected.revision
@@ -1001,7 +1105,7 @@ function registerSkillPrompts(server, tools) {
1001
1105
  }
1002
1106
 
1003
1107
  // src/resources.ts
1004
- import { statSync as statSync4 } from "fs";
1108
+ import { statSync as statSync5 } from "fs";
1005
1109
  import {
1006
1110
  ResourceNotFoundError,
1007
1111
  ResourceTemplate
@@ -1009,8 +1113,8 @@ import {
1009
1113
 
1010
1114
  // src/files/list.ts
1011
1115
  import { createHash as createHash2 } from "crypto";
1012
- import { readFileSync as readFileSync3, readdirSync as readdirSync3, statSync } from "fs";
1013
- import { basename as basename4, join as join3, relative as relative2, sep } from "path";
1116
+ import { readFileSync as readFileSync4, readdirSync as readdirSync3, statSync as statSync2 } from "fs";
1117
+ import { basename as basename4, join as join4, relative as relative3, sep as sep2 } from "path";
1014
1118
 
1015
1119
  // src/files/redact.ts
1016
1120
  import { basename as basename3 } from "path";
@@ -1047,11 +1151,11 @@ function servedBytes(path, raw) {
1047
1151
  var FILE_LIST_LIMIT = 200;
1048
1152
  var sha256 = (bytes) => createHash2("sha256").update(bytes).digest("hex");
1049
1153
  function describe(path, full) {
1050
- const bytes = servedBytes(full, readFileSync3(full));
1154
+ const bytes = servedBytes(full, readFileSync4(full));
1051
1155
  return { path, bytes: bytes.length, sha256: sha256(bytes) };
1052
1156
  }
1053
1157
  function listSkillFiles(root, limit = FILE_LIST_LIMIT) {
1054
- if (statSync(root).isFile()) {
1158
+ if (statSync2(root).isFile()) {
1055
1159
  return { files: [describe(basename4(root), root)], truncated: false };
1056
1160
  }
1057
1161
  const files = [];
@@ -1060,14 +1164,14 @@ function listSkillFiles(root, limit = FILE_LIST_LIMIT) {
1060
1164
  const dir = stack.pop();
1061
1165
  for (const entry of readdirSync3(dir, { withFileTypes: true })) {
1062
1166
  if (entry.name === "node_modules" || entry.name === ".git") continue;
1063
- const full = join3(dir, entry.name);
1167
+ const full = join4(dir, entry.name);
1064
1168
  if (entry.isDirectory()) {
1065
1169
  stack.push(full);
1066
1170
  continue;
1067
1171
  }
1068
1172
  if (!entry.isFile()) continue;
1069
1173
  if (files.length >= limit) return { files, truncated: true };
1070
- files.push(describe(relative2(root, full).split(sep).join("/"), full));
1174
+ files.push(describe(relative3(root, full).split(sep2).join("/"), full));
1071
1175
  }
1072
1176
  }
1073
1177
  files.sort((a, b) => a.path.localeCompare(b.path));
@@ -1075,7 +1179,7 @@ function listSkillFiles(root, limit = FILE_LIST_LIMIT) {
1075
1179
  }
1076
1180
 
1077
1181
  // src/files/read.ts
1078
- import { readFileSync as readFileSync4, statSync as statSync3 } from "fs";
1182
+ import { readFileSync as readFileSync5, statSync as statSync4 } from "fs";
1079
1183
 
1080
1184
  // src/mime.ts
1081
1185
  var TYPES = {
@@ -1181,31 +1285,31 @@ function classify(path, bytes) {
1181
1285
  }
1182
1286
 
1183
1287
  // src/files/resolve.ts
1184
- import { realpathSync, statSync as statSync2 } from "fs";
1185
- import { dirname as dirname3, isAbsolute as isAbsolute2, relative as relative3, resolve as resolve3, sep as sep2 } from "path";
1186
- var ownFile = (entry) => relative3(assetRoot(entry), entry.path).split(sep2).join("/");
1288
+ import { realpathSync as realpathSync2, statSync as statSync3 } from "fs";
1289
+ import { dirname as dirname3, isAbsolute as isAbsolute3, relative as relative4, resolve as resolve4, sep as sep3 } from "path";
1290
+ var ownFile = (entry) => relative4(assetRoot(entry), entry.path).split(sep3).join("/");
1187
1291
  function resolveSkillFile(entry, wanted = ownFile(entry)) {
1188
- if (isAbsolute2(wanted) || wanted.split(/[\\/]/u).includes("..")) {
1292
+ if (isAbsolute3(wanted) || wanted.split(/[\\/]/u).includes("..")) {
1189
1293
  return { ok: false, error: "path_outside_skill", detail: wanted };
1190
1294
  }
1191
- const scope = realpathSync(assetRoot(entry));
1192
- const single = statSync2(scope).isFile();
1295
+ const scope = realpathSync2(assetRoot(entry));
1296
+ const single = statSync3(scope).isFile();
1193
1297
  const root = single ? dirname3(scope) : scope;
1194
1298
  let target;
1195
1299
  try {
1196
- target = realpathSync(
1197
- single && wanted === "" ? scope : resolve3(root, wanted)
1300
+ target = realpathSync2(
1301
+ single && wanted === "" ? scope : resolve4(root, wanted)
1198
1302
  );
1199
1303
  } catch {
1200
1304
  return { ok: false, error: "no_such_file", detail: wanted };
1201
1305
  }
1202
- const inside = single ? target === scope : target === root || target.startsWith(root + sep2);
1306
+ const inside = single ? target === scope : target === root || target.startsWith(root + sep3);
1203
1307
  if (!inside)
1204
1308
  return { ok: false, error: "path_outside_skill", detail: wanted };
1205
1309
  return {
1206
1310
  ok: true,
1207
1311
  target,
1208
- path: relative3(root, target).split(sep2).join("/")
1312
+ path: relative4(root, target).split(sep3).join("/")
1209
1313
  };
1210
1314
  }
1211
1315
 
@@ -1214,7 +1318,7 @@ var READ_BUDGET_BYTES = 256 * 1024;
1214
1318
  function readSkillFile(entry, wanted, budget = READ_BUDGET_BYTES) {
1215
1319
  const resolved = resolveSkillFile(entry, wanted);
1216
1320
  if (!resolved.ok) return resolved;
1217
- const size = statSync3(resolved.target).size;
1321
+ const size = statSync4(resolved.target).size;
1218
1322
  if (size > budget) {
1219
1323
  return {
1220
1324
  ok: false,
@@ -1222,7 +1326,7 @@ function readSkillFile(entry, wanted, budget = READ_BUDGET_BYTES) {
1222
1326
  detail: `${size} bytes > ${budget}`
1223
1327
  };
1224
1328
  }
1225
- const bytes = servedBytes(resolved.target, readFileSync4(resolved.target));
1329
+ const bytes = servedBytes(resolved.target, readFileSync5(resolved.target));
1226
1330
  const { kind: kind2, mimeType } = classify(resolved.path, bytes);
1227
1331
  return {
1228
1332
  ok: true,
@@ -1262,7 +1366,7 @@ function listing(entries) {
1262
1366
  name: entry.name,
1263
1367
  description: entry.description,
1264
1368
  mimeType: "text/markdown",
1265
- size: statSync4(entry.path).size
1369
+ size: statSync5(entry.path).size
1266
1370
  }));
1267
1371
  }
1268
1372
  function complete(value, entries) {
@@ -1299,7 +1403,7 @@ function registerSkillResources(server, skills) {
1299
1403
  }
1300
1404
 
1301
1405
  // src/server.ts
1302
- import { readFileSync as readFileSync6 } from "fs";
1406
+ import { readFileSync as readFileSync7 } from "fs";
1303
1407
 
1304
1408
  // src/find.ts
1305
1409
  import { createHash as createHash3 } from "crypto";
@@ -1388,11 +1492,11 @@ function rank(matches2, limit) {
1388
1492
  }
1389
1493
 
1390
1494
  // src/files/bundle.ts
1391
- import { readFileSync as readFileSync5, statSync as statSync5 } from "fs";
1392
- import { dirname as dirname4, join as join4 } from "path";
1495
+ import { readFileSync as readFileSync6, statSync as statSync6 } from "fs";
1496
+ import { dirname as dirname4, join as join5 } from "path";
1393
1497
  function bundleSkill(entry) {
1394
1498
  const root = assetRoot(entry);
1395
- const base = statSync5(root).isFile() ? dirname4(root) : root;
1499
+ const base = statSync6(root).isFile() ? dirname4(root) : root;
1396
1500
  const listing2 = listSkillFiles(root);
1397
1501
  return {
1398
1502
  name: entry.name,
@@ -1400,7 +1504,7 @@ function bundleSkill(entry) {
1400
1504
  files: listing2.files.map((file) => ({
1401
1505
  ...file,
1402
1506
  uri: skillFileUri(entry, file.path),
1403
- mimeType: classify(file.path, readFileSync5(join4(base, file.path))).mimeType
1507
+ mimeType: classify(file.path, readFileSync6(join5(base, file.path))).mimeType
1404
1508
  }))
1405
1509
  };
1406
1510
  }
@@ -1604,7 +1708,7 @@ function createSkillTools(options) {
1604
1708
  describe(name) {
1605
1709
  const entry = byName(name);
1606
1710
  if (!entry) return null;
1607
- const source = readFileSync6(entry.path, "utf8");
1711
+ const source = readFileSync7(entry.path, "utf8");
1608
1712
  const listing2 = listSkillFiles(assetRoot(entry));
1609
1713
  return {
1610
1714
  name: entry.name,
@@ -1641,7 +1745,7 @@ function createSkillTools(options) {
1641
1745
  return {
1642
1746
  name: entry.name,
1643
1747
  body: readBody(
1644
- servedBytes(entry.path, readFileSync6(entry.path)).toString("utf8")
1748
+ servedBytes(entry.path, readFileSync7(entry.path)).toString("utf8")
1645
1749
  ),
1646
1750
  files: bundle.files.filter((file) => file.path !== own),
1647
1751
  filesTruncated: bundle.truncated
@@ -1661,17 +1765,17 @@ function createSkillTools(options) {
1661
1765
 
1662
1766
  // src/extension/entry.ts
1663
1767
  import { createHash as createHash4 } from "crypto";
1664
- import { readFileSync as readFileSync7, readdirSync as readdirSync4, statSync as statSync6 } from "fs";
1665
- import { basename as basename5, dirname as dirname5, join as join5, relative as relative4, sep as sep3 } from "path";
1768
+ import { readFileSync as readFileSync8, readdirSync as readdirSync4, statSync as statSync7 } from "fs";
1769
+ import { basename as basename5, dirname as dirname5, join as join6, relative as relative5, sep as sep4 } from "path";
1666
1770
  var MAX_RESOURCES = 512;
1667
1771
  var MAX_SKILL_BYTES = 16 * 1024 * 1024;
1668
1772
  var digests = /* @__PURE__ */ new Map();
1669
1773
  function facts(path) {
1670
- const stat = statSync6(path);
1774
+ const stat = statSync7(path);
1671
1775
  const key = `${stat.mtimeMs}:${stat.size}`;
1672
1776
  const cached = digests.get(path);
1673
1777
  if (cached?.key === key) return cached;
1674
- const bytes = servedBytes(path, readFileSync7(path));
1778
+ const bytes = servedBytes(path, readFileSync8(path));
1675
1779
  const digest = `sha256:${createHash4("sha256").update(bytes).digest("hex")}`;
1676
1780
  const fresh = { key, digest, size: bytes.length };
1677
1781
  digests.set(path, fresh);
@@ -1684,7 +1788,7 @@ function filesUnder(root) {
1684
1788
  const dir = stack.pop();
1685
1789
  for (const entry of readdirSync4(dir, { withFileTypes: true })) {
1686
1790
  if (entry.name === "node_modules" || entry.name === ".git") continue;
1687
- const full = join5(dir, entry.name);
1791
+ const full = join6(dir, entry.name);
1688
1792
  if (entry.isDirectory()) stack.push(full);
1689
1793
  else if (entry.isFile()) found.push(full);
1690
1794
  if (found.length > MAX_RESOURCES) return null;
@@ -1695,7 +1799,7 @@ function filesUnder(root) {
1695
1799
  function extensionEntry(entry) {
1696
1800
  if (kindOf(entry) !== "skill" || basename5(entry.path) !== "SKILL.md")
1697
1801
  return null;
1698
- const frontmatter = frontmatterObject(readFileSync7(entry.path, "utf8"));
1802
+ const frontmatter = frontmatterObject(readFileSync8(entry.path, "utf8"));
1699
1803
  const root = dirname5(entry.path);
1700
1804
  if (specProblems(frontmatter, basename5(root)).length > 0) return null;
1701
1805
  if (frontmatter?.["name"] !== entry.slug) return null;
@@ -1705,7 +1809,7 @@ function extensionEntry(entry) {
1705
1809
  const resources = files.map((path) => {
1706
1810
  const fact = facts(path);
1707
1811
  total += fact.size;
1708
- const file = relative4(root, path).split(sep3).join("/");
1812
+ const file = relative5(root, path).split(sep4).join("/");
1709
1813
  return {
1710
1814
  uri: skillFileUri(entry, file),
1711
1815
  digest: fact.digest,
@@ -2190,7 +2294,7 @@ function registerMailboxTools(server, service) {
2190
2294
 
2191
2295
  // src/mcp.ts
2192
2296
  var SERVER_NAME = "pmcp";
2193
- var SERVER_VERSION = "0.13.1";
2297
+ var SERVER_VERSION = "0.14.0";
2194
2298
  function registerSkillTools(server, tools) {
2195
2299
  registerCatalogTool(server, tools);
2196
2300
  registerFindTool(server, tools);