@modootoday/pmcp 0.13.0 → 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.
- package/.agents/plugins/marketplace.json +1157 -0
- package/.claude-plugin/marketplace.json +825 -0
- package/.claude-plugin/plugin.json +9 -0
- package/.mcp.json +9 -0
- package/NOTICE +4 -2
- package/README.md +67 -4
- package/dist/cli.js +1345 -741
- package/dist/{config-CJ43_oBS.d.ts → config-BkSpjUG6.d.ts} +1 -0
- package/dist/{embed-BW6AWD1e.d.ts → embed-CVCEz2FH.d.ts} +1 -1
- package/dist/http.d.ts +3 -3
- package/dist/http.js +216 -112
- package/dist/index.d.ts +7 -14
- package/dist/index.js +382 -262
- package/dist/mailbox/index.d.ts +1 -1
- package/dist/mailbox/index.js +18 -2
- package/dist/{server-9w4R1caM.d.ts → server-DAcT89iv.d.ts} +5 -5
- package/dist/stdio.d.ts +1 -1
- package/dist/stdio.js +229 -121
- package/dist/tui-worker.js +18 -2
- package/docs/catalog.json +5422 -0
- package/docs/manual-library-skills.md +74 -0
- package/docs/skills.md +46 -0
- package/docs/terminal-workspace.md +16 -14
- package/gemini-extension.json +11 -0
- package/mcp.json +10 -0
- package/package.json +26 -5
- package/plugin.json +10 -0
- package/plugins/agent-base-9/.claude-plugin/plugin.json +9 -0
- package/plugins/agent-base-9/LICENSE +93 -0
- package/plugins/agent-base-9/NOTICE +51 -0
- package/plugins/agent-base-9/gemini-extension.json +1 -0
- package/plugins/agent-base-9/plugin.json +10 -0
- package/plugins/agent-base-9/skills/agent-base/SKILL.md +118 -0
- package/plugins/ajv-formats-3/.claude-plugin/plugin.json +9 -0
- package/plugins/ajv-formats-3/LICENSE +93 -0
- package/plugins/ajv-formats-3/NOTICE +51 -0
- package/plugins/ajv-formats-3/gemini-extension.json +1 -0
- package/plugins/ajv-formats-3/plugin.json +10 -0
- package/plugins/ajv-formats-3/skills/ajv-formats/SKILL.md +178 -0
- package/plugins/allure-js-commons-3/.claude-plugin/plugin.json +9 -0
- package/plugins/allure-js-commons-3/LICENSE +93 -0
- package/plugins/allure-js-commons-3/NOTICE +51 -0
- package/plugins/allure-js-commons-3/gemini-extension.json +1 -0
- package/plugins/allure-js-commons-3/plugin.json +10 -0
- package/plugins/allure-js-commons-3/skills/allure-js-commons/SKILL.md +173 -0
- package/plugins/ansi-escapes-7/.claude-plugin/plugin.json +9 -0
- package/plugins/ansi-escapes-7/LICENSE +93 -0
- package/plugins/ansi-escapes-7/NOTICE +51 -0
- package/plugins/ansi-escapes-7/gemini-extension.json +1 -0
- package/plugins/ansi-escapes-7/plugin.json +10 -0
- package/plugins/ansi-escapes-7/skills/ansi-escapes/SKILL.md +189 -0
- package/plugins/ansi-styles-7/.claude-plugin/plugin.json +9 -0
- package/plugins/ansi-styles-7/LICENSE +93 -0
- package/plugins/ansi-styles-7/NOTICE +51 -0
- package/plugins/ansi-styles-7/gemini-extension.json +1 -0
- package/plugins/ansi-styles-7/plugin.json +10 -0
- package/plugins/ansi-styles-7/skills/ansi-styles/SKILL.md +161 -0
- package/plugins/app-builder-lib-26/.claude-plugin/plugin.json +9 -0
- package/plugins/app-builder-lib-26/LICENSE +93 -0
- package/plugins/app-builder-lib-26/NOTICE +51 -0
- package/plugins/app-builder-lib-26/gemini-extension.json +1 -0
- package/plugins/app-builder-lib-26/plugin.json +10 -0
- package/plugins/app-builder-lib-26/skills/app-builder-lib/SKILL.md +84 -0
- package/plugins/autoprefixer-10/.claude-plugin/plugin.json +9 -0
- package/plugins/autoprefixer-10/LICENSE +93 -0
- package/plugins/autoprefixer-10/NOTICE +51 -0
- package/plugins/autoprefixer-10/gemini-extension.json +1 -0
- package/plugins/autoprefixer-10/plugin.json +10 -0
- package/plugins/autoprefixer-10/skills/autoprefixer/SKILL.md +141 -0
- package/plugins/babel-plugin-transform-typescript-8/.claude-plugin/plugin.json +9 -0
- package/plugins/babel-plugin-transform-typescript-8/LICENSE +93 -0
- package/plugins/babel-plugin-transform-typescript-8/NOTICE +51 -0
- package/plugins/babel-plugin-transform-typescript-8/gemini-extension.json +1 -0
- package/plugins/babel-plugin-transform-typescript-8/plugin.json +10 -0
- package/plugins/babel-plugin-transform-typescript-8/skills/babel-plugin-transform-typescript/SKILL.md +135 -0
- package/plugins/bcryptjs-2/.claude-plugin/plugin.json +9 -0
- package/plugins/bcryptjs-2/LICENSE +93 -0
- package/plugins/bcryptjs-2/NOTICE +51 -0
- package/plugins/bcryptjs-2/gemini-extension.json +1 -0
- package/plugins/bcryptjs-2/plugin.json +10 -0
- package/plugins/bcryptjs-2/skills/bcryptjs/SKILL.md +78 -0
- package/plugins/bullmq-5/.claude-plugin/plugin.json +9 -0
- package/plugins/bullmq-5/LICENSE +93 -0
- package/plugins/bullmq-5/NOTICE +51 -0
- package/plugins/bullmq-5/gemini-extension.json +1 -0
- package/plugins/bullmq-5/plugin.json +10 -0
- package/plugins/bullmq-5/skills/bullmq/SKILL.md +59 -0
- package/plugins/bun-types-1/.claude-plugin/plugin.json +9 -0
- package/plugins/bun-types-1/LICENSE +93 -0
- package/plugins/bun-types-1/NOTICE +51 -0
- package/plugins/bun-types-1/gemini-extension.json +1 -0
- package/plugins/bun-types-1/plugin.json +10 -0
- package/plugins/bun-types-1/skills/bun-types/SKILL.md +119 -0
- package/plugins/chai-6/.claude-plugin/plugin.json +9 -0
- package/plugins/chai-6/LICENSE +93 -0
- package/plugins/chai-6/NOTICE +51 -0
- package/plugins/chai-6/gemini-extension.json +1 -0
- package/plugins/chai-6/plugin.json +10 -0
- package/plugins/chai-6/skills/chai/SKILL.md +160 -0
- package/plugins/chalk-6/.claude-plugin/plugin.json +9 -0
- package/plugins/chalk-6/LICENSE +93 -0
- package/plugins/chalk-6/NOTICE +51 -0
- package/plugins/chalk-6/gemini-extension.json +1 -0
- package/plugins/chalk-6/plugin.json +10 -0
- package/plugins/chalk-6/skills/chalk/SKILL.md +167 -0
- package/plugins/cli-cursor-5/.claude-plugin/plugin.json +9 -0
- package/plugins/cli-cursor-5/LICENSE +93 -0
- package/plugins/cli-cursor-5/NOTICE +51 -0
- package/plugins/cli-cursor-5/gemini-extension.json +1 -0
- package/plugins/cli-cursor-5/plugin.json +10 -0
- package/plugins/cli-cursor-5/skills/cli-cursor/SKILL.md +117 -0
- package/plugins/cli-spinners-3/.claude-plugin/plugin.json +9 -0
- package/plugins/cli-spinners-3/LICENSE +93 -0
- package/plugins/cli-spinners-3/NOTICE +51 -0
- package/plugins/cli-spinners-3/gemini-extension.json +1 -0
- package/plugins/cli-spinners-3/plugin.json +10 -0
- package/plugins/cli-spinners-3/skills/cli-spinners/SKILL.md +101 -0
- package/plugins/clickhouse-client-1/.claude-plugin/plugin.json +9 -0
- package/plugins/clickhouse-client-1/LICENSE +93 -0
- package/plugins/clickhouse-client-1/NOTICE +51 -0
- package/plugins/clickhouse-client-1/gemini-extension.json +1 -0
- package/plugins/clickhouse-client-1/plugin.json +10 -0
- package/plugins/clickhouse-client-1/skills/clickhouse-client/SKILL.md +54 -0
- package/plugins/clickhouse-client-web-1/.claude-plugin/plugin.json +9 -0
- package/plugins/clickhouse-client-web-1/LICENSE +93 -0
- package/plugins/clickhouse-client-web-1/NOTICE +51 -0
- package/plugins/clickhouse-client-web-1/gemini-extension.json +1 -0
- package/plugins/clickhouse-client-web-1/plugin.json +10 -0
- package/plugins/clickhouse-client-web-1/skills/clickhouse-client-web/SKILL.md +52 -0
- package/plugins/cliui-9/.claude-plugin/plugin.json +9 -0
- package/plugins/cliui-9/LICENSE +93 -0
- package/plugins/cliui-9/NOTICE +51 -0
- package/plugins/cliui-9/gemini-extension.json +1 -0
- package/plugins/cliui-9/plugin.json +10 -0
- package/plugins/cliui-9/skills/cliui/SKILL.md +163 -0
- package/plugins/cloudflare-workers-types-4/.claude-plugin/plugin.json +9 -0
- package/plugins/cloudflare-workers-types-4/LICENSE +93 -0
- package/plugins/cloudflare-workers-types-4/NOTICE +51 -0
- package/plugins/cloudflare-workers-types-4/gemini-extension.json +1 -0
- package/plugins/cloudflare-workers-types-4/plugin.json +10 -0
- package/plugins/cloudflare-workers-types-4/skills/cloudflare-workers-types/SKILL.md +63 -0
- package/plugins/commander-15/.claude-plugin/plugin.json +9 -0
- package/plugins/commander-15/LICENSE +93 -0
- package/plugins/commander-15/NOTICE +51 -0
- package/plugins/commander-15/gemini-extension.json +1 -0
- package/plugins/commander-15/plugin.json +10 -0
- package/plugins/commander-15/skills/commander/SKILL.md +204 -0
- package/plugins/content-type-3/.claude-plugin/plugin.json +9 -0
- package/plugins/content-type-3/LICENSE +93 -0
- package/plugins/content-type-3/NOTICE +51 -0
- package/plugins/content-type-3/gemini-extension.json +1 -0
- package/plugins/content-type-3/plugin.json +10 -0
- package/plugins/content-type-3/skills/content-type/SKILL.md +126 -0
- package/plugins/croner-10/.claude-plugin/plugin.json +9 -0
- package/plugins/croner-10/LICENSE +93 -0
- package/plugins/croner-10/NOTICE +51 -0
- package/plugins/croner-10/gemini-extension.json +1 -0
- package/plugins/croner-10/plugin.json +10 -0
- package/plugins/croner-10/skills/croner/SKILL.md +182 -0
- package/plugins/css-tree-3/.claude-plugin/plugin.json +9 -0
- package/plugins/css-tree-3/LICENSE +93 -0
- package/plugins/css-tree-3/NOTICE +51 -0
- package/plugins/css-tree-3/gemini-extension.json +1 -0
- package/plugins/css-tree-3/plugin.json +10 -0
- package/plugins/css-tree-3/skills/css-tree/SKILL.md +165 -0
- package/plugins/data-urls-7/.claude-plugin/plugin.json +9 -0
- package/plugins/data-urls-7/LICENSE +93 -0
- package/plugins/data-urls-7/NOTICE +51 -0
- package/plugins/data-urls-7/gemini-extension.json +1 -0
- package/plugins/data-urls-7/plugin.json +10 -0
- package/plugins/data-urls-7/skills/data-urls/SKILL.md +136 -0
- package/plugins/deep-eql-5/.claude-plugin/plugin.json +9 -0
- package/plugins/deep-eql-5/LICENSE +93 -0
- package/plugins/deep-eql-5/NOTICE +51 -0
- package/plugins/deep-eql-5/gemini-extension.json +1 -0
- package/plugins/deep-eql-5/plugin.json +10 -0
- package/plugins/deep-eql-5/skills/deep-eql/SKILL.md +130 -0
- package/plugins/dexie-4/.claude-plugin/plugin.json +9 -0
- package/plugins/dexie-4/LICENSE +93 -0
- package/plugins/dexie-4/NOTICE +51 -0
- package/plugins/dexie-4/gemini-extension.json +1 -0
- package/plugins/dexie-4/plugin.json +10 -0
- package/plugins/dexie-4/skills/dexie/SKILL.md +192 -0
- package/plugins/emittery-2/.claude-plugin/plugin.json +9 -0
- package/plugins/emittery-2/LICENSE +93 -0
- package/plugins/emittery-2/NOTICE +51 -0
- package/plugins/emittery-2/gemini-extension.json +1 -0
- package/plugins/emittery-2/plugin.json +10 -0
- package/plugins/emittery-2/skills/emittery/SKILL.md +234 -0
- package/plugins/eslint-10/.claude-plugin/plugin.json +9 -0
- package/plugins/eslint-10/LICENSE +93 -0
- package/plugins/eslint-10/NOTICE +51 -0
- package/plugins/eslint-10/gemini-extension.json +1 -0
- package/plugins/eslint-10/plugin.json +10 -0
- package/plugins/eslint-10/skills/eslint/SKILL.md +77 -0
- package/plugins/eslint-9/.claude-plugin/plugin.json +9 -0
- package/plugins/eslint-9/LICENSE +93 -0
- package/plugins/eslint-9/NOTICE +51 -0
- package/plugins/eslint-9/gemini-extension.json +1 -0
- package/plugins/eslint-9/plugin.json +10 -0
- package/plugins/eslint-9/skills/eslint/SKILL.md +93 -0
- package/plugins/eslint-plugin-react-hooks-7/.claude-plugin/plugin.json +9 -0
- package/plugins/eslint-plugin-react-hooks-7/LICENSE +93 -0
- package/plugins/eslint-plugin-react-hooks-7/NOTICE +51 -0
- package/plugins/eslint-plugin-react-hooks-7/gemini-extension.json +1 -0
- package/plugins/eslint-plugin-react-hooks-7/plugin.json +10 -0
- package/plugins/eslint-plugin-react-hooks-7/skills/eslint-plugin-react-hooks/SKILL.md +173 -0
- package/plugins/eslint-plugin-testing-library-7/.claude-plugin/plugin.json +9 -0
- package/plugins/eslint-plugin-testing-library-7/LICENSE +93 -0
- package/plugins/eslint-plugin-testing-library-7/NOTICE +51 -0
- package/plugins/eslint-plugin-testing-library-7/gemini-extension.json +1 -0
- package/plugins/eslint-plugin-testing-library-7/plugin.json +10 -0
- package/plugins/eslint-plugin-testing-library-7/skills/eslint-plugin-testing-library/SKILL.md +193 -0
- package/plugins/expect-type-1/.claude-plugin/plugin.json +9 -0
- package/plugins/expect-type-1/LICENSE +93 -0
- package/plugins/expect-type-1/NOTICE +51 -0
- package/plugins/expect-type-1/gemini-extension.json +1 -0
- package/plugins/expect-type-1/plugin.json +10 -0
- package/plugins/expect-type-1/skills/expect-type/SKILL.md +165 -0
- package/plugins/express-5/.claude-plugin/plugin.json +9 -0
- package/plugins/express-5/LICENSE +93 -0
- package/plugins/express-5/NOTICE +51 -0
- package/plugins/express-5/gemini-extension.json +1 -0
- package/plugins/express-5/plugin.json +10 -0
- package/plugins/express-5/skills/express/SKILL.md +179 -0
- package/plugins/fake-indexeddb-6/.claude-plugin/plugin.json +9 -0
- package/plugins/fake-indexeddb-6/LICENSE +93 -0
- package/plugins/fake-indexeddb-6/NOTICE +51 -0
- package/plugins/fake-indexeddb-6/gemini-extension.json +1 -0
- package/plugins/fake-indexeddb-6/plugin.json +10 -0
- package/plugins/fake-indexeddb-6/skills/fake-indexeddb/SKILL.md +147 -0
- package/plugins/fast-check-4/.claude-plugin/plugin.json +9 -0
- package/plugins/fast-check-4/LICENSE +93 -0
- package/plugins/fast-check-4/NOTICE +51 -0
- package/plugins/fast-check-4/gemini-extension.json +1 -0
- package/plugins/fast-check-4/plugin.json +10 -0
- package/plugins/fast-check-4/skills/fast-check/SKILL.md +168 -0
- package/plugins/figures-6/.claude-plugin/plugin.json +9 -0
- package/plugins/figures-6/LICENSE +93 -0
- package/plugins/figures-6/NOTICE +51 -0
- package/plugins/figures-6/gemini-extension.json +1 -0
- package/plugins/figures-6/plugin.json +10 -0
- package/plugins/figures-6/skills/figures/SKILL.md +99 -0
- package/plugins/firebase-12/.claude-plugin/plugin.json +9 -0
- package/plugins/firebase-12/LICENSE +93 -0
- package/plugins/firebase-12/NOTICE +51 -0
- package/plugins/firebase-12/gemini-extension.json +1 -0
- package/plugins/firebase-12/plugin.json +10 -0
- package/plugins/firebase-12/skills/firebase/SKILL.md +161 -0
- package/plugins/firebase-admin-14/.claude-plugin/plugin.json +9 -0
- package/plugins/firebase-admin-14/LICENSE +93 -0
- package/plugins/firebase-admin-14/NOTICE +51 -0
- package/plugins/firebase-admin-14/gemini-extension.json +1 -0
- package/plugins/firebase-admin-14/plugin.json +10 -0
- package/plugins/firebase-admin-14/skills/firebase-admin/SKILL.md +155 -0
- package/plugins/get-uri-8/.claude-plugin/plugin.json +9 -0
- package/plugins/get-uri-8/LICENSE +93 -0
- package/plugins/get-uri-8/NOTICE +51 -0
- package/plugins/get-uri-8/gemini-extension.json +1 -0
- package/plugins/get-uri-8/plugin.json +10 -0
- package/plugins/get-uri-8/skills/get-uri/SKILL.md +112 -0
- package/plugins/google-uuid-1/.claude-plugin/plugin.json +9 -0
- package/plugins/google-uuid-1/LICENSE +93 -0
- package/plugins/google-uuid-1/NOTICE +51 -0
- package/plugins/google-uuid-1/gemini-extension.json +1 -0
- package/plugins/google-uuid-1/plugin.json +10 -0
- package/plugins/google-uuid-1/skills/google-uuid/SKILL.md +70 -0
- package/plugins/graphql-16/.claude-plugin/plugin.json +9 -0
- package/plugins/graphql-16/LICENSE +93 -0
- package/plugins/graphql-16/NOTICE +51 -0
- package/plugins/graphql-16/gemini-extension.json +1 -0
- package/plugins/graphql-16/plugin.json +10 -0
- package/plugins/graphql-16/skills/graphql/SKILL.md +56 -0
- package/plugins/graphql-17/.claude-plugin/plugin.json +9 -0
- package/plugins/graphql-17/LICENSE +93 -0
- package/plugins/graphql-17/NOTICE +51 -0
- package/plugins/graphql-17/gemini-extension.json +1 -0
- package/plugins/graphql-17/plugin.json +10 -0
- package/plugins/graphql-17/skills/graphql/SKILL.md +159 -0
- package/plugins/graphql-yoga-5/.claude-plugin/plugin.json +9 -0
- package/plugins/graphql-yoga-5/LICENSE +93 -0
- package/plugins/graphql-yoga-5/NOTICE +51 -0
- package/plugins/graphql-yoga-5/gemini-extension.json +1 -0
- package/plugins/graphql-yoga-5/plugin.json +10 -0
- package/plugins/graphql-yoga-5/skills/graphql-yoga/SKILL.md +68 -0
- package/plugins/happy-dom-20/.claude-plugin/plugin.json +9 -0
- package/plugins/happy-dom-20/LICENSE +93 -0
- package/plugins/happy-dom-20/NOTICE +51 -0
- package/plugins/happy-dom-20/gemini-extension.json +1 -0
- package/plugins/happy-dom-20/plugin.json +10 -0
- package/plugins/happy-dom-20/skills/happy-dom/SKILL.md +172 -0
- package/plugins/hono-4/.claude-plugin/plugin.json +9 -0
- package/plugins/hono-4/LICENSE +93 -0
- package/plugins/hono-4/NOTICE +51 -0
- package/plugins/hono-4/gemini-extension.json +1 -0
- package/plugins/hono-4/plugin.json +10 -0
- package/plugins/hono-4/skills/hono/SKILL.md +203 -0
- package/plugins/http-proxy-agent-9/.claude-plugin/plugin.json +9 -0
- package/plugins/http-proxy-agent-9/LICENSE +93 -0
- package/plugins/http-proxy-agent-9/NOTICE +51 -0
- package/plugins/http-proxy-agent-9/gemini-extension.json +1 -0
- package/plugins/http-proxy-agent-9/plugin.json +10 -0
- package/plugins/http-proxy-agent-9/skills/http-proxy-agent/SKILL.md +142 -0
- package/plugins/human-signals-8/.claude-plugin/plugin.json +9 -0
- package/plugins/human-signals-8/LICENSE +93 -0
- package/plugins/human-signals-8/NOTICE +51 -0
- package/plugins/human-signals-8/gemini-extension.json +1 -0
- package/plugins/human-signals-8/plugin.json +10 -0
- package/plugins/human-signals-8/skills/human-signals/SKILL.md +81 -0
- package/plugins/inquirer-14/.claude-plugin/plugin.json +9 -0
- package/plugins/inquirer-14/LICENSE +93 -0
- package/plugins/inquirer-14/NOTICE +51 -0
- package/plugins/inquirer-14/gemini-extension.json +1 -0
- package/plugins/inquirer-14/plugin.json +10 -0
- package/plugins/inquirer-14/skills/inquirer/SKILL.md +152 -0
- package/plugins/ioredis-5/.claude-plugin/plugin.json +9 -0
- package/plugins/ioredis-5/LICENSE +93 -0
- package/plugins/ioredis-5/NOTICE +51 -0
- package/plugins/ioredis-5/gemini-extension.json +1 -0
- package/plugins/ioredis-5/plugin.json +10 -0
- package/plugins/ioredis-5/skills/ioredis/SKILL.md +63 -0
- package/plugins/ioredis-6/.claude-plugin/plugin.json +9 -0
- package/plugins/ioredis-6/LICENSE +93 -0
- package/plugins/ioredis-6/NOTICE +51 -0
- package/plugins/ioredis-6/gemini-extension.json +1 -0
- package/plugins/ioredis-6/plugin.json +10 -0
- package/plugins/ioredis-6/skills/ioredis/SKILL.md +204 -0
- package/plugins/ip-address-10/.claude-plugin/plugin.json +9 -0
- package/plugins/ip-address-10/LICENSE +93 -0
- package/plugins/ip-address-10/NOTICE +51 -0
- package/plugins/ip-address-10/gemini-extension.json +1 -0
- package/plugins/ip-address-10/plugin.json +10 -0
- package/plugins/ip-address-10/skills/ip-address/SKILL.md +184 -0
- package/plugins/jackspeak-4/.claude-plugin/plugin.json +9 -0
- package/plugins/jackspeak-4/LICENSE +93 -0
- package/plugins/jackspeak-4/NOTICE +51 -0
- package/plugins/jackspeak-4/gemini-extension.json +1 -0
- package/plugins/jackspeak-4/plugin.json +10 -0
- package/plugins/jackspeak-4/skills/jackspeak/SKILL.md +162 -0
- package/plugins/jake-12/.claude-plugin/plugin.json +9 -0
- package/plugins/jake-12/LICENSE +93 -0
- package/plugins/jake-12/NOTICE +51 -0
- package/plugins/jake-12/gemini-extension.json +1 -0
- package/plugins/jake-12/plugin.json +10 -0
- package/plugins/jake-12/skills/jake/SKILL.md +182 -0
- package/plugins/jasmine-core-7/.claude-plugin/plugin.json +9 -0
- package/plugins/jasmine-core-7/LICENSE +93 -0
- package/plugins/jasmine-core-7/NOTICE +51 -0
- package/plugins/jasmine-core-7/gemini-extension.json +1 -0
- package/plugins/jasmine-core-7/plugin.json +10 -0
- package/plugins/jasmine-core-7/skills/jasmine-core/SKILL.md +173 -0
- package/plugins/jest-cli-30/.claude-plugin/plugin.json +9 -0
- package/plugins/jest-cli-30/LICENSE +93 -0
- package/plugins/jest-cli-30/NOTICE +51 -0
- package/plugins/jest-cli-30/gemini-extension.json +1 -0
- package/plugins/jest-cli-30/plugin.json +10 -0
- package/plugins/jest-cli-30/skills/jest-cli/SKILL.md +121 -0
- package/plugins/jest-extended-7/.claude-plugin/plugin.json +9 -0
- package/plugins/jest-extended-7/LICENSE +93 -0
- package/plugins/jest-extended-7/NOTICE +51 -0
- package/plugins/jest-extended-7/gemini-extension.json +1 -0
- package/plugins/jest-extended-7/plugin.json +10 -0
- package/plugins/jest-extended-7/skills/jest-extended/SKILL.md +125 -0
- package/plugins/jsdom-30/.claude-plugin/plugin.json +9 -0
- package/plugins/jsdom-30/LICENSE +93 -0
- package/plugins/jsdom-30/NOTICE +51 -0
- package/plugins/jsdom-30/gemini-extension.json +1 -0
- package/plugins/jsdom-30/plugin.json +10 -0
- package/plugins/jsdom-30/skills/jsdom/SKILL.md +64 -0
- package/plugins/level-supports-6/.claude-plugin/plugin.json +9 -0
- package/plugins/level-supports-6/LICENSE +93 -0
- package/plugins/level-supports-6/NOTICE +51 -0
- package/plugins/level-supports-6/gemini-extension.json +1 -0
- package/plugins/level-supports-6/plugin.json +10 -0
- package/plugins/level-supports-6/skills/level-supports/SKILL.md +178 -0
- package/plugins/lowdb-7/.claude-plugin/plugin.json +9 -0
- package/plugins/lowdb-7/LICENSE +93 -0
- package/plugins/lowdb-7/NOTICE +51 -0
- package/plugins/lowdb-7/gemini-extension.json +1 -0
- package/plugins/lowdb-7/plugin.json +10 -0
- package/plugins/lowdb-7/skills/lowdb/SKILL.md +163 -0
- package/plugins/make-fetch-happen-16/.claude-plugin/plugin.json +9 -0
- package/plugins/make-fetch-happen-16/LICENSE +93 -0
- package/plugins/make-fetch-happen-16/NOTICE +51 -0
- package/plugins/make-fetch-happen-16/gemini-extension.json +1 -0
- package/plugins/make-fetch-happen-16/plugin.json +10 -0
- package/plugins/make-fetch-happen-16/skills/make-fetch-happen/SKILL.md +171 -0
- package/plugins/mdx-bundler-10/.claude-plugin/plugin.json +9 -0
- package/plugins/mdx-bundler-10/LICENSE +93 -0
- package/plugins/mdx-bundler-10/NOTICE +51 -0
- package/plugins/mdx-bundler-10/gemini-extension.json +1 -0
- package/plugins/mdx-bundler-10/plugin.json +10 -0
- package/plugins/mdx-bundler-10/skills/mdx-bundler/SKILL.md +133 -0
- package/plugins/mocha-12/.claude-plugin/plugin.json +9 -0
- package/plugins/mocha-12/LICENSE +93 -0
- package/plugins/mocha-12/NOTICE +51 -0
- package/plugins/mocha-12/gemini-extension.json +1 -0
- package/plugins/mocha-12/plugin.json +10 -0
- package/plugins/mocha-12/skills/mocha/SKILL.md +157 -0
- package/plugins/modelcontextprotocol-client-2/.claude-plugin/plugin.json +9 -0
- package/plugins/modelcontextprotocol-client-2/LICENSE +93 -0
- package/plugins/modelcontextprotocol-client-2/NOTICE +51 -0
- package/plugins/modelcontextprotocol-client-2/gemini-extension.json +1 -0
- package/plugins/modelcontextprotocol-client-2/plugin.json +10 -0
- package/plugins/modelcontextprotocol-client-2/skills/modelcontextprotocol-client/SKILL.md +86 -0
- package/plugins/modelcontextprotocol-sdk-1/.claude-plugin/plugin.json +9 -0
- package/plugins/modelcontextprotocol-sdk-1/LICENSE +93 -0
- package/plugins/modelcontextprotocol-sdk-1/NOTICE +51 -0
- package/plugins/modelcontextprotocol-sdk-1/gemini-extension.json +1 -0
- package/plugins/modelcontextprotocol-sdk-1/plugin.json +10 -0
- package/plugins/modelcontextprotocol-sdk-1/skills/modelcontextprotocol-sdk/SKILL.md +80 -0
- package/plugins/modelcontextprotocol-server-2/.claude-plugin/plugin.json +9 -0
- package/plugins/modelcontextprotocol-server-2/LICENSE +93 -0
- package/plugins/modelcontextprotocol-server-2/NOTICE +51 -0
- package/plugins/modelcontextprotocol-server-2/gemini-extension.json +1 -0
- package/plugins/modelcontextprotocol-server-2/plugin.json +10 -0
- package/plugins/modelcontextprotocol-server-2/skills/modelcontextprotocol-server/SKILL.md +80 -0
- package/plugins/msw-2/.claude-plugin/plugin.json +9 -0
- package/plugins/msw-2/LICENSE +93 -0
- package/plugins/msw-2/NOTICE +51 -0
- package/plugins/msw-2/gemini-extension.json +1 -0
- package/plugins/msw-2/plugin.json +10 -0
- package/plugins/msw-2/skills/msw/SKILL.md +182 -0
- package/plugins/negotiator-1/.claude-plugin/plugin.json +9 -0
- package/plugins/negotiator-1/LICENSE +93 -0
- package/plugins/negotiator-1/NOTICE +51 -0
- package/plugins/negotiator-1/gemini-extension.json +1 -0
- package/plugins/negotiator-1/plugin.json +10 -0
- package/plugins/negotiator-1/skills/negotiator/SKILL.md +180 -0
- package/plugins/npm-run-path-6/.claude-plugin/plugin.json +9 -0
- package/plugins/npm-run-path-6/LICENSE +93 -0
- package/plugins/npm-run-path-6/NOTICE +51 -0
- package/plugins/npm-run-path-6/gemini-extension.json +1 -0
- package/plugins/npm-run-path-6/plugin.json +10 -0
- package/plugins/npm-run-path-6/skills/npm-run-path/SKILL.md +137 -0
- package/plugins/nyc-18/.claude-plugin/plugin.json +9 -0
- package/plugins/nyc-18/LICENSE +93 -0
- package/plugins/nyc-18/NOTICE +51 -0
- package/plugins/nyc-18/gemini-extension.json +1 -0
- package/plugins/nyc-18/plugin.json +10 -0
- package/plugins/nyc-18/skills/nyc/SKILL.md +152 -0
- package/plugins/ow-3/.claude-plugin/plugin.json +9 -0
- package/plugins/ow-3/LICENSE +93 -0
- package/plugins/ow-3/NOTICE +51 -0
- package/plugins/ow-3/gemini-extension.json +1 -0
- package/plugins/ow-3/plugin.json +10 -0
- package/plugins/ow-3/skills/ow/SKILL.md +159 -0
- package/plugins/pac-proxy-agent-9/.claude-plugin/plugin.json +9 -0
- package/plugins/pac-proxy-agent-9/LICENSE +93 -0
- package/plugins/pac-proxy-agent-9/NOTICE +51 -0
- package/plugins/pac-proxy-agent-9/gemini-extension.json +1 -0
- package/plugins/pac-proxy-agent-9/plugin.json +10 -0
- package/plugins/pac-proxy-agent-9/skills/pac-proxy-agent/SKILL.md +111 -0
- package/plugins/pgsql-ast-parser-12/.claude-plugin/plugin.json +9 -0
- package/plugins/pgsql-ast-parser-12/LICENSE +93 -0
- package/plugins/pgsql-ast-parser-12/NOTICE +51 -0
- package/plugins/pgsql-ast-parser-12/gemini-extension.json +1 -0
- package/plugins/pgsql-ast-parser-12/plugin.json +10 -0
- package/plugins/pgsql-ast-parser-12/skills/pgsql-ast-parser/SKILL.md +136 -0
- package/plugins/playwright-test-1/.claude-plugin/plugin.json +9 -0
- package/plugins/playwright-test-1/LICENSE +93 -0
- package/plugins/playwright-test-1/NOTICE +51 -0
- package/plugins/playwright-test-1/gemini-extension.json +1 -0
- package/plugins/playwright-test-1/plugin.json +10 -0
- package/plugins/playwright-test-1/skills/playwright-test/SKILL.md +222 -0
- package/plugins/pmcp/.claude-plugin/plugin.json +9 -0
- package/plugins/pmcp/.mcp.json +9 -0
- package/plugins/pmcp/LICENSE +93 -0
- package/plugins/pmcp/NOTICE +51 -0
- package/plugins/pmcp/gemini-extension.json +11 -0
- package/plugins/pmcp/mcp.json +10 -0
- package/plugins/pmcp/plugin.json +10 -0
- package/plugins/pmcp/skills/package-skill-catalog/SKILL.md +54 -0
- package/plugins/pothos-core-4/.claude-plugin/plugin.json +9 -0
- package/plugins/pothos-core-4/LICENSE +93 -0
- package/plugins/pothos-core-4/NOTICE +51 -0
- package/plugins/pothos-core-4/gemini-extension.json +1 -0
- package/plugins/pothos-core-4/plugin.json +10 -0
- package/plugins/pothos-core-4/skills/pothos-core/SKILL.md +68 -0
- package/plugins/prettier-3/.claude-plugin/plugin.json +9 -0
- package/plugins/prettier-3/LICENSE +93 -0
- package/plugins/prettier-3/NOTICE +51 -0
- package/plugins/prettier-3/gemini-extension.json +1 -0
- package/plugins/prettier-3/plugin.json +10 -0
- package/plugins/prettier-3/skills/prettier/SKILL.md +69 -0
- package/plugins/protobufjs-8/.claude-plugin/plugin.json +9 -0
- package/plugins/protobufjs-8/LICENSE +93 -0
- package/plugins/protobufjs-8/NOTICE +51 -0
- package/plugins/protobufjs-8/gemini-extension.json +1 -0
- package/plugins/protobufjs-8/plugin.json +10 -0
- package/plugins/protobufjs-8/skills/protobufjs/SKILL.md +128 -0
- package/plugins/proxy-agent-8/.claude-plugin/plugin.json +9 -0
- package/plugins/proxy-agent-8/LICENSE +93 -0
- package/plugins/proxy-agent-8/NOTICE +51 -0
- package/plugins/proxy-agent-8/gemini-extension.json +1 -0
- package/plugins/proxy-agent-8/plugin.json +10 -0
- package/plugins/proxy-agent-8/skills/proxy-agent/SKILL.md +120 -0
- package/plugins/pydantic-2/.claude-plugin/plugin.json +9 -0
- package/plugins/pydantic-2/LICENSE +93 -0
- package/plugins/pydantic-2/NOTICE +51 -0
- package/plugins/pydantic-2/gemini-extension.json +1 -0
- package/plugins/pydantic-2/plugin.json +10 -0
- package/plugins/pydantic-2/skills/pydantic/SKILL.md +74 -0
- package/plugins/react-19/.claude-plugin/plugin.json +9 -0
- package/plugins/react-19/LICENSE +93 -0
- package/plugins/react-19/NOTICE +51 -0
- package/plugins/react-19/gemini-extension.json +1 -0
- package/plugins/react-19/plugin.json +10 -0
- package/plugins/react-19/skills/react/SKILL.md +150 -0
- package/plugins/react-dom-19/.claude-plugin/plugin.json +9 -0
- package/plugins/react-dom-19/LICENSE +93 -0
- package/plugins/react-dom-19/NOTICE +51 -0
- package/plugins/react-dom-19/gemini-extension.json +1 -0
- package/plugins/react-dom-19/plugin.json +10 -0
- package/plugins/react-dom-19/skills/react-dom/SKILL.md +178 -0
- package/plugins/react-icons-5/.claude-plugin/plugin.json +9 -0
- package/plugins/react-icons-5/LICENSE +93 -0
- package/plugins/react-icons-5/NOTICE +51 -0
- package/plugins/react-icons-5/gemini-extension.json +1 -0
- package/plugins/react-icons-5/plugin.json +10 -0
- package/plugins/react-icons-5/skills/react-icons/SKILL.md +194 -0
- package/plugins/react-is-19/.claude-plugin/plugin.json +9 -0
- package/plugins/react-is-19/LICENSE +93 -0
- package/plugins/react-is-19/NOTICE +51 -0
- package/plugins/react-is-19/gemini-extension.json +1 -0
- package/plugins/react-is-19/plugin.json +10 -0
- package/plugins/react-is-19/skills/react-is/SKILL.md +131 -0
- package/plugins/react-markdown-10/.claude-plugin/plugin.json +9 -0
- package/plugins/react-markdown-10/LICENSE +93 -0
- package/plugins/react-markdown-10/NOTICE +51 -0
- package/plugins/react-markdown-10/gemini-extension.json +1 -0
- package/plugins/react-markdown-10/plugin.json +10 -0
- package/plugins/react-markdown-10/skills/react-markdown/SKILL.md +163 -0
- package/plugins/react-router-8/.claude-plugin/plugin.json +9 -0
- package/plugins/react-router-8/LICENSE +93 -0
- package/plugins/react-router-8/NOTICE +51 -0
- package/plugins/react-router-8/gemini-extension.json +1 -0
- package/plugins/react-router-8/plugin.json +10 -0
- package/plugins/react-router-8/skills/react-router/SKILL.md +115 -0
- package/plugins/release-it-21/.claude-plugin/plugin.json +9 -0
- package/plugins/release-it-21/LICENSE +93 -0
- package/plugins/release-it-21/NOTICE +51 -0
- package/plugins/release-it-21/gemini-extension.json +1 -0
- package/plugins/release-it-21/plugin.json +10 -0
- package/plugins/release-it-21/skills/release-it/SKILL.md +202 -0
- package/plugins/reselect-5/.claude-plugin/plugin.json +9 -0
- package/plugins/reselect-5/LICENSE +93 -0
- package/plugins/reselect-5/NOTICE +51 -0
- package/plugins/reselect-5/gemini-extension.json +1 -0
- package/plugins/reselect-5/plugin.json +10 -0
- package/plugins/reselect-5/skills/reselect/SKILL.md +215 -0
- package/plugins/responselike-4/.claude-plugin/plugin.json +9 -0
- package/plugins/responselike-4/LICENSE +93 -0
- package/plugins/responselike-4/NOTICE +51 -0
- package/plugins/responselike-4/gemini-extension.json +1 -0
- package/plugins/responselike-4/plugin.json +10 -0
- package/plugins/responselike-4/skills/responselike/SKILL.md +173 -0
- package/plugins/rolldown-1/.claude-plugin/plugin.json +9 -0
- package/plugins/rolldown-1/LICENSE +93 -0
- package/plugins/rolldown-1/NOTICE +51 -0
- package/plugins/rolldown-1/gemini-extension.json +1 -0
- package/plugins/rolldown-1/plugin.json +10 -0
- package/plugins/rolldown-1/skills/rolldown/SKILL.md +182 -0
- package/plugins/semver-7/.claude-plugin/plugin.json +9 -0
- package/plugins/semver-7/LICENSE +93 -0
- package/plugins/semver-7/NOTICE +51 -0
- package/plugins/semver-7/gemini-extension.json +1 -0
- package/plugins/semver-7/plugin.json +10 -0
- package/plugins/semver-7/skills/semver/SKILL.md +55 -0
- package/plugins/serde-json-1/.claude-plugin/plugin.json +9 -0
- package/plugins/serde-json-1/LICENSE +93 -0
- package/plugins/serde-json-1/NOTICE +51 -0
- package/plugins/serde-json-1/gemini-extension.json +1 -0
- package/plugins/serde-json-1/plugin.json +10 -0
- package/plugins/serde-json-1/skills/serde-json/SKILL.md +68 -0
- package/plugins/sinon-22/.claude-plugin/plugin.json +9 -0
- package/plugins/sinon-22/LICENSE +93 -0
- package/plugins/sinon-22/NOTICE +51 -0
- package/plugins/sinon-22/gemini-extension.json +1 -0
- package/plugins/sinon-22/plugin.json +10 -0
- package/plugins/sinon-22/skills/sinon/SKILL.md +215 -0
- package/plugins/slice-ansi-9/.claude-plugin/plugin.json +9 -0
- package/plugins/slice-ansi-9/LICENSE +93 -0
- package/plugins/slice-ansi-9/NOTICE +51 -0
- package/plugins/slice-ansi-9/gemini-extension.json +1 -0
- package/plugins/slice-ansi-9/plugin.json +10 -0
- package/plugins/slice-ansi-9/skills/slice-ansi/SKILL.md +111 -0
- package/plugins/smol-toml-1/.claude-plugin/plugin.json +9 -0
- package/plugins/smol-toml-1/LICENSE +93 -0
- package/plugins/smol-toml-1/NOTICE +51 -0
- package/plugins/smol-toml-1/gemini-extension.json +1 -0
- package/plugins/smol-toml-1/plugin.json +10 -0
- package/plugins/smol-toml-1/skills/smol-toml/SKILL.md +63 -0
- package/plugins/socks-proxy-agent-10/.claude-plugin/plugin.json +9 -0
- package/plugins/socks-proxy-agent-10/LICENSE +93 -0
- package/plugins/socks-proxy-agent-10/NOTICE +51 -0
- package/plugins/socks-proxy-agent-10/gemini-extension.json +1 -0
- package/plugins/socks-proxy-agent-10/plugin.json +10 -0
- package/plugins/socks-proxy-agent-10/skills/socks-proxy-agent/SKILL.md +172 -0
- package/plugins/string-width-8/.claude-plugin/plugin.json +9 -0
- package/plugins/string-width-8/LICENSE +93 -0
- package/plugins/string-width-8/NOTICE +51 -0
- package/plugins/string-width-8/gemini-extension.json +1 -0
- package/plugins/string-width-8/plugin.json +10 -0
- package/plugins/string-width-8/skills/string-width/SKILL.md +101 -0
- package/plugins/superstruct-2/.claude-plugin/plugin.json +9 -0
- package/plugins/superstruct-2/LICENSE +93 -0
- package/plugins/superstruct-2/NOTICE +51 -0
- package/plugins/superstruct-2/gemini-extension.json +1 -0
- package/plugins/superstruct-2/plugin.json +10 -0
- package/plugins/superstruct-2/skills/superstruct/SKILL.md +170 -0
- package/plugins/supports-color-11/.claude-plugin/plugin.json +9 -0
- package/plugins/supports-color-11/LICENSE +93 -0
- package/plugins/supports-color-11/NOTICE +51 -0
- package/plugins/supports-color-11/gemini-extension.json +1 -0
- package/plugins/supports-color-11/plugin.json +10 -0
- package/plugins/supports-color-11/skills/supports-color/SKILL.md +115 -0
- package/plugins/tailwindcss-3/.claude-plugin/plugin.json +9 -0
- package/plugins/tailwindcss-3/LICENSE +93 -0
- package/plugins/tailwindcss-3/NOTICE +51 -0
- package/plugins/tailwindcss-3/gemini-extension.json +1 -0
- package/plugins/tailwindcss-3/plugin.json +10 -0
- package/plugins/tailwindcss-3/skills/tailwindcss/SKILL.md +72 -0
- package/plugins/tailwindcss-4/.claude-plugin/plugin.json +9 -0
- package/plugins/tailwindcss-4/LICENSE +93 -0
- package/plugins/tailwindcss-4/NOTICE +51 -0
- package/plugins/tailwindcss-4/gemini-extension.json +1 -0
- package/plugins/tailwindcss-4/plugin.json +10 -0
- package/plugins/tailwindcss-4/skills/tailwindcss/SKILL.md +82 -0
- package/plugins/tanstack-react-router-1/.claude-plugin/plugin.json +9 -0
- package/plugins/tanstack-react-router-1/LICENSE +93 -0
- package/plugins/tanstack-react-router-1/NOTICE +51 -0
- package/plugins/tanstack-react-router-1/gemini-extension.json +1 -0
- package/plugins/tanstack-react-router-1/plugin.json +10 -0
- package/plugins/tanstack-react-router-1/skills/tanstack-react-router/SKILL.md +96 -0
- package/plugins/tedious-20/.claude-plugin/plugin.json +9 -0
- package/plugins/tedious-20/LICENSE +93 -0
- package/plugins/tedious-20/NOTICE +51 -0
- package/plugins/tedious-20/gemini-extension.json +1 -0
- package/plugins/tedious-20/plugin.json +10 -0
- package/plugins/tedious-20/skills/tedious/SKILL.md +174 -0
- package/plugins/testing-library-react-16/.claude-plugin/plugin.json +9 -0
- package/plugins/testing-library-react-16/LICENSE +93 -0
- package/plugins/testing-library-react-16/NOTICE +51 -0
- package/plugins/testing-library-react-16/gemini-extension.json +1 -0
- package/plugins/testing-library-react-16/plugin.json +10 -0
- package/plugins/testing-library-react-16/skills/testing-library-react/SKILL.md +92 -0
- package/plugins/tinyspy-4/.claude-plugin/plugin.json +9 -0
- package/plugins/tinyspy-4/LICENSE +93 -0
- package/plugins/tinyspy-4/NOTICE +51 -0
- package/plugins/tinyspy-4/gemini-extension.json +1 -0
- package/plugins/tinyspy-4/plugin.json +10 -0
- package/plugins/tinyspy-4/skills/tinyspy/SKILL.md +158 -0
- package/plugins/tldts-7/.claude-plugin/plugin.json +9 -0
- package/plugins/tldts-7/LICENSE +93 -0
- package/plugins/tldts-7/NOTICE +51 -0
- package/plugins/tldts-7/gemini-extension.json +1 -0
- package/plugins/tldts-7/plugin.json +10 -0
- package/plugins/tldts-7/skills/tldts/SKILL.md +120 -0
- package/plugins/ts-morph-28/.claude-plugin/plugin.json +9 -0
- package/plugins/ts-morph-28/LICENSE +93 -0
- package/plugins/ts-morph-28/NOTICE +51 -0
- package/plugins/ts-morph-28/gemini-extension.json +1 -0
- package/plugins/ts-morph-28/plugin.json +10 -0
- package/plugins/ts-morph-28/skills/ts-morph/SKILL.md +219 -0
- package/plugins/tsup-8/.claude-plugin/plugin.json +9 -0
- package/plugins/tsup-8/LICENSE +93 -0
- package/plugins/tsup-8/NOTICE +51 -0
- package/plugins/tsup-8/gemini-extension.json +1 -0
- package/plugins/tsup-8/plugin.json +10 -0
- package/plugins/tsup-8/skills/tsup/SKILL.md +97 -0
- package/plugins/tsx-4/.claude-plugin/plugin.json +9 -0
- package/plugins/tsx-4/LICENSE +93 -0
- package/plugins/tsx-4/NOTICE +51 -0
- package/plugins/tsx-4/gemini-extension.json +1 -0
- package/plugins/tsx-4/plugin.json +10 -0
- package/plugins/tsx-4/skills/tsx/SKILL.md +159 -0
- package/plugins/type-fest-5/.claude-plugin/plugin.json +9 -0
- package/plugins/type-fest-5/LICENSE +93 -0
- package/plugins/type-fest-5/NOTICE +51 -0
- package/plugins/type-fest-5/gemini-extension.json +1 -0
- package/plugins/type-fest-5/plugin.json +10 -0
- package/plugins/type-fest-5/skills/type-fest/SKILL.md +132 -0
- package/plugins/typescript-5/.claude-plugin/plugin.json +9 -0
- package/plugins/typescript-5/LICENSE +93 -0
- package/plugins/typescript-5/NOTICE +51 -0
- package/plugins/typescript-5/gemini-extension.json +1 -0
- package/plugins/typescript-5/plugin.json +10 -0
- package/plugins/typescript-5/skills/typescript/SKILL.md +107 -0
- package/plugins/typescript-eslint-8/.claude-plugin/plugin.json +9 -0
- package/plugins/typescript-eslint-8/LICENSE +93 -0
- package/plugins/typescript-eslint-8/NOTICE +51 -0
- package/plugins/typescript-eslint-8/gemini-extension.json +1 -0
- package/plugins/typescript-eslint-8/plugin.json +10 -0
- package/plugins/typescript-eslint-8/skills/typescript-eslint/SKILL.md +179 -0
- package/plugins/typescript-eslint-eslint-plugin-8/.claude-plugin/plugin.json +9 -0
- package/plugins/typescript-eslint-eslint-plugin-8/LICENSE +93 -0
- package/plugins/typescript-eslint-eslint-plugin-8/NOTICE +51 -0
- package/plugins/typescript-eslint-eslint-plugin-8/gemini-extension.json +1 -0
- package/plugins/typescript-eslint-eslint-plugin-8/plugin.json +10 -0
- package/plugins/typescript-eslint-eslint-plugin-8/skills/typescript-eslint-eslint-plugin/SKILL.md +158 -0
- package/plugins/typescript-eslint-estree-8/.claude-plugin/plugin.json +9 -0
- package/plugins/typescript-eslint-estree-8/LICENSE +93 -0
- package/plugins/typescript-eslint-estree-8/NOTICE +51 -0
- package/plugins/typescript-eslint-estree-8/gemini-extension.json +1 -0
- package/plugins/typescript-eslint-estree-8/plugin.json +10 -0
- package/plugins/typescript-eslint-estree-8/skills/typescript-eslint-estree/SKILL.md +125 -0
- package/plugins/typescript-eslint-parser-8/.claude-plugin/plugin.json +9 -0
- package/plugins/typescript-eslint-parser-8/LICENSE +93 -0
- package/plugins/typescript-eslint-parser-8/NOTICE +51 -0
- package/plugins/typescript-eslint-parser-8/gemini-extension.json +1 -0
- package/plugins/typescript-eslint-parser-8/plugin.json +10 -0
- package/plugins/typescript-eslint-parser-8/skills/typescript-eslint-parser/SKILL.md +141 -0
- package/plugins/typescript-eslint-types-8/.claude-plugin/plugin.json +9 -0
- package/plugins/typescript-eslint-types-8/LICENSE +93 -0
- package/plugins/typescript-eslint-types-8/NOTICE +51 -0
- package/plugins/typescript-eslint-types-8/gemini-extension.json +1 -0
- package/plugins/typescript-eslint-types-8/plugin.json +10 -0
- package/plugins/typescript-eslint-types-8/skills/typescript-eslint-types/SKILL.md +117 -0
- package/plugins/typescript-eslint-utils-8/.claude-plugin/plugin.json +9 -0
- package/plugins/typescript-eslint-utils-8/LICENSE +93 -0
- package/plugins/typescript-eslint-utils-8/NOTICE +51 -0
- package/plugins/typescript-eslint-utils-8/gemini-extension.json +1 -0
- package/plugins/typescript-eslint-utils-8/plugin.json +10 -0
- package/plugins/typescript-eslint-utils-8/skills/typescript-eslint-utils/SKILL.md +195 -0
- package/plugins/typescript-eslint-visitor-keys-8/.claude-plugin/plugin.json +9 -0
- package/plugins/typescript-eslint-visitor-keys-8/LICENSE +93 -0
- package/plugins/typescript-eslint-visitor-keys-8/NOTICE +51 -0
- package/plugins/typescript-eslint-visitor-keys-8/gemini-extension.json +1 -0
- package/plugins/typescript-eslint-visitor-keys-8/plugin.json +10 -0
- package/plugins/typescript-eslint-visitor-keys-8/skills/typescript-eslint-visitor-keys/SKILL.md +116 -0
- package/plugins/valibot-1/.claude-plugin/plugin.json +9 -0
- package/plugins/valibot-1/LICENSE +93 -0
- package/plugins/valibot-1/NOTICE +51 -0
- package/plugins/valibot-1/gemini-extension.json +1 -0
- package/plugins/valibot-1/plugin.json +10 -0
- package/plugins/valibot-1/skills/valibot/SKILL.md +190 -0
- package/plugins/vite-7/.claude-plugin/plugin.json +9 -0
- package/plugins/vite-7/LICENSE +93 -0
- package/plugins/vite-7/NOTICE +51 -0
- package/plugins/vite-7/gemini-extension.json +1 -0
- package/plugins/vite-7/plugin.json +10 -0
- package/plugins/vite-7/skills/vite/SKILL.md +111 -0
- package/plugins/vite-8/.claude-plugin/plugin.json +9 -0
- package/plugins/vite-8/LICENSE +93 -0
- package/plugins/vite-8/NOTICE +51 -0
- package/plugins/vite-8/gemini-extension.json +1 -0
- package/plugins/vite-8/plugin.json +10 -0
- package/plugins/vite-8/skills/vite/SKILL.md +267 -0
- package/plugins/vitejs-plugin-react-5/.claude-plugin/plugin.json +9 -0
- package/plugins/vitejs-plugin-react-5/LICENSE +93 -0
- package/plugins/vitejs-plugin-react-5/NOTICE +51 -0
- package/plugins/vitejs-plugin-react-5/gemini-extension.json +1 -0
- package/plugins/vitejs-plugin-react-5/plugin.json +10 -0
- package/plugins/vitejs-plugin-react-5/skills/vitejs-plugin-react/SKILL.md +67 -0
- package/plugins/vitejs-plugin-react-6/.claude-plugin/plugin.json +9 -0
- package/plugins/vitejs-plugin-react-6/LICENSE +93 -0
- package/plugins/vitejs-plugin-react-6/NOTICE +51 -0
- package/plugins/vitejs-plugin-react-6/gemini-extension.json +1 -0
- package/plugins/vitejs-plugin-react-6/plugin.json +10 -0
- package/plugins/vitejs-plugin-react-6/skills/vitejs-plugin-react/SKILL.md +232 -0
- package/plugins/vitest-4/.claude-plugin/plugin.json +9 -0
- package/plugins/vitest-4/LICENSE +93 -0
- package/plugins/vitest-4/NOTICE +51 -0
- package/plugins/vitest-4/gemini-extension.json +1 -0
- package/plugins/vitest-4/plugin.json +10 -0
- package/plugins/vitest-4/skills/vitest/SKILL.md +127 -0
- package/plugins/vitest-5/.claude-plugin/plugin.json +9 -0
- package/plugins/vitest-5/LICENSE +93 -0
- package/plugins/vitest-5/NOTICE +51 -0
- package/plugins/vitest-5/gemini-extension.json +1 -0
- package/plugins/vitest-5/plugin.json +10 -0
- package/plugins/vitest-5/skills/vitest/SKILL.md +186 -0
- package/plugins/whatwg-mimetype-5/.claude-plugin/plugin.json +9 -0
- package/plugins/whatwg-mimetype-5/LICENSE +93 -0
- package/plugins/whatwg-mimetype-5/NOTICE +51 -0
- package/plugins/whatwg-mimetype-5/gemini-extension.json +1 -0
- package/plugins/whatwg-mimetype-5/plugin.json +10 -0
- package/plugins/whatwg-mimetype-5/skills/whatwg-mimetype/SKILL.md +150 -0
- package/plugins/wrangler-4/.claude-plugin/plugin.json +9 -0
- package/plugins/wrangler-4/LICENSE +93 -0
- package/plugins/wrangler-4/NOTICE +51 -0
- package/plugins/wrangler-4/gemini-extension.json +1 -0
- package/plugins/wrangler-4/plugin.json +10 -0
- package/plugins/wrangler-4/skills/wrangler/SKILL.md +87 -0
- package/plugins/wrap-ansi-10/.claude-plugin/plugin.json +9 -0
- package/plugins/wrap-ansi-10/LICENSE +93 -0
- package/plugins/wrap-ansi-10/NOTICE +51 -0
- package/plugins/wrap-ansi-10/gemini-extension.json +1 -0
- package/plugins/wrap-ansi-10/plugin.json +10 -0
- package/plugins/wrap-ansi-10/skills/wrap-ansi/SKILL.md +119 -0
- package/plugins/yaml-2/.claude-plugin/plugin.json +9 -0
- package/plugins/yaml-2/LICENSE +93 -0
- package/plugins/yaml-2/NOTICE +51 -0
- package/plugins/yaml-2/gemini-extension.json +1 -0
- package/plugins/yaml-2/plugin.json +10 -0
- package/plugins/yaml-2/skills/yaml/SKILL.md +56 -0
- package/plugins/yargs-18/.claude-plugin/plugin.json +9 -0
- package/plugins/yargs-18/LICENSE +93 -0
- package/plugins/yargs-18/NOTICE +51 -0
- package/plugins/yargs-18/gemini-extension.json +1 -0
- package/plugins/yargs-18/plugin.json +10 -0
- package/plugins/yargs-18/skills/yargs/SKILL.md +175 -0
- package/plugins/yargs-parser-22/.claude-plugin/plugin.json +9 -0
- package/plugins/yargs-parser-22/LICENSE +93 -0
- package/plugins/yargs-parser-22/NOTICE +51 -0
- package/plugins/yargs-parser-22/gemini-extension.json +1 -0
- package/plugins/yargs-parser-22/plugin.json +10 -0
- package/plugins/yargs-parser-22/skills/yargs-parser/SKILL.md +179 -0
- package/plugins/yeoman-environment-7/.claude-plugin/plugin.json +9 -0
- package/plugins/yeoman-environment-7/LICENSE +93 -0
- package/plugins/yeoman-environment-7/NOTICE +51 -0
- package/plugins/yeoman-environment-7/gemini-extension.json +1 -0
- package/plugins/yeoman-environment-7/plugin.json +10 -0
- package/plugins/yeoman-environment-7/skills/yeoman-environment/SKILL.md +136 -0
- package/plugins/z-schema-12/.claude-plugin/plugin.json +9 -0
- package/plugins/z-schema-12/LICENSE +93 -0
- package/plugins/z-schema-12/NOTICE +51 -0
- package/plugins/z-schema-12/gemini-extension.json +1 -0
- package/plugins/z-schema-12/plugin.json +10 -0
- package/plugins/z-schema-12/skills/z-schema/SKILL.md +179 -0
- package/plugins/zod-schema-validation-3/.claude-plugin/plugin.json +9 -0
- package/plugins/zod-schema-validation-3/LICENSE +93 -0
- package/plugins/zod-schema-validation-3/NOTICE +51 -0
- package/plugins/zod-schema-validation-3/gemini-extension.json +1 -0
- package/plugins/zod-schema-validation-3/plugin.json +10 -0
- package/plugins/zod-schema-validation-3/skills/zod-schema-validation/SKILL.md +188 -0
- package/plugins/zod-schema-validation-4/.claude-plugin/plugin.json +9 -0
- package/plugins/zod-schema-validation-4/LICENSE +93 -0
- package/plugins/zod-schema-validation-4/NOTICE +51 -0
- package/plugins/zod-schema-validation-4/gemini-extension.json +1 -0
- package/plugins/zod-schema-validation-4/plugin.json +10 -0
- package/plugins/zod-schema-validation-4/skills/zod-schema-validation/SKILL.md +181 -0
- package/plugins/zod-validation-error-5/.claude-plugin/plugin.json +9 -0
- package/plugins/zod-validation-error-5/LICENSE +93 -0
- package/plugins/zod-validation-error-5/NOTICE +51 -0
- package/plugins/zod-validation-error-5/gemini-extension.json +1 -0
- package/plugins/zod-validation-error-5/plugin.json +10 -0
- package/plugins/zod-validation-error-5/skills/zod-validation-error/SKILL.md +212 -0
- package/plugins/zustand-5/.claude-plugin/plugin.json +9 -0
- package/plugins/zustand-5/LICENSE +93 -0
- package/plugins/zustand-5/NOTICE +51 -0
- package/plugins/zustand-5/gemini-extension.json +1 -0
- package/plugins/zustand-5/plugin.json +10 -0
- package/plugins/zustand-5/skills/zustand/SKILL.md +128 -0
- 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
|
|
8
|
-
import { basename as basename2, dirname as dirname2, isAbsolute, join as
|
|
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(
|
|
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
|
-
|
|
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 =
|
|
186
|
-
if (!
|
|
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 =
|
|
191
|
-
if (!
|
|
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 =
|
|
199
|
-
if (!
|
|
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 =
|
|
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 =
|
|
213
|
-
if (!
|
|
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 =
|
|
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() &&
|
|
349
|
+
} else if (child.isDirectory() && existsSync2(join2(dir, child.name, "agent.md"))) {
|
|
225
350
|
entry = markdownEntry(
|
|
226
351
|
context,
|
|
227
|
-
|
|
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 =
|
|
242
|
-
if (!
|
|
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
|
|
270
|
-
|
|
271
|
-
|
|
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
|
|
291
|
-
if (!
|
|
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
|
|
313
|
-
|
|
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
|
|
324
|
-
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,
|
|
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(
|
|
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([
|
|
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 (!
|
|
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 =
|
|
494
|
+
const path = join3(root, entry.name);
|
|
391
495
|
if (entry.name.startsWith("@")) {
|
|
392
|
-
if (!
|
|
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(
|
|
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
|
-
|
|
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 =
|
|
442
|
-
if (
|
|
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(
|
|
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(
|
|
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) &&
|
|
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 =
|
|
605
|
+
const absolute = isAbsolute2(dir);
|
|
502
606
|
const base = absolute ? "/" : ".";
|
|
503
|
-
return globDirs(base, dir).filter((d) =>
|
|
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 =
|
|
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(
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
1013
|
-
import { basename as basename4, join as
|
|
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,
|
|
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 (
|
|
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 =
|
|
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(
|
|
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
|
|
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
|
|
1185
|
-
import { dirname as dirname3, isAbsolute as
|
|
1186
|
-
var ownFile = (entry) =>
|
|
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 (
|
|
1292
|
+
if (isAbsolute3(wanted) || wanted.split(/[\\/]/u).includes("..")) {
|
|
1189
1293
|
return { ok: false, error: "path_outside_skill", detail: wanted };
|
|
1190
1294
|
}
|
|
1191
|
-
const scope =
|
|
1192
|
-
const single =
|
|
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 =
|
|
1197
|
-
single && wanted === "" ? scope :
|
|
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 +
|
|
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:
|
|
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 =
|
|
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,
|
|
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:
|
|
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
|
|
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
|
|
1392
|
-
import { dirname as dirname4, join as
|
|
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 =
|
|
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,
|
|
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 =
|
|
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,
|
|
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
|
|
1665
|
-
import { basename as basename5, dirname as dirname5, join as
|
|
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 =
|
|
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,
|
|
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 =
|
|
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(
|
|
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 =
|
|
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.
|
|
2297
|
+
var SERVER_VERSION = "0.14.0";
|
|
2194
2298
|
function registerSkillTools(server, tools) {
|
|
2195
2299
|
registerCatalogTool(server, tools);
|
|
2196
2300
|
registerFindTool(server, tools);
|