{"_id":"@agenticbridge/style-trace","_rev":"8-36b85a7fad0219021dd657020f703058","name":"@agenticbridge/style-trace","dist-tags":{"latest":"0.5.2"},"versions":{"0.2.0":{"name":"@agenticbridge/style-trace","version":"0.2.0","keywords":["mcp","node","website","reverse-engineering","style","agent","web"],"author":{"name":"agentic-bridge"},"license":"MIT","_id":"@agenticbridge/style-trace@0.2.0","maintainers":[{"name":"kavanchan","email":"kavankfc@gmail.com"}],"homepage":"https://github.com/AgenticBridge/style-trace#readme","bugs":{"url":"https://github.com/AgenticBridge/style-trace/issues"},"bin":{"style-trace":"dist/src/index.js"},"dist":{"shasum":"06b8e34d36780ce79d8f28f256b8b7b46ba3cbd6","tarball":"https://registry.npmjs.org/@agenticbridge/style-trace/-/style-trace-0.2.0.tgz","fileCount":11,"integrity":"sha512-XYSN46iAX+RvcRjyVODqxJdLiFHOiY3/v1oOa4fnwyUFv9yv8j0RLuOF6UwYU2hNdueWXwcHDjetOaSXxqJbAA==","signatures":[{"sig":"MEUCIQDjFZF4lUcmIct9E/F/4EzAhXToaJHnvpHNdUmG+NxR7QIgavQtbNAtWcpyD4A+E5DI2ITKIE2xE/DLgNdLfsHNa/w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62135},"main":"index.js","type":"module","engines":{"node":">=20"},"gitHead":"76dfd992cd06d7d403ba6b2ee05543e84cd61198","scripts":{"dev":"tsx src/index.ts","test":"node --test --import tsx test/**/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/src/index.js","prepack":"npm run build","test:e2e":"tsx test/e2e/runReview.ts","typecheck":"tsc --noEmit -p tsconfig.json","test:mcp-cli":"bash scripts/test-mcp-cli.sh","promo:artifact":"tsx scripts/generate-promo-artifact.ts"},"_npmUser":{"name":"kavanchan","email":"kavankfc@gmail.com"},"repository":{"url":"git+https://github.com/AgenticBridge/style-trace.git","type":"git"},"_npmVersion":"10.9.2","description":"Playwright-based MCP server that extracts evidence-first website style signals.","directories":{"doc":"docs","test":"test"},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.3.6","playwright":"^1.59.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/style-trace_0.2.0_1776473107795_0.5550352239932741","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@agenticbridge/style-trace","version":"0.3.0","keywords":["mcp","node","website","reverse-engineering","style","agent","web"],"author":{"name":"agentic-bridge"},"license":"MIT","_id":"@agenticbridge/style-trace@0.3.0","maintainers":[{"name":"kavanchan","email":"kavankfc@gmail.com"}],"homepage":"https://github.com/AgenticBridge/style-trace#readme","bugs":{"url":"https://github.com/AgenticBridge/style-trace/issues"},"bin":{"style-trace":"dist/src/index.js"},"dist":{"shasum":"31473aae772f9958a586f5d0628ff258212a1e3d","tarball":"https://registry.npmjs.org/@agenticbridge/style-trace/-/style-trace-0.3.0.tgz","fileCount":28,"integrity":"sha512-dg4LwTo06Cl8bJ+zCdKtR6fwBHeDc3cSJt7Cjwl1SiHEbW4zksDjVdVQgx2QP0aMXt5oIdqEoiXdmEwVHA4y9Q==","signatures":[{"sig":"MEYCIQCAeEd98nHSooer/sOOJyZhQPglOUSs+g9FRXjR2LvAGwIhAJRYWrGI11F/Hb9BusE4U0JEwEAIU/7s5kFRr5XesCdc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209622},"main":"index.js","type":"module","engines":{"node":">=20"},"gitHead":"93319d6cb9438f6d3e224d446d4eeeca1423fe33","scripts":{"dev":"tsx src/index.ts","test":"node --test --import tsx test/**/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/src/index.js","prepack":"npm run build","test:e2e":"tsx test/e2e/runReview.ts","typecheck":"tsc --noEmit -p tsconfig.json","test:mcp-cli":"bash scripts/test-mcp-cli.sh"},"_npmUser":{"name":"kavanchan","email":"kavankfc@gmail.com"},"repository":{"url":"git+https://github.com/AgenticBridge/style-trace.git","type":"git"},"_npmVersion":"10.9.2","description":"Playwright-based MCP server that extracts evidence-first website style signals.","directories":{"doc":"docs","test":"test"},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.3.6","playwright":"^1.59.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/style-trace_0.3.0_1776500035301_0.9289491001173931","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@agenticbridge/style-trace","version":"0.3.2","keywords":["mcp","node","website","reverse-engineering","style","agent","web"],"author":{"name":"agentic-bridge"},"license":"MIT","_id":"@agenticbridge/style-trace@0.3.2","maintainers":[{"name":"kavanchan","email":"kavankfc@gmail.com"}],"homepage":"https://github.com/AgenticBridge/style-trace#readme","bugs":{"url":"https://github.com/AgenticBridge/style-trace/issues"},"bin":{"style-trace":"dist/src/index.js"},"dist":{"shasum":"f067c824ca870a9d930ed3bbf2df16ee49936cdc","tarball":"https://registry.npmjs.org/@agenticbridge/style-trace/-/style-trace-0.3.2.tgz","fileCount":15,"integrity":"sha512-7kUeKMxZfAVDUqByf1dRLPsLkMwfNajsaZ1UBujUj6n+SzCqaLBW5RlQR9F1qaKPD/6G9f5Lip4ZUMm/sJN09Q==","signatures":[{"sig":"MEUCIQDS7EODixNtpfcpO3EjcEG1dLSrrtCmkEPRcKYZPNHIDgIgYHshpSQo8cOli40uuMUcx/Nd9FinLx/HT4LMYEjlfjA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agenticbridge%2fstyle-trace@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":105051},"main":"index.js","type":"module","engines":{"node":">=20"},"gitHead":"6afd3f58cb787a7a60ea77d77806859eca589466","scripts":{"dev":"tsx src/index.ts","test":"node --test --import tsx test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/src/index.js","prepack":"npm run build","test:e2e":"tsx test/e2e/runReview.ts","typecheck":"tsc --noEmit -p tsconfig.json","test:mcp-cli":"bash scripts/test-mcp-cli.sh"},"_npmUser":{"name":"kavanchan","email":"kavankfc@gmail.com"},"repository":{"url":"git+https://github.com/AgenticBridge/style-trace.git","type":"git"},"_npmVersion":"10.8.2","description":"Playwright-based MCP server that extracts evidence-first website style signals.","directories":{"doc":"docs","test":"test"},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.3.6","playwright":"^1.59.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/style-trace_0.3.2_1776500539149_0.3332393964281215","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@agenticbridge/style-trace","version":"0.3.3","keywords":["mcp","node","website","reverse-engineering","style","agent","web"],"author":{"name":"agentic-bridge"},"license":"MIT","_id":"@agenticbridge/style-trace@0.3.3","maintainers":[{"name":"kavanchan","email":"kavankfc@gmail.com"}],"homepage":"https://github.com/AgenticBridge/style-trace#readme","bugs":{"url":"https://github.com/AgenticBridge/style-trace/issues"},"bin":{"style-trace":"dist/src/index.js"},"dist":{"shasum":"701fc676e441919665e9730133e64f811574fca9","tarball":"https://registry.npmjs.org/@agenticbridge/style-trace/-/style-trace-0.3.3.tgz","fileCount":20,"integrity":"sha512-nX7tVSiXF7YlVV6Heq8/kJsr0wd0kRaFVOTjwXdWns+XMOOIMQK6If2RI6mABPHXaPvwEW/Czx62qechEhNzGg==","signatures":[{"sig":"MEUCIQDbvoMYAUNSoPkg6kgJWp0UlWVQHqdtlYOeyNSv/z6POAIgRKqe0SAFqR5WYdBowO2Uf8LEL49pD2MUJ1EJxZPfkIA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agenticbridge%2fstyle-trace@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":120227},"main":"dist/src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./dist/src/index.js","./package.json":"./package.json"},"gitHead":"fe48a7c233e667316a6ba13e6855f9c3f4e2493f","scripts":{"dev":"tsx src/index.ts","test":"node --test --import tsx test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/src/index.js","prepack":"npm run build","test:e2e":"tsx test/e2e/runReview.ts","typecheck":"tsc --noEmit -p tsconfig.json","test:mcp-cli":"bash scripts/test-mcp-cli.sh"},"_npmUser":{"name":"kavanchan","email":"kavankfc@gmail.com"},"repository":{"url":"git+https://github.com/AgenticBridge/style-trace.git","type":"git"},"_npmVersion":"10.8.2","description":"Playwright-based MCP server that extracts evidence-first website style signals.","directories":{"doc":"docs","test":"test"},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.3.6","playwright":"^1.59.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/style-trace_0.3.3_1776540061941_0.5852033292480923","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@agenticbridge/style-trace","version":"0.4.0","keywords":["mcp","node","website","reverse-engineering","style","agent","web"],"author":{"name":"agentic-bridge"},"license":"MIT","_id":"@agenticbridge/style-trace@0.4.0","maintainers":[{"name":"kavanchan","email":"kavankfc@gmail.com"}],"homepage":"https://github.com/AgenticBridge/style-trace#readme","bugs":{"url":"https://github.com/AgenticBridge/style-trace/issues"},"bin":{"style-trace":"dist/src/index.js"},"dist":{"shasum":"d212f660e8fe9352a63f1d06140f1af50c2753b0","tarball":"https://registry.npmjs.org/@agenticbridge/style-trace/-/style-trace-0.4.0.tgz","fileCount":21,"integrity":"sha512-wFrE9v5em5Z1msSsJNBr5C95+3bZ5oe1AWzoZvaoigX0M28R9G+rIsTuD2YxEuzjYx3G+U4Us7H85NnrcOSsrw==","signatures":[{"sig":"MEQCIFbVlAcwSH2BWccnj+e1qp7DOrk0VrCg0aTb9UGeP3pRAiAr+G5vCRwyi9KyBegQagQ1466DiWXnWZ2JfsGDeD0t4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agenticbridge%2fstyle-trace@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":139189},"main":"dist/src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./dist/src/index.js","./package.json":"./package.json"},"gitHead":"1f0d435b85c4219213277e78655b637aa79632cf","scripts":{"dev":"tsx src/index.ts","test":"node --test --import tsx test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/src/index.js","prepack":"npm run build","test:e2e":"tsx test/e2e/runReview.ts","typecheck":"tsc --noEmit -p tsconfig.json","test:mcp-cli":"bash scripts/test-mcp-cli.sh"},"_npmUser":{"name":"kavanchan","email":"kavankfc@gmail.com"},"repository":{"url":"git+https://github.com/AgenticBridge/style-trace.git","type":"git"},"_npmVersion":"10.8.2","description":"Playwright-based MCP server that extracts evidence-first website style signals.","directories":{"doc":"docs","test":"test"},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.3.6","playwright":"^1.59.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/style-trace_0.4.0_1776543312912_0.6992261602552345","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@agenticbridge/style-trace","version":"0.5.0","keywords":["mcp","node","website","reverse-engineering","style","agent","web"],"author":{"name":"agentic-bridge"},"license":"MIT","_id":"@agenticbridge/style-trace@0.5.0","maintainers":[{"name":"kavanchan","email":"kavankfc@gmail.com"}],"homepage":"https://github.com/AgenticBridge/style-trace#readme","bugs":{"url":"https://github.com/AgenticBridge/style-trace/issues"},"bin":{"style-trace":"dist/src/index.js"},"dist":{"shasum":"72672af2bcf6109feffdcccb121ede8e1ffb6dfd","tarball":"https://registry.npmjs.org/@agenticbridge/style-trace/-/style-trace-0.5.0.tgz","fileCount":23,"integrity":"sha512-YHDnyykhmEJDdIWHK4U2G+Ke6BrgrHhQ6Uy/VsSxg9qk/V/UnkcmUhmf1TJ8SHxEFXAmfPt3P5Lj2zp2WLJPaA==","signatures":[{"sig":"MEUCIFz3kYVNG5wfLM5GFAf/qKg6GODkyNlgr1DcBIKVVjh9AiEAiHmMyM9sarpzXHDmjNP8kL8UWZn+FESXAn5KLgri5Zw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agenticbridge%2fstyle-trace@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":205509},"main":"dist/src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./dist/src/index.js","./package.json":"./package.json"},"gitHead":"a6bae50125d7377f6fadf28c9d3ee9c4d388ece5","scripts":{"dev":"tsx src/index.ts","test":"node --test --import tsx test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/src/index.js","prepack":"npm run build","test:e2e":"tsx test/e2e/runReview.ts","typecheck":"tsc --noEmit -p tsconfig.json","test:mcp-cli":"bash scripts/test-mcp-cli.sh"},"_npmUser":{"name":"kavanchan","email":"kavankfc@gmail.com"},"repository":{"url":"git+https://github.com/AgenticBridge/style-trace.git","type":"git"},"_npmVersion":"10.8.2","description":"Playwright-based MCP server that extracts evidence-first website style signals.","directories":{"doc":"docs","test":"test"},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.3.6","playwright":"^1.59.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/style-trace_0.5.0_1777083208895_0.7354012631333089","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@agenticbridge/style-trace","version":"0.5.1","keywords":["mcp","node","website","reverse-engineering","style","agent","web"],"author":{"name":"agentic-bridge"},"license":"MIT","_id":"@agenticbridge/style-trace@0.5.1","maintainers":[{"name":"kavanchan","email":"kavankfc@gmail.com"}],"homepage":"https://github.com/AgenticBridge/style-trace#readme","bugs":{"url":"https://github.com/AgenticBridge/style-trace/issues"},"bin":{"style-trace":"dist/src/index.js"},"dist":{"shasum":"ec4b45919a1fc31c83c3d825f948c16aa33ce87b","tarball":"https://registry.npmjs.org/@agenticbridge/style-trace/-/style-trace-0.5.1.tgz","fileCount":24,"integrity":"sha512-QaSQNlEfhhTxkG386JU9GJYn7ok3PLiC7/xl1lEDCo8N3yIyOXH83vBWroPblsXKO8+C+8aqKb6demsSkNigYQ==","signatures":[{"sig":"MEUCIElv5qLRFcAkh+FXj/dkw32cMdyxM6JU3J3Bgijrhq02AiEAh0J3sLoSQ60f1FMns28K+LLVbxpPENVtdJdIlRflURc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agenticbridge%2fstyle-trace@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":207364},"main":"dist/src/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./dist/src/index.js","./package.json":"./package.json"},"gitHead":"da0741de153bf86fb3e82b3eb2094b99717e0222","scripts":{"dev":"tsx src/index.ts","test":"node --test --import tsx test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/src/index.js","prepack":"npm run build","test:e2e":"tsx test/e2e/runReview.ts","typecheck":"tsc --noEmit -p tsconfig.json","test:mcp-cli":"bash scripts/test-mcp-cli.sh"},"_npmUser":{"name":"kavanchan","email":"kavankfc@gmail.com"},"repository":{"url":"git+https://github.com/AgenticBridge/style-trace.git","type":"git"},"_npmVersion":"10.8.2","description":"Playwright-based MCP server that extracts evidence-first website style signals.","directories":{"doc":"docs","test":"test"},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.3.6","playwright":"^1.59.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^6.0.2","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/style-trace_0.5.1_1777097031802_0.24191815898820201","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@agenticbridge/style-trace","version":"0.5.2","description":"Playwright-based MCP server that extracts evidence-first website style signals.","type":"module","bin":{"style-trace":"dist/src/index.js"},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json","test":"node --test --import tsx test/*.test.ts","test:mcp-cli":"bash scripts/test-mcp-cli.sh","test:e2e":"tsx test/e2e/runReview.ts","start":"node dist/src/index.js","dev":"tsx src/index.ts","prepack":"npm run build"},"engines":{"node":">=20"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","playwright":"^1.59.1","zod":"^4.3.6"},"devDependencies":{"@types/node":"^25.6.0","tsx":"^4.21.0","typescript":"^6.0.2"},"main":"dist/src/index.js","exports":{".":"./dist/src/index.js","./package.json":"./package.json"},"directories":{"doc":"docs","test":"test"},"repository":{"type":"git","url":"git+https://github.com/AgenticBridge/style-trace.git"},"keywords":["mcp","node","website","reverse-engineering","style","agent","web"],"author":{"name":"agentic-bridge"},"license":"MIT","bugs":{"url":"https://github.com/AgenticBridge/style-trace/issues"},"homepage":"https://github.com/AgenticBridge/style-trace#readme","_id":"@agenticbridge/style-trace@0.5.2","gitHead":"c22e5e0cfa773698a71a4282c5cdfe993e5ea378","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-MCtGl91H0sQA8hzMiE8HCa2tsIGyBNmBL7nKdST1qCBf7kO8093rtEq8Nd7W9gXZANlmeH44NRQVmrE80NfEvA==","shasum":"bbd3b153cafd9769ce5f715f46f1e9b925a38b3e","tarball":"https://registry.npmjs.org/@agenticbridge/style-trace/-/style-trace-0.5.2.tgz","fileCount":24,"unpackedSize":207364,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agenticbridge%2fstyle-trace@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICXmESRC61LPlcDZXuacjsMNeJYtpTn4FI3Yowu13D6DAiA2gkRSbImYnPcnPlgbhhuyoZgFBqbYUIWMx1XHG6F39w=="}]},"_npmUser":{"name":"kavanchan","email":"kavankfc@gmail.com"},"maintainers":[{"name":"kavanchan","email":"kavankfc@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/style-trace_0.5.2_1777140103140_0.6505608542989576"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-18T00:45:07.740Z","modified":"2026-04-25T18:01:43.592Z","0.2.0":"2026-04-18T00:45:07.920Z","0.3.0":"2026-04-18T08:13:55.446Z","0.3.2":"2026-04-18T08:22:19.395Z","0.3.3":"2026-04-18T19:21:02.101Z","0.4.0":"2026-04-18T20:15:13.062Z","0.5.0":"2026-04-25T02:13:29.035Z","0.5.1":"2026-04-25T06:03:51.943Z","0.5.2":"2026-04-25T18:01:43.279Z"},"bugs":{"url":"https://github.com/AgenticBridge/style-trace/issues"},"author":{"name":"agentic-bridge"},"license":"MIT","homepage":"https://github.com/AgenticBridge/style-trace#readme","keywords":["mcp","node","website","reverse-engineering","style","agent","web"],"repository":{"type":"git","url":"git+https://github.com/AgenticBridge/style-trace.git"},"description":"Playwright-based MCP server that extracts evidence-first website style signals.","maintainers":[{"name":"kavanchan","email":"kavankfc@gmail.com"}],"readme":"# StyleTrace\n\n[English](README.md) | 繁體中文 | [日本語](README.ja.md) | [한국어](README.ko.md) | [Français](README.fr.md) | [Español](README.es.md)\n\n![Node >=20](https://img.shields.io/badge/node-%3E%3D20-339933)\n![TypeScript](https://img.shields.io/badge/built%20with-TypeScript-3178C6)\n![Playwright](https://img.shields.io/badge/browser-Playwright-45BA4B)\n![MCP](https://img.shields.io/badge/protocol-MCP-6f42c1)\n![npm downloads](https://img.shields.io/npm/dm/@agenticbridge/style-trace)\n\nStyleTrace 是一個 MCP 伺服器，會分析參考資料並回傳可直接用於提示的設計簡報，供代理與審查者使用。其中一個使用情境，是幫助開發者在不被設計細節分心的情況下建立網站，並在之後對生成結果做風格比對。\n\n![StyleTrace reverse engineering comparison](docs/readme-example-1.png)\n\n額外範例：使用同一組參考資料，在審查流程中比較有無 StyleTrace 的差異：\n\n![StyleTrace with and without comparison](docs/readme-example-2.png)\n\n## 為什麼使用它\n\n- 把少量參考頁面、截圖或 HTML 片段整理成代理真正能使用的提示式設計簡報\n- 保留有辨識度的設計特徵，讓網站重建結果不那麼制式\n- 用抽出的風格約束來審查生成的 HTML 或截圖，而不是只靠模糊的視覺印象判斷\n- 只分析你提供的參考來源，讓結果更可預測也更容易審查\n\n## 安裝\n\n需求：\n\n- Node.js `>=20`\n- Playwright Chromium\n\n從 npm 安裝：\n\n```bash\nnpm install -g @agenticbridge/style-trace\nnpx playwright install chromium\n```\n\n或從本機原始碼執行：\n\n```bash\nnpm install\nnpx playwright install chromium\nnpm run build\n```\n\n## 用法\n\n從你的 MCP client 連線使用。\n\n已發布套件：\n\n```json\n{\n  \"mcpServers\": {\n    \"style-trace\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@agenticbridge/style-trace\"]\n    }\n  }\n}\n```\n\n本機原始碼：\n\n```json\n{\n  \"mcpServers\": {\n    \"style-trace\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/style-trace/dist/src/index.js\"]\n    }\n  }\n}\n```\n\n伺服器提供兩個工具：\n\n- `analyze_website_style`\n- `review_generated_style`\n\n`analyze_website_style` 可接受精確網站網址：\n\n```json\n{\n  \"urls\": [\"https://www.apple.com\", \"https://www.framer.com\"],\n  \"targetArtifact\": \"landing-page\",\n  \"fidelity\": \"high\"\n}\n```\n\n也可接受混合參考來源：\n\n```json\n{\n  \"references\": [\n    { \"type\": \"url\", \"value\": \"https://www.apple.com/iphone/\" },\n    { \"type\": \"image\", \"value\": \"https://example-cdn.com/reference/hero-shot.png\" },\n    { \"type\": \"screenshot\", \"value\": \"https://example-cdn.com/reference/hero-capture.png\" },\n    { \"type\": \"html\", \"value\": \"<main><section><h1>Hero</h1></section></main>\" }\n  ],\n  \"targetArtifact\": \"prototype\",\n  \"fidelity\": \"medium\",\n  \"designIntent\": \"preserve the hero hierarchy and chrome discipline\",\n  \"evidenceMode\": \"inline\"\n}\n```\n\n`urls` 仍然支援純網站輸入。當你想在同一個請求中混合網站、圖片、截圖與有邊界的 HTML 來源時，請使用 `references`。\n\n回傳結果現在會包含可直接用於提示的欄位，例如 `visualVocabulary`、`styleInvariants`、`styleRisks`、`softGuesses`、`compositionBlueprint`、`variationAxes`、`blendModes`、`promptReadyBrief`、`reviewContract` 與 `originalityBoundary`。\n\n`review_generated_style` 會拿生成的 HTML 或生成圖片網址，對照 StyleTrace 結果做審查：\n\n```json\n{\n  \"styleResult\": { \"...\": \"StyleTrace analyze_website_style output\" },\n  \"generatedHtml\": \"<!doctype html><html>...</html>\",\n  \"viewportWidth\": 1440,\n  \"viewportHeight\": 900\n}\n```\n\n它會回傳哪些約束有命中、哪些被違反、哪些地方產生了漂移，以及整體審查信心。\n\n## 運作方式\n\n`analyze_website_style` 會使用 Playwright 造訪你提供的公開網站網址，也可以分析直接公開的圖片網址、截圖參考與有邊界的 HTML 片段。它會擷取精簡且可審查的訊號，例如模組結構、hero 呈現方式、CTA 模式、社會證明區塊、圖像、表單、斷點與代表性設計特徵，然後把這些訊號整理成可直接用於提示的設計簡報，包含硬性約束、漂移風險、構圖結構與審查檢查點。它不會額外爬取其他頁面，也不會憑空發明新的設計系統或做推測性的建議。\n\n`review_generated_style` 會用相同的分析方式回頭檢查生成產物，並與抽出的風格契約做比較。目標是把風格審查具體化：哪些命中了、哪些漂移了、哪些地方變得過度通用。\n\n## 限制\n\n- 僅支援公開 `http` 與 `https` 網址\n- 圖片與截圖參考必須是直接公開的圖片資產，例如 `.png`、`.jpg`、`.webp`、`.gif`、`.avif` 或 `.svg`\n- HTML 參考是有邊界的片段，不是完整瀏覽工作階段\n- 純圖片或純截圖參考對排版、導覽、表單、動態與斷點的推論會比即時網站參考更弱\n- 不支援登入流程或私有網路目標\n- 僅支援 stdio transport\n- 不提供持久化、佇列或 Web UI\n\n## 貢獻與測試\n\n執行本機檢查：\n\n```bash\nnpm run typecheck\nnpm run build\nnpm test\n```\n\n執行 MCP transport smoke test：\n\n```bash\nnpm run test:mcp-cli\n```\n\n執行完整審查流程，包含來源擷圖、`with MCP` 與 `without MCP` 的 LLM 生成，以及合成比較圖：\n\n```bash\nnpm run test:e2e -- --instance apple-pixel-samsung\n```\n\n另一組內建比較案例：\n\n```bash\nnpm run test:e2e -- --instance figma-framer-webflow\n```\n\n或直接對你自己的公開網址執行：\n\n```bash\nbash scripts/test-mcp-cli.sh https://www.apple.com https://www.framer.com\n```\n\n## 授權\n\nMIT\n","readmeFilename":"README.zh-TW.md"}