{"_id":"@drewswiredin/backstage-plugin-assistants-backend","_rev":"32-71d2e60c7cdd7a1b61f385b800419c69","name":"@drewswiredin/backstage-plugin-assistants-backend","dist-tags":{"latest":"0.16.1"},"versions":{"0.1.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.1.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.1.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"0aea36ad3fcb253a2df331f5d39c181d96bccbbb","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.1.0.tgz","fileCount":17,"integrity":"sha512-X58kaNPZoIWlrfGCM2yLLsCRUf+jCglknCBY4ohusfL1J4CYjMW5wjhTsHHfs0ECvCNNVLY5bKvdsWMU7+JukQ==","signatures":[{"sig":"MEQCIEGD+ppcgtQXG6UcoY1IAIaMzrXympux+12JyDUItm4PAiBWAVH7oMyLBR5OysObNBMafoInLhUU2HX6ae8otBjM7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144847},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"bfd0093ec5d62edfdcfa610cb757e0b615dda4de","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.1.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.1.0_1780554913267_0.2316133475434501","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.2.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.2.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"72deb1c378668b8f00b29b7d3141ab645d40e404","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.2.0.tgz","fileCount":22,"integrity":"sha512-Xp8m2b/iXNDGM97sgeggBYgKjCvm+mWCelLIePLV7z8fgevAORbWWbGY5A/nwsSg0xJCqc5mgC/VtWKyhhdb8Q==","signatures":[{"sig":"MEUCIQDAuJSxG0D0tmm7iiDq3gAQ+eAWRqs+bb+1MFEDMhCrtQIgMz8zUa/G+URiB9UmjFxd+wcsSmcia+hmgeLVz1S0TIo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178378},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"fffca6ea132da908eeb699db3753b1a9c7487634","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.2.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.2.0_1780560815457_0.27132577713045847","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.3.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.3.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"65e05ecafd4c1c937f9c7c33a327e18b98b36423","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.3.0.tgz","fileCount":22,"integrity":"sha512-kXd12KnZ7kJPbqEA2fHflYc616JpOoWXuqBr6IwHFEhn+xbK0UniTWyirBgs5DMmxMvEFisLCSFFHaNx+U9gWA==","signatures":[{"sig":"MEQCIF1kV5OQQ667S9bBcv5LTFPVkAuphhHmi/YG23mvymSlAiBQ0+67herf/LQMhBn2UxKRrLhcp0+60NFaV3oLFEuFcw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185061},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"3a03fbcfa267bc0e5e8e75465b110fa20d5d6461","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.3.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.3.0_1780594449920_0.5741595559465527","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.4.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.4.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"49d264fe075bc9ed9ba7105580fcd41115fed46e","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.4.0.tgz","fileCount":22,"integrity":"sha512-mYl3qpbKXoPcav51TAspivYYfY3jFEOCIVk7QrpG7BRDSnm0K+4bgxt6cIWY26tKmp9vdUEr25BpbuRtk71w0g==","signatures":[{"sig":"MEQCIEN/guSjvOutkVkX1hOoyaGDSDX5KdQ72ahd3yiyQg71AiB+5X55jCPAdUkZWMGGlxitztX/eguk9a3c9De6LSpbBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185329},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"5bd2be70da93857b5f2c4c496278ba5b6378b229","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.4.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.4.0_1780595658316_0.45599974542990407","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.5.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.5.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"70ca844c0b9174507051b8187f1434dda6af98b7","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.5.0.tgz","fileCount":22,"integrity":"sha512-+Qu8aMZr1+BlgBOlctKGvUEf/86tu6GDt+ckt+ulCNyvbnzxzlkCPwKiZ6PrNfVLIfuGPZdulBT1yXtPExxBPQ==","signatures":[{"sig":"MEQCIDvTjwBpbn1BCN1cv/piFFNUjnKNroeXhV5OtPGrFVP7AiBZQ9Txi/XuIQ0N/ts1j66CEWvi5w0VX7Tp/ytSZQXeqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":194005},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"bebddba13f0367fc72cc478511fc7ed4555196d7","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.5.0_1780598463922_0.04927880575984167","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.5.1","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.5.1","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"faba39b2971e8ece38f0e3ae6f36dabffc65cfc0","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.5.1.tgz","fileCount":22,"integrity":"sha512-OD+MRzLuzqrMc9JHVRwU1nNH/xIv3UFs1X05ZTKtmOakjadqxxD2GazBYaqSglEF/SgwDTNb5yJ3EDqcE5lmXw==","signatures":[{"sig":"MEUCIBrlg7HmMLmAwjEGTcw4YyjqRWbrPUqRqirbPxezG0rXAiEA1cfzqVjfrQu8HoATI1Q1yVn3lcP5xss9AuaUrj6rFsg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":194005},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"4840758f3f64a603378eee83a886c23d8b37b9d9","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.5.1_1780604730699_0.7200622652687096","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.5.2","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.5.2","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"749d1a3f3ed6845076c0425c30c416f578635e9b","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.5.2.tgz","fileCount":22,"integrity":"sha512-HB0IPf04fuGQYzEUjl4RL5TehmCoAfECj2RddETmgPyhDanjg/Bknbv7zRmXCteZQA5gqLnfnsZLgRqiyPZU3w==","signatures":[{"sig":"MEUCIBn0f4+4n9R/GOxKTHCCwa9K3Wp/rsuQQanqXL0v1efzAiEAqhBg2lcp2FwlbuCHwgeqK4ze7yBwUVddQMFzXYr35qc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":195845},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"7e4b5895e6829b9f5fd68988d61ccb5e9790d6eb","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.2"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.5.2_1780605832838_0.5352033880328892","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.5.3","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.5.3","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"e9d41b0145f54680c114c4c2a8701b69cc545cd2","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.5.3.tgz","fileCount":22,"integrity":"sha512-55/atyo/IOeFhtljGt8ilnXZW1jmJ1/5yTl0CNyyhxIgn7Rmnhag3a3xb8/Cb8bW/gSInPRf+jBaCwH5cmgDeQ==","signatures":[{"sig":"MEUCIQCkidrc06ZrbAJzA3JhLsjc5sEUE486lLvW9JJAUCQIEgIgLmojgB/TevHjm1tjMNt3eGa/0nuvXBUDAmeRYE7WuDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":195845},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"edc75688872cd12273de655ba6119c894ed577a2","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.3"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.5.3_1780607210581_0.5524305997174268","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.6.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.6.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"9c7ae387ed5dd53558b1cc01d4f418024e651f93","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.6.0.tgz","fileCount":27,"integrity":"sha512-GZqwAFJxat6JACW/driSxbmXTM71ROKyok92ssF17dL5FpG2mJ93vUtyfSS0nFPxk5xIpAs0qqfCTFdmYBsOmw==","signatures":[{"sig":"MEUCIQDUcbwbPW4g4DArEpBejBz1uUCpq9GgW/TSUhfe6kDTAgIgPVK8AOy9k99R2IrP+lwZ5PpT8pSSHS6155ePxkMqclY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":262892},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"ae9abd977d82236796b1d10eb7aea4a8edf7a865","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.3"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.6.0_1780763739664_0.5208855648832609","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.6.1","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.6.1","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"4db9a019194b49ffacaec914ea916bfa07879154","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.6.1.tgz","fileCount":29,"integrity":"sha512-jOtmvpcXEA/pI0uIBmhiXy2MJWIb3MJRTNiEaIdzqIfAYFqMjHuWlmK4wPK6kHopuoUkVXW+G0bH5GrwtsfdBA==","signatures":[{"sig":"MEUCIQCP/PclMzU4VJJmVCk2QN1M+LTT6xiZKqQt0MxSqD5P/QIgUNJ41+x53E2lbutrjIn02IW+EPkoBKCIWmLb8QluQ2Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":270841},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"930d66dce0fdec623c479e0972df297cb565994b","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.3"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.6.1_1780779751494_0.010999966767511582","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.7.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.7.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"9f9f586486274af1b689a2e0f39599850c278d99","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.7.0.tgz","fileCount":29,"integrity":"sha512-Fj/dEqyhAkmkBO0N9YzLNax5TEzSe0tLP3z73jNRbiu/ByWByBtJq8cT4CgbDAbn3v7iaell3wCKpXpltwm/EQ==","signatures":[{"sig":"MEYCIQD9pEFCiY9zx5xIqloyIyXLYXQ4fFT5IxqTAPAWXZASvQIhAO5CaSs3jH55FWWL1Eld9civ71u+LCwH6xJy1EZbSlOM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":275155},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"94a0b6a164867daaf52dcdd6e6b90d96bd38b3f3","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.3"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.7.0_1780800638347_0.856010772194955","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.7.1","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.7.1","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"b5ff770550f8c224d63e8947f88013978a062077","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.7.1.tgz","fileCount":29,"integrity":"sha512-4sk18XdgcKxM1x28QqdxVFJ3TMXqubxoy3pe4SNMrqoZsekLE1KFXB5JzO/gUnnEiJRenz10Fv20rWEbk9YNRQ==","signatures":[{"sig":"MEUCIE6iBXoXTA0VSvC3IBCNTaV/WuHsitiuOMFU7ZNzXiwcAiEA79L6GLRGEN42b4jSo8YmPEpCd7Wd6SJceeix+fY6fn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":286564},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"9a0c46323ff3d4c8424d302c84621ceac6a03e5b","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.4"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.7.1_1780815237756_0.35622339324293173","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.7.2","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.7.2","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"f45ea36a660df088238689f6e8d47260f32fa320","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.7.2.tgz","fileCount":30,"integrity":"sha512-dW/sxMl2US7kMyHaqFJeSGJR2HoXWQV/qHy39O58r0kkhb+zzOkYelwdVBMyUZ2dFIzO8lOvjqhoKL/IC+STQw==","signatures":[{"sig":"MEYCIQC7XA87nC69bwdId6yKNpTy6bhJTUh409WeRCixoPQ6FQIhAPtY+hWPRSZf6OgrdfbI/qa27vJZpqeNb8G/N9VfErpl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288700},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"1f5e1b2e18b7314e7404b14bdbf1d1b8228d164d","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.4"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.7.2_1780816246488_0.40244073291020266","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.7.3","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.7.3","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"cb384f79476c13b7eac87e1e8849c0087bca97ca","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.7.3.tgz","fileCount":30,"integrity":"sha512-1xTSfJiv+iaSObwDrl7dVJQU1xONI9sDqpOCVxy7Jhg5qO145+aN7t5Zyuy2BeeCT6KCMZGI3SDQz06N8rE4qQ==","signatures":[{"sig":"MEYCIQD5iN/N7dSrJRv3ZIIQM85t/DwkQ+AMnAF7wAcu3oPjZAIhAIShxtnWtQdaHX4OP0/SDz6EaZ9dP8ZHENfG9u+InZzr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":289220},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"8dcdc144d7de2714d640540514af80e817e0e67e","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.4"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.7.3_1780816863112_0.23223601625734558","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.7.4","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.7.4","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"0718a5b4d59ad8a8c8d504f71f5dc159cab3222b","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.7.4.tgz","fileCount":30,"integrity":"sha512-fWejMkoDLXLaB1mxARALhmgpdJzJD+IylPHXsWlIMfevng6xDKdLhP/dchDr6iNFeF8AkW1I/NmGkrd+wAWYdg==","signatures":[{"sig":"MEYCIQCsdN3XKEm7mZBC4bGPZGO+JXMeVn8VT2+6qAHKhPvOyQIhALW1aTrW0nAyDVr99/REdqtJCheLZtcbQAjb0w3597Sd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":289669},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"6babf13f64b8081922fb9127f1b3e2c6dabeece1","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.4"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.7.4_1780875389251_0.6036602017834094","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.8.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.8.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"8afddcaa5c5405bf4b23ce8cb95d5fa9be3e4a8c","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.8.0.tgz","fileCount":30,"integrity":"sha512-uJQaQQWj2+l/nPI5ASlmcKYG0jMc/h41XFMAjySDyjjnt5CBnzKD8y+QDnwVDKpSof2qyB1tmbqZSUwUV1VK4w==","signatures":[{"sig":"MEUCIEuExda7gN8TcgpobPsGQqYVb97e/CF3dcuJMtuW9mGhAiEAi5BKgRwoTGFCQksifq3qf9IxQ9PJmcgwsjc1UrDZQvA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":302599},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"76d96fb5df2c7eb65d9502829da1a705275150e9","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.4"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.8.0_1780898136090_0.8827552969531867","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.8.1","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.8.1","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"8d186366642cc0842bfce694b942cb84f7b2aa84","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.8.1.tgz","fileCount":30,"integrity":"sha512-eLViX25s10Ic85zfYi8a8YFlOzjCFGNobsXj8ceNii+rFZFywEsxVsVzCPVS7pBmLx/SHh6z2hYEIsbOQjFvbg==","signatures":[{"sig":"MEYCIQCd4QZGRD4tJvbgU5xzd0VC+2t2JCzBJoFydKx/30mniAIhAJHgx8M5uTzJD4JSdyFjRnYQD3KJjCFPV8yLUCvQFD/B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":307004},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"f2169a33a77286fab153622aff2740c7aa06bb4e","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.4"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.8.1_1780902245345_0.26786975463896745","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.8.2","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.8.2","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"b34512afc57719f0de5803dcf7522c1378d2725b","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.8.2.tgz","fileCount":30,"integrity":"sha512-KFKSsJ10b3m5ryNX2uOHcoNyT20Amb3kCfPSH3Ewp5+KoJNKeHowmWBmAJ2HWbhR08pbojbuYVDPFeDc2ZWz4A==","signatures":[{"sig":"MEYCIQDp45x9cdTN1vRESx791zsO0r/OeM7J/07OgAblUI0zRwIhAI/DlN9dWB1Zn3ZrgPc1uufBrp2XMy1rbdUjYL5JgIq5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":317159},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"b16e6ecb74ca998c1fa9e63257e6d413d9ad2c25","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.8.2_1781022530615_0.6913407795279205","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.8.3","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.8.3","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"5b95b03807e07ea55761e1ea1a045b6f14427301","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.8.3.tgz","fileCount":30,"integrity":"sha512-c+7iwvF3mcODN0QatpLunaPx1Mv9pkTqqToBvJ6zXqwIkbJDsCmXc5yRkrRJ/bsKsr2Vo3711WKgTgyohkDmbQ==","signatures":[{"sig":"MEUCIFw9Q0v+c5djNQDIHMnR1AnsETP6rPk/3olGG3r8f6GAAiEArZVzhOXhAPDptA+CWT0d9R0Xu27gr9GyzLy/JChdXwA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":316345},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"ad9f3c07e3820c1f159ba6fdf5e91059a6cc5a50","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.5.6"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.8.3_1781034103184_0.44139995191704884","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.9.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":"drewswiredin","license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.9.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":"https://github.com/drewswiredin/backstage-assistants/issues","dist":{"shasum":"4096b9a9ea6b7633f3817caf38c38359c4677342","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.9.0.tgz","fileCount":35,"integrity":"sha512-znXaYQxOHyO3zi2NKtgf7QvIiV36GXLnJQ8ZcbYF1iUa6yC3n2RzTgCwrwGRMye9TO+tkbnAu/tIZV7gqPy6qg==","signatures":[{"sig":"MEUCIQCmU/WOmjdTq3osh9aAWrZia7O2PCUnz9DPHsw5wj1exAIgIcFfPFKawR67MdPJ+qVq0KJEE5U7hN5PWl3f2l5tBAs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":384106},"main":"./dist/index.cjs.js","types":"./dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.cjs.js","require":"./dist/index.cjs.js","backstage":"@backstage/BackendFeature"},"./package.json":"./package.json"},"gitHead":"2039490c9d7db61abe5007e9cf3c2986e36ee374","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","features":{".":"@backstage/BackendFeature"},"pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@drewswiredin/backstage-plugin-assistants-common":"0.6.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.9.0_1781110934767_0.9554308292619846","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.10.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.10.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"f7b5bb5735ca0b0c5da840425e35687ce9aa78f1","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.10.0.tgz","fileCount":35,"integrity":"sha512-HB68ZoZRONni5OEsZx/O6HUmq+pcA38VtOfbB38V0uTyzGWYpt29jyOFZHHeR+JJrzjclzEIm5FVFRax8brE4Q==","signatures":[{"sig":"MEUCIETJuQiNp3P9EOWBAJzfaLsCoFW2KBLYUWjjtnBQbvCfAiEA1TH0kcrull1F4YuNxTmbrYDYzJxWPo6fq2z5VUdV48c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":388038},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"a4eaf85bae983478a8d3618a1b8bcb9eb9cb86a7","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@backstage/plugin-permission-common":"^0.9.9","@drewswiredin/backstage-plugin-assistants-common":"0.7.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.10.0_1782082546850_0.42085403608023264","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.10.1","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.10.1","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"c3c5035434e4b5c771c0cbe61241bdfe82ebb88f","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.10.1.tgz","fileCount":35,"integrity":"sha512-E51uhOEodJpYgivjxDobBjrnkNVRDqJ+tZ3s8NiA4uvqH4i2sV0HVVGC8CV4oCxg26sALLjnSQVcoqyuGGrwPA==","signatures":[{"sig":"MEUCIQC8xHDZLirJunZ6mlgwf4FFhjlfBSr0ZGfhx9T93ULoYgIgV0ayA1g9ZaRXSgJxNLiqbxRiPAkJuZGP9oHIYskzUnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":395088},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"5c8a4fd1aeb7061a64614e32e9b962334f0e6502","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@backstage/plugin-permission-common":"^0.9.9","@drewswiredin/backstage-plugin-assistants-common":"0.7.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.10.1_1782149592630_0.9445143631825108","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.10.2","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.10.2","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"3371f02824e64776d7818f2fdae40694870ec3a2","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.10.2.tgz","fileCount":35,"integrity":"sha512-esh6B95r923jZt1IvuFgZSN6sJ8AkveXvfJnCkDfMit+1jzgSDoI6TWRzWEJenAs3wpd/8oW/0DDyl/16vQ1dg==","signatures":[{"sig":"MEQCIGeZPV6yVbT+gSENADkKQHCPq2g+fM6dcIVLQS86Wjc8AiBLGKvsyx36unH0HNLzz1ntxnGOmh1BZuq2/X4spaF43Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":398598},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"310383ab59b429e12cb6f1195727251239d67484","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@backstage/plugin-permission-common":"^0.9.9","@drewswiredin/backstage-plugin-assistants-common":"0.7.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.10.2_1782153688434_0.55213206368007","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.11.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.11.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"ec01e821549301be86c9ffa68eb4802b9f68d7af","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.11.0.tgz","fileCount":35,"integrity":"sha512-xkyPWuraBtmrFN31Pz2vth7bJk6KhboSmEFltk8EfnAxvEVB4V57Q04Dav+zogLzQs9kpsPIsD/tjC6mc9BGfA==","signatures":[{"sig":"MEUCIQCWZ8Tsycb+VnVqrLasgkEtFjY2GT5t5RyoXu58m1IwYQIgcGq6UfbLB4yQEtOvSFGyneoyKHf1Pox2T7p6a1l34wg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":406218},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"5854a2b61a2b944d40ad9c24ecaf6b9d5cda87b8","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@backstage/plugin-permission-common":"^0.9.9","@drewswiredin/backstage-plugin-assistants-common":"0.7.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.11.0_1785254275791_0.33617428796613247","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.11.1","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.11.1","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"0d3351751107e4bcc5d8e91483ca346f0ae5365e","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.11.1.tgz","fileCount":35,"integrity":"sha512-gJLG1lWnDVfeolYDp0ScLbQJ1A4XcHxRUyQZm+ciy/NqS/3W8WjXEiQLRQjXCluGhdqw+4HktwYkffuutfSidw==","signatures":[{"sig":"MEUCIA7lSWwaYzmMVd+Iw2aAph9poY1U0k3NdaIjwhc/y6XIAiEAogC2dfUdVFRYZLb91hkzlR1hv1HuIGUjTBBbZcSsZXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407021},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"82b34c10753b042a90651f2523ed907f682230ad","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@backstage/plugin-permission-common":"^0.9.9","@drewswiredin/backstage-plugin-assistants-common":"0.7.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.11.1_1785254795093_0.09313200950314271","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.12.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.12.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"f58a4b249672c8de321a28fa7209f0fbb4c6332b","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.12.0.tgz","fileCount":36,"integrity":"sha512-Rwt0lRZDdK60OmacDP2Vai3Hugk5ncSQ0LzLxwFdoEbldz0TJLvyTfbTbW7LMI2R1FneQM4mdnxQplon4ILMVg==","signatures":[{"sig":"MEUCICD6i4Xwi71O6OEOf58t/62j5CysbP3/qxaEa83kTNSzAiEAsyWub2iR/3nlJjcG8Nz484S5jQfTs18Ta+6CKD6K1vo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":419974},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"16615e77e1b67c4f31185869eff71232dca083fb","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@backstage/plugin-permission-common":"^0.9.9","@drewswiredin/backstage-plugin-assistants-common":"0.8.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.12.0_1785258604456_0.33406008299896195","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.12.1","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.12.1","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"5e1d1dcb1a5ac4edaf76ffb1c2f28a28b8a4dfa1","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.12.1.tgz","fileCount":36,"integrity":"sha512-Me5t0qNxylOUT5Qdf7RpAvglpDzpmH0FQ13BWke5ewW5sXJSTHHxnDkRtSuh/vzDT/aCzf5gDfQXrf4BD/FISg==","signatures":[{"sig":"MEQCIGHbu/pJe6KYCxbQCPr5uaMnE4FUJExsUaEAsR5JmbUKAiAVGikEllWoRmvLcU4khJZEaavt0GCfLjJ71lr90i2Zpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":419509},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"e6b8a37b81f4eb96107efe9fc42fbe46658686dc","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@backstage/plugin-permission-common":"^0.9.9","@drewswiredin/backstage-plugin-assistants-common":"0.8.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.12.1_1785260215447_0.3662194822653049","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.13.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.13.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"4b48c01cc3bb8276918e8f34a99d1c5fabfaa4ce","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.13.0.tgz","fileCount":36,"integrity":"sha512-F75A7E8DXdOdbobqJmcS1b+rZziXMxXwkKHenc1TXTiIZaVYo+Qkomyhg+KmlyLxilXPiTIAataVjYhMEcgdMQ==","signatures":[{"sig":"MEUCIQDO33sbO+dTe4/YMU8p8ZiSejcuVZVyYhMxeiC6Unb+HAIgT7qpoAsHQUT1DpeD9vWz1JnOwcpijRgczSDMbfr1plc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":420283},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"9856e53aaf763a69ca30c304c05756de32f59f8a","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.81","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@backstage/plugin-permission-common":"^0.9.9","@drewswiredin/backstage-plugin-assistants-common":"0.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.13.0_1785261757956_0.7249396675020061","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.14.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.14.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"dc6a3168e1bea03fb5e92fe0382dd8050f982e16","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.14.0.tgz","fileCount":36,"integrity":"sha512-lr8mPfC4dKvgGqW9bRezf/PchVu/t8p2f8QaBxZ8vY3Vr4wc/sy7IKicTjxNfLx81nFk7JMTisFvu9kTHhzsIw==","signatures":[{"sig":"MEUCIQD/ENQpB+SyrcwRF8ThHKWyLKoYAHR0Mmbd1QFS2bUTZAIgIoIZh193N+abEwolNz6vFJOO15OS12SXlHhfvkP6t+Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424436},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"39e56dc20cdfc3e3d98d59e03b5b180d2187462b","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^6.0.193","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^3.0.68","@ai-sdk/openai":"^3.0.67","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^3.0.103","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.2","@backstage/backend-plugin-api":"^1.4.0","@backstage/plugin-signals-node":"^0.2.1","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.6.9","@backstage/plugin-permission-common":"^0.9.9","@drewswiredin/backstage-plugin-assistants-common":"0.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"0.36.2","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.14.0_1785268593922_0.056027773152762306","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.15.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.15.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"b03ab5dcf6c6a8478a0833c8900670da3b5abd0d","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.15.0.tgz","fileCount":36,"integrity":"sha512-+LTFM6rd91n+m6HV5bMB/5u/KGueWNdGsby6kSgtD7lx+fBnMDGrdaPeTUdfp+AshcyK7XDXvOXygGdCP6jFcQ==","signatures":[{"sig":"MEYCIQD6vYdEgzwNGJ7uqqGSKWA+cIrx7OBoi53l0BpCOHB/eQIhAPQUvvODrVG7ydM3vFvX7R1OBync25w2Hopzp/kVEdyU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":427524},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"88124d31456568d6e1eff5bc013d2870de964f4f","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^7.0.41","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/azure":"^4.0.24","@ai-sdk/openai":"^4.0.23","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^4.0.23","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@modelcontextprotocol/sdk":"^1.29.0","@backstage/backend-defaults":"^0.17.5","@backstage/backend-plugin-api":"^1.9.3","@backstage/plugin-signals-node":"^0.2.3","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.7.0","@backstage/plugin-permission-common":"^0.9.9","@drewswiredin/backstage-plugin-assistants-common":"0.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"^0.36.4","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.15.0_1785271175184_0.15229512056520145","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.16.0","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"license":"Apache-2.0","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.16.0","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"dist":{"shasum":"9c0f25d479c70d9b7e24050ccae383756a303936","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.16.0.tgz","fileCount":36,"integrity":"sha512-A4j4DU38Z3ZklgkaYTC4Taag/FM6OFHUkvAmUydZ7R2b5USCQtd4Gb6zBaTmqWBX24dCcxoncQDLhWkxQl63CA==","signatures":[{"sig":"MEQCIDNsc9tFcOZ9s28lmIvT+y5WZE3agODbncT/b9EZn2m5AiATI6QbmKJCw6WiQfisitGhVK7GcuYu2b+Tnjrg8u9Q0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":426637},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":"./src/index.ts","./package.json":"./package.json"},"gitHead":"04e7b88aa61fb3bb87126a500b1518df1058d4a9","scripts":{"lint":"backstage-cli package lint","build":"backstage-cli package build","clean":"backstage-cli package clean","start":"backstage-cli package start","prepack":"backstage-cli package prepack","generate":"backstage-repo-tools package schema openapi generate --server","postpack":"backstage-cli package postpack"},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"repository":{"url":"git+https://github.com/drewswiredin/backstage-assistants.git","type":"git","directory":"packages/assistants-backend"},"_npmVersion":"11.13.0","description":"Backend plugin — AI Assistants for Backstage.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","configSchema":"config.d.ts","dependencies":{"ai":"^7.0.41","knex":"^3.1.0","express":"^4.21.2","turndown":"^7.2.4","@ai-sdk/mcp":"^2.0.16","@ai-sdk/azure":"^4.0.24","@ai-sdk/openai":"^4.0.23","@backstage/types":"^1.2.2","node-html-parser":"^7.1.0","@ai-sdk/anthropic":"^4.0.23","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@backstage/backend-defaults":"^0.17.5","@backstage/backend-plugin-api":"^1.9.3","@backstage/plugin-signals-node":"^0.2.3","@backstage/plugin-search-common":"^1.2.24","@backstage/backend-openapi-utils":"^0.7.0","@backstage/plugin-permission-common":"^0.9.9","@drewswiredin/backstage-plugin-assistants-common":"0.10.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"package.json":["package.json"]}},"_hasShrinkwrap":false,"devDependencies":{"@backstage/cli":"^0.36.4","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/backstage-plugin-assistants-backend_0.16.0_1788460262668_0.11556643873107642","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"@drewswiredin/backstage-plugin-assistants-backend","version":"0.16.1","description":"Backend plugin — AI Assistants for Backstage.","license":"Apache-2.0","publishConfig":{"access":"public"},"backstage":{"role":"backend-plugin","pluginId":"assistants","pluginPackages":["@drewswiredin/backstage-plugin-assistants","@drewswiredin/backstage-plugin-assistants-backend","@drewswiredin/backstage-plugin-assistants-common"]},"sideEffects":false,"main":"dist/index.cjs.js","module":"dist/index.esm.js","types":"dist/index.d.ts","exports":{".":"./src/index.ts","./package.json":"./package.json"},"typesVersions":{"*":{"package.json":["package.json"]}},"configSchema":"config.d.ts","scripts":{"start":"backstage-cli package start","build":"backstage-cli package build","lint":"backstage-cli package lint","clean":"backstage-cli package clean","prepack":"backstage-cli package prepack","postpack":"backstage-cli package postpack","generate":"backstage-repo-tools package schema openapi generate --server"},"dependencies":{"@ai-sdk/anthropic":"^4.0.23","@ai-sdk/azure":"^4.0.24","@ai-sdk/mcp":"^2.0.41","@ai-sdk/openai":"^4.0.23","@backstage/backend-defaults":"^0.17.5","@backstage/backend-openapi-utils":"^0.7.0","@backstage/backend-plugin-api":"^1.9.3","@backstage/config":"^1.3.8","@backstage/errors":"^1.3.1","@backstage/plugin-permission-common":"^0.9.9","@backstage/plugin-search-common":"^1.2.24","@backstage/plugin-signals-node":"^0.2.3","@backstage/types":"^1.2.2","@drewswiredin/backstage-plugin-assistants-common":"0.10.0","ai":"^7.0.85","express":"^4.21.2","knex":"^3.1.0","node-html-parser":"^7.1.0","turndown":"^7.2.4"},"devDependencies":{"@backstage/cli":"^0.36.4","@types/express":"^4.17.23","@types/turndown":"^5.0.6"},"keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"author":{"name":"drewswiredin"},"repository":{"type":"git","url":"git+https://github.com/drewswiredin/backstage-assistants.git","directory":"packages/assistants-backend"},"homepage":"https://github.com/drewswiredin/backstage-assistants#readme","bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"gitHead":"0461a4fcd064bedc519eb3827eaed4a9b9f83714","_id":"@drewswiredin/backstage-plugin-assistants-backend@0.16.1","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-EVrTapnCSebNen61SRzPId22/sJtZp1tMffSB2uuccAGAwNA/T4H0JuTXSFdEss1mfnLkQErvldy6KhW50cFGA==","shasum":"347c965c79d2963fa72c0a96f7ea061601a49627","tarball":"https://registry.npmjs.org/@drewswiredin/backstage-plugin-assistants-backend/-/backstage-plugin-assistants-backend-0.16.1.tgz","fileCount":36,"unpackedSize":426637,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIElII9DcS7dlCXjx2d/wkdm47Jws4HitgxRNQIWhqv96AiApXbBQiOHjFhjej3KwbgpAJeu7mvgMCuk2rmY9ekAFJg=="}]},"_npmUser":{"name":"drewswiredin","email":"drewswiredin@gmail.com"},"directories":{},"maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/backstage-plugin-assistants-backend_0.16.1_1788464182685_0.21355460750424538"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-04T06:35:13.127Z","modified":"2026-09-03T19:36:23.164Z","0.1.0":"2026-06-04T06:35:13.474Z","0.2.0":"2026-06-04T08:13:35.594Z","0.3.0":"2026-06-04T17:34:10.082Z","0.4.0":"2026-06-04T17:54:18.507Z","0.5.0":"2026-06-04T18:41:04.066Z","0.5.1":"2026-06-04T20:25:30.896Z","0.5.2":"2026-06-04T20:43:52.964Z","0.5.3":"2026-06-04T21:06:50.774Z","0.6.0":"2026-06-06T16:35:39.820Z","0.6.1":"2026-06-06T21:02:31.615Z","0.7.0":"2026-06-07T02:50:38.532Z","0.7.1":"2026-06-07T06:53:57.899Z","0.7.2":"2026-06-07T07:10:46.630Z","0.7.3":"2026-06-07T07:21:03.234Z","0.7.4":"2026-06-07T23:36:29.397Z","0.8.0":"2026-06-08T05:55:36.223Z","0.8.1":"2026-06-08T07:04:05.486Z","0.8.2":"2026-06-09T16:28:50.755Z","0.8.3":"2026-06-09T19:41:43.330Z","0.9.0":"2026-06-10T17:02:14.943Z","0.10.0":"2026-06-21T22:55:46.994Z","0.10.1":"2026-06-22T17:33:12.891Z","0.10.2":"2026-06-22T18:41:28.652Z","0.11.0":"2026-07-28T15:57:55.982Z","0.11.1":"2026-07-28T16:06:35.256Z","0.12.0":"2026-07-28T17:10:04.642Z","0.12.1":"2026-07-28T17:36:55.616Z","0.13.0":"2026-07-28T18:02:38.178Z","0.14.0":"2026-07-28T19:56:34.122Z","0.15.0":"2026-07-28T20:39:35.348Z","0.16.0":"2026-09-03T18:31:02.790Z","0.16.1":"2026-09-03T19:36:22.880Z"},"bugs":{"url":"https://github.com/drewswiredin/backstage-assistants/issues"},"author":{"name":"drewswiredin"},"license":"Apache-2.0","homepage":"https://github.com/drewswiredin/backstage-assistants#readme","keywords":["backstage","backstage-plugin","backend-plugin","ai","assistant","chatbot","llm"],"repository":{"type":"git","url":"git+https://github.com/drewswiredin/backstage-assistants.git","directory":"packages/assistants-backend"},"description":"Backend plugin — AI Assistants for Backstage.","maintainers":[{"name":"drewswiredin","email":"drewswiredin@gmail.com"}],"readme":"# @drewswiredin/backstage-plugin-assistants-backend\n\nBackend for the Backstage AI Assistants plugin: serves assistant metadata,\nstreams chat completions, and runs Backstage actions as tools **on behalf of the\ncalling user** (respecting their permissions). Assistant definitions (prompt,\naccess, tools, models) live in the plugin **database** and are managed in an\nin-app admin editor; `app-config.yaml` holds only the platform/safety surface\n(providers, MCP servers, the `requireApproval` floor, runtime limits).\nPrompts, access policies, and API keys never reach the browser.\n\nPairs with the frontend plugin\n[`@drewswiredin/backstage-plugin-assistants`](https://www.npmjs.com/package/@drewswiredin/backstage-plugin-assistants).\n\n## Install\n\n```bash\nyarn --cwd packages/backend add @drewswiredin/backstage-plugin-assistants-backend\n```\n\n```ts\n// packages/backend/src/index.ts\nbackend.add(import('@drewswiredin/backstage-plugin-assistants-backend'));\n```\n\nRequires the new backend system (`@backstage/backend-defaults`).\n\n## Configuration\n\nAll options live under `assistants` in `app-config.yaml`. This block now holds\nonly the platform/safety surface — there is **no `profiles:` block**.\n\n### Assistant definitions (database + admin editor)\n\nAssistant definitions (title, description, prompt, access, tools, models) persist\nin the plugin `assistants` table (`definition_json` TEXT, portable across SQLite\nand Postgres). The table is seeded with one default assistant on first run.\nDefinitions are created, edited, and deleted at runtime via the **admin editor**\n(a gear in the chat sidebar) — never in `app-config.yaml`. The\n`assistant.manage` permission controls who may manage them.\n\n```yaml\nassistants:\n  defaultModel: openrouter:google/gemini-2.5-flash # provider:model; must exist in a provider\n  maxSteps: 8 # max tool-call steps per turn (default 10)\n  builtinActions: true # register built-in catalog/TechDocs read tools\n\n  # Global approval floor: these tools always pause for Allow/Deny in chat.\n  requireApproval:\n    - register-entity\n    - unregister-entity\n    - execute-template\n\n  providers:\n    openrouter:\n      type: openai-compatible # openai | anthropic | azure | openai-compatible\n      apiKey: ${OPENROUTER_API_KEY} # @visibility secret\n      baseUrl: https://openrouter.ai/api/v1 # optional\n      models: # object list: required name, optional contextWindow (drives the gauge)\n        - name: google/gemini-2.5-flash\n          contextWindow: 1048576\n          reasoning: true # offers the effort picker\n        - name: anthropic/claude-3.5-sonnet # no flag = no picker\n\n```\n\n### Config reference\n\n| Key | Required | Description |\n| --- | --- | --- |\n| `defaultModel` | yes | Initial `provider:model`; must exist in a provider. |\n| `maxSteps` | no | Max tool-call steps per turn (default `10`). |\n| `builtinActions` | no | Register built-in catalog/TechDocs read tools (default `false`). |\n| `toolResultMaxChars` | no | Max chars of a single tool result (head+tail truncation; `0` disables; default `30000`). |\n| `requireApproval` | no | Global approval floor: action ids gated by Allow/Deny in chat. |\n| `providers.<id>.type` | yes | `openai` \\| `anthropic` \\| `azure` \\| `openai-compatible`. |\n| `providers.<id>.apiKey` | yes | Provider key (`@visibility secret`). |\n| `providers.<id>.baseUrl` | no | Base URL override. |\n| `providers.<id>.models` | yes | Object list; each `{ name, contextWindow?, reasoning?, maxOutputTokens? }`. |\n| `providers.<id>.models[].maxOutputTokens` | no | Output-token ceiling; only needed when the provider misjudges an unrecognized model id. |\n| `providers.<id>.models[].reasoning` | no | `true` if the model reasons — adds the effort picker (see Reasoning effort). |\n| `mcp.connectTimeoutMs` | no | Global MCP connect/list-tools timeout ceiling in ms (default `8000`). |\n| `mcp.servers.<id>` | no | External MCP server connections (see MCP section). |\n| `mcp.servers.<id>.connectTimeoutMs` | no | Per-server connect/list-tools ceiling (overrides the global). |\n| `mcp.servers.<id>.requireApproval` | no | Per-server approval floor: tool names gated by Allow/Deny. |\n| `requestBodyLimit` | no | Express body limit for `/chat` + `/title` (default `10mb`). |\n\n### Example operating instructions\n\nThis package ships ready-to-use system prompts you can copy and tailor — after\ninstall they're at\n`node_modules/@drewswiredin/backstage-plugin-assistants-backend/examples/prompts/`:\n\n- `general-assistant.md` — read-only catalog/TechDocs helper (scope, guardrails,\n  search strategy, Markdown/Mermaid formatting).\n- `devops-assistant.md` — adds write/scaffolding tools with a confirm-before-acting\n  policy.\n\nOpen one and **paste** it into an assistant's prompt field in the admin editor —\nprompts live in the DB definition, not `app-config.yaml`.\n\n## Providers\n\nModel ids are `<providerId>:<model>`, where `providerId` is your key under\n`providers`. All four `type`s are built in **and their AI-SDK packages ship with\nthis plugin — no extra packages to install**. You can configure several providers\nat once; the union of their `models` is the global pool.\n\n**OpenAI-compatible** (OpenRouter, local gateways, etc.) — uses the OpenAI SDK\nwith a `baseUrl`:\n\n```yaml\nproviders:\n  openrouter:\n    type: openai-compatible\n    apiKey: ${OPENROUTER_API_KEY}\n    baseUrl: https://openrouter.ai/api/v1\n    models: [google/gemini-2.5-flash, anthropic/claude-3.5-sonnet]\n# -> ids: openrouter:google/gemini-2.5-flash\n```\n\n**OpenAI**:\n\n```yaml\nproviders:\n  openai:\n    type: openai\n    apiKey: ${OPENAI_API_KEY}\n    models: [gpt-4o, gpt-4o-mini]\n# -> ids: openai:gpt-4o\n```\n\n**Anthropic**:\n\n```yaml\nproviders:\n  anthropic:\n    type: anthropic\n    apiKey: ${ANTHROPIC_API_KEY}\n    models: [claude-3-5-sonnet-latest, claude-3-5-haiku-latest]\n# -> ids: anthropic:claude-3-5-sonnet-latest\n```\n\n**Azure OpenAI / AI Foundry** — `models` are your **deployment names**; point\n`baseUrl` at your endpoint and pass extra connection settings (e.g.\n`apiVersion`) via `options`:\n\n```yaml\nproviders:\n  azure:\n    type: azure\n    apiKey: ${AZURE_API_KEY}\n    baseUrl: https://<resource>.openai.azure.com # or your Foundry endpoint\n    options:\n      apiVersion: '2024-10-21'\n    models: [my-gpt4o-deployment]\n# -> ids: azure:my-gpt4o-deployment\n```\n\n## Reasoning effort\n\nA model that reasons gets an **effort picker** in the chat header, next to the\nmodel picker. Config says only *whether* a model reasons — never which tiers it\nhas:\n\n```yaml\nmodels:\n  - name: gpt-5.5\n    reasoning: true\n  - name: gpt-4o-mini # no flag -> no picker for this model\n```\n\nThe tiers are fixed and the same for every reasoning model — **low · medium ·\nhigh · max** — translated to the provider's own knob at request time:\n\n| Provider type | Sent as |\n| --- | --- |\n| `openai`, `openai-compatible`, `azure` | `reasoningEffort: <tier>` (`max` → `xhigh`) |\n| `anthropic` | `thinking: { type: adaptive }` + `output_config.effort: <tier>` |\n\nTiers are forwarded by name — nothing here invents token budgets; the only\nconversion is the top tier's spelling per provider.\n\n> **Anthropic models must be 4.6 or later.** The effort picker uses adaptive\n> thinking plus `output_config.effort`. Claude 4.6 and later accept both; the\n> newest models *require* them, rejecting the older\n> `thinking: { type: enabled, budget_tokens }` shape outright. Older models\n> (Claude 4.5 and earlier) accept only that older shape and, below Opus 4.5,\n> have no `effort` parameter at all — leave them unflagged rather than setting\n> `reasoning: true`.\n>\n> The top tier is spelled `max`: every effort-capable Anthropic model accepts\n> it (`xhigh` exists only on Opus 4.7+ and older models reject it), while\n> OpenAI-shaped providers have no `max`, so it is sent as `xhigh` there.\n\nBehaviour worth knowing:\n\n- **Not choosing a tier is always valid.** The picker starts at **Default** and\n  sends nothing, leaving the provider's own default in force. That — not a\n  disabled tier — is how you opt out of tuning, which is why there is no `off`\n  (some reasoning models can't be turned off at all).\n- **A non-reasoning model has no picker**, and its turns carry no effort field.\n- **Switching to a non-reasoning model drops the tier** back to Default rather\n  than applying it to a model that never advertised reasoning.\n- **The tier is remembered per conversation**, alongside the thread's model.\n- A tier sent for a model that isn't flagged is **ignored** server-side (logged\n  at debug) rather than failing the turn — a client whose model changed under it\n  must not break.\n\nReasoning *output* (where the model streams its thinking) is already rendered as\na collapsible **Reasoning** block in the chat, independent of this setting.\n\n## Output token ceiling\n\nEach turn is capped by the provider's own per-model output limit, which is\ncorrect for models it recognizes — so `maxOutputTokens` is normally omitted.\n\nSet it when the provider guesses badly for an id it doesn't know:\n\n```yaml\nmodels:\n  - name: my-foundry-deployment # a bare deployment name, not a Claude id\n    reasoning: true\n    maxOutputTokens: 128000\n```\n\n`@ai-sdk/anthropic` falls back to **4096** for an id that doesn't look like a\nClaude model. That is not enough for a reasoning model to think *and* answer:\ntool calls each fit, so the turn appears to run normally, then ends with no\nreply at all. A custom deployment name is the usual way to hit this — plain\n`claude-*` ids fall back to 128000 instead.\n\nThe value is sent as the request's max output tokens and is never inferred:\nomit it and the provider default stands.\n\n## Tools (actions)\n\nAssistants call Backstage **actions** as tools, executed with the caller's\ncredentials. Availability depends on what's registered in your backend:\n\n- `builtinActions: true` provides `search-catalog`, `search-techdocs`, and\n  `read-techdocs`.\n- Additional actions (e.g. `query-catalog-entities`, `get-catalog-entity`,\n  `register-entity`, `unregister-entity`, `execute-template`) come from the\n  relevant action-providing plugins (catalog / scaffolder / TechDocs action\n  modules, `@backstage/plugin-mcp-actions-backend`). Assign the action ids you\n  want to an assistant's tool list in the editor.\n\n> **Required:** Backstage's actions service only exposes actions from the plugin\n> sources you allow. You **must** add `assistants` (and any other source whose\n> actions you use, e.g. `catalog`, `scaffolder`) to\n> `backend.actions.pluginSources` — otherwise an assistant's tools resolve to an\n> empty list:\n>\n> ```yaml\n> backend:\n>   actions:\n>     pluginSources:\n>       - catalog\n>       - scaffolder\n>       - assistants # <-- needed for builtinActions / this plugin's tools\n> ```\n\nAn assistant only sees the intersection of its `allowedTools` and the actions\nthe **calling user** may see/run.\n\n## MCP servers (external tools)\n\nAssistants can also call tools from external **MCP (Model Context Protocol)**\nservers (GitHub, Atlassian, Azure DevOps, internal servers, …). Declare servers\nunder `assistants.mcp.servers`. An assistant opts in to individual MCP tools by\n**selecting them in the editor**; each becomes a unified `allowedTools` entry\nnamespaced `<serverId>__<tool>` (and shows in the detail modal). There is no\nper-assistant server allowlist in config.\n\nTransports (the `@ai-sdk/mcp` client set):\n\n- **`http`** (Streamable HTTP, default) / **`sse`** — remote,\n  use `url` (`http`/`sse` also accept `headers`).\n- **`stdio`** — spawn a local MCP server process: `command` (+ `args`, `env`,\n  `cwd`).\n\n```yaml\nassistants:\n  mcp:\n    servers:\n      # remote (Streamable HTTP) with a static auth header\n      github:\n        transport: http # http | sse | stdio\n        url: https://api.githubcopilot.com/mcp/\n        headers:\n          Authorization: Bearer ${GITHUB_MCP_TOKEN} # @visibility secret\n        # un-namespaced tool names that join the global approval floor as github__<tool>\n        requireApproval: [create_pull_request]\n      # local process over stdio\n      filesystem:\n        transport: stdio\n        command: npx\n        args: ['-y', '@modelcontextprotocol/server-filesystem', '/data']\n        env:\n          SOME_TOKEN: ${SOME_TOKEN} # @visibility secret\n        # cwd: /optional/working/dir\n```\n\n**Connect timeout.** Connecting to a server and listing its tools is bounded by\n`assistants.mcp.connectTimeoutMs` (default `8000`), overridable per server with\n`servers.<id>.connectTimeoutMs` — resolution is per-server → global → 8000ms.\nSlow-starting stdio servers need more: a Python server launched via `uvx` can\ntake ~10s just to start, and a server that never finishes connecting inside the\nceiling is retried on every maintenance cycle without ever coming up.\n\n```yaml\nassistants:\n  mcp:\n    connectTimeoutMs: 15000 # global default\n    servers:\n      atlassian:\n        transport: stdio\n        command: mcp-atlassian\n        connectTimeoutMs: 20000 # this server starts slowly\n```\n\nA server's tools are assigned to an assistant individually in the editor; the\nselection lives in that assistant's unified `allowedTools` as namespaced\n`<serverId>__<tool>` entries, applied to both `/chat` and the `/status` tool\nlisting (so the detail modal shows only the selected tools).\n\n> **Per-server approval floor.** `assistants.mcp.servers.<id>.requireApproval`\n> lists un-namespaced tool names that join the global approval floor as\n> `<serverId>__<tool>` — see [Human-in-the-loop](#human-in-the-loop-approvals--forms).\n\n> **Auth is a single static credential** (the configured `headers`) — i.e. one\n> shared identity for all users, **not run-as-user**. Gate access with the\n> assistant's `access` policy. (Per-user identity propagation — e.g. Entra OBO\n> for Azure DevOps — is a planned enhancement.)\n\n### MCP connections are pooled and maintained server-side\n\nThe plugin holds **one persistent client per configured server**, opened and kept\nopen in the background — never on the request path. A scheduled task\n(`coreServices.scheduler`) runs every couple of minutes: it connects any server\nthat isn't connected yet, refreshes each server's tool inventory into a warm\ncache, and reconnects one whose connection has dropped. Each connect and tool\nlisting is bounded by that server's connect timeout (default 8s, see\n[Connect timeout](#mcp-servers-external-tools)), so one slow or black-holed\nserver can't stall the cycle.\n\nEvery read path is served from that pool:\n\n- **`GET /status`** reads the cached inventory **synchronously**, so loading the\n  plugin **never connects to an MCP server or blocks on a slow/unreachable one**\n  (a server's tools fill in on the next cycle).\n- **`/chat`** builds a turn's tools from the cache and executes them through the\n  **pooled connection** — it opens and closes nothing. A server that isn't\n  currently connected yields a graceful \"not connected\" tool result for that turn\n  and is healed by the next cycle.\n- **`/capabilities`** (the editor) reads the same pool, keeping its per-server\n  reachability, `error` reporting, and manual refresh.\n\nA failed refresh keeps the last-known tool list, so a transient blip doesn't\nempty an assistant's tools; the failure is logged and surfaced as\n`reachable: false`, never breaking a turn or `/status`. Connections are closed\nonly on plugin shutdown.\n\n## Human-in-the-loop (approvals & forms)\n\nTwo ways a turn pauses for the user instead of running autonomously. Both are\nenforced in the model loop, not requested of the model.\n\n### Approval gate (`requireApproval`)\n\nThe approval gate is **global**, not per-assistant. List tool ids in top-level\n`assistants.requireApproval` and/or a server's `mcp.servers.<id>.requireApproval`\nand they are gated behind an explicit **Allow / Deny** in the chat before they\never run:\n\n```yaml\nassistants:\n  requireApproval: # confirmed before running, for every assistant allowed them\n    - register-entity\n    - unregister-entity\n    - execute-template\n```\n\nThese form a global approval floor; the effective set for an assistant is the\nfloor ∩ its `allowedTools` (a floored tool an assistant isn't given is simply\nnever hit). There is no per-assistant approval field.\n\nEach gated tool gets an entry in the AI SDK's `toolApproval` map, so\n`streamText` emits an approval request and **skips the tool's execution** until\nthe user answers — Allow runs it (under the same run-as-user identity), Deny\nreturns an `execution-denied` result to the model. This is deterministic and\ncode-enforced: it does not depend on the model choosing to ask. Names match\naction ids or namespaced `<server>__<tool>` MCP tools; a name not in the\nassistant's tool set is logged and ignored. It's a confirmation checkpoint,\n**orthogonal to authorization** — Backstage's per-user permissions still apply\nwhen an approved action invokes.\n\n### Client-side tools (`render_form`, `download_file`)\n\nTwo built-in **client-side** tools are always available (no config; they resolve\nin the browser). `render_form` renders an inline RJSF form instead of asking a\nstring of questions in chat — useful for structured, multi-field, or\nmultiple-choice input; the user fills and submits, and the values flow back as\nthe tool result. Forms render Backstage **scaffolder field extensions** (owner /\nentity / repo pickers, plus any custom field the host app has registered)\nresolved at runtime, so the model can reuse a scaffolder template's parameter\nblock verbatim. `download_file` hands a generated artifact back as a download\nchip in the conversation. See the\n[architecture §4](../../docs/architecture.html#hitl).\n\n## Security\n\n- Prompts and access policies are backend-only — never sent to the browser.\n- `providers.*.apiKey` and every value under `mcp.servers.*.env` and\n  `mcp.servers.*.headers` are `@visibility secret` (redacted in logs, API\n  responses, and the DevTools config view).\n- The browser receives only a projection over `GET /status`: titles,\n  descriptions, the model pool/defaults, the resolved tool list (name +\n  description), and `ui`.\n\n### Permissions\n\nThe plugin defines two Backstage permissions in\n`@drewswiredin/backstage-plugin-assistants-common` (exported as\n`assistantUsePermission`, `assistantManagePermission`, and the\n`assistantsPermissions` array):\n\n| Permission | `name` | `action` | Gates |\n| --- | --- | --- | --- |\n| `assistantUsePermission` | `assistant.use` | `read` | the user-facing routes (`GET /status`, `POST /chat`, `POST /title`, `/threads`) and the chat surface |\n| `assistantManagePermission` | `assistant.manage` | `update` | `/manage/*` + `/capabilities` and the admin editor (the gear) |\n\nBoth are enforced server-side via `coreServices.permissions` (403 when denied)\nand gated client-side with `usePermission`. The plugin registers them with\n`coreServices.permissionsRegistry` at init, so they are published on\n`GET /api/assistants/.well-known/backstage/permissions/metadata` and show up in\npermission UIs that discover plugins' permissions through that endpoint (the\nRBAC role editor, for one). **Which assistants** an `assistant.use` holder then\nsees is the separate per-assistant **access policy** stored on each definition —\northogonal to these permissions.\n\n#### Wiring it up — grant the permissions in a permission policy\n\nWho holds each permission is decided by your app's\n[`PermissionPolicy`](https://backstage.io/docs/permissions/writing-a-policy). A\nfresh `create-app` backend installs\n`@backstage/plugin-permission-backend-module-allow-all-policy`, which grants\n**everything to everyone** — fine for trying the plugin out, but it restricts\nnothing. To actually gate use and management, replace it with a policy that\nauthorizes the two permissions for the right users (here, by group membership):\n\n```ts\n// packages/backend/src/permissionPolicy.ts\nimport { createBackendModule } from '@backstage/backend-plugin-api';\nimport { policyExtensionPoint } from '@backstage/plugin-permission-node/alpha';\nimport {\n  PermissionPolicy,\n  PolicyQuery,\n  PolicyQueryUser,\n} from '@backstage/plugin-permission-node';\nimport {\n  AuthorizeResult,\n  PolicyDecision,\n} from '@backstage/plugin-permission-common';\n\nclass AssistantsPolicy implements PermissionPolicy {\n  async handle(\n    req: PolicyQuery,\n    user?: PolicyQueryUser,\n  ): Promise<PolicyDecision> {\n    const name = req.permission.name;\n    if (name === 'assistant.use' || name === 'assistant.manage') {\n      // Group memberships arrive as ownership entity refs on the caller.\n      const groups = user?.info.ownershipEntityRefs ?? [];\n      const isAdmin = groups.includes('group:default/assistants-admins');\n      const isUser = groups.includes('group:default/assistants-users');\n      const allowed = name === 'assistant.manage' ? isAdmin : isUser || isAdmin;\n      return { result: allowed ? AuthorizeResult.ALLOW : AuthorizeResult.DENY };\n    }\n    // Leave every other plugin's permissions to your wider policy.\n    return { result: AuthorizeResult.ALLOW };\n  }\n}\n\nexport default createBackendModule({\n  pluginId: 'permission',\n  moduleId: 'assistants-policy',\n  register(reg) {\n    reg.registerInit({\n      deps: { policy: policyExtensionPoint },\n      async init({ policy }) {\n        policy.setPolicy(new AssistantsPolicy());\n      },\n    });\n  },\n});\n```\n\nThen wire it into the backend and drop the allow-all module (the policy\nextension point accepts exactly one policy):\n\n```ts\n// packages/backend/src/index.ts\nbackend.add(import('@backstage/plugin-permission-backend'));\n// backend.add(import('@backstage/plugin-permission-backend-module-allow-all-policy')); // remove\nbackend.add(import('./permissionPolicy'));\n```\n\nGrant `assistant.use` to anyone who may chat, and `assistant.manage` to admins\nwho may run the editor. Group membership comes from the caller's\n`ownershipEntityRefs`, resolved by your auth provider from the catalog — so the\ngroups referenced above must exist and the users be members.\n\n> **Default-allow, like every plugin.** With permissions disabled\n> (`permission.enabled: false`, the default) or the allow-all policy in place,\n> both permissions are granted to everyone. Gating takes effect only once you\n> enable permissions **and** install a policy like the one above.\n\n#### Or: grant them with the RBAC plugin\n\nWith [`@backstage-community/plugin-rbac-backend`](https://github.com/backstage/community-plugins/tree/main/workspaces/rbac)\nin place of a hand-written policy, list the plugin so its permissions are\ndiscoverable, then bind them to roles from the RBAC UI or a policy file:\n\n```yaml\n# app-config.yaml\npermission:\n  enabled: true\n  rbac:\n    pluginsWithPermission: [assistants]\n```\n\n```csv\n# rbac-policy.csv\np, role:default/assistants-users, assistant.use, read, allow\np, role:default/assistants-admins, assistant.manage, update, allow\ng, group:default/assistants-users, role:default/assistants-users\ng, group:default/assistants-admins, role:default/assistants-admins\n```\n\n> **Working example in this repo.** The dev app ships a group-based policy at\n> `packages/backend/src/permissionPolicy.ts` and a dev sign-in picker\n> (`packages/app/src/modules/signIn`) that lets you log in as a no-access / user\n> / admin identity to exercise all three roles end to end.\n\n### Admin / management API\n\nThe admin editor is backed by `GET /capabilities` and the\n`GET`/`POST`/`PUT`/`DELETE` `/manage/assistants` endpoints — all under\n`/api/assistants`. Every one is gated by the `assistant.manage` permission and\nreturns **403** for callers who lack it.\n\n- `GET /capabilities` returns the live, assignable inventory — Backstage actions,\n  the model pool, each MCP server's reachability + tools, and the global approval\n  floor — that feeds the editor's pickers.\n- `GET`/`POST`/`PUT`/`DELETE /manage/assistants` read and mutate the full\n  assistant definitions, including the prompt, access policy, and audit fields\n  (creator/editor + timestamps).\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}