{"_id":"@bro-know-my/spark-analyzer","_rev":"13-fe3de1518296281cf5c9ea0509821133","name":"@bro-know-my/spark-analyzer","dist-tags":{"latest":"0.2.2"},"versions":{"0.0.3":{"name":"@bro-know-my/spark-analyzer","version":"0.0.3","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.0.3","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"a6a0e3d12362d5c2c636cabbace4442a31aa99d0","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.0.3.tgz","fileCount":9,"integrity":"sha512-E+Jg74Cae0n0zxbNIhwdXrI/gTj+6C9xAyvm852rBq7Adjr/F5nXmvPmuSydx7iMOTa6+UPYm7GdBZHtXnRvLA==","signatures":[{"sig":"MEQCIFzywRPFQlp3a0C/D7Kq0iOlc+of4vcL1H5OrOXLLK4/AiBG0BJRk6vHOLCCBtqW13g28gkYJDbtKQFlGxes1FOh9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":388521},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"1d29a530419c8ab22b76ddcf232aa09a632ee393","scripts":{"build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"jiafalsedream","email":"falsedream233@gmail.com"},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"10.9.8","description":"Reusable Vue Spark report analyzer view for BroKnowMy apps.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"22.22.3","dependencies":{"marked":"^16.4.1","protobufjs":"^7.5.4","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0"},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.0.3_1781600691868_0.23821222870027525","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@bro-know-my/spark-analyzer","version":"0.0.4","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.0.4","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"8d3b2559302d24ae7a4422f77d734abdadbdc656","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.0.4.tgz","fileCount":9,"integrity":"sha512-DChOHvvmmdysARsBgoWbYvVoZfbUhnB299ix/zsauQaPtRoE65Z2W7AbsBwb6aV7PYkqFQ/gDXMMZPBoSiFS4w==","signatures":[{"sig":"MEUCIQCbCb6owrDOda7VwjLV37armlAkoxILeYYhth5GccjZ6gIgSNpQ8d6VnxQNzd2I34gQMIECbUNWvwyOHMdO38wOv/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":388521},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"ffcbda8d8bc0b49596029dea2ac9943a8f6e2bcd","scripts":{"build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"jiafalsedream","email":"falsedream233@gmail.com"},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"10.9.8","description":"Reusable Vue Spark report analyzer view for BroKnowMy apps.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"22.22.3","dependencies":{"marked":"^16.4.1","protobufjs":"^7.5.4","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0"},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.0.4_1781601139952_0.06743943132226748","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@bro-know-my/spark-analyzer","version":"0.0.5","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.0.5","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"ec626c22a78d88201c12ebb90d0bb1096250d8ae","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.0.5.tgz","fileCount":9,"integrity":"sha512-pv4AN6qtYi9evGD1URdrzIYTRmID6zpB1P2EB/mSKugDK0C90p/iXE8DBMnJiNelVZWGbX4GWnN33aJJ5Rbfug==","signatures":[{"sig":"MEYCIQClHpsCf2ktNYYgQbPaEt6b65me9u8Ai2QChqWh8sEyIgIhALzHan1mVYxi+JH6Yira9nIPRgdPlpehjEGOXj1hfJrt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":408246},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"d5dcc97ae2913670c25d51c2ec6cd05f461d46db","scripts":{"build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"jiafalsedream","email":"falsedream233@gmail.com"},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"10.9.8","description":"Reusable Vue Spark report analyzer view for BroKnowMy apps.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"22.22.3","dependencies":{"marked":"^16.4.1","protobufjs":"^7.5.4","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0"},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.0.5_1782099885684_0.5488551666524883","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@bro-know-my/spark-analyzer","version":"0.0.6","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.0.6","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"b0dbc9ba443de83298884765368b516a845d7668","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.0.6.tgz","fileCount":9,"integrity":"sha512-zn1Q2k4Me09oEkocwA0xsoPjpKZ/qKSkahTqGId13F7IU0S9KW+QBHZxzQXddhpzHp0pzdMDJivUpyPWMBx1qw==","signatures":[{"sig":"MEUCIQCEx2Vcp6XxEgQGmZgfrU4O++1i9CIUZpLW/U1Y91edIgIgXSp3WInC86x6PPW0o1/sas/9pZAvYAyeRKVqMmqohik=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":408246},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"ae445d4a0e54747bd721884740657d49dec2b053","scripts":{"build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"jiafalsedream","email":"falsedream233@gmail.com"},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"10.9.8","description":"Reusable Vue Spark report analyzer view for BroKnowMy apps.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"22.23.0","dependencies":{"marked":"^16.4.1","protobufjs":"^7.5.4","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0"},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.0.6_1782398769742_0.22626850648384744","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@bro-know-my/spark-analyzer","version":"0.0.7","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.0.7","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"43c8476c58f83bd6fe4b2f9d86e9aa52e1709f88","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.0.7.tgz","fileCount":9,"integrity":"sha512-gXng7dfGOKazUlAC00/s0Kf4iy00ffVy8WawRwOMc2yMRpErPjtbtBkJ8P21gaHPeH3CtRPptj9oXbjga38sxA==","signatures":[{"sig":"MEQCIF+lVhOT8vZUbQ+5rBXvSgHVNRN9rZh8HjeElliDTmk5AiAM/0ng9vRQ/JrvR2IpZwdrTzNP/H562q3Ok0k4gGrbLw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":423970},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"77084629679d78baa6028637c9e3523b871845b8","scripts":{"build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"jiafalsedream","email":"falsedream233@gmail.com"},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"10.9.8","description":"Reusable Vue Spark report analyzer view for BroKnowMy apps.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"22.23.0","dependencies":{"marked":"^16.4.1","protobufjs":"^7.5.4","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0"},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.0.7_1782663574994_0.2708361687821288","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@bro-know-my/spark-analyzer","version":"0.0.8","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.0.8","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"1c3fd220e173fdd59962364b477586b073988f9d","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.0.8.tgz","fileCount":9,"integrity":"sha512-JvuKPOcZx+ESKpgpn8fryDFUQfzrjCWrW2NCPrv9L1QApLy9MGqeBergdrajd6fpwLKfxDAqsI10OXM4FLAXgg==","signatures":[{"sig":"MEQCIG0m/fKCI3Py8llo+dXu8DCwa673u88J77A8mkLssVMcAiANm/gDKCkNj3aQGJNj1wWdqIjMxiTzHjHSZYTMW5H7dQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":470537},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"b6e50e14036cd4897913ad48c70be8ddc79bb2fe","scripts":{"build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"jiafalsedream","email":"falsedream233@gmail.com"},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"10.9.8","description":"Reusable Vue Spark report analyzer view for BroKnowMy apps.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"22.23.1","dependencies":{"marked":"^16.4.1","dompurify":"^3.4.11","protobufjs":"^7.5.4","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0"},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.0.8_1783667528054_0.11245617946915609","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@bro-know-my/spark-analyzer","version":"0.1.0","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.1.0","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"d7a9db5a14f162477ca1d7160fe88dd9c0afc69f","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.1.0.tgz","fileCount":9,"integrity":"sha512-oZZ8c+WNvjm4JXj3r5gvvBG+TZ+TjRBUt/A2HQkrM5hJvVu0qA/Fbr0bZCcu60M+Abc9GWPTTBorFspnrCBqqQ==","signatures":[{"sig":"MEQCIELdKGJXuJ3FFWfgiL41sE1VYQ0uaKjchVzzPM1ME5jjAiBnSQ182vW5XlWEh8mZ8XkJ6RICSPs1K6VP9bPYr+p2KQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":213137},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tauri":{"types":"./dist/tauri.d.ts","import":"./dist/tauri.js"},"./style.css":"./dist/style.css"},"gitHead":"bdd3a87b967ed5bd18905a777477e07d0bab48bc","scripts":{"build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"jiafalsedream","email":"falsedream233@gmail.com"},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"10.9.8","description":"Pure Vue UI for the bkmsa Rust analyzer.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"22.23.1","dependencies":{"marked":"^16.4.1","dompurify":"^3.4.11","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0","@tauri-apps/api":"^2","@tauri-apps/plugin-dialog":"^2","@tauri-apps/plugin-opener":"^2"},"peerDependenciesMeta":{"@tauri-apps/api":{"optional":true},"@tauri-apps/plugin-dialog":{"optional":true},"@tauri-apps/plugin-opener":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.1.0_1785899172032_0.13419113219774692","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bro-know-my/spark-analyzer","version":"0.1.1","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.1.1","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"f26b810f45b7c0d342b3113edaa593126c23756f","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.1.1.tgz","fileCount":9,"integrity":"sha512-Vs8xHL+g4TlhZPEQwL0aYzQ15eTbTCP7Kaz+kZj9SXls0U6EtlRlrsmSH1WjvebZA9y7g2xI4VTkhQ476jNzfA==","signatures":[{"sig":"MEYCIQCJdMUGeQKCF0J3gZtHAbiFIF9gQBIoOm3iJHMVIoTSGgIhAN8xqQohvfm7GX4LTz7RFCwAZg5RXC70fvYR2wJqYxKL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":217307},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tauri":{"types":"./dist/tauri.d.ts","import":"./dist/tauri.js"},"./style.css":"./dist/style.css"},"gitHead":"7a04edc56a8ff6422ae8519dbeee367afc82c409","scripts":{"build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"jiafalsedream","email":"falsedream233@gmail.com"},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"10.9.8","description":"Pure Vue UI for the bkmsa Rust analyzer.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"22.23.1","dependencies":{"marked":"^16.4.1","dompurify":"^3.4.13","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0","@tauri-apps/api":"^2","@tauri-apps/plugin-dialog":"^2","@tauri-apps/plugin-opener":"^2"},"peerDependenciesMeta":{"@tauri-apps/api":{"optional":true},"@tauri-apps/plugin-dialog":{"optional":true},"@tauri-apps/plugin-opener":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.1.1_1786451914539_0.021829020368781205","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bro-know-my/spark-analyzer","version":"0.1.2","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.1.2","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"0b5bc11ddfa21fcaf205e02b9467afda26b71660","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.1.2.tgz","fileCount":9,"integrity":"sha512-by4ggmxYEkTVvTiwZB6ARxQHZ28/DqIH68QbgPsrmt86zANthwq0ivhXSuP0PRAa75zaMV/KkiYyC3K4xjOR2Q==","signatures":[{"sig":"MEYCIQD2KBmuDN3nStCOXNFAL/blcFEhKr+viDaCcXSDcoTgGAIhAK3jYLuIx2jmqGjgzBKQAEmK+bGrzGqgrIPEu5ey2jkZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":227672},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tauri":{"types":"./dist/tauri.d.ts","import":"./dist/tauri.js"},"./style.css":"./dist/style.css"},"gitHead":"0befcc1db459f938e561d34c203252096a4cca3e","scripts":{"test":"vitest run","build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"jiafalsedream","email":"falsedream233@gmail.com"},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"10.9.8","description":"Pure Vue UI for the bkmsa Rust analyzer.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"22.23.2","dependencies":{"marked":"^16.4.1","dompurify":"^3.4.13","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^26.1.0","vitest":"^3.2.7","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vue/test-utils":"^2.5.0","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0","@tauri-apps/api":"^2","@tauri-apps/plugin-dialog":"^2","@tauri-apps/plugin-opener":"^2"},"peerDependenciesMeta":{"@tauri-apps/api":{"optional":true},"@tauri-apps/plugin-dialog":{"optional":true},"@tauri-apps/plugin-opener":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.1.2_1788614208058_0.5838937473062613","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bro-know-my/spark-analyzer","version":"0.1.3","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.1.3","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"2741cf8fa75e4e43168d02e8a5061f559e1dd59c","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.1.3.tgz","fileCount":10,"integrity":"sha512-C2Px4458vB0e/MV1H7efwZ74kNm2+BFrR+tVA1LYa/GVtI+PU/slD9ILAdMQchbQk3MD5lO3E2HfvLPZBz3Abw==","signatures":[{"sig":"MEUCIQDIkpIa9LAtRv0o2VQNaSQYI5kUraaLQNSIpJYBj5TpkQIgfFYd1riTTYUxpxurvXsNJSmgqez2vzLZFURo671tNqQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":228060},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tauri":{"types":"./dist/tauri.d.ts","import":"./dist/tauri.js"},"./style.css":"./dist/style.css"},"gitHead":"ae2178b0729fc2a898bd4a6e1e3ddc1ae1c18f37","scripts":{"test":"vitest run","build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"jiafalsedream","email":"falsedream233@gmail.com"},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"10.9.8","description":"Pure Vue UI for the bkmsa Rust analyzer.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"22.23.2","dependencies":{"marked":"^16.4.1","dompurify":"^3.4.13","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^26.1.0","vitest":"^3.2.7","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vue/test-utils":"^2.5.0","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0","@tauri-apps/api":"^2","@tauri-apps/plugin-dialog":"^2","@tauri-apps/plugin-opener":"^2"},"peerDependenciesMeta":{"@tauri-apps/api":{"optional":true},"@tauri-apps/plugin-dialog":{"optional":true},"@tauri-apps/plugin-opener":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.1.3_1788621419831_0.11283706458106901","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bro-know-my/spark-analyzer","version":"0.1.5","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.1.5","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"0d9a7a2e21ab91d26638332753481476ff86a3e1","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.1.5.tgz","fileCount":10,"integrity":"sha512-sn9Dyhm1Xobdz9ea1lCdnp7PyqAG48gKgyIfXjvYJ6Ffd2wF00N5UVszuQme+3RJsZyy0bLArA5THnPFkMsYSQ==","signatures":[{"sig":"MEYCIQCSPkt8j0lwwXJXvOkec2ywkHOjTuXeFgbVaHTQStUG/AIhAI10uuOiLb1Lmgqh4DK59Ls+tfKoryT7T8R8PkTlkCIi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCSVC6CtXYLouV01REGkceEpKTJMBXnChm7ouvBWVdJgAIhAMZrRyR0s5FI7xp6p7dTKNQs+NzNUKZs6ZjdrYxnW23b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":229180},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tauri":{"types":"./dist/tauri.d.ts","import":"./dist/tauri.js"},"./style.css":"./dist/style.css"},"gitHead":"8251dd2acdf62d1532c088b8ffe2cc724b56cde2","scripts":{"test":"vitest run","build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"0e6f1c92-7518-4fb4-80da-ffbc7d21dd7e"}},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"11.19.0","description":"Pure Vue UI for the bkmsa Rust analyzer.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"24.21.0","dependencies":{"marked":"^16.4.1","dompurify":"^3.4.13","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^26.1.0","vitest":"^3.2.7","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vue/test-utils":"^2.5.0","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0","@tauri-apps/api":"^2","@tauri-apps/plugin-dialog":"^2","@tauri-apps/plugin-opener":"^2"},"peerDependenciesMeta":{"@tauri-apps/api":{"optional":true},"@tauri-apps/plugin-dialog":{"optional":true},"@tauri-apps/plugin-opener":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.1.5_1790938926201_0.2767681423090491","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bro-know-my/spark-analyzer","version":"0.2.1","keywords":["spark","analyzer","vue","tauri"],"license":"MIT","_id":"@bro-know-my/spark-analyzer@0.2.1","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"b78b05aa91e77d265927cf0372cf801ecf81bb8c","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.2.1.tgz","fileCount":10,"integrity":"sha512-Pd9QTmxqqbDrfKmNjqgUeCYH+RLi0Kfurq3GHS81wUyCTv7arTjFJQKV+2QTvLiaQ0wh0gdbWQL2mqmFF6dL+w==","signatures":[{"sig":"MEUCIDWmXyFvwCFj837MXt//v3xj9CODkT5QTsp3pMD54PNoAiEAgKMEuVTDoZjsXn3VLeWV8u6cxi68uu0L4DsFQ3ET7qc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAUO/iMK/1sCC0375D36jJPIpiBxxvGBhTB5TjG12lc1AiEA4RhYsZeeg/lnU90tTJnIU8/yt7MBDx7unshA627gieQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":244149},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tauri":{"types":"./dist/tauri.d.ts","import":"./dist/tauri.js"},"./style.css":"./dist/style.css"},"gitHead":"cc761340f80249b71cd480291c9c259300fd12c2","scripts":{"test":"vitest run","build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"0e6f1c92-7518-4fb4-80da-ffbc7d21dd7e"}},"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"11.19.0","description":"Pure Vue UI for the bkmsa Rust analyzer.","directories":{},"sideEffects":["./dist/style.css"],"_nodeVersion":"24.21.0","dependencies":{"marked":"^16.4.1","dompurify":"^3.4.13","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^26.1.0","vitest":"^3.2.7","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vue/test-utils":"^2.5.0","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0","@tauri-apps/api":"^2","@tauri-apps/plugin-dialog":"^2","@tauri-apps/plugin-opener":"^2"},"peerDependenciesMeta":{"@tauri-apps/api":{"optional":true},"@tauri-apps/plugin-dialog":{"optional":true},"@tauri-apps/plugin-opener":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/spark-analyzer_0.2.1_1791013120054_0.5274558478569049","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"_id":"@bro-know-my/spark-analyzer@0.2.2","bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"dist":{"shasum":"4238a75839c48261d4cae503034cf4887c1ae607","tarball":"https://registry.npmjs.org/@bro-know-my/spark-analyzer/-/spark-analyzer-0.2.2.tgz","fileCount":10,"integrity":"sha512-MvmFjftUfGL1mEpdE+08uzK5M7VTTkLoI1+r3vKbUMqGSC++2xbPdgGmFy0pi8cI5Bna4+ONvqQ3wmpT8cyb7g==","signatures":[{"sig":"MEUCIHRhgpYSMGazusSJ1KrqTdIMd7Pqg1tzr0LRUaJ5aa0bAiEAvPvqretfEGy5MzhoV+R9eTDZpASkI41DGfqI4cDx84E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDVEqGFZ7aFys/nVvQ/BtA1YLfN2WtK5imvZDdV5yvnRQIgca6Sbq2ainwfpf4/NUXMjn4DyEdf0xpBzCHUqcSQlk0="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bro-know-my%2fspark-analyzer@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":246060},"main":"./dist/index.js","name":"@bro-know-my/spark-analyzer","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tauri":{"types":"./dist/tauri.d.ts","import":"./dist/tauri.js"},"./style.css":"./dist/style.css"},"gitHead":"6d46daadf9003cf9a8a80ad1cbce143eed1310a9","license":"MIT","scripts":{"test":"vitest run","build":"vite build && vue-tsc -p tsconfig.json --declaration --emitDeclarationOnly","pack:dry":"npm pack --dry-run","prepublishOnly":"pnpm run build"},"version":"0.2.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"0e6f1c92-7518-4fb4-80da-ffbc7d21dd7e"}},"homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","keywords":["spark","analyzer","vue","tauri"],"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"_npmVersion":"11.19.0","description":"Pure Vue UI for the bkmsa Rust analyzer.","directories":{},"maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"sideEffects":["./dist/style.css"],"_nodeVersion":"24.21.0","dependencies":{"marked":"^16.4.1","dompurify":"^3.4.13","html-to-image":"^1.11.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^26.1.0","vitest":"^3.2.7","vue-tsc":"^2.2.12","typescript":"~5.6.2","@vue/test-utils":"^2.5.0","@vitejs/plugin-vue":"^5.2.4"},"peerDependencies":{"vue":"^3.5.0","naive-ui":"^2.43.0","@vicons/fa":"^0.13.0","@vicons/fluent":"^0.13.0","@tauri-apps/api":"^2","@tauri-apps/plugin-dialog":"^2","@tauri-apps/plugin-opener":"^2"},"peerDependenciesMeta":{"@tauri-apps/api":{"optional":true},"@tauri-apps/plugin-dialog":{"optional":true},"@tauri-apps/plugin-opener":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spark-analyzer_0.2.2_1791027919072_0.1501749054066428"}}},"time":{"created":"2026-06-16T09:04:51.472Z","modified":"2026-10-03T11:45:19.501Z","0.0.3":"2026-06-16T09:04:52.124Z","0.0.4":"2026-06-16T09:12:20.139Z","0.0.5":"2026-06-22T03:44:45.838Z","0.0.6":"2026-06-25T14:46:09.888Z","0.0.7":"2026-06-28T16:19:35.165Z","0.0.8":"2026-07-10T07:12:08.213Z","0.1.0":"2026-08-05T03:06:12.160Z","0.1.1":"2026-08-11T12:38:34.701Z","0.1.2":"2026-09-05T13:16:48.198Z","0.1.3":"2026-09-05T15:17:00.008Z","0.1.5":"2026-10-02T11:02:06.349Z","0.2.1":"2026-10-03T07:38:40.139Z","0.2.2":"2026-10-03T11:45:19.170Z"},"bugs":{"url":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/issues"},"license":"MIT","homepage":"https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer#readme","keywords":["spark","analyzer","vue","tauri"],"repository":{"url":"git+https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer.git","type":"git","directory":"packages/spark-analyzer"},"description":"Pure Vue UI for the bkmsa Rust analyzer.","maintainers":[{"name":"jiafalsedream","email":"falsedream233@gmail.com"}],"readme":"# @bro-know-my/spark-analyzer\n\n[中文](#中文) | [English](#english)\n\n## 中文\n\n`@bro-know-my/spark-analyzer` 是 `bkmsa` 的可复用 Vue 3 UI。它有意不包含报告解析器、诊断规则、agent 循环或 AI transport；这些能力由 Rust `bkmsa-core` / `bkmsa-agent` 提供，并由宿主通过 `SparkAnalyzerAdapter` 暴露。\n\n大报告保存在 Tauri 或 `bkmsa-wasm` 后端，UI 只持有不透明的 `LoadedReport.reportId` 和摘要。这条边界用于保证 CLI、桌面端和 Web 端共享同一套分析语义。\n\n### 安装\n\n```bash\npnpm add @bro-know-my/spark-analyzer\npnpm add vue naive-ui @vicons/fa @vicons/fluent\n```\n\n### 使用\n\n```vue\n<script setup lang=\"ts\">\nimport {\n  SparkAnalyzerView,\n  type SparkAnalyzerAdapter,\n} from \"@bro-know-my/spark-analyzer\";\nimport \"@bro-know-my/spark-analyzer/style.css\";\n\nconst adapter: SparkAnalyzerAdapter = {\n  loadReportBytes: (bytes, source, hint) => backend.loadReportBytes(bytes, source, hint),\n  loadTextReport: (text, source) => backend.loadTextReport(text, source),\n  fetchReport: (source) => backend.fetchReport(source),\n  executeTool: (reportId, tool, args) => backend.executeTool(reportId, tool, args),\n  runAnalysis: (reportId, config, onTrace) => backend.runAnalysis(reportId, config, onTrace),\n  cancelAnalysis: (reportId) => backend.cancelAnalysis(reportId),\n  askFollowUp: (reportId, config, traces, diagnosis, history, question) =>\n    backend.askFollowUp(reportId, config, traces, diagnosis, history, question),\n  releaseReport: (reportId) => backend.releaseReport(reportId),\n  loadApiKey: () => backend.loadApiKey(),\n  storeApiKey: (apiKey) => backend.storeApiKey(apiKey),\n  deleteApiKey: () => backend.deleteApiKey(),\n  testAiConnection: (config) => backend.testAiConnection(config),\n  listAiModels: (config) => backend.listAiModels(config),\n  pickSavePath: async () => null,\n  saveExportFile: async () => {},\n  openUrl: async (url) => window.open(url, \"_blank\", \"noopener,noreferrer\"),\n};\n</script>\n\n<template>\n  <SparkAnalyzerView :adapter=\"adapter\" language=\"zh\" embedded />\n</template>\n```\n\nUI 不直接调用 Tauri 或 WASM API。仓库内的 standalone host 在桌面端把 adapter 映射到 `analyzer_*` Tauri commands，在浏览器端延迟加载 `bkmsa-wasm`。\n\n`runAnalysis` 的可选第三个参数 `onTrace` 用于逐条通知执行轨迹。自定义宿主应转发此回调；最终返回值仍包含完整 `traces`。未实现回调的宿主仍可运行，但轨迹会在分析结束时统一显示。\n\n包内样式仅作用于组件自动设置的 `.bkmsa-scope` 边界，包括全屏诊断和图片导出节点，不修改宿主的根主题变量、标题或通用布局类。宿主无需给应用根节点添加这个类。\n\nTauri 2 宿主推荐直接使用配套的 `bkmsa-tauri` crate 和包内 adapter：\n\n```rust\ntauri::Builder::default()\n    .plugin(bkmsa_tauri::init())\n```\n\n在 capability 中加入 `\"bkmsa-tauri:default\"`，然后：\n\n`init()` 默认允许全部宿主能力。需要用户授权的嵌入应用应改用 Rust `init_with_authorizer` / `HostAuthorizer`；实现方式见 [后端授权说明](https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/blob/master/crates/bkmsa-tauri/README.md#host-authorization)。\n\n```ts\nimport { createTauriSparkAnalyzerAdapter } from \"@bro-know-my/spark-analyzer/tauri\";\n\nconst adapter = createTauriSparkAnalyzerAdapter();\n```\n\n宿主仍需安装并注册 `@tauri-apps/plugin-dialog` 和 `@tauri-apps/plugin-opener`，用于导出路径选择和打开外部链接。\n\n宿主可以显式控制 debug：\n\n```vue\n<SparkAnalyzerView :adapter=\"adapter\" :debug=\"debugEnabled\" embedded />\n```\n\n不传 `debug` 时，组件保留 standalone 默认行为。\n\n嵌入式宿主还可以控制语言、主题，并把非敏感 AI 偏好保存到自己的数据目录：\n\n```ts\nimport type { SparkAnalyzerPreferencesStore } from \"@bro-know-my/spark-analyzer\";\n\nconst preferencesStore: SparkAnalyzerPreferencesStore = {\n  load: () => hostBridge.loadSparkPreferences(),\n  save: (preferences) => hostBridge.saveSparkPreferences(preferences),\n};\n```\n\n```vue\n<SparkAnalyzerView\n  :adapter=\"adapter\"\n  language=\"zh\"\n  theme=\"dark\"\n  :preferences-store=\"preferencesStore\"\n  embedded\n/>\n```\n\n传入 `language` 或 `theme` 后，对应的组件内切换器会隐藏，宿主值保持权威。传入 `preferencesStore` 后，provider、base URL、模型和 temperature 不再写入 `localStorage`。API Key 不会进入该 store，仍只通过 adapter 的凭据方法存取。\n\n### 构建\n\n```bash\npnpm --dir packages/spark-analyzer build\n```\n\n这是纯 UI 构建，不会生成 Rust/WASM 后端。完整 Web 应用应先在仓库根目录运行 `pnpm run build:wasm`，再运行 `pnpm run build:web`。\n\n## English\n\n`@bro-know-my/spark-analyzer` is the reusable Vue 3 UI for `bkmsa`. It intentionally contains no report parser, diagnostic rules, agent loop, or AI transport. Those capabilities come from the Rust `bkmsa-core` / `bkmsa-agent` crates and are exposed by the host through `SparkAnalyzerAdapter`.\n\nLarge reports stay inside the Tauri or `bkmsa-wasm` backend. The UI holds only an opaque `LoadedReport.reportId` and a summary. This boundary keeps the CLI, desktop app, and Web app on the same analysis semantics.\n\n### Install\n\n```bash\npnpm add @bro-know-my/spark-analyzer\npnpm add vue naive-ui @vicons/fa @vicons/fluent\n```\n\n### Usage\n\n```vue\n<script setup lang=\"ts\">\nimport {\n  SparkAnalyzerView,\n  type SparkAnalyzerAdapter,\n} from \"@bro-know-my/spark-analyzer\";\nimport \"@bro-know-my/spark-analyzer/style.css\";\n\nconst adapter: SparkAnalyzerAdapter = {\n  loadReportBytes: (bytes, source, hint) => backend.loadReportBytes(bytes, source, hint),\n  loadTextReport: (text, source) => backend.loadTextReport(text, source),\n  fetchReport: (source) => backend.fetchReport(source),\n  executeTool: (reportId, tool, args) => backend.executeTool(reportId, tool, args),\n  runAnalysis: (reportId, config, onTrace) => backend.runAnalysis(reportId, config, onTrace),\n  cancelAnalysis: (reportId) => backend.cancelAnalysis(reportId),\n  askFollowUp: (reportId, config, traces, diagnosis, history, question) =>\n    backend.askFollowUp(reportId, config, traces, diagnosis, history, question),\n  releaseReport: (reportId) => backend.releaseReport(reportId),\n  loadApiKey: () => backend.loadApiKey(),\n  storeApiKey: (apiKey) => backend.storeApiKey(apiKey),\n  deleteApiKey: () => backend.deleteApiKey(),\n  testAiConnection: (config) => backend.testAiConnection(config),\n  listAiModels: (config) => backend.listAiModels(config),\n  pickSavePath: async () => null,\n  saveExportFile: async () => {},\n  openUrl: async (url) => window.open(url, \"_blank\", \"noopener,noreferrer\"),\n};\n</script>\n\n<template>\n  <SparkAnalyzerView :adapter=\"adapter\" language=\"zh\" embedded />\n</template>\n```\n\nThe UI does not call Tauri or WASM APIs directly. The repository's standalone host maps the adapter to `analyzer_*` Tauri commands on desktop and lazily loads `bkmsa-wasm` in browsers.\n\nThe optional third argument to `runAnalysis`, `onTrace`, delivers execution traces incrementally. Custom hosts should forward this callback; the final result still includes the complete `traces` history. Hosts without callback support continue to work and display traces when analysis finishes.\n\nTauri 2 hosts should use the matching `bkmsa-tauri` crate and the packaged adapter:\n\n```rust\ntauri::Builder::default()\n    .plugin(bkmsa_tauri::init())\n```\n\nAdd `\"bkmsa-tauri:default\"` to the capability, then:\n\n`init()` allows all host capabilities by default. Embedded applications with user grants should use Rust `init_with_authorizer` / `HostAuthorizer`; see [backend authorization](https://github.com/bro-know-my-org/BroKnowMySparkAnalyzer/blob/master/crates/bkmsa-tauri/README.md#host-authorization).\n\n```ts\nimport { createTauriSparkAnalyzerAdapter } from \"@bro-know-my/spark-analyzer/tauri\";\n\nconst adapter = createTauriSparkAnalyzerAdapter();\n```\n\nThe host must also install and register `@tauri-apps/plugin-dialog` and `@tauri-apps/plugin-opener` for export path selection and external URLs.\n\nThe host may control debug mode explicitly:\n\n```vue\n<SparkAnalyzerView :adapter=\"adapter\" :debug=\"debugEnabled\" embedded />\n```\n\nWhen `debug` is omitted, the component keeps its standalone default behavior.\n\nEmbedded hosts can also control language and theme and persist non-sensitive AI preferences in their own data root:\n\n```ts\nimport type { SparkAnalyzerPreferencesStore } from \"@bro-know-my/spark-analyzer\";\n\nconst preferencesStore: SparkAnalyzerPreferencesStore = {\n  load: () => hostBridge.loadSparkPreferences(),\n  save: (preferences) => hostBridge.saveSparkPreferences(preferences),\n};\n```\n\n```vue\n<SparkAnalyzerView\n  :adapter=\"adapter\"\n  language=\"en\"\n  theme=\"dark\"\n  :preferences-store=\"preferencesStore\"\n  embedded\n/>\n```\n\nWhen `language` or `theme` is supplied, the matching in-component selector is hidden and the host value remains authoritative. With `preferencesStore`, provider, base URL, model, and temperature no longer use `localStorage`. API keys never enter this store and continue through the adapter credential methods.\n\n### Build\n\n```bash\npnpm --dir packages/spark-analyzer build\n```\n\nThis builds only the UI and does not produce a Rust/WASM backend. For the complete Web app, run `pnpm run build:wasm` and then `pnpm run build:web` from the repository root.\n","readmeFilename":"README.md"}