{"_id":"@bernierllc/slash-commands-core","_rev":"8-1da722144b0c878bc197f35b2d2666b3","name":"@bernierllc/slash-commands-core","dist-tags":{"latest":"1.3.1"},"versions":{"1.0.0":{"name":"@bernierllc/slash-commands-core","version":"1.0.0","keywords":["slash-commands","chat","commands","neverhub","service-discovery","typescript","core"],"author":{"name":"EarnLearn Team"},"license":"MIT","_id":"@bernierllc/slash-commands-core@1.0.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"9fc4e695d6f22f76efa541d8440e0247d97ef27c","tarball":"https://registry.npmjs.org/@bernierllc/slash-commands-core/-/slash-commands-core-1.0.0.tgz","fileCount":17,"integrity":"sha512-iZSpoLSr2EVIPRHaoDmIsRJ6aoXENRJ/QSLsiYRlplBpjhvs4uHoVeIwVrQW5+AIQP2aOJTX3QQIrjlL6yzbpg==","signatures":[{"sig":"MEYCIQCg7t3zqAeS3T7gJy55lMqKm4JTIrFqs8gZGdqjB4TfoAIhAPEAOA2u6KpFa6JqMgOtNn5uxlWFuSdqg+8fWe6I7C8C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82504},"main":"src/index.ts","_from":"file:bernierllc-slash-commands-core-1.0.0.tgz","types":"src/index.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/tmp/4156ccf2afcd41cd8077097a2048250c/bernierllc-slash-commands-core-1.0.0.tgz","_integrity":"sha512-iZSpoLSr2EVIPRHaoDmIsRJ6aoXENRJ/QSLsiYRlplBpjhvs4uHoVeIwVrQW5+AIQP2aOJTX3QQIrjlL6yzbpg==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git"},"_npmVersion":"11.7.0","description":"Core foundation for slash command packages - provides interfaces, types, and utilities for building slash commands","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod":"^3.22.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.4.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","eslint-config-prettier":"^9.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slash-commands-core_1.0.0_1766087456923_0.41997420435418564","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bernierllc/slash-commands-core","version":"1.0.2","keywords":["slash-commands","chat","commands","neverhub","service-discovery","typescript","core"],"author":{"name":"EarnLearn Team"},"license":"MIT","_id":"@bernierllc/slash-commands-core@1.0.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"914beb3cd515794b7a65897a909432cae015caa4","tarball":"https://registry.npmjs.org/@bernierllc/slash-commands-core/-/slash-commands-core-1.0.2.tgz","fileCount":17,"integrity":"sha512-TDdryCKqOcGei32VvIYCiQAsgfta7n8OnO3WzAwwK42WheYZ6Hz9gk1ItA/myhkJoj+BWOVvv+L01sGJWOC6Vg==","signatures":[{"sig":"MEQCIDWeUzAzeCUtmzqpv1iEyYII8ZLO1uONd2zHMK2Y2cEzAiAQ8mDteJjmKjkCU08V4OY6IkHXVBZlwDrxbpFZGpNgEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82562},"main":"src/index.ts","types":"src/index.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e62b46a-1064-445e-b711-d9ad71f99f49"}},"repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Core foundation for slash command packages - provides interfaces, types, and utilities for building slash commands","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod":"^3.22.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.4.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","eslint-config-prettier":"^9.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slash-commands-core_1.0.2_1767642328096_0.4503041042629652","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bernierllc/slash-commands-core","version":"1.0.3","keywords":["slash-commands","chat","commands","neverhub","service-discovery","typescript","core"],"author":{"name":"EarnLearn Team"},"license":"MIT","_id":"@bernierllc/slash-commands-core@1.0.3","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"a020dad8b5d7c3ce8a45e5e6b4fc43e216027683","tarball":"https://registry.npmjs.org/@bernierllc/slash-commands-core/-/slash-commands-core-1.0.3.tgz","fileCount":17,"integrity":"sha512-XRR5APjYvDXefwcDU6+mExyeubN3v71yChL0GDh050y6U04SKwv0VOXZf/iN9HYZ0FY1VSikGyEIKscd/HPwYg==","signatures":[{"sig":"MEYCIQCqza1/zeCVrtBCQyjqLPZGmekKzTsQ2c13ORSMTNusGQIhALB6+kQt8QyoeUMzfLdpJmdnF4LCjvY9mRj3J5ZKXfB3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82504},"main":"src/index.ts","_from":"file:bernierllc-slash-commands-core-1.0.3.tgz","types":"src/index.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e62b46a-1064-445e-b711-d9ad71f99f49"}},"_resolved":"/tmp/8eed6657f057e6acfe3887cd976ce840/bernierllc-slash-commands-core-1.0.3.tgz","_integrity":"sha512-XRR5APjYvDXefwcDU6+mExyeubN3v71yChL0GDh050y6U04SKwv0VOXZf/iN9HYZ0FY1VSikGyEIKscd/HPwYg==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git"},"_npmVersion":"11.11.0","description":"Core foundation for slash command packages - provides interfaces, types, and utilities for building slash commands","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.22.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.4.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","eslint-config-prettier":"^9.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slash-commands-core_1.0.3_1773078070806_0.44807385539748545","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bernierllc/slash-commands-core","version":"1.0.4","keywords":["slash-commands","chat","commands","neverhub","service-discovery","typescript","core"],"author":{"name":"EarnLearn Team"},"license":"MIT","_id":"@bernierllc/slash-commands-core@1.0.4","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"12764e2aa99ba814c3ed52ab932d2e27dfcc72d0","tarball":"https://registry.npmjs.org/@bernierllc/slash-commands-core/-/slash-commands-core-1.0.4.tgz","fileCount":17,"integrity":"sha512-p+CwtYjyCRqH+diPRDk+zYEhQlhp7qpqH9s1c3IkTZmprLwhXOBGPVtEp3tdyObD0a9HxhjjNYSvhYIWAYd/wg==","signatures":[{"sig":"MEUCIDSn73Y7pkWwYizuSwXuwgPz0wIu88pm9AftYSXUDrwvAiEAiKr0TLDycr71mAtb6p3IhjdQBcwzzffixZaitZwlrPQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82504},"main":"src/index.ts","_from":"file:bernierllc-slash-commands-core-1.0.4.tgz","types":"src/index.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e62b46a-1064-445e-b711-d9ad71f99f49"}},"_resolved":"/home/runner/work/tools/tools/packages/core/slash-commands-core/bernierllc-slash-commands-core-1.0.4.tgz","_integrity":"sha512-p+CwtYjyCRqH+diPRDk+zYEhQlhp7qpqH9s1c3IkTZmprLwhXOBGPVtEp3tdyObD0a9HxhjjNYSvhYIWAYd/wg==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git"},"_npmVersion":"11.11.0","description":"Core foundation for slash command packages - provides interfaces, types, and utilities for building slash commands","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.22.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.4.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","eslint-config-prettier":"^9.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slash-commands-core_1.0.4_1773163281507_0.6645447752883955","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bernierllc/slash-commands-core","version":"1.1.0","keywords":["slash-commands","chat","commands","neverhub","service-discovery","typescript","core"],"author":{"name":"EarnLearn Team"},"license":"MIT","_id":"@bernierllc/slash-commands-core@1.1.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"825d88012cd224e82bf77acdda303f67d805a464","tarball":"https://registry.npmjs.org/@bernierllc/slash-commands-core/-/slash-commands-core-1.1.0.tgz","fileCount":17,"integrity":"sha512-/RvOlsdYCuTM+uzXCWrGlzJtdUfHXrsoSBo2cpqhmREwMOPYm4/6yJg177AN8/QqQg/K56vmHSdApH64djGXpA==","signatures":[{"sig":"MEYCIQCnfxU6WEi5fgED1S97Xk8Xll/O6/h4KNuRAPcjHtYGMQIhAKCfhsrfCIpDXkWJCJYJvEFNCztyFBrU053fbFsAtzsk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82504},"main":"src/index.ts","_from":"file:bernierllc-slash-commands-core-1.1.0.tgz","types":"src/index.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e62b46a-1064-445e-b711-d9ad71f99f49"}},"_resolved":"/home/runner/work/tools/tools/packages/core/slash-commands-core/bernierllc-slash-commands-core-1.1.0.tgz","_integrity":"sha512-/RvOlsdYCuTM+uzXCWrGlzJtdUfHXrsoSBo2cpqhmREwMOPYm4/6yJg177AN8/QqQg/K56vmHSdApH64djGXpA==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git"},"_npmVersion":"11.14.1","description":"Core foundation for slash command packages - provides interfaces, types, and utilities for building slash commands","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.22.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.4.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","eslint-config-prettier":"^9.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slash-commands-core_1.1.0_1779241402063_0.2602244377378531","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/slash-commands-core","version":"1.2.0","keywords":["slash-commands","chat","commands","neverhub","service-discovery","typescript","core"],"author":{"name":"EarnLearn Team"},"license":"MIT","_id":"@bernierllc/slash-commands-core@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"896d3e176a00abe9b0d3128e3685efa08c4c7e1d","tarball":"https://registry.npmjs.org/@bernierllc/slash-commands-core/-/slash-commands-core-1.2.0.tgz","fileCount":19,"integrity":"sha512-AyFkiNM6X1k2sWsb07Kc9MZmHhrtPHrPoSqtOzmKmspPrB/JagxF7p3ipab2nTRE3VQvhWt3RL/m+KpjUFBprw==","signatures":[{"sig":"MEQCICbLXkqgWrrcThHfQ/v6hw2K/zbDYPxEur8oB3JELeC3AiB8uthfTM7HKxeLcxuszXQwBA1Y/8R7FGf4EkJzbI97HA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64963},"main":"src/index.ts","_from":"file:bernierllc-slash-commands-core-1.2.0.tgz","types":"src/index.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e62b46a-1064-445e-b711-d9ad71f99f49"}},"_resolved":"/home/runner/work/tools/tools/packages/core/slash-commands-core/bernierllc-slash-commands-core-1.2.0.tgz","_integrity":"sha512-AyFkiNM6X1k2sWsb07Kc9MZmHhrtPHrPoSqtOzmKmspPrB/JagxF7p3ipab2nTRE3VQvhWt3RL/m+KpjUFBprw==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git"},"_npmVersion":"11.14.1","description":"Core foundation for slash command packages - provides interfaces, types, and utilities for building slash commands","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.22.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.4.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","eslint-config-prettier":"^9.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slash-commands-core_1.2.0_1779243302447_0.13996411901034445","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/slash-commands-core","version":"1.3.0","keywords":["slash-commands","chat","commands","neverhub","service-discovery","typescript","core"],"author":{"name":"EarnLearn Team"},"license":"MIT","_id":"@bernierllc/slash-commands-core@1.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernier-llc/tools#readme","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"dist":{"shasum":"5dae0ab5d189189e9b79ff4d0a0c2c7224f50745","tarball":"https://registry.npmjs.org/@bernierllc/slash-commands-core/-/slash-commands-core-1.3.0.tgz","fileCount":19,"integrity":"sha512-LYKBkcmKnZ1LnnxbhQARNan6lMUCTB1vk193FH7TnFLumcdPdRVrwi1KybLSWs6azWoTLTisBxa9enECVHHtoQ==","signatures":[{"sig":"MEUCIDEKL8sr96oMGGVw5E+QUH4f57AnpMroR2JGQyhqgeKeAiEAwjfZDp1du2kPbhjRRwRGHV+RePOJBI8ynrFC0SSjEHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64963},"main":"src/index.ts","_from":"file:bernierllc-slash-commands-core-1.3.0.tgz","types":"src/index.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e62b46a-1064-445e-b711-d9ad71f99f49"}},"_resolved":"/home/runner/work/tools/tools/packages/core/slash-commands-core/bernierllc-slash-commands-core-1.3.0.tgz","_integrity":"sha512-LYKBkcmKnZ1LnnxbhQARNan6lMUCTB1vk193FH7TnFLumcdPdRVrwi1KybLSWs6azWoTLTisBxa9enECVHHtoQ==","repository":{"url":"git+https://github.com/bernier-llc/tools.git","type":"git"},"_npmVersion":"11.14.1","description":"Core foundation for slash command packages - provides interfaces, types, and utilities for building slash commands","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.22.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.4.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","eslint-config-prettier":"^9.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slash-commands-core_1.3.0_1779250148191_0.48443877709846195","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@bernierllc/slash-commands-core","version":"1.3.1","description":"Core foundation for slash command packages - provides interfaces, types, and utilities for building slash commands","main":"src/index.ts","types":"src/index.ts","keywords":["slash-commands","chat","commands","neverhub","service-discovery","typescript","core"],"author":{"name":"EarnLearn Team"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bernier-llc/tools.git"},"dependencies":{"zod":"^3.22.0"},"devDependencies":{"@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","eslint-config-prettier":"^9.0.0","jest":"^29.5.0","prettier":"^3.0.0","ts-jest":"^29.4.0","typescript":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest","test:run":"jest --ci","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","format":"prettier --write src/**/*.ts","clean":"rm -rf dist"},"_id":"@bernierllc/slash-commands-core@1.3.1","bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"homepage":"https://github.com/bernier-llc/tools#readme","_integrity":"sha512-868tgrB7vzfkuEj1PKvJi9yCYzykLp1QQoGvB87aDS9NHg9EwEzI+OJAJHjHt7aRmcwGZrCO7djCO7JpFE+c/A==","_resolved":"/home/runner/work/tools/tools/packages/core/slash-commands-core/bernierllc-slash-commands-core-1.3.1.tgz","_from":"file:bernierllc-slash-commands-core-1.3.1.tgz","_nodeVersion":"24.18.0","_npmVersion":"12.0.1","dist":{"integrity":"sha512-868tgrB7vzfkuEj1PKvJi9yCYzykLp1QQoGvB87aDS9NHg9EwEzI+OJAJHjHt7aRmcwGZrCO7djCO7JpFE+c/A==","shasum":"6a34a7d45125d9f6a49db3ddfc0f64e40ab16c26","tarball":"https://registry.npmjs.org/@bernierllc/slash-commands-core/-/slash-commands-core-1.3.1.tgz","fileCount":19,"unpackedSize":64994,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCrfv1/fNWVMOmsu459PKjaqNGF3cyZfivUtWNh9hcCeQIhAPXI4eKUqLWdlp0paDKJnuzc8iCXeRkbpekq/8p/brrT"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e62b46a-1064-445e-b711-d9ad71f99f49"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/slash-commands-core_1.3.1_1784015703794_0.3721579311897538"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-18T19:50:56.807Z","modified":"2026-07-14T07:55:04.040Z","1.0.0":"2025-12-18T19:50:57.069Z","1.0.2":"2026-01-05T19:45:28.254Z","1.0.3":"2026-03-09T17:41:10.958Z","1.0.4":"2026-03-10T17:21:21.671Z","1.1.0":"2026-05-20T01:43:22.211Z","1.2.0":"2026-05-20T02:15:02.656Z","1.3.0":"2026-05-20T04:09:08.457Z","1.3.1":"2026-07-14T07:55:03.923Z"},"bugs":{"url":"https://github.com/bernier-llc/tools/issues"},"author":{"name":"EarnLearn Team"},"license":"MIT","homepage":"https://github.com/bernier-llc/tools#readme","keywords":["slash-commands","chat","commands","neverhub","service-discovery","typescript","core"],"repository":{"type":"git","url":"git+https://github.com/bernier-llc/tools.git"},"description":"Core foundation for slash command packages - provides interfaces, types, and utilities for building slash commands","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/slash-commands-core\n\nCore foundation package for building slash command packages. Provides types, utilities, and base classes following the validator pattern for MECE slash command architecture.\n\n## Installation\n\n```bash\nnpm install @bernierllc/slash-commands-core\n```\n\n## Features\n\n- **Type Safety** - Complete TypeScript definitions for slash commands\n- **Base Classes** - Abstract base class for consistent command packages\n- **Validation** - Built-in argument parsing and validation with Zod\n- **Multi-platform** - Support for in-app, Slack, Discord, Teams platforms\n- **Rate Limiting** - Built-in rate limiting utilities\n- **Permission System** - Role-based command permissions\n- **NeverHub Integration** - Service discovery and event system support\n\n## Quick Start\n\n### Creating a Slash Command Package\n\n```typescript\nimport { SlashCommandPackage, SlashCommandSpec, SlashCommandContext, SlashCommandResponse, z } from '@bernierllc/slash-commands-core';\n\nexport class MyCommandsPackage extends SlashCommandPackage {\n  readonly packageName = '@my-org/my-commands';\n  readonly version = '1.0.0';\n  readonly description = 'My custom slash commands';\n\n  readonly commands: Record<string, SlashCommandSpec> = {\n    'hello': {\n      name: 'hello',\n      description: 'Say hello to someone',\n      usage: '<name>',\n      examples: ['/hello John', '/hello @user'],\n      arguments: [{\n        name: 'name',\n        description: 'Name to greet',\n        required: true,\n        type: 'string',\n        schema: z.string().min(1).max(50)\n      }],\n      requiresAuth: false,\n      platforms: ['in-app', 'slack', 'discord']\n    }\n  };\n\n  async initialize(): Promise<void> {\n    // Register command handlers\n    this.handlers.set('hello', this.handleHello.bind(this));\n  }\n\n  private async handleHello(\n    context: SlashCommandContext, \n    args: Record<string, any>\n  ): Promise<SlashCommandResponse> {\n    const name = args.name as string;\n    \n    return {\n      success: true,\n      message: `Hello, ${name}! 👋`,\n      formatting: {\n        markdown: `**Hello, ${name}!** 👋`,\n        plainText: `Hello, ${name}!`\n      }\n    };\n  }\n}\n```\n\n### Using with NeverHub Service Discovery\n\n```typescript\nimport { NeverHubAdapter } from '@bernierllc/neverhub-adapter';\n\nexport class NeverHubCommandPackage extends SlashCommandPackage {\n  private neverhub?: NeverHubAdapter;\n\n  async initialize(): Promise<void> {\n    // Initialize command handlers first\n    await super.initialize();\n    \n    // Setup NeverHub integration\n    if (await NeverHubAdapter.detect()) {\n      this.neverhub = new NeverHubAdapter();\n      \n      await this.neverhub.register({\n        type: 'slash-commands-tasks',\n        name: this.packageName,\n        version: this.version,\n        capabilities: [{\n          type: 'slash-commands',\n          name: 'task-management',\n          commands: Object.keys(this.commands),\n          version: this.version\n        }]\n      });\n      \n      // Listen for command execution events\n      await this.neverhub.subscribe('slash-command.execute', async (event) => {\n        if (this.commands[event.data.command]) {\n          const response = await this.execute(event.data);\n          \n          await this.neverhub!.publishEvent({\n            type: 'slash-command.response',\n            data: {\n              commandId: event.data.commandId,\n              response,\n              userId: event.data.userId\n            }\n          });\n        }\n      });\n    }\n  }\n}\n```\n\n## Core Types\n\n### SlashCommandContext\n```typescript\ninterface SlashCommandContext {\n  commandId: string;           // Unique execution ID\n  command: string;             // Command name (without /)\n  args: string[];              // Raw arguments\n  userId: string;              // User who executed\n  platform: string;           // Platform (in-app, slack, etc.)\n  conversationId?: string;     // Channel/conversation ID\n  metadata?: Record<string, any>; // Platform-specific data\n  timestamp: Date;             // Execution timestamp\n}\n```\n\n### SlashCommandResponse\n```typescript\ninterface SlashCommandResponse {\n  success: boolean;            // Execution success\n  message?: string;            // User-facing message\n  data?: any;                  // Structured response data\n  error?: string;              // Error message if failed\n  formatting?: {               // Platform-specific formatting\n    markdown?: string;\n    plainText?: string;\n    platform?: Record<string, any>;\n  };\n  ephemeral?: boolean;         // Private response flag\n}\n```\n\n### SlashCommandSpec\n```typescript\ninterface SlashCommandSpec {\n  name: string;                // Command name\n  description: string;         // Human-readable description\n  usage?: string;              // Usage syntax\n  examples?: string[];         // Usage examples\n  aliases?: string[];          // Alternative names\n  arguments?: SlashCommandArgument[]; // Expected arguments\n  requiresAuth?: boolean;      // Authentication required\n  minRole?: string;            // Minimum role required\n  adminOnly?: boolean;         // Admin-only command\n  platforms?: string[];        // Supported platforms\n  category?: string;           // Help category\n  enabled?: boolean;           // Default enabled state\n}\n```\n\n## Utilities\n\n### Command Parsing\n```typescript\nimport { parseCommandString, createCommandContext } from '@bernierllc/slash-commands-core';\n\nconst { command, args } = parseCommandString('/hello world');\n// command: \"hello\", args: [\"world\"]\n\nconst context = createCommandContext('/hello world', 'user123', 'in-app');\n```\n\n### Response Helpers\n```typescript\nimport { createSuccessResponse, createErrorResponse } from '@bernierllc/slash-commands-core';\n\n// Success response\nconst success = createSuccessResponse('Task created successfully', { id: '123' });\n\n// Error response  \nconst error = createErrorResponse('Task not found', true);\n```\n\n### Validation\n```typescript\nimport { validateCommandArgs, isValidCommandName, z } from '@bernierllc/slash-commands-core';\n\n// Validate command name\nconst valid = isValidCommandName('my-command'); // true\nconst invalid = isValidCommandName('My Command'); // false\n\n// Validate arguments with Zod\nconst schema = z.object({\n  title: z.string().min(1),\n  priority: z.enum(['low', 'medium', 'high'])\n});\n```\n\n### Rate Limiting\n```typescript\nimport { CommandRateLimiter } from '@bernierllc/slash-commands-core';\n\nconst limiter = new CommandRateLimiter(10, 60000); // 10 requests per minute\n\nif (!limiter.isAllowed(userId)) {\n  const remaining = limiter.getRemainingRequests(userId);\n  const resetTime = limiter.getTimeUntilReset(userId);\n  // Handle rate limit exceeded\n}\n```\n\n### Platform Formatting\n```typescript\nimport { formatResponseForPlatform, escapeForPlatform } from '@bernierllc/slash-commands-core';\n\nconst response = {\n  success: true,\n  message: 'Default message',\n  formatting: {\n    markdown: '**Bold** message',\n    plainText: 'Bold message'\n  }\n};\n\nconst slackFormatted = formatResponseForPlatform(response, 'slack');\nconst escaped = escapeForPlatform('Special *chars*', 'discord');\n```\n\n## Architecture Pattern\n\nThe slash-commands-core follows the **validator pattern** used throughout BernierLLC packages:\n\n1. **Core Package** (`@bernierllc/slash-commands-core`) - Provides foundation types and utilities\n2. **Specific Packages** (`@bernierllc/slash-commands-tasks`, etc.) - Implement specific commands\n3. **Suite Integration** - In-app-chat suite orchestrates command routing via NeverHub\n\n### MECE Principles\n\n- **Mutually Exclusive** - Each command package handles distinct functionality\n- **Collectively Exhaustive** - All command needs covered by the ecosystem\n- **Service Discovery** - Commands auto-register when packages come online\n- **Graceful Degradation** - Works without optional command packages\n\n## Integration with In-App Chat\n\nCommands automatically integrate with `@bernierllc/in-app-chat` when both packages are available:\n\n1. Command packages register with NeverHub\n2. In-app-chat discovers available commands\n3. Users can execute commands across platforms (in-app, Slack, Discord, Teams)\n4. Responses are formatted appropriately for each platform\n\n## Development Workflow\n\n### 1. Create Command Package\n```bash\nmkdir my-commands-package\ncd my-commands-package\nnpm init\nnpm install @bernierllc/slash-commands-core\n```\n\n### 2. Implement Commands\nExtend `SlashCommandPackage` and implement your commands following the examples above.\n\n### 3. Test Locally\n```typescript\nconst package = new MyCommandsPackage();\nawait package.initialize();\n\nconst context = createCommandContext('/hello world', 'user123', 'in-app');\nconst response = await package.execute(context);\n```\n\n### 4. Publish and Register\nOnce published, the package will automatically be discovered by in-app-chat suite when both are running.\n\n## See Also\n\n- [@bernierllc/in-app-chat](../../../service/in-app-chat) - Main chat suite that orchestrates commands\n- [@bernierllc/neverhub-adapter](../neverhub-adapter) - Service discovery and events\n- [@bernierllc/slash-commands-tasks](../slash-commands-tasks) - Example task management commands\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.","readmeFilename":"README.md"}