@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/stdio.js
CHANGED
|
@@ -10,8 +10,8 @@ import { McpServer } from "@modelcontextprotocol/server";
|
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
|
|
12
12
|
// src/catalog.ts
|
|
13
|
-
import { existsSync as
|
|
14
|
-
import { basename as basename2, dirname as dirname2, isAbsolute, join as
|
|
13
|
+
import { existsSync as existsSync3, readFileSync as readFileSync3, readdirSync as readdirSync2 } from "fs";
|
|
14
|
+
import { basename as basename2, dirname as dirname2, isAbsolute as isAbsolute2, join as join3, relative as relative2 } from "path";
|
|
15
15
|
|
|
16
16
|
// src/frontmatter.ts
|
|
17
17
|
import { parse } from "yaml";
|
|
@@ -133,8 +133,122 @@ function specProblems(front, directory) {
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
// src/marketplace.ts
|
|
136
|
-
import { existsSync, readFileSync, readdirSync } from "fs";
|
|
137
|
-
import { basename, dirname, join, resolve } from "path";
|
|
136
|
+
import { existsSync as existsSync2, readFileSync as readFileSync2, readdirSync } from "fs";
|
|
137
|
+
import { basename, dirname, join as join2, resolve as resolve2 } from "path";
|
|
138
|
+
|
|
139
|
+
// src/marketplace/local.ts
|
|
140
|
+
import { existsSync, readFileSync, realpathSync, statSync } from "fs";
|
|
141
|
+
import { isAbsolute, join, relative, resolve, sep } from "path";
|
|
142
|
+
function object(value) {
|
|
143
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
144
|
+
}
|
|
145
|
+
function containedPath(root, path) {
|
|
146
|
+
const result = resolve(root, path);
|
|
147
|
+
const lexical = relative(resolve(root), result);
|
|
148
|
+
if (isAbsolute(lexical) || lexical === ".." || lexical.startsWith(`..${sep}`))
|
|
149
|
+
throw new Error("Path leaves the plugin root");
|
|
150
|
+
const physical = relative(realpathSync(root), realpathSync(result));
|
|
151
|
+
if (isAbsolute(physical) || physical === ".." || physical.startsWith(`..${sep}`))
|
|
152
|
+
throw new Error("Path leaves the plugin root through a symlink");
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
function pluginManifest(directory) {
|
|
156
|
+
for (const path of [
|
|
157
|
+
".claude-plugin/plugin.json",
|
|
158
|
+
"plugin.json",
|
|
159
|
+
".codex-plugin/plugin.json",
|
|
160
|
+
".grok-plugin/plugin.json"
|
|
161
|
+
]) {
|
|
162
|
+
if (!existsSync(join(directory, path))) continue;
|
|
163
|
+
const value = JSON.parse(
|
|
164
|
+
readFileSync(containedPath(directory, path), "utf8")
|
|
165
|
+
);
|
|
166
|
+
if (!object(value)) throw new Error("Plugin manifest must be an object");
|
|
167
|
+
return value;
|
|
168
|
+
}
|
|
169
|
+
return {};
|
|
170
|
+
}
|
|
171
|
+
function localSource(value) {
|
|
172
|
+
if (typeof value === "string") return value;
|
|
173
|
+
if (object(value) && value.source === "local" && typeof value.path === "string")
|
|
174
|
+
return value.path;
|
|
175
|
+
throw new Error(
|
|
176
|
+
"Only installed local plugin sources can be read; use the native installer for remote sources"
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
function readLocalMarketplace(directory, onReject) {
|
|
180
|
+
const filename = [
|
|
181
|
+
".claude-plugin/marketplace.json",
|
|
182
|
+
".agents/plugins/marketplace.json",
|
|
183
|
+
".grok-plugin/marketplace.json"
|
|
184
|
+
].find((path2) => existsSync(join(directory, path2)));
|
|
185
|
+
if (!filename) {
|
|
186
|
+
onReject?.({
|
|
187
|
+
path: directory,
|
|
188
|
+
reason: "No supported native marketplace.json found"
|
|
189
|
+
});
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
const path = join(directory, filename);
|
|
193
|
+
let manifest2;
|
|
194
|
+
try {
|
|
195
|
+
manifest2 = JSON.parse(
|
|
196
|
+
readFileSync(containedPath(directory, filename), "utf8")
|
|
197
|
+
);
|
|
198
|
+
} catch {
|
|
199
|
+
onReject?.({
|
|
200
|
+
path,
|
|
201
|
+
reason: "marketplace.json is not valid JSON or is outside its root"
|
|
202
|
+
});
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
if (!object(manifest2) || !Array.isArray(manifest2.plugins)) {
|
|
206
|
+
onReject?.({ path, reason: "marketplace.json requires a plugins array" });
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
const name = typeof manifest2.name === "string" ? manifest2.name : "marketplace";
|
|
210
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/u.test(name)) {
|
|
211
|
+
onReject?.({ path, reason: "Invalid marketplace name" });
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
const plugins = [];
|
|
215
|
+
const seen = /* @__PURE__ */ new Set();
|
|
216
|
+
for (const item of manifest2.plugins) {
|
|
217
|
+
try {
|
|
218
|
+
if (!object(item) || typeof item.name !== "string" || !/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/u.test(item.name))
|
|
219
|
+
throw new Error("Invalid plugin name");
|
|
220
|
+
if (seen.has(item.name)) throw new Error("Duplicate plugin name");
|
|
221
|
+
const source = localSource(item.source);
|
|
222
|
+
if (!source.startsWith("./") || source.split(/[\\/]/u).includes(".."))
|
|
223
|
+
throw new Error("Local plugin source must be a contained ./ path");
|
|
224
|
+
const pluginDirectory = containedPath(directory, source);
|
|
225
|
+
if (!statSync(pluginDirectory).isDirectory())
|
|
226
|
+
throw new Error("Plugin source must be a directory");
|
|
227
|
+
const metadata2 = pluginManifest(pluginDirectory);
|
|
228
|
+
if (metadata2.name !== void 0 && metadata2.name !== item.name)
|
|
229
|
+
throw new Error("Plugin manifest name differs from marketplace entry");
|
|
230
|
+
seen.add(item.name);
|
|
231
|
+
plugins.push({
|
|
232
|
+
name: item.name,
|
|
233
|
+
directory: pluginDirectory,
|
|
234
|
+
manifest: metadata2
|
|
235
|
+
});
|
|
236
|
+
} catch (error) {
|
|
237
|
+
onReject?.({
|
|
238
|
+
path,
|
|
239
|
+
reason: error instanceof Error ? error.message : "Invalid plugin source"
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
const metadata = object(manifest2.metadata) ? manifest2.metadata : {};
|
|
244
|
+
return {
|
|
245
|
+
name,
|
|
246
|
+
plugins,
|
|
247
|
+
...typeof metadata.tier === "string" ? { tier: metadata.tier } : {}
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// src/marketplace.ts
|
|
138
252
|
function readMetadata(source) {
|
|
139
253
|
return metadataOf(frontmatterObject(source));
|
|
140
254
|
}
|
|
@@ -147,16 +261,27 @@ var asList = (value) => {
|
|
|
147
261
|
if (typeof value === "string") return [value];
|
|
148
262
|
return Array.isArray(value) ? value : [];
|
|
149
263
|
};
|
|
150
|
-
function readJson(path) {
|
|
264
|
+
function readJson(path, root) {
|
|
151
265
|
try {
|
|
152
|
-
const parsed = JSON.parse(
|
|
266
|
+
const parsed = JSON.parse(
|
|
267
|
+
readFileSync2(containedPath(root, path), "utf8")
|
|
268
|
+
);
|
|
153
269
|
return parsed !== null && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : null;
|
|
154
270
|
} catch {
|
|
155
271
|
return null;
|
|
156
272
|
}
|
|
157
273
|
}
|
|
158
274
|
function markdownEntry(context, path, fallbackSlug, shape) {
|
|
159
|
-
|
|
275
|
+
let source;
|
|
276
|
+
try {
|
|
277
|
+
source = readFileSync2(containedPath(context.pluginDir, path), "utf8");
|
|
278
|
+
} catch {
|
|
279
|
+
context.onReject?.({
|
|
280
|
+
path,
|
|
281
|
+
reason: "Asset is unreadable or outside the plugin root"
|
|
282
|
+
});
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
160
285
|
const front = readFrontmatter(source);
|
|
161
286
|
const description = front["description"] ?? "";
|
|
162
287
|
if (description === "") {
|
|
@@ -188,25 +313,25 @@ function markdownEntry(context, path, fallbackSlug, shape) {
|
|
|
188
313
|
};
|
|
189
314
|
}
|
|
190
315
|
function skillEntries(context) {
|
|
191
|
-
const dir =
|
|
192
|
-
if (!
|
|
316
|
+
const dir = join2(context.pluginDir, "skills");
|
|
317
|
+
if (!existsSync2(dir)) return [];
|
|
193
318
|
const found = [];
|
|
194
319
|
for (const child of readdirSync(dir, { withFileTypes: true })) {
|
|
195
320
|
if (!child.isDirectory()) continue;
|
|
196
|
-
const path =
|
|
197
|
-
if (!
|
|
321
|
+
const path = join2(dir, child.name, "SKILL.md");
|
|
322
|
+
if (!existsSync2(path)) continue;
|
|
198
323
|
const entry = markdownEntry(context, path, child.name, {});
|
|
199
324
|
if (entry) found.push(entry);
|
|
200
325
|
}
|
|
201
326
|
return found;
|
|
202
327
|
}
|
|
203
328
|
function commandEntries(context) {
|
|
204
|
-
const dir =
|
|
205
|
-
if (!
|
|
329
|
+
const dir = join2(context.pluginDir, "commands");
|
|
330
|
+
if (!existsSync2(dir)) return [];
|
|
206
331
|
const found = [];
|
|
207
332
|
for (const child of readdirSync(dir, { withFileTypes: true })) {
|
|
208
333
|
if (!child.isFile() || !child.name.endsWith(".md")) continue;
|
|
209
|
-
const path =
|
|
334
|
+
const path = join2(dir, child.name);
|
|
210
335
|
const entry = markdownEntry(context, path, basename(child.name, ".md"), {
|
|
211
336
|
root: path
|
|
212
337
|
});
|
|
@@ -215,22 +340,22 @@ function commandEntries(context) {
|
|
|
215
340
|
return found;
|
|
216
341
|
}
|
|
217
342
|
function agentEntries(context) {
|
|
218
|
-
const dir =
|
|
219
|
-
if (!
|
|
343
|
+
const dir = join2(context.pluginDir, "agents");
|
|
344
|
+
if (!existsSync2(dir)) return [];
|
|
220
345
|
const found = [];
|
|
221
346
|
for (const child of readdirSync(dir, { withFileTypes: true })) {
|
|
222
347
|
let entry = null;
|
|
223
348
|
if (child.isFile() && child.name.endsWith(".md")) {
|
|
224
|
-
const path =
|
|
349
|
+
const path = join2(dir, child.name);
|
|
225
350
|
entry = markdownEntry(context, path, basename(child.name, ".md"), {
|
|
226
351
|
kind: "agent",
|
|
227
352
|
root: path,
|
|
228
353
|
namespace: "agents"
|
|
229
354
|
});
|
|
230
|
-
} else if (child.isDirectory() &&
|
|
355
|
+
} else if (child.isDirectory() && existsSync2(join2(dir, child.name, "agent.md"))) {
|
|
231
356
|
entry = markdownEntry(
|
|
232
357
|
context,
|
|
233
|
-
|
|
358
|
+
join2(dir, child.name, "agent.md"),
|
|
234
359
|
child.name,
|
|
235
360
|
{
|
|
236
361
|
kind: "agent",
|
|
@@ -244,9 +369,9 @@ function agentEntries(context) {
|
|
|
244
369
|
}
|
|
245
370
|
function hookEntries(context, manifest2) {
|
|
246
371
|
const declared = typeof manifest2.hooks === "string" ? manifest2.hooks : void 0;
|
|
247
|
-
const path =
|
|
248
|
-
if (!
|
|
249
|
-
const hooks = readJson(path);
|
|
372
|
+
const path = resolve2(context.pluginDir, declared ?? "hooks/hooks.json");
|
|
373
|
+
if (!existsSync2(path)) return [];
|
|
374
|
+
const hooks = readJson(path, context.pluginDir);
|
|
250
375
|
if (hooks === null) {
|
|
251
376
|
context.onReject?.({ path, reason: "hooks.json is not a JSON object" });
|
|
252
377
|
return [];
|
|
@@ -272,9 +397,12 @@ function hookEntries(context, manifest2) {
|
|
|
272
397
|
];
|
|
273
398
|
}
|
|
274
399
|
function mcpEntries(context) {
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
|
|
400
|
+
const filename = [".mcp.json", "mcp.json", "mcp_config.json"].find(
|
|
401
|
+
(name) => existsSync2(join2(context.pluginDir, name))
|
|
402
|
+
);
|
|
403
|
+
if (!filename) return [];
|
|
404
|
+
const path = join2(context.pluginDir, filename);
|
|
405
|
+
const config = readJson(path, context.pluginDir);
|
|
278
406
|
const servers = config?.["mcpServers"];
|
|
279
407
|
if (servers === null || typeof servers !== "object" || Array.isArray(servers)) {
|
|
280
408
|
context.onReject?.({ path, reason: ".mcp.json has no mcpServers object" });
|
|
@@ -293,48 +421,24 @@ function mcpEntries(context) {
|
|
|
293
421
|
}));
|
|
294
422
|
}
|
|
295
423
|
function readMarketplace(dir, onReject) {
|
|
296
|
-
const
|
|
297
|
-
if (!
|
|
298
|
-
onReject?.({
|
|
299
|
-
path: dir,
|
|
300
|
-
reason: "no .claude-plugin/marketplace.json here"
|
|
301
|
-
});
|
|
302
|
-
return [];
|
|
303
|
-
}
|
|
304
|
-
let manifest2;
|
|
305
|
-
try {
|
|
306
|
-
manifest2 = JSON.parse(
|
|
307
|
-
readFileSync(manifestPath, "utf8")
|
|
308
|
-
);
|
|
309
|
-
} catch {
|
|
310
|
-
onReject?.({
|
|
311
|
-
path: manifestPath,
|
|
312
|
-
reason: "marketplace.json is not valid JSON"
|
|
313
|
-
});
|
|
314
|
-
return [];
|
|
315
|
-
}
|
|
316
|
-
const marketplace = manifest2.name ?? "marketplace";
|
|
424
|
+
const marketplace = readLocalMarketplace(dir, onReject);
|
|
425
|
+
if (!marketplace) return [];
|
|
317
426
|
const found = [];
|
|
318
|
-
for (const plugin of
|
|
319
|
-
|
|
320
|
-
const pluginDir = resolve(dir, plugin.source);
|
|
321
|
-
if (!existsSync(pluginDir)) continue;
|
|
322
|
-
const pluginManifest = readJson(
|
|
323
|
-
join(pluginDir, ".claude-plugin", "plugin.json")
|
|
324
|
-
) ?? {};
|
|
427
|
+
for (const plugin of marketplace.plugins) {
|
|
428
|
+
const pluginManifest2 = plugin.manifest;
|
|
325
429
|
const context = {
|
|
326
|
-
marketplace,
|
|
430
|
+
marketplace: marketplace.name,
|
|
327
431
|
plugin: plugin.name,
|
|
328
|
-
pluginDir,
|
|
329
|
-
pluginDescription: typeof
|
|
330
|
-
tier:
|
|
432
|
+
pluginDir: plugin.directory,
|
|
433
|
+
pluginDescription: typeof pluginManifest2.description === "string" ? pluginManifest2.description : void 0,
|
|
434
|
+
tier: marketplace.tier,
|
|
331
435
|
onReject
|
|
332
436
|
};
|
|
333
437
|
found.push(
|
|
334
438
|
...skillEntries(context),
|
|
335
439
|
...commandEntries(context),
|
|
336
440
|
...agentEntries(context),
|
|
337
|
-
...hookEntries(context,
|
|
441
|
+
...hookEntries(context, pluginManifest2),
|
|
338
442
|
...mcpEntries(context)
|
|
339
443
|
);
|
|
340
444
|
}
|
|
@@ -376,29 +480,29 @@ function skillFiles(packageDir) {
|
|
|
376
480
|
}
|
|
377
481
|
for (const entry of entries) {
|
|
378
482
|
if (entry.isFile()) {
|
|
379
|
-
if (entry.name === "SKILL.md") found.push(
|
|
483
|
+
if (entry.name === "SKILL.md") found.push(join3(dir, entry.name));
|
|
380
484
|
continue;
|
|
381
485
|
}
|
|
382
486
|
if (!entry.isDirectory()) continue;
|
|
383
487
|
if (SKIPPED_DIRS.has(entry.name)) continue;
|
|
384
488
|
if (depth + 1 <= MAX_SKILL_DEPTH)
|
|
385
|
-
stack.push([
|
|
489
|
+
stack.push([join3(dir, entry.name), depth + 1]);
|
|
386
490
|
}
|
|
387
491
|
}
|
|
388
492
|
return found.sort();
|
|
389
493
|
}
|
|
390
494
|
function packageDirs(root) {
|
|
391
|
-
if (!
|
|
495
|
+
if (!existsSync3(root)) return [];
|
|
392
496
|
const found = [];
|
|
393
497
|
for (const entry of readdirSync2(root, { withFileTypes: true })) {
|
|
394
498
|
if (!entry.isDirectory() && !entry.isSymbolicLink()) continue;
|
|
395
499
|
if (entry.name === ".bin" || entry.name === ".cache") continue;
|
|
396
|
-
const path =
|
|
500
|
+
const path = join3(root, entry.name);
|
|
397
501
|
if (entry.name.startsWith("@")) {
|
|
398
|
-
if (!
|
|
502
|
+
if (!existsSync3(path)) continue;
|
|
399
503
|
for (const scoped of readdirSync2(path, { withFileTypes: true })) {
|
|
400
504
|
if (scoped.isDirectory() || scoped.isSymbolicLink()) {
|
|
401
|
-
found.push(
|
|
505
|
+
found.push(join3(path, scoped.name));
|
|
402
506
|
}
|
|
403
507
|
}
|
|
404
508
|
continue;
|
|
@@ -410,7 +514,7 @@ function packageDirs(root) {
|
|
|
410
514
|
function readManifest(dir) {
|
|
411
515
|
try {
|
|
412
516
|
const parsed = JSON.parse(
|
|
413
|
-
|
|
517
|
+
readFileSync3(join3(dir, "package.json"), "utf8")
|
|
414
518
|
);
|
|
415
519
|
return parsed !== null && typeof parsed === "object" ? parsed : null;
|
|
416
520
|
} catch {
|
|
@@ -444,8 +548,8 @@ function globDirs(base, pattern) {
|
|
|
444
548
|
}
|
|
445
549
|
const segment = segments[index];
|
|
446
550
|
if (!segment.includes("*")) {
|
|
447
|
-
const next =
|
|
448
|
-
if (
|
|
551
|
+
const next = join3(dir, segment);
|
|
552
|
+
if (existsSync3(next)) walk(next, index + 1);
|
|
449
553
|
return;
|
|
450
554
|
}
|
|
451
555
|
let entries;
|
|
@@ -457,12 +561,12 @@ function globDirs(base, pattern) {
|
|
|
457
561
|
const children = entries.filter((e) => e.isDirectory() || e.isSymbolicLink()).filter((e) => !SKIPPED_DIRS.has(e.name));
|
|
458
562
|
if (segment === "**") {
|
|
459
563
|
walk(dir, index + 1);
|
|
460
|
-
for (const child of children) walk(
|
|
564
|
+
for (const child of children) walk(join3(dir, child.name), index);
|
|
461
565
|
return;
|
|
462
566
|
}
|
|
463
567
|
const matcher = segmentMatcher(segment);
|
|
464
568
|
for (const child of children) {
|
|
465
|
-
if (matcher.test(child.name)) walk(
|
|
569
|
+
if (matcher.test(child.name)) walk(join3(dir, child.name), index + 1);
|
|
466
570
|
}
|
|
467
571
|
};
|
|
468
572
|
walk(base, 0);
|
|
@@ -487,7 +591,7 @@ function workspacePackageDirs(root) {
|
|
|
487
591
|
}
|
|
488
592
|
}
|
|
489
593
|
}
|
|
490
|
-
const members = [...included].filter((m) => !excluded.has(m) &&
|
|
594
|
+
const members = [...included].filter((m) => !excluded.has(m) && existsSync3(join3(m, "package.json"))).sort();
|
|
491
595
|
for (const member of members) expand(member);
|
|
492
596
|
ordered.push(dir);
|
|
493
597
|
};
|
|
@@ -504,9 +608,9 @@ function nameOf(dir, named) {
|
|
|
504
608
|
}
|
|
505
609
|
function expandRootGlob(dir) {
|
|
506
610
|
if (!dir.includes("*")) return [dir];
|
|
507
|
-
const absolute =
|
|
611
|
+
const absolute = isAbsolute2(dir);
|
|
508
612
|
const base = absolute ? "/" : ".";
|
|
509
|
-
return globDirs(base, dir).filter((d) =>
|
|
613
|
+
return globDirs(base, dir).filter((d) => existsSync3(join3(d, "package.json"))).sort();
|
|
510
614
|
}
|
|
511
615
|
function readCatalog(options) {
|
|
512
616
|
const scopes = options.scopes ?? [];
|
|
@@ -530,7 +634,7 @@ function readCatalog(options) {
|
|
|
530
634
|
seenPaths.add(path);
|
|
531
635
|
let source;
|
|
532
636
|
try {
|
|
533
|
-
source =
|
|
637
|
+
source = readFileSync3(path, "utf8");
|
|
534
638
|
} catch {
|
|
535
639
|
continue;
|
|
536
640
|
}
|
|
@@ -574,7 +678,7 @@ function readCatalog(options) {
|
|
|
574
678
|
}
|
|
575
679
|
seen.add(entry.name);
|
|
576
680
|
if (kindOf(entry) === "skill" && basename2(entry.path) === "SKILL.md") {
|
|
577
|
-
const parsed = frontmatterObject(
|
|
681
|
+
const parsed = frontmatterObject(readFileSync3(entry.path, "utf8"));
|
|
578
682
|
for (const problem of specProblems(
|
|
579
683
|
parsed,
|
|
580
684
|
basename2(dirname2(entry.path))
|
|
@@ -641,7 +745,7 @@ function registerSkillPrompts(server, tools) {
|
|
|
641
745
|
}
|
|
642
746
|
|
|
643
747
|
// src/resources.ts
|
|
644
|
-
import { statSync as
|
|
748
|
+
import { statSync as statSync5 } from "fs";
|
|
645
749
|
import {
|
|
646
750
|
ResourceNotFoundError,
|
|
647
751
|
ResourceTemplate
|
|
@@ -649,8 +753,8 @@ import {
|
|
|
649
753
|
|
|
650
754
|
// src/files/list.ts
|
|
651
755
|
import { createHash } from "crypto";
|
|
652
|
-
import { readFileSync as
|
|
653
|
-
import { basename as basename4, join as
|
|
756
|
+
import { readFileSync as readFileSync4, readdirSync as readdirSync3, statSync as statSync2 } from "fs";
|
|
757
|
+
import { basename as basename4, join as join4, relative as relative3, sep as sep2 } from "path";
|
|
654
758
|
|
|
655
759
|
// src/files/redact.ts
|
|
656
760
|
import { basename as basename3 } from "path";
|
|
@@ -687,11 +791,11 @@ function servedBytes(path, raw) {
|
|
|
687
791
|
var FILE_LIST_LIMIT = 200;
|
|
688
792
|
var sha256 = (bytes) => createHash("sha256").update(bytes).digest("hex");
|
|
689
793
|
function describe(path, full) {
|
|
690
|
-
const bytes = servedBytes(full,
|
|
794
|
+
const bytes = servedBytes(full, readFileSync4(full));
|
|
691
795
|
return { path, bytes: bytes.length, sha256: sha256(bytes) };
|
|
692
796
|
}
|
|
693
797
|
function listSkillFiles(root, limit = FILE_LIST_LIMIT) {
|
|
694
|
-
if (
|
|
798
|
+
if (statSync2(root).isFile()) {
|
|
695
799
|
return { files: [describe(basename4(root), root)], truncated: false };
|
|
696
800
|
}
|
|
697
801
|
const files = [];
|
|
@@ -700,14 +804,14 @@ function listSkillFiles(root, limit = FILE_LIST_LIMIT) {
|
|
|
700
804
|
const dir = stack.pop();
|
|
701
805
|
for (const entry of readdirSync3(dir, { withFileTypes: true })) {
|
|
702
806
|
if (entry.name === "node_modules" || entry.name === ".git") continue;
|
|
703
|
-
const full =
|
|
807
|
+
const full = join4(dir, entry.name);
|
|
704
808
|
if (entry.isDirectory()) {
|
|
705
809
|
stack.push(full);
|
|
706
810
|
continue;
|
|
707
811
|
}
|
|
708
812
|
if (!entry.isFile()) continue;
|
|
709
813
|
if (files.length >= limit) return { files, truncated: true };
|
|
710
|
-
files.push(describe(
|
|
814
|
+
files.push(describe(relative3(root, full).split(sep2).join("/"), full));
|
|
711
815
|
}
|
|
712
816
|
}
|
|
713
817
|
files.sort((a, b) => a.path.localeCompare(b.path));
|
|
@@ -715,7 +819,7 @@ function listSkillFiles(root, limit = FILE_LIST_LIMIT) {
|
|
|
715
819
|
}
|
|
716
820
|
|
|
717
821
|
// src/files/read.ts
|
|
718
|
-
import { readFileSync as
|
|
822
|
+
import { readFileSync as readFileSync5, statSync as statSync4 } from "fs";
|
|
719
823
|
|
|
720
824
|
// src/mime.ts
|
|
721
825
|
var TYPES = {
|
|
@@ -821,31 +925,31 @@ function classify(path, bytes) {
|
|
|
821
925
|
}
|
|
822
926
|
|
|
823
927
|
// src/files/resolve.ts
|
|
824
|
-
import { realpathSync, statSync as
|
|
825
|
-
import { dirname as dirname3, isAbsolute as
|
|
826
|
-
var ownFile = (entry) =>
|
|
928
|
+
import { realpathSync as realpathSync2, statSync as statSync3 } from "fs";
|
|
929
|
+
import { dirname as dirname3, isAbsolute as isAbsolute3, relative as relative4, resolve as resolve3, sep as sep3 } from "path";
|
|
930
|
+
var ownFile = (entry) => relative4(assetRoot(entry), entry.path).split(sep3).join("/");
|
|
827
931
|
function resolveSkillFile(entry, wanted = ownFile(entry)) {
|
|
828
|
-
if (
|
|
932
|
+
if (isAbsolute3(wanted) || wanted.split(/[\\/]/u).includes("..")) {
|
|
829
933
|
return { ok: false, error: "path_outside_skill", detail: wanted };
|
|
830
934
|
}
|
|
831
|
-
const scope =
|
|
832
|
-
const single =
|
|
935
|
+
const scope = realpathSync2(assetRoot(entry));
|
|
936
|
+
const single = statSync3(scope).isFile();
|
|
833
937
|
const root = single ? dirname3(scope) : scope;
|
|
834
938
|
let target;
|
|
835
939
|
try {
|
|
836
|
-
target =
|
|
837
|
-
single && wanted === "" ? scope :
|
|
940
|
+
target = realpathSync2(
|
|
941
|
+
single && wanted === "" ? scope : resolve3(root, wanted)
|
|
838
942
|
);
|
|
839
943
|
} catch {
|
|
840
944
|
return { ok: false, error: "no_such_file", detail: wanted };
|
|
841
945
|
}
|
|
842
|
-
const inside = single ? target === scope : target === root || target.startsWith(root +
|
|
946
|
+
const inside = single ? target === scope : target === root || target.startsWith(root + sep3);
|
|
843
947
|
if (!inside)
|
|
844
948
|
return { ok: false, error: "path_outside_skill", detail: wanted };
|
|
845
949
|
return {
|
|
846
950
|
ok: true,
|
|
847
951
|
target,
|
|
848
|
-
path:
|
|
952
|
+
path: relative4(root, target).split(sep3).join("/")
|
|
849
953
|
};
|
|
850
954
|
}
|
|
851
955
|
|
|
@@ -854,7 +958,7 @@ var READ_BUDGET_BYTES = 256 * 1024;
|
|
|
854
958
|
function readSkillFile(entry, wanted, budget = READ_BUDGET_BYTES) {
|
|
855
959
|
const resolved = resolveSkillFile(entry, wanted);
|
|
856
960
|
if (!resolved.ok) return resolved;
|
|
857
|
-
const size =
|
|
961
|
+
const size = statSync4(resolved.target).size;
|
|
858
962
|
if (size > budget) {
|
|
859
963
|
return {
|
|
860
964
|
ok: false,
|
|
@@ -862,7 +966,7 @@ function readSkillFile(entry, wanted, budget = READ_BUDGET_BYTES) {
|
|
|
862
966
|
detail: `${size} bytes > ${budget}`
|
|
863
967
|
};
|
|
864
968
|
}
|
|
865
|
-
const bytes = servedBytes(resolved.target,
|
|
969
|
+
const bytes = servedBytes(resolved.target, readFileSync5(resolved.target));
|
|
866
970
|
const { kind: kind2, mimeType } = classify(resolved.path, bytes);
|
|
867
971
|
return {
|
|
868
972
|
ok: true,
|
|
@@ -902,7 +1006,7 @@ function listing(entries) {
|
|
|
902
1006
|
name: entry.name,
|
|
903
1007
|
description: entry.description,
|
|
904
1008
|
mimeType: "text/markdown",
|
|
905
|
-
size:
|
|
1009
|
+
size: statSync5(entry.path).size
|
|
906
1010
|
}));
|
|
907
1011
|
}
|
|
908
1012
|
function complete(value, entries) {
|
|
@@ -939,7 +1043,7 @@ function registerSkillResources(server, skills) {
|
|
|
939
1043
|
}
|
|
940
1044
|
|
|
941
1045
|
// src/server.ts
|
|
942
|
-
import { readFileSync as
|
|
1046
|
+
import { readFileSync as readFileSync7 } from "fs";
|
|
943
1047
|
|
|
944
1048
|
// src/find.ts
|
|
945
1049
|
import { createHash as createHash2 } from "crypto";
|
|
@@ -1035,11 +1139,11 @@ function rank(matches2, limit) {
|
|
|
1035
1139
|
}
|
|
1036
1140
|
|
|
1037
1141
|
// src/files/bundle.ts
|
|
1038
|
-
import { readFileSync as
|
|
1039
|
-
import { dirname as dirname4, join as
|
|
1142
|
+
import { readFileSync as readFileSync6, statSync as statSync6 } from "fs";
|
|
1143
|
+
import { dirname as dirname4, join as join5 } from "path";
|
|
1040
1144
|
function bundleSkill(entry) {
|
|
1041
1145
|
const root = assetRoot(entry);
|
|
1042
|
-
const base =
|
|
1146
|
+
const base = statSync6(root).isFile() ? dirname4(root) : root;
|
|
1043
1147
|
const listing2 = listSkillFiles(root);
|
|
1044
1148
|
return {
|
|
1045
1149
|
name: entry.name,
|
|
@@ -1047,7 +1151,7 @@ function bundleSkill(entry) {
|
|
|
1047
1151
|
files: listing2.files.map((file) => ({
|
|
1048
1152
|
...file,
|
|
1049
1153
|
uri: skillFileUri(entry, file.path),
|
|
1050
|
-
mimeType: classify(file.path,
|
|
1154
|
+
mimeType: classify(file.path, readFileSync6(join5(base, file.path))).mimeType
|
|
1051
1155
|
}))
|
|
1052
1156
|
};
|
|
1053
1157
|
}
|
|
@@ -1251,7 +1355,7 @@ function createSkillTools(options) {
|
|
|
1251
1355
|
describe(name) {
|
|
1252
1356
|
const entry = byName(name);
|
|
1253
1357
|
if (!entry) return null;
|
|
1254
|
-
const source =
|
|
1358
|
+
const source = readFileSync7(entry.path, "utf8");
|
|
1255
1359
|
const listing2 = listSkillFiles(assetRoot(entry));
|
|
1256
1360
|
return {
|
|
1257
1361
|
name: entry.name,
|
|
@@ -1288,7 +1392,7 @@ function createSkillTools(options) {
|
|
|
1288
1392
|
return {
|
|
1289
1393
|
name: entry.name,
|
|
1290
1394
|
body: readBody(
|
|
1291
|
-
servedBytes(entry.path,
|
|
1395
|
+
servedBytes(entry.path, readFileSync7(entry.path)).toString("utf8")
|
|
1292
1396
|
),
|
|
1293
1397
|
files: bundle.files.filter((file) => file.path !== own),
|
|
1294
1398
|
filesTruncated: bundle.truncated
|
|
@@ -1308,17 +1412,17 @@ function createSkillTools(options) {
|
|
|
1308
1412
|
|
|
1309
1413
|
// src/extension/entry.ts
|
|
1310
1414
|
import { createHash as createHash3 } from "crypto";
|
|
1311
|
-
import { readFileSync as
|
|
1312
|
-
import { basename as basename5, dirname as dirname5, join as
|
|
1415
|
+
import { readFileSync as readFileSync8, readdirSync as readdirSync4, statSync as statSync7 } from "fs";
|
|
1416
|
+
import { basename as basename5, dirname as dirname5, join as join6, relative as relative5, sep as sep4 } from "path";
|
|
1313
1417
|
var MAX_RESOURCES = 512;
|
|
1314
1418
|
var MAX_SKILL_BYTES = 16 * 1024 * 1024;
|
|
1315
1419
|
var digests = /* @__PURE__ */ new Map();
|
|
1316
1420
|
function facts(path) {
|
|
1317
|
-
const stat =
|
|
1421
|
+
const stat = statSync7(path);
|
|
1318
1422
|
const key = `${stat.mtimeMs}:${stat.size}`;
|
|
1319
1423
|
const cached = digests.get(path);
|
|
1320
1424
|
if (cached?.key === key) return cached;
|
|
1321
|
-
const bytes = servedBytes(path,
|
|
1425
|
+
const bytes = servedBytes(path, readFileSync8(path));
|
|
1322
1426
|
const digest = `sha256:${createHash3("sha256").update(bytes).digest("hex")}`;
|
|
1323
1427
|
const fresh = { key, digest, size: bytes.length };
|
|
1324
1428
|
digests.set(path, fresh);
|
|
@@ -1331,7 +1435,7 @@ function filesUnder(root) {
|
|
|
1331
1435
|
const dir = stack.pop();
|
|
1332
1436
|
for (const entry of readdirSync4(dir, { withFileTypes: true })) {
|
|
1333
1437
|
if (entry.name === "node_modules" || entry.name === ".git") continue;
|
|
1334
|
-
const full =
|
|
1438
|
+
const full = join6(dir, entry.name);
|
|
1335
1439
|
if (entry.isDirectory()) stack.push(full);
|
|
1336
1440
|
else if (entry.isFile()) found.push(full);
|
|
1337
1441
|
if (found.length > MAX_RESOURCES) return null;
|
|
@@ -1342,7 +1446,7 @@ function filesUnder(root) {
|
|
|
1342
1446
|
function extensionEntry(entry) {
|
|
1343
1447
|
if (kindOf(entry) !== "skill" || basename5(entry.path) !== "SKILL.md")
|
|
1344
1448
|
return null;
|
|
1345
|
-
const frontmatter = frontmatterObject(
|
|
1449
|
+
const frontmatter = frontmatterObject(readFileSync8(entry.path, "utf8"));
|
|
1346
1450
|
const root = dirname5(entry.path);
|
|
1347
1451
|
if (specProblems(frontmatter, basename5(root)).length > 0) return null;
|
|
1348
1452
|
if (frontmatter?.["name"] !== entry.slug) return null;
|
|
@@ -1352,7 +1456,7 @@ function extensionEntry(entry) {
|
|
|
1352
1456
|
const resources = files.map((path) => {
|
|
1353
1457
|
const fact = facts(path);
|
|
1354
1458
|
total += fact.size;
|
|
1355
|
-
const file =
|
|
1459
|
+
const file = relative5(root, path).split(sep4).join("/");
|
|
1356
1460
|
return {
|
|
1357
1461
|
uri: skillFileUri(entry, file),
|
|
1358
1462
|
digest: fact.digest,
|
|
@@ -1837,7 +1941,7 @@ function registerMailboxTools(server, service) {
|
|
|
1837
1941
|
|
|
1838
1942
|
// src/mcp.ts
|
|
1839
1943
|
var SERVER_NAME = "pmcp";
|
|
1840
|
-
var SERVER_VERSION = "0.
|
|
1944
|
+
var SERVER_VERSION = "0.14.0";
|
|
1841
1945
|
function registerSkillTools(server, tools) {
|
|
1842
1946
|
registerCatalogTool(server, tools);
|
|
1843
1947
|
registerFindTool(server, tools);
|
|
@@ -1862,22 +1966,22 @@ import { randomUUID } from "crypto";
|
|
|
1862
1966
|
import {
|
|
1863
1967
|
closeSync,
|
|
1864
1968
|
constants,
|
|
1865
|
-
existsSync as
|
|
1969
|
+
existsSync as existsSync5,
|
|
1866
1970
|
fstatSync,
|
|
1867
1971
|
mkdirSync,
|
|
1868
1972
|
openSync,
|
|
1869
|
-
readFileSync as
|
|
1973
|
+
readFileSync as readFileSync10,
|
|
1870
1974
|
renameSync,
|
|
1871
1975
|
rmSync,
|
|
1872
1976
|
writeFileSync
|
|
1873
1977
|
} from "fs";
|
|
1874
1978
|
import { homedir } from "os";
|
|
1875
|
-
import { dirname as dirname7, join as
|
|
1979
|
+
import { dirname as dirname7, join as join8, resolve as resolve5 } from "path";
|
|
1876
1980
|
import { z as z12 } from "zod";
|
|
1877
1981
|
|
|
1878
1982
|
// src/config.ts
|
|
1879
|
-
import { existsSync as
|
|
1880
|
-
import { dirname as dirname6, join as
|
|
1983
|
+
import { existsSync as existsSync4, readFileSync as readFileSync9 } from "fs";
|
|
1984
|
+
import { dirname as dirname6, join as join7, resolve as resolve4 } from "path";
|
|
1881
1985
|
import { parse as parse2 } from "smol-toml";
|
|
1882
1986
|
|
|
1883
1987
|
// src/encoder.ts
|
|
@@ -1885,7 +1989,11 @@ import { createHash as createHash4 } from "crypto";
|
|
|
1885
1989
|
|
|
1886
1990
|
// src/config.ts
|
|
1887
1991
|
var PATH_KEYS = ["roots", "workspaces", "packages", "marketplaces"];
|
|
1888
|
-
var CATALOG_KEYS = /* @__PURE__ */ new Set([
|
|
1992
|
+
var CATALOG_KEYS = /* @__PURE__ */ new Set([
|
|
1993
|
+
...PATH_KEYS,
|
|
1994
|
+
"scopes",
|
|
1995
|
+
"builtin"
|
|
1996
|
+
]);
|
|
1889
1997
|
|
|
1890
1998
|
// src/mailbox/types.ts
|
|
1891
1999
|
var MailboxError = class extends Error {
|
|
@@ -1942,7 +2050,7 @@ function readPrivateJson(file) {
|
|
|
1942
2050
|
"Credential file must belong to the current user"
|
|
1943
2051
|
);
|
|
1944
2052
|
}
|
|
1945
|
-
return JSON.parse(
|
|
2053
|
+
return JSON.parse(readFileSync10(descriptor, "utf8"));
|
|
1946
2054
|
} finally {
|
|
1947
2055
|
closeSync(descriptor);
|
|
1948
2056
|
}
|
|
@@ -1954,7 +2062,7 @@ function readBinding(file) {
|
|
|
1954
2062
|
return bindingSchema.parse(readPrivateJson(file));
|
|
1955
2063
|
}
|
|
1956
2064
|
function writePrivateJson(file, value) {
|
|
1957
|
-
mkdirSync(dirname7(
|
|
2065
|
+
mkdirSync(dirname7(resolve5(file)), { recursive: true, mode: 448 });
|
|
1958
2066
|
writeFileSync(file, `${JSON.stringify(value, null, 2)}
|
|
1959
2067
|
`, {
|
|
1960
2068
|
flag: "wx",
|
|
@@ -1962,7 +2070,7 @@ function writePrivateJson(file, value) {
|
|
|
1962
2070
|
});
|
|
1963
2071
|
}
|
|
1964
2072
|
function writeBindingFile(file, binding) {
|
|
1965
|
-
if (
|
|
2073
|
+
if (existsSync5(file)) {
|
|
1966
2074
|
const previous = readBinding(file);
|
|
1967
2075
|
if (previous.projectId !== binding.projectId || previous.actorId !== binding.actorId) {
|
|
1968
2076
|
throw new MailboxError(
|
|
@@ -1989,7 +2097,7 @@ import {
|
|
|
1989
2097
|
chmodSync as chmodSync2,
|
|
1990
2098
|
copyFileSync,
|
|
1991
2099
|
constants as constants2,
|
|
1992
|
-
existsSync as
|
|
2100
|
+
existsSync as existsSync6,
|
|
1993
2101
|
unlinkSync
|
|
1994
2102
|
} from "fs";
|
|
1995
2103
|
|
|
@@ -2626,7 +2734,7 @@ var MailboxStore = class _MailboxStore {
|
|
|
2626
2734
|
"Mailbox storage is closed"
|
|
2627
2735
|
);
|
|
2628
2736
|
}
|
|
2629
|
-
if (
|
|
2737
|
+
if (existsSync6(destination)) {
|
|
2630
2738
|
throw new MailboxError(
|
|
2631
2739
|
"destination_exists",
|
|
2632
2740
|
"Backup destination already exists"
|