{"_id":"@dzhechkov/health-advisor","_rev":"31-349b0775a9c2a56af02bb6d1576e7524","name":"@dzhechkov/health-advisor","dist-tags":{"latest":"1.10.8"},"versions":{"1.0.0":{"name":"@dzhechkov/health-advisor","version":"1.0.0","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.0.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/health-advisor/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"28f55c9dcbb4baafeddc4fd37e3e66c48fcfd34c","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.0.0.tgz","fileCount":92,"integrity":"sha512-MbOH9uFNO/gClEQTkBZo5usnN4WyqIKHQmKzh48cYX7hnqsc7PW3AhzGSTURRp+F1gRwjPiJa1MzoQ01+MobXw==","signatures":[{"sig":"MEQCIFNyb67DzZY1Nvr6QJ+HMukXnbAOcy7KzZsqGiQYTe3CAiA4mS8JwMDzeOw0EVIjthAuukEVlBN+cgYfptul0QHu2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1201692},"engines":{"node":">=18"},"gitHead":"92eaaa0bc6018d4033bbbe835f354533137ebced","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/health-advisor.git","type":"git"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 13 base modules + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.0.0_1776701692808_0.7164936637050636","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@dzhechkov/health-advisor","version":"1.1.0","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/health-advisor/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"52d6d0427870a3a5e9a867f02b76e47b5edfc7a6","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.0.tgz","fileCount":106,"integrity":"sha512-gAgJEbowJiEZJG2+HvzdEawkSbaGnGHJ5nJKQkzOiwTolcYqAXeiYsiJvEvXe5UqfNKRSnp7p7bE0R97746KqA==","signatures":[{"sig":"MEYCIQDwyq9sO+f/R+0y5EQSbV0v8puvoccqymn/BY2z710yhwIhALg1g6ysgdjtSdsPUJulBIS3S8Nxytbg7Tf5dPXJwYf3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1389756},"engines":{"node":">=18"},"gitHead":"02005f5fb07f8d8283e09a8ad4f37f108ecf97e8","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/health-advisor.git","type":"git"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.0_1776706791478_0.9953169136619007","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@dzhechkov/health-advisor","version":"1.1.1","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.1","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/health-advisor/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"1e9182089461944d2ef5cb58b00efbb5d2a11bef","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.1.tgz","fileCount":106,"integrity":"sha512-cwe7y2qR47f7EkU03vjmOREvTHUyuVHuBFs1MxtuvAg4C8CI9rgtv+6wyRS7jNOS0TQJqjjCiQAiEGC2GI6IUQ==","signatures":[{"sig":"MEUCIBDe7VwOSoxqI6gez0byglFsVn6g8HkD+zo07HoRvlErAiEAvptGzD5FkEZtMGyKOOQ4tpneXGdQ3QT+NaGkaPc2CYQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1389967},"engines":{"node":">=18"},"gitHead":"8198a3f9eb7baa3246d8a783a25c41414c352e3c","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/health-advisor.git","type":"git"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.1_1776706955756_0.30461236034879646","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@dzhechkov/health-advisor","version":"1.1.2","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.2","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/health-advisor/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"7d266f138ba152ae41045af25940e9ba793a9ecb","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.2.tgz","fileCount":106,"integrity":"sha512-7mSzSiqaHWaZKdlsV2YkMeIFWlskZuaLmZHt6iCog9uOUZNggM3xNgQ2gGJehJfETQxHEUpLZmFDDf5ZQV3i9Q==","signatures":[{"sig":"MEUCIQDwUV0SrMACC7D+uXWnthkjuZgl9FPpW87tZedZOfWLSwIgGDOANdi+x6ofHwAtfvh23tpSnnjtRlSuHcNx0PWTJyw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1393773},"engines":{"node":">=18"},"gitHead":"5cf476e79f7a84d28d136592c7d3d709d4c23672","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/health-advisor.git","type":"git"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.2_1776842403664_0.2860367508126813","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@dzhechkov/health-advisor","version":"1.1.3","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.3","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/health-advisor/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"6678a87f468cd9ef348943e783697d7fcd64771f","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.3.tgz","fileCount":106,"integrity":"sha512-Y3HidWt9vffP1S6pA4QYVJ5/4ByTLp3uPD+H6fRIB8KSmkZVH9+siCn2xlKQooNKKHMlxIlVtUgEFl8hSfS/hw==","signatures":[{"sig":"MEUCIQDF9siG5T0ZsaWi5CY0/W5Z1hQiFsliBKta9KctLqlJjAIgdTl3ttaPbfgWg6cNXVjgWfg0QaNQjUPQ1fqcR+sAf1s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1390744},"engines":{"node":">=18"},"gitHead":"f10cf52258cae1d81ee47ecc8fc7d054b0c2101b","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/health-advisor.git","type":"git"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.3_1776842642030_0.8006546473024161","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@dzhechkov/health-advisor","version":"1.1.4","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.4","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/health-advisor/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"cc3fcadf1c594c9d07d6c7d43091b96b0679a9e9","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.4.tgz","fileCount":106,"integrity":"sha512-3fH0xb6Bc1CBpb3LVZ3FKCMGIZ+kAcnYzaiPoktlAI8WRIS7hvsXZ+8Snbx9PfwXlxcBFc17sTOuUbmC+n4NKg==","signatures":[{"sig":"MEUCIQCEEQNjFo4+ggs/Ivu5yrQbMzwlNc74c0+0Ol5T9LyGPwIgKeb9RC6cZTiu6f9kIoP/ZzK7SwjwFohX+Y0/GLsSOtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1393547},"engines":{"node":">=18"},"gitHead":"85d659bbf1940a2599df2e86096725854c55685f","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/health-advisor.git","type":"git"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.4_1776842964700_0.7213091841052159","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@dzhechkov/health-advisor","version":"1.1.5","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.5","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/health-advisor/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"608cf6af68f831c1673594f3bcc813f3da2c6f46","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.5.tgz","fileCount":106,"integrity":"sha512-9HfolO/xVjVp+nQEd2ELsi7C1VV/CdcWJsw8Cv14Sqavb1ebYWDdBpsfQyNIy1RcThwl4XYM6uZPwbUO4PHywA==","signatures":[{"sig":"MEYCIQDanyOTMZKwUA9OO74DH6XKL8kYdUB5lS389UhYIeL74gIhAKPKY+u8wO5EHKUSPAsusZnpUzFspDzidsQ44HNGjYeE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1395118},"engines":{"node":">=18"},"gitHead":"85d659bbf1940a2599df2e86096725854c55685f","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/health-advisor.git","type":"git"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.5_1776844432109_0.7386006992372907","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@dzhechkov/health-advisor","version":"1.1.6","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.6","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/health-advisor/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"11e66ca737154314b21c4538e3cbaced6d24b831","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.6.tgz","fileCount":107,"integrity":"sha512-vMSJAVTmhaDcmT9cXra/AFtVxp/P4gsZk1pKfzVHQPjbd8dAty32amBR+kkt37Xm0kbsOg5cG0zZLUVeC5facg==","signatures":[{"sig":"MEYCIQDWNN15MK60WtdWsM87vkBUGeusylGvYSe6bQvUfHTtsQIhAJ1vh09Uneb6yRSfMC0udUPsi9luPclj0eIUpex14/2+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1402437},"engines":{"node":">=18"},"gitHead":"3cde1fd4e4d47fb790739bd1589a429e07d4b06b","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/health-advisor.git","type":"git"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.6_1776845122268_0.403465269338928","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"@dzhechkov/health-advisor","version":"1.1.7","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.7","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/health-advisor/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"8e2b7bf740f43706bd4c29830948e82034d781f2","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.7.tgz","fileCount":107,"integrity":"sha512-qu+a08Jrvt3JMqfrye5SeK8bLY5ztl5rXMueUQ2Xre+UGp9oLdXfWNkrC4UxhIvMH97XdJxLa9Pc/weCvhuSAA==","signatures":[{"sig":"MEYCIQDtVA/7K0LG8bC766er20spW5rAkoc18ppbMA8cLjYziwIhAJCZHr96cbY5uvXAEjPpkGqpmHT6MtrMfg9F2+1ikqL2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1404545},"engines":{"node":">=18"},"gitHead":"61dd9a96ac2c2b4d1783aebfe74e79468e69ae87","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/health-advisor.git","type":"git"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.7_1776853547841_0.9544244134413797","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"@dzhechkov/health-advisor","version":"1.1.8","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.8","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"ed26b9172f3e9d41d491622b36226a5eb64d3fc6","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.8.tgz","fileCount":105,"integrity":"sha512-j2mzhzpbFp1ovlxYVuoOSb65e3bBKO8+8gnO/ft45vdPJk/PjkVa9xYLYqZzUpFephv30DmcrOk0xXSrCV2W0g==","signatures":[{"sig":"MEUCIQDxT7gAIR3bW7BkdolrV4azdOdXuvQ90tCF7hlgjRKDygIgHteFI89/3vrBGlYojcB3VAure6IIfT5BiOLplEBDVps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1386311},"engines":{"node":">=18"},"gitHead":"c4948c57abd37cf35cfc23d82bee5eb052afdc42","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.8_1781210800044_0.9479276797383014","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"@dzhechkov/health-advisor","version":"1.1.9","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.9","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"6d4950319f19becb04b5c583c0d2b04c7a5ec9f5","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.9.tgz","fileCount":106,"integrity":"sha512-ga7wbNvYGSw/UNcVOifRq1O/nk5D9kgT/qTDFlWvc1eknqMI/dU4OYFXe5GckaMZ4YmoPj9jLqrZFz/IrgRmzA==","signatures":[{"sig":"MEUCIQDh0oHDu45YcK4b9f0MKWGj7lGu+t3me5dH0TNIKPmzZwIgTp613cAty/WubMBKH6wM3HsnQXUiYpMdGsctRTha+AM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1389072},"_from":"file:dzhechkov-health-advisor-1.1.9.tgz","engines":{"node":">=18"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/c5cd47721117b7a0bd690c7089674ce3/dzhechkov-health-advisor-1.1.9.tgz","_integrity":"sha512-ga7wbNvYGSw/UNcVOifRq1O/nk5D9kgT/qTDFlWvc1eknqMI/dU4OYFXe5GckaMZ4YmoPj9jLqrZFz/IrgRmzA==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.9_1781638077667_0.5085360770423157","host":"s3://npm-registry-packages-npm-production"}},"1.1.11":{"name":"@dzhechkov/health-advisor","version":"1.1.11","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.11","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"c83cb13ed3473ba7399d847b3a83e610092e5d30","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.11.tgz","fileCount":107,"integrity":"sha512-NR3+xK6VE3HTYR6Pzi1crosTG+tPxWA/Tp7bfAXbKBM04LoXj2949Vikig2XyP/2wA2JTtXcV8yNt1D5X/Lp3Q==","signatures":[{"sig":"MEUCIQDxbQA0GCIhXiZlytycpayxnJkgPiFIwGBGFU1tSOtvMQIgP558lW6rxxLdJQhB4qtno+rXdQL/0ABxZdpyCgpxgCc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1338962},"_from":"file:dzhechkov-health-advisor-1.1.11.tgz","engines":{"node":">=18"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/568bb2c956d0b08d47412eb10a540510/dzhechkov-health-advisor-1.1.11.tgz","_integrity":"sha512-NR3+xK6VE3HTYR6Pzi1crosTG+tPxWA/Tp7bfAXbKBM04LoXj2949Vikig2XyP/2wA2JTtXcV8yNt1D5X/Lp3Q==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.11_1783350257771_0.21316095878104058","host":"s3://npm-registry-packages-npm-production"}},"1.1.13":{"name":"@dzhechkov/health-advisor","version":"1.1.13","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.1.13","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"1adc35aaac1213f435ecca7fb0f0916e4973ebcf","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.1.13.tgz","fileCount":107,"integrity":"sha512-UHIdSLNHYYthObePeWHwraxd8ueVrklVNEO0NEn1jOgYtt4ixi9yExPrE0SjVedQsd/K56VAk8ibjtP23Z/bEA==","signatures":[{"sig":"MEYCIQCMUVP2kdlYt8we2Fhnz4lOVGXbtG6CW7mEnEQxxnudWQIhAPv46zPKCp0JBPlLGBV8ffZvs2IAU6IiRJRwK5n5aBCA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1339034},"_from":"file:dzhechkov-health-advisor-1.1.13.tgz","engines":{"node":">=18"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/95a748b9ee3a103b12e8f5a45ef68cea/dzhechkov-health-advisor-1.1.13.tgz","_integrity":"sha512-UHIdSLNHYYthObePeWHwraxd8ueVrklVNEO0NEn1jOgYtt4ixi9yExPrE0SjVedQsd/K56VAk8ibjtP23Z/bEA==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.1.13_1783368807900_0.4822009633491513","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@dzhechkov/health-advisor","version":"1.2.0","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.2.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"66c2a31436ab80e2aebf148a883dbf2439571e3b","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.2.0.tgz","fileCount":109,"integrity":"sha512-N/tLsXSRly03kqr23FZiK6DwA0soXz9VdocCUFlWcAhbiPsAySpm9a5/IusFoCytmJoqHEwWTqYfPof5uInGJQ==","signatures":[{"sig":"MEUCICvF5yYFuuT9Y3BZWiI3Wj2JK+O6Eq4R7RzxYXez3RNnAiEA8ylPdV0Fqyhrl/Csbl3EOEHvaLAOWVav9eufOcN+9iQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1392951},"_from":"file:dzhechkov-health-advisor-1.2.0.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/750b52ccbd7f8270f103117ddc72a62f/dzhechkov-health-advisor-1.2.0.tgz","_integrity":"sha512-N/tLsXSRly03kqr23FZiK6DwA0soXz9VdocCUFlWcAhbiPsAySpm9a5/IusFoCytmJoqHEwWTqYfPof5uInGJQ==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.2.0_1784813849810_0.8019173623675981","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@dzhechkov/health-advisor","version":"1.2.1","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.2.1","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"c4d27392d868db41db7cfe32141b542dd3304592","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.2.1.tgz","fileCount":109,"integrity":"sha512-gmLRvICbfCCcM8EfjJ+3YdADdGq+sjfaZ3nzrJktEhLzafRRSPDkPtEMdFQi3jHZrzsZTGYtgDOH0rpz51SxbQ==","signatures":[{"sig":"MEUCIBcHtKnbA7qwhH2WwPJ1PgzvO303LOSrXFnWu+fISfbeAiEAhf9bdXp77YrEnnr8GEtzzQZEYLn7mKccuDm1zKOL1XU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1391978},"_from":"file:dzhechkov-health-advisor-1.2.1.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/7b876f94eb530ec35dabd712d7eddf15/dzhechkov-health-advisor-1.2.1.tgz","_integrity":"sha512-gmLRvICbfCCcM8EfjJ+3YdADdGq+sjfaZ3nzrJktEhLzafRRSPDkPtEMdFQi3jHZrzsZTGYtgDOH0rpz51SxbQ==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 17 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.2.1_1784816697798_0.03945916054725496","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@dzhechkov/health-advisor","version":"1.2.2","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.2.2","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"33b3ac43a30ae82e6d6c26a9c2ac5fcfc848e69f","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.2.2.tgz","fileCount":98,"integrity":"sha512-MGDIQAlwrS3kRSpr16GbZgiiMIL0sxXflAqHI62SDvuAefg4KqOlxCpYX959fNOtLIv0EYXb3GjupOR+iBEmCw==","signatures":[{"sig":"MEQCIFfeDrlZigva3ceKOEjlVvvKK0VRoKJszclkxCU1Z1hlAiAGi9KX0Yy+qB3r/9vOX12s9G6hpJaBJlA1oGLqA8XxXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1311171},"_from":"file:dzhechkov-health-advisor-1.2.2.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/ee6086d37d39cc612f4ad192bfa12f49/dzhechkov-health-advisor-1.2.2.tgz","_integrity":"sha512-MGDIQAlwrS3kRSpr16GbZgiiMIL0sxXflAqHI62SDvuAefg4KqOlxCpYX959fNOtLIv0EYXb3GjupOR+iBEmCw==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 18 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.2.2_1785272317180_0.8151430007874867","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@dzhechkov/health-advisor","version":"1.3.0","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.3.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"250e3ca8eb6fbff1bdbc64e20dce74386c2f5a97","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.3.0.tgz","fileCount":109,"integrity":"sha512-GUVYRHxK0yiWKUt1TAFSJkeFLf61Aq0YnsV6pYaR5ruqKfK35ehNyN4oPRGf6odqz9sOdrzgRNabIAhry/2l6A==","signatures":[{"sig":"MEYCIQDpIaPOS3Y3AQfFZj3X6BrMHg6qV2t1Zwt1EuXLmOAAcgIhAMtk/RApWEWEaYGndhoohO60grPvfhBPTMoCpDYu4Epq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1498968},"_from":"file:dzhechkov-health-advisor-1.3.0.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/48b9ad8849d7c33931c34eb6beddeeac/dzhechkov-health-advisor-1.3.0.tgz","_integrity":"sha512-GUVYRHxK0yiWKUt1TAFSJkeFLf61Aq0YnsV6pYaR5ruqKfK35ehNyN4oPRGf6odqz9sOdrzgRNabIAhry/2l6A==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 18 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.3.0_1785760257718_0.11259162234023679","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@dzhechkov/health-advisor","version":"1.4.0","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.4.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"a6ae9b540d71d4d3d38720574c74d4e2b3adacdd","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.4.0.tgz","fileCount":104,"integrity":"sha512-7WstxEv71ulcFjuFWmjqPQEA9+hoLas2mkUhXX9Cypba3Ue/yr13o+QMtst797VERHEn9CwqoBt7PPbUcCK5jA==","signatures":[{"sig":"MEUCIQDM0IuhBJ2lzySfSjq56KmAFtUbZiJ/+BtL5SaUk1whxAIgEUvlXQ6w4/hxbAzYOV6B28E9qbIuVW8ciAQ6egeChAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1447381},"_from":"file:dzhechkov-health-advisor-1.4.0.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/99845eebf3bc0e4caafa886899c6b3a1/dzhechkov-health-advisor-1.4.0.tgz","_integrity":"sha512-7WstxEv71ulcFjuFWmjqPQEA9+hoLas2mkUhXX9Cypba3Ue/yr13o+QMtst797VERHEn9CwqoBt7PPbUcCK5jA==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 18 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.4.0_1785765708151_0.94150250597495","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@dzhechkov/health-advisor","version":"1.4.1","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.4.1","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"ae6bf0d4b89575b4c0afac1c2dd3fbf76f19800c","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.4.1.tgz","fileCount":105,"integrity":"sha512-ZBGfWrsCHQHU00FYM3Eq/A7IYpihz9DeERTjJCZWIcvrKA5utV+YAH5fiCiHgwKOs2suqHOklxyU1VPJpoZ0ZA==","signatures":[{"sig":"MEQCICZ2X5ZDP2GiyO56xxJlqqNcEk8lbyGFdQff3BRUrP1pAiAm3peYsGatRPu09OVa639lz5xqYww83h9jwiG2CCQ6tQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1509744},"_from":"file:dzhechkov-health-advisor-1.4.1.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/97fa9b9e20ed27f2bac29eb05bcaa8f5/dzhechkov-health-advisor-1.4.1.tgz","_integrity":"sha512-ZBGfWrsCHQHU00FYM3Eq/A7IYpihz9DeERTjJCZWIcvrKA5utV+YAH5fiCiHgwKOs2suqHOklxyU1VPJpoZ0ZA==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 18 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.4.1_1785766594639_0.5814456768468044","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@dzhechkov/health-advisor","version":"1.4.2","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.4.2","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"ba3e9f890c132fd7d276e1be71393026ca828499","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.4.2.tgz","fileCount":105,"integrity":"sha512-V85/oG/0koZOuwJSn0oOFPJlugmVwJafC5+A6wPAXqX938ZVURSj/UOlVJEvIDtaHz2hBoAIIMrHv+V9mhsJLg==","signatures":[{"sig":"MEYCIQDuko6oZydnBae0GtK9EHC3qKMl9dbW90+qnAC9mqQj/AIhAOUrk/ef7Gq+b8NTlRymLb8799GVYBYDbS3hYohmR/ZN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1516879},"_from":"file:dzhechkov-health-advisor-1.4.2.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/71fdf9e7363a76c88f668ab49a7d9d4e/dzhechkov-health-advisor-1.4.2.tgz","_integrity":"sha512-V85/oG/0koZOuwJSn0oOFPJlugmVwJafC5+A6wPAXqX938ZVURSj/UOlVJEvIDtaHz2hBoAIIMrHv+V9mhsJLg==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 18 base components + 21 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.4.2_1785767360319_0.43772634771511276","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@dzhechkov/health-advisor","version":"1.5.0","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.5.0","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"ha":"bin/health-advisor.js","health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"c4e57f508b7fafdd9bfe806da7fb77c9b1e9c4c9","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.5.0.tgz","fileCount":205,"integrity":"sha512-SnY8iWlT5egW9CrMESKfekQ0LKP9xoKwSW8fL+HEq37eAdsmnTlvdywWv2UkigQsvW40lB43Q5XnzmCrRn/BIg==","signatures":[{"sig":"MEUCIQD7/dcRN2g0TPqvFNhGw8SIAqH+aZXBTIE8oMv8ZdYqWQIgOnyVi+JC6xfCXI/yU9WT+7uv34R13UdJfcnzbP2yO5w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2538155},"engines":{"node":">=18"},"gitHead":"e6a2c5fa9382c8aac26d0efd43a2b87b91a5913c","scripts":{"test":"node --test","test:mutation":"dz mutation-gate --registry test/mutation-registry.json"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"@dzhechkov/harness-core":"^0.3.150"},"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.5.0_1786299065727_0.9108393752736921","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@dzhechkov/health-advisor","version":"1.5.1","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.5.1","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"ha":"bin/health-advisor.js","health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"6cfc71a143365d0c56d906c80eb9e49eea603392","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.5.1.tgz","fileCount":205,"integrity":"sha512-V8t4siPnmu7fnoDq/+4rZwEIiUYFHKFKb3WU+LM72eifBfds+yR2fsY9EA2YfwZ0sIdJiP49UHNp0Mx3ECvo0w==","signatures":[{"sig":"MEQCIBdpxgbSURAfI9a2flZBzOBZUO9iFosfKqHasm//5cyIAiA4mM/qbVEFP9nyHjeQgakAQoyfi9Iu+1bT2NWh6TefCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2542436},"engines":{"node":">=18"},"gitHead":"4f3c2f4199d6d5f0d44c778d85dec9c9c8ac75ce","scripts":{"test":"node --test","test:mutation":"dz mutation-gate --registry test/mutation-registry.json"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"@dzhechkov/harness-core":"^0.3.150"},"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.5.1_1786374398573_0.16443619035333024","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@dzhechkov/health-advisor","version":"1.6.1","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.6.1","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"ha":"bin/health-advisor.js","health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"9a631dc11049f5f5defcbe55599d7733fca2b518","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.6.1.tgz","fileCount":216,"integrity":"sha512-/TT0fviH9Zlc7/xN5uIsFPBPuhvCj7d3HA3XU3OC1QvMBDj2+HoqWy7GtaDIX2ij7hU/kpez72JKKvk7j42cKQ==","signatures":[{"sig":"MEUCIQCBNw21qt1NBlD6mMUa7pB+03wDeLqBfV2Yvjxrgt3TEQIgBM6SW6XBsEJ1oB03DgUk4CEi4y0IOA+bJpYgpRw3Cpw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2669530},"_from":"file:dzhechkov-health-advisor-1.6.1.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test","test:mutation":"dz mutation-gate --registry test/mutation-registry.json"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/6ee36e13ff4f16ece3b0b2604040a153/dzhechkov-health-advisor-1.6.1.tgz","_integrity":"sha512-/TT0fviH9Zlc7/xN5uIsFPBPuhvCj7d3HA3XU3OC1QvMBDj2+HoqWy7GtaDIX2ij7hU/kpez72JKKvk7j42cKQ==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"@dzhechkov/harness-core":"^0.3.150"},"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.6.1_1786546958944_0.8354770974499999","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"@dzhechkov/health-advisor","version":"1.10.1","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.10.1","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"ha":"bin/health-advisor.js","health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"050f67f0ac88c9a2d9f072ebcd4a386990f14739","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.10.1.tgz","fileCount":242,"integrity":"sha512-/Pj/9z/QwwMxsF1k1/qMBU+SAWNdGVG9LVmD3Uf0gfdPHMlmQu/xBjvT+KXevWOELt93QRVNc07nPB8WVabZrA==","signatures":[{"sig":"MEUCIFZ+uAdgTFHuUjA8AlIQsdPUD6Rg7JT6uHqyOrzeMJ/iAiEAtMpimU/BvRiSsXdK6FXB86xG6dPDBNRQRL3fy4Iz6XA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3043056},"_from":"file:dzhechkov-health-advisor-1.10.1.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test --test-concurrency=4","test:mutation":"dz mutation-gate --registry test/mutation-registry.json"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/c4bc8119e0389ac194afc5ea9725491c/dzhechkov-health-advisor-1.10.1.tgz","_integrity":"sha512-/Pj/9z/QwwMxsF1k1/qMBU+SAWNdGVG9LVmD3Uf0gfdPHMlmQu/xBjvT+KXevWOELt93QRVNc07nPB8WVabZrA==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"@dzhechkov/harness-core":"^0.3.150 || ^0.4.0 || ^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.10.1_1787632856751_0.7074659066338329","host":"s3://npm-registry-packages-npm-production"}},"1.10.2":{"name":"@dzhechkov/health-advisor","version":"1.10.2","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.10.2","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"ha":"bin/health-advisor.js","health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"341bc862afd8ebe5729df56abac5e4f6532b7cee","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.10.2.tgz","fileCount":245,"integrity":"sha512-05PGCpIp89plybwl5lo8uiRqrNFDZdm58CfZP7S+czFoPTMhH/bEhGLJQRrEBfS/DhTPQoNdEVMonc4gjl0UTQ==","signatures":[{"sig":"MEYCIQDu08DSoPc/3ljRAnZnnN4NsGmbHQcgQD005E5a1467DAIhAL7PAuuBj4jqVyZnvghekRR0x8wHPJgd2y78/QGiNqkv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3071937},"_from":"file:dzhechkov-health-advisor-1.10.2.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test --test-concurrency=4","test:mutation":"dz mutation-gate --registry test/mutation-registry.json"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/29bc37e701e9d9eea55a53803322232d/dzhechkov-health-advisor-1.10.2.tgz","_integrity":"sha512-05PGCpIp89plybwl5lo8uiRqrNFDZdm58CfZP7S+czFoPTMhH/bEhGLJQRrEBfS/DhTPQoNdEVMonc4gjl0UTQ==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"@dzhechkov/harness-core":"^0.3.150 || ^0.4.0 || ^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.10.2_1787944418407_0.1292084470468411","host":"s3://npm-registry-packages-npm-production"}},"1.10.3":{"name":"@dzhechkov/health-advisor","version":"1.10.3","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.10.3","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"ha":"bin/health-advisor.js","health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"6c61ff5e734f4033f720a6cafccc0741e23a699b","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.10.3.tgz","fileCount":245,"integrity":"sha512-jR/aPuisLW+tNgp0aqFAyLLLdK4kIn7vbSnrrMSH/RZGCbVMSf+TWbmTUx5AoaSs4obnW/FTq6ELgyIyjPMWIQ==","signatures":[{"sig":"MEQCID3m7TH4uOuIEfkcIIJfBwJOFfq2ktcSYwq8iHxKMgTzAiBCDv6UhiqqWTlYIa8rI7/fVlpCezjA3V8Ityfgrs8fYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3071937},"_from":"file:dzhechkov-health-advisor-1.10.3.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test --test-concurrency=4","test:mutation":"dz mutation-gate --registry test/mutation-registry.json"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/3fe0a2662c2acc1a4a6c772ea0a7e418/dzhechkov-health-advisor-1.10.3.tgz","_integrity":"sha512-jR/aPuisLW+tNgp0aqFAyLLLdK4kIn7vbSnrrMSH/RZGCbVMSf+TWbmTUx5AoaSs4obnW/FTq6ELgyIyjPMWIQ==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"@dzhechkov/harness-core":"^0.3.150 || ^0.4.0 || ^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.10.3_1787944801526_0.39273575232858193","host":"s3://npm-registry-packages-npm-production"}},"1.10.4":{"name":"@dzhechkov/health-advisor","version":"1.10.4","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.10.4","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness-hub/issues"},"bin":{"ha":"bin/health-advisor.js","health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"d4a3a101f86f30f7116ff859476ffbda06054501","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.10.4.tgz","fileCount":245,"integrity":"sha512-Ub3+eJKDne19OE2w8w5CKues7sI5E4gCEa10MWzA+sVnwIdLqsuj7yXZNzyFpoSNeJxmwC3ZPBbAYES4WXhxOg==","signatures":[{"sig":"MEUCIGfHIesOoiXYyUUcQ43aJQX768g3qmtjfS9kw1wWCwu3AiEAun/l7nBnYbs9tMmNJj3qsuk3VJU+Hf9F73NVde6MY3Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3071937},"_from":"file:dzhechkov-health-advisor-1.10.4.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test --test-concurrency=4","test:mutation":"dz mutation-gate --registry test/mutation-registry.json"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/07cd78467457294af8aa0937a0180848/dzhechkov-health-advisor-1.10.4.tgz","_integrity":"sha512-Ub3+eJKDne19OE2w8w5CKues7sI5E4gCEa10MWzA+sVnwIdLqsuj7yXZNzyFpoSNeJxmwC3ZPBbAYES4WXhxOg==","repository":{"url":"git+https://github.com/djd1m/dz-harness-hub.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"@dzhechkov/harness-core":"^0.3.150 || ^0.4.0 || ^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.10.4_1788003713074_0.6342973486372203","host":"s3://npm-registry-packages-npm-production"}},"1.10.5":{"name":"@dzhechkov/health-advisor","version":"1.10.5","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.10.5","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"bin":{"ha":"bin/health-advisor.js","health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"190fdef7c53c4d1e52ef9f2a76ecb643038c78f8","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.10.5.tgz","fileCount":245,"integrity":"sha512-6LwXt9UmnNXg1K/damD449RsCYtA34h48EaCQKa5Mw8jgjld89ZIDH7TMPl3u5DIBX8nbbv2bUTi3VFNN6BWZA==","signatures":[{"sig":"MEYCIQDIGTAnY1H2teysOl8oj0CZvvUj1iDOgPPE3R3x41ZJ+AIhAOKZs0Cyo7JT8a3vHYVbHOSsnX8CqoIpboCaP++i0jeA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3072006},"_from":"file:dzhechkov-health-advisor-1.10.5.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test --test-concurrency=4","test:mutation":"dz mutation-gate --registry test/mutation-registry.json"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/bde347d672fea8f2384f9f15a92d8da6/dzhechkov-health-advisor-1.10.5.tgz","_integrity":"sha512-6LwXt9UmnNXg1K/damD449RsCYtA34h48EaCQKa5Mw8jgjld89ZIDH7TMPl3u5DIBX8nbbv2bUTi3VFNN6BWZA==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"@dzhechkov/harness-core":"^0.3.150 || ^0.4.0 || ^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.10.5_1788025652282_0.25229283760980237","host":"s3://npm-registry-packages-npm-production"}},"1.10.6":{"name":"@dzhechkov/health-advisor","version":"1.10.6","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.10.6","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"bin":{"ha":"bin/health-advisor.js","health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"574df8601380a9862f1d72fd6e84a9481dc47efd","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.10.6.tgz","fileCount":247,"integrity":"sha512-tbHs0oXDjqPLmHCvo4PFxF7oS4F7XFl0dJlRyJ92KZ8ZiDIebGAUGkHfMV9hwrTUbHz8GkAJ+VDD4Tz+VCJVBA==","signatures":[{"sig":"MEQCIEaFqakh7ak8OSNtYH5PogldEOgQepNudaaLOKBvdZsBAiAK2OjcSlBbEyN/OdA7XS2N97Q8FehpPWX8KHE3EGT/IQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDVcQwUWNWfO0cUKXFSnWT0qB/JG1dapiyZiGK9zay4SAiBV3ysR292zBHVlBKxy7OO8L6dG8AnfyOyukqLlJbJV2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3129979},"_from":"file:dzhechkov-health-advisor-1.10.6.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test --test-concurrency=4","test:mutation":"dz mutation-gate --registry test/mutation-registry.json"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/tmp/e13db6cc2cbd45ceb23479d7ce7e1a9a/dzhechkov-health-advisor-1.10.6.tgz","_integrity":"sha512-tbHs0oXDjqPLmHCvo4PFxF7oS4F7XFl0dJlRyJ92KZ8ZiDIebGAUGkHfMV9hwrTUbHz8GkAJ+VDD4Tz+VCJVBA==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"@dzhechkov/harness-core":"^0.3.150 || ^0.4.0 || ^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.10.6_1789292770146_0.6403419665506134","host":"s3://npm-registry-packages-npm-production"}},"1.10.7":{"name":"@dzhechkov/health-advisor","version":"1.10.7","keywords":["claude-code","health","medical","ai","skills","pubmed"],"author":{"name":"djd1m"},"license":"MIT","_id":"@dzhechkov/health-advisor@1.10.7","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/health-advisor#readme","bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"bin":{"ha":"bin/health-advisor.js","health-advisor":"bin/health-advisor.js"},"dist":{"shasum":"8862409a412e7e19b859675ae91cad1f9b8ab31e","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.10.7.tgz","fileCount":248,"integrity":"sha512-pfUercMDu0d9ra5IuSsSqvFxvGog4YxUT1EUgMh1T5u75t4Z3U3xPZfBWMd2PmJw9F2esprNTSQoD4IokAhc+w==","signatures":[{"sig":"MEYCIQDUAyBHOrRiUII/W45oGvf2oAR8pItdI13scFHsXu1TYAIhAM5xNsrNIVCnB5fN1tuQjFdXYwx9fxFSs9TR069SgI7J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD/2LiNUyej7wRWbBxggwk23zvIpYwZ95spAbu7nfDa5wIhANF9gWS7ADcKFOJzrBgmFasuUpE58RkUHCr5LbXOMh0a","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3222596},"_from":"file:/var/tmp/dz-publish-packed-aNyL4Y/dzhechkov-health-advisor-1.10.7.tgz","engines":{"node":">=18"},"scripts":{"test":"node --test --test-concurrency=4","test:mutation":"dz mutation-gate --registry test/mutation-registry.json"},"_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"_resolved":"/var/tmp/dz-publish-packed-aNyL4Y/dzhechkov-health-advisor-1.10.7.tgz","_integrity":"sha512-pfUercMDu0d9ra5IuSsSqvFxvGog4YxUT1EUgMh1T5u75t4Z3U3xPZfBWMd2PmJw9F2esprNTSQoD4IokAhc+w==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"@dzhechkov/harness-core":"^0.3.150 || ^0.4.0 || ^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/health-advisor_1.10.7_1789935546498_0.0006024870949437044","host":"s3://npm-registry-packages-npm-production"}},"1.10.8":{"_id":"@dzhechkov/health-advisor@1.10.8","bin":{"ha":"bin/health-advisor.js","health-advisor":"bin/health-advisor.js"},"bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"dist":{"shasum":"989917dc40a69bbcc5c539d7d580b45358db1c6a","tarball":"https://registry.npmjs.org/@dzhechkov/health-advisor/-/health-advisor-1.10.8.tgz","fileCount":245,"integrity":"sha512-H6zo09Y3+5kMtxkuYkKmDLnpfYZxbpgAoL+iUxLegUDw1vIWzUktsg8MXZg07195fF+FnJwhG5ZN7wOOIEQXBw==","signatures":[{"sig":"MEYCIQDrvHMhebtTsAfy40nYcH+9VmDnYPL4+qIsemloc4RS0QIhAMhCo1lSFfLCKfCTWYGBrKiyBpJ574Jf44I+AHI56kxz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCzN2MhjeeU7hFRyD3b4S2GHaArHQqg1eilkEpyIpho0gIgNsGCYUBY/b2clRxU5+poDftTGIy1domxS4PSYftih04="}],"unpackedSize":3074470},"name":"@dzhechkov/health-advisor","_from":"file:/var/tmp/dz-publish-packed-ocsBtX/dzhechkov-health-advisor-1.10.8.tgz","author":{"name":"djd1m"},"engines":{"node":">=18"},"license":"MIT","scripts":{"test":"node --test --test-concurrency=4","test:mutation":"dz mutation-gate --registry test/mutation-registry.json"},"version":"1.10.8","_npmUser":{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"},"homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/health-advisor#readme","keywords":["claude-code","health","medical","ai","skills","pubmed"],"_resolved":"/var/tmp/dz-publish-packed-ocsBtX/dzhechkov-health-advisor-1.10.8.tgz","_integrity":"sha512-H6zo09Y3+5kMtxkuYkKmDLnpfYZxbpgAoL+iUxLegUDw1vIWzUktsg8MXZg07195fF+FnJwhG5ZN7wOOIEQXBw==","repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"_npmVersion":"10.9.4","description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","directories":{},"maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"optionalDependencies":{"@dzhechkov/harness-core":"^0.3.150 || ^0.4.0 || ^0.5.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/health-advisor_1.10.8_1790421738308_0.22838297146112008"}}},"time":{"created":"2026-04-20T16:14:52.700Z","modified":"2026-09-26T11:22:18.571Z","1.0.0":"2026-04-20T16:14:53.065Z","1.1.0":"2026-04-20T17:39:51.731Z","1.1.1":"2026-04-20T17:42:36.011Z","1.1.2":"2026-04-22T07:20:03.877Z","1.1.3":"2026-04-22T07:24:02.305Z","1.1.4":"2026-04-22T07:29:24.890Z","1.1.5":"2026-04-22T07:53:52.319Z","1.1.6":"2026-04-22T08:05:22.436Z","1.1.7":"2026-04-22T10:25:47.998Z","1.1.8":"2026-06-11T20:46:40.211Z","1.1.9":"2026-06-16T19:27:57.852Z","1.1.11":"2026-07-06T15:04:17.946Z","1.1.13":"2026-07-06T20:13:28.120Z","1.2.0":"2026-07-23T13:37:29.981Z","1.2.1":"2026-07-23T14:24:57.989Z","1.2.2":"2026-07-28T20:58:37.394Z","1.3.0":"2026-08-03T12:30:57.906Z","1.4.0":"2026-08-03T14:01:48.295Z","1.4.1":"2026-08-03T14:16:34.774Z","1.4.2":"2026-08-03T14:29:20.502Z","1.5.0":"2026-08-09T18:11:05.927Z","1.5.1":"2026-08-10T15:06:38.748Z","1.6.1":"2026-08-12T15:02:39.156Z","1.10.1":"2026-08-25T04:40:56.967Z","1.10.2":"2026-08-28T19:13:38.656Z","1.10.3":"2026-08-28T19:20:01.718Z","1.10.4":"2026-08-29T11:41:53.242Z","1.10.5":"2026-08-29T17:47:32.434Z","1.10.6":"2026-09-13T09:46:10.257Z","1.10.7":"2026-09-20T20:19:06.606Z","1.10.8":"2026-09-26T11:22:18.415Z"},"bugs":{"url":"https://github.com/djd1m/dz-harness/issues"},"author":{"name":"djd1m"},"license":"MIT","homepage":"https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/health-advisor#readme","keywords":["claude-code","health","medical","ai","skills","pubmed"],"repository":{"url":"git+https://github.com/djd1m/dz-harness.git","type":"git","directory":"packages/@dzhechkov/health-advisor"},"description":"AI Health Advisor — 20 base components + 25 extended medical skills for Claude Code","maintainers":[{"name":"dzhechkov","email":"jechkov.dmitriy@gmail.com"}],"readme":"# @dzhechkov/health-advisor\n\n**AI-помощник для анализа здоровья — установи одной командой, используй с Claude Code**\n\n- Загрузите анализы, получите понятную интерпретацию с научными ссылками\n- Проверьте лекарства на совместимость и побочные эффекты\n- Получите персональный план тренировок, питания и мониторинга\n\n---\n\n## Быстрый старт (30 секунд)\n\n```bash\nnpx @dzhechkov/health-advisor init\n```\n\n`init` устанавливает скиллы в `.claude/skills/` как **обычные (bare) скиллы** — Claude Code\nподхватывает их автоматически при открытии проекта, **без маркетплейса и на любой версии CC**.\nСкиллы вызываются напрямую:\n\n- мастер-оркестратор — **`/health-advisor`**\n- медицинские скиллы — **`/health-advisor-drug-interaction-checker`**, **`/health-advisor-lab-results`**, …\n  (префикс `health-advisor-`)\n\nПрефикс исключает коллизии с уже установленными скиллами (`explore`, `deep-research` и т.п.); модули,\nпромпты и базовые зависимости оркестратора лежат внутри его директории как ресурсы и **не**\nрегистрируются как отдельные скиллы.\n\nГотово! Откройте Claude Code в папке проекта и скажите:\n\n> \"Проанализируй мои анализы крови\"\n\n---\n\n## Как устроена система\n\nHealth Advisor состоит из двух слоёв:\n\n### Базовые скиллы (ядро)\nЭто оркестратор и 9 модулей, которые Claude Code загружает автоматически:\n\n| Модуль | Фраза-триггер (внутренняя) | Что скажите Claude | Что получите |\n|--------|---------------------------|-------------------|--------------|\n| Intake | `ha-intake` | \"Загрузи мои анализы\" | Распознание PDF/фото, сохранение в проект |\n| Profile | `ha-profile` | \"Проанализируй мой профиль\" | Синдромы, риски, динамика показателей |\n| Medications | `ha-meds` | \"Исследуй лекарство X\" | Профиль лекарства, альтернативы, совместимость |\n| Doctors | `ha-doctors` | \"Найди эндокринолога в Москве\" | ТОП врачей с рейтингами и контактами |\n| Appointment | `ha-appointment` | \"Подготовь к приёму у врача X\" | Список анализов, вопросы, инструкция |\n| Exercise | `ha-exercise` | \"Составь программу тренировок\" | План с учётом диагнозов и оборудования |\n| Nutrition | `ha-nutrition` | \"Проанализируй продукт X\" | Влияние на ваши показатели с PubMed ссылками |\n| Special | `ha-special` | \"Безопасно ли мне голодание?\" | Исследование практики с доказательной базой |\n| Monitoring | `ha-monitoring` | \"Составь план мониторинга\" | График анализов и обследований |\n\n> **`ha-*` — это НЕ slash-команды.** Модули не регистрируются как отдельные скиллы: они лежат\n> ресурсами внутри директории мастер-скилла, а `ha-*` — внутренние имена, по которым оркестратор\n> маршрутизирует запрос. Из Claude Code вызываются только `/health-advisor` (мастер) и\n> `/health-advisor-<name>` (расширенные скиллы). Пользуйтесь колонкой «Что скажите Claude».\n\nБазовые скиллы работают самостоятельно. Extended скиллы усиливают их точность и глубину.\n\n### Аналитические скиллы (исследования)\nЭти скиллы обеспечивают глубокий анализ и верификацию источников:\n\n| Скилл | Когда используется | Что делает |\n|-------|-------------------|------------|\n| analyst-manual-full | \"Проведи полный анализ...\" | Трёхфазный pipeline: Explore → Research → Solve с контрольными точками |\n| explore | \"Разберись в задаче...\" | Уточняющие вопросы, формирование Task Brief |\n| goap-research-ed25519 | \"Исследуй с проверкой источников\" | Paranoid mode: каждый факт верифицирован, PubMed ссылки, Ed25519 подписи |\n| problem-solver-enhanced | \"Реши проблему...\" | Структурированное решение задач с планом действий |\n\n**Пример:** Вы говорите \"Проведи полный анализ безопасности эзетимиба\" →\n1. **explore** уточняет задачу: какие аспекты важны? (DDI, побочные, эффективность)\n2. **goap-research-ed25519** ищет в PubMed с верификацией каждого факта\n3. **problem-solver-enhanced** формирует рекомендации с планом действий\n4. Результат: отчёт с 30+ PubMed ссылками, GRADE-оценкой, дисклеймером\n\n### Расширенные скиллы (extended)\n25 специализированных скиллов (MEASURED 2026-08-09 в рабочем дереве, репродьюсер `node /path/to/@dzhechkov/health-advisor/bin/health-advisor.js list` → `20 Base + 25 Extended`; скиллы `clinical-targets`, `preanalytical-guard`, `case-state` и `critical-appraisal` входят начиная с версии 1.5.0). Когда они установлены, базовые модули автоматически делегируют им подзадачи:\n\n**Пример:** Вы говорите \"Проанализируй мои анализы\" →\n1. Модуль Profile вызывает **lab-results** для интерпретации 34 показателей\n2. Затем **health-trend-analyzer** строит динамику изменений\n3. Затем **patiently-ai** упрощает результат понятным языком\n\nЕсли extended скиллы не установлены — модули работают через базовый research pipeline.\n\n---\n\n## Пример: свободный запрос (без указания команды)\n\nНеобязательно знать команды. Просто опишите свою задачу:\n\n> \"У меня повышен холестерин и низкий витамин D, что делать?\"\n\nHealth Advisor автоматически определит нужные модули и запустит pipeline:\n\n**Шаг 1: Распознавание → health-advisor.md**\nТриггер: \"анализ здоровья\" → выбирает Module 01 (Profile) + Module 02 (Medications)\n\n**Шаг 2: Уточнение → explore**\n\"Какой именно холестерин повышен — ЛПНП, триглицериды? Есть ли свежие анализы?\"\n\n**Шаг 3: Исследование → goap-research-ed25519 (paranoid mode)**\nПоиск в PubMed: \"vitamin D deficiency treatment guidelines\", \"LDL reduction non-statin\"\nКаждый факт — с source URL, source-tier ceiling и явной confidence. Честная оговорка:\nкриптографическая Ed25519-верификация включается только при реальных ключах издателей\n(`issuer_keys_available=True`) — PubMed/Cochrane/WHO подписанный контент не поставляют,\nпоэтому paranoid-планирование high-stakes целей без такой интеграции честно возвращает\n`GOAL_UNREACHABLE`, а не фабрикует «верифицированный» план (детали — в SKILL.md навыка,\nраздел \"What strict and paranoid actually require\").\n\n**Шаг 4: Рекомендации → problem-solver-enhanced**\nФормирует план действий с risk-benefit анализом:\n- Увеличить D3 до 7500 МЕ + K2 + Mg → контроль 25(OH)D через 3 мес\n- Рассмотреть эзетимиб как альтернативу статинам ([ESC/EAS 2019](https://pubmed.ncbi.nlm.nih.gov/31504418/))\n\n**Шаг 5: Полный анализ → analyst-manual-full**\nПри запросе \"проведи полный анализ\" — трёхфазный pipeline с контрольными точками:\nexplore → goap-research-ed25519 → problem-solver-enhanced\n\n**Результат:** отчёт в MD + HTML с PubMed ссылками, GRADE-оценкой и медицинским дисклеймером.\n\n> **Совет:** Чем подробнее вы опишете ситуацию (возраст, диагнозы, текущие препараты), тем точнее будут рекомендации.\n\n---\n\n## Установка: набор навыков — правило, а не список\n\nНабор устанавливаемых навыков ЧИТАЕТСЯ с диска: каждый каталог с `SKILL.md`, за вычетом объявленного\nсписка тех, что не ставятся отдельно (их движок обращается за пределы своего каталога, а установщик\nкопирует навык В ОДИНОЧКУ — такая копия сломается при первом запуске). Объявление проверяется машиной\nв обе стороны на каждом прогоне тестов: каждый УСТАНАВЛИВАЕМЫЙ навык обязан разрешать все свои\nзависимости после одиночного копирования, а каждый УДЕРЖАННЫЙ — обязан действительно ломаться. Так\nсписок не может ни протухнуть, ни удержать здоровый навык.\n\n`third-brain` и `intake-archive` поставляются только как документация: их движкам нужны зависимости за пределами каталога навыка, которые не копируются при отдельной установке.\n\nПроверка установленных навыков — глагол `validate`, см. таблицу команд ниже — теперь понимает обе\nраскладки: и «health-advisor-‹навык›/», и голую «‹навык›/», которую пишет установщик dz. Раньше\nголая установка читалась как 25 провалов — включая навыки, которые были на месте.\n\n## Что умеет\n\n### Сценарий 1: \"У меня есть анализы крови\"\n\n1. Загрузите фото или PDF анализов в проект\n2. Скажите Claude: **\"Проанализируй мои анализы крови\"**\n3. Получите:\n   - Интерпретацию каждого показателя с референсными диапазонами\n   - Выявление синдромов и рисков\n   - Динамику изменений на графиках\n   - Понятное объяснение без медицинского жаргона\n\n**Используемые скиллы:** preanalytical-guard (первым — проверяет условия забора), lab-results,\nhealth-trend-analyzer, patiently-ai\n\n---\n\n### Сценарий 2: \"Мне назначили лекарство — безопасно ли?\"\n\n1. Скажите Claude: **\"Исследуй лекарство метформин\"**\n2. Получите:\n   - Полный профиль лекарства (механизм, показания, побочные эффекты)\n   - Проверку взаимодействий с другими препаратами\n   - Фармакогеномику — как ваши гены влияют на метаболизм лекарства\n   - Ссылки на PubMed и клинические рекомендации\n\n**Используемые скиллы:** tooluniverse-drug-research, drug-interaction-checker, clinpgx\n\n---\n\n### Сценарий 3: \"Хочу план здоровья\"\n\n1. Скажите Claude: **\"Составь план тренировок и питания\"**\n2. Получите:\n   - Программу упражнений с расчётом MET и нагрузки\n   - Анализ питания по RDA, нутриентам и калорийности\n   - Анализ сна с оценкой PSQI\n   - План мониторинга — что и когда пересдавать\n\n**Используемые скиллы:** fitness-analyzer, nutrition-analyzer, sleep-analyzer, weightloss-analyzer\n\n---\n\n### Сценарий 4: \"Готовлюсь к приёму у врача\"\n\n1. Скажите Claude: **\"Подготовь меня к приёму у эндокринолога\"**\n2. Получите:\n   - Список анализов, которые стоит сдать заранее\n   - Экстренную медицинскую карточку (Emergency Card)\n   - Вопросы, которые важно задать врачу\n   - Поиск подходящих клинических исследований\n\n**Используемые скиллы:** emergency-card, clinical-diagnostic-reasoning, clinicaltrials-database\n\n---\n\n### Сценарий 5: \"Папка документов к приёму — в HTML\" (render + check + форматы)\n\n1. Скажите Claude: **\"Собери вопросы к врачу по моим анализам и переведи документы в HTML\"**\n2. Агент строит вопросы по формату `formats/questions-for-doctor.md` (показать находку и\n   спросить, что она значит — не требовать назначение), прикладывает\n   `formats/evaluate-doctor-answer.md` (признание погрешности модели — ДО чек-листа)\n   и рендерит каждый `.md` в самодостаточный HTML:\n\n```bash\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js render research/diet_foods.md\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js check\n```\n\nОжидаемый вывод:\n\n```\nrendered → /home/you/health/research/diet_foods.html   (template: bundled)\nchecked 1, paired 1\n```\n\n**Когда использовать:** `render` — после каждого создания/обновления пациентского `.md`\n(шаблон всегда встроенный; чужой файл в каталогах-предках НИКОГДА не исполняется — ADR-004);\n`check` — перед отправкой папки врачу: exit 1 означает, что остались `.md` без HTML-версии.\n\n**Используемые форматы:** questions-for-doctor, evaluate-doctor-answer\n\n---\n\n### Сценарий 6: \"Нужен научный ответ с доказательствами\"\n\n1. Скажите Claude: **\"Исследуй влияние витамина D на иммунитет с PubMed ссылками\"**\n2. Получите:\n   - Deep research с PMID-ссылками на конкретные исследования\n   - Иерархию доказательств (мета-анализы, RCT, когорты)\n   - GRADE-оценку качества доказательств\n   - Поиск по 17 научным базам одновременно\n\n**Используемые скиллы:** deep-research, pubmed-search, multi-search-engine\n\n---\n\n### Сценарий 7: \"У меня архив документов из клиники\" (`intake-archive`, v1.7.0)\n\nКлиника отдала выгрузку одним zip. Руками его распаковывать **нельзя** — и не потому, что лень:\nраспаковка руками теряет всё, что делает медицинский корпус пригодным для работы. Что даёт команда\nи чего не даёт `unzip`:\n\n| Вопрос | `unzip` | `intake-archive` |\n|---|---|---|\n| Это точно тот архив, который прислали? | неизвестно | sha256 проверен **до разбора**, против дайджеста, полученного НЕЗАВИСИМО от архива |\n| Не записал ли элемент файл ВНЕ папки? | может | `../`, абсолютные пути, `C:\\`, обратный слэш, NUL и симлинки отвергаются **по имени** |\n| Не съест ли zip-бомба диск? | съест | бюджеты на число элементов, размер, суммарный размер, степень сжатия и глубину пути — и по ОБЪЯВЛЕННЫМ, и по ФАКТИЧЕСКИМ байтам |\n| Что если сломается на середине? | частичный корпус | не ляжет ничего: сначала staging, потом ОДИН атомарный `rename` |\n| Что вообще лежит в корпусе? | что попало на диск | `sources/manifest.json` — строка на файл: sha256, размер, тип, дата приёма, редактированный источник |\n| Что пытались принять? | нигде не записано | `sources/LOG.jsonl` — append-only, строка на попытку, **включая отказы** |\n| Принять тот же архив дважды? | дубликаты | идемпотентно: без скачивания, без переразбора, одна строка `already-ingested` |\n\n**Когда применять:** любой архив документов пациента — выгрузка из клиники, пачка сканов, zip от\nлаборатории. Не применять: одиночный файл (это `sources/` напрямую), не-zip форматы (tar/7z/rar —\nотвергаются по имени), зашифрованные архивы.\n\nФормы вызова (`<…>` — подставьте своё; `--expect-sha256` для URL берётся **от отправителя**, не из URL):\n\n```bash\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js intake-archive --workspace <dir> --url <https://storage.example/labs.zip> --expect-sha256 <64-hex>\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js intake-archive --workspace <dir> --file <~/Downloads/labs.zip>\n```\n\nНиже — те же вызовы **конкретно**, и они ПРОГОНЯЮТСЯ гейтом документации\n(`test/output-conventions-executable.test.js` запускает каждую строку и требует exit 0 — поэтому\nвывод ниже не набран руками). `labs.zip` лежит в текущем каталоге, воркспейс — он же:\n\n```bash\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js intake-archive --workspace . --file labs.zip --dry-run\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js intake-archive --workspace . --file labs.zip\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js intake-archive --verify --workspace .\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js intake-archive --workspace . --file labs.zip\n```\n\nРеальный вывод второй строки (архив из трёх файлов):\n\n```\ningested 3 file(s) from archive sha256:f7e9503cba6f34efe4f4ea43a340aa91223a86217c0b720a60f9f6b21ca18e93\n  raw zone:  /home/u/health/ivan/sources/raw/sha256-f7e9503cba6f34efe4f4ea43a340aa91223a86217c0b720a60f9f6b21ca18e93\n  catalog:   +3 new row(s), 0 already present\n    labs/2026-08-01-report.pdf  52 bytes  application/pdf  sha256 286abc236f8b5212…\n    scans/thyroid.jpg  16 bytes  image/jpeg  sha256 36e51f40a0b3fd6e…\n    structured/values.json  43 bytes  application/json  sha256 85875671afdb3fcc…\n```\n\nПроверить корпус позже — перечитывает каталог с диска и **пересчитывает** sha256 каждого файла\n(не сверяет с памятью предыдущего запуска, иначе это была бы не проверка, а самоотчёт):\n\n```bash\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js intake-archive --verify --workspace <dir>\n```\n\n```\nintake-archive --verify /home/u/health/ivan\n  catalog rows: 3  re-verified: 3  files in raw zone: 3\n  OK — every catalogued file re-hashes to its recorded sha256, and every file in the raw zone is catalogued.\n```\n\nПовторный приём того же архива — идемпотентен (ни байта по сети, ни байта на диск):\n\n```\nalready ingested: sha256-f7e9503cba6f34efe4f4ea43a340aa91223a86217c0b720a60f9f6b21ca18e93 — nothing was downloaded, extracted or written.\n  3 catalogued file(s) already present at /home/u/health/ivan/sources/raw/sha256-f7e9…8e93\n```\n\nОтказ — громкий и **именованный**, а воркспейс после него байт-в-байт тот же (плюс одна строка в\n`LOG.jsonl`, потому что отказ без следа нельзя разобрать):\n\n```\n$ node .../bin/health-advisor.js intake-archive --workspace <dir> --file <hostile.zip>\nPathEscapeError: entry name escapes its destination: \"../escape.pdf\"\n$ echo $?\n1\n```\n\nКоды выхода: `0` принято / уже принято / `--verify` чисто · `1` **именованный** отказ или дрейф ·\n`2` ошибка использования. `--json` отдаёт тот же код и несёт различающую личность отказа в\n`error.code` — ветвиться в скрипте нужно по нему, а не по номеру.\n\nСтрока каталога (`sources/manifest.json`) — реальная, из того же запуска:\n\n```json\n{\n  \"entry_id\": \"0f44938c8e03bfbf0270df68e8d10362\",\n  \"path\": \"labs/2026-08-01-report.pdf\",\n  \"stored_at\": \"sources/raw/sha256-f7e9503c…8e93/labs/2026-08-01-report.pdf\",\n  \"sha256\": \"286abc236f8b52124b441cf791ee792f6c6b515f38a14706d0abffc9183c7db6\",\n  \"bytes\": 52,\n  \"media_type\": \"application/pdf\",\n  \"ingested_at\": \"2026-08-17T15:52:36.857Z\",\n  \"archive_id\": \"sha256:f7e9503cba6f34efe4f4ea43a340aa91223a86217c0b720a60f9f6b21ca18e93\",\n  \"source\": { \"kind\": \"local-file\", \"url_redacted\": null, \"url_sha256\": null,\n              \"local_path\": \"labs-2026-08-17.zip\", \"digest_source\": \"local-stream\" }\n}\n```\n\n`digest_source` читается буквально: `caller` — дайджест дал вызывающий (для URL это единственный\nвариант, флаг обязателен), `local-stream` — посчитан с локального файла. Архив, посчитавший себя\nсам, никогда не выглядит как заверенный кем-то.\n\n#### Канонический layout первичных данных (сведение двух деревьев, v1.7.0)\n\n```\n<workspace>/\n  sources/\n    raw/sha256-<64 hex>/     НЕИЗМЕНЯЕМЫЕ принятые архивы — пишет только intake-archive\n    manifest.json            ИНДЕКС: строка на каждый принятый файл\n    LOG.jsonl                append-only ЖУРНАЛ: строка на каждую попытку, включая отказы\n    *.md + *.html            deliverables (гейт парности действует ВНЕ raw/)\n  research/ analysis/ doctors/\n```\n\nДо 1.7.0 layout был описан в четырёх местах, а `health-trend-analyzer` документировал ВТОРОЕ,\nконкурирующее дерево (`data/profile.json`, `data/medical_records/**`). Теперь определение одно —\n`lib/workspace-layout.js`, — и его импортируют все читатели.\n\n- `sources/raw/**` **освобождён** от гейта парности `.md` ↔ `.html`: принятый первичный документ —\n  не черновик, ждущий рендера. Всё остальное под `sources/` по-прежнему валит `ha check <dir>` с exit 1.\n- **Принудительной миграции нет.** `data/**` ничем в 1.7.0 не читается, не переносится и не\n  перезаписывается. Воркспейс без `data/` ведёт себя как раньше. Воркспейс С `data/` получает\n  громкое `[LEGACY-LAYOUT]` — от `intake-archive` и его `--verify`, и ни от кого больше: `ha check <dir>`\n  остаётся без warn-режима по своей доктрине (warn внутри гейта — это как гейт тихо умирает).\n  Соответствие путей и то, у каких девяти источников канонического дома **пока нет**, — в\n  `skills/health-trend-analyzer/data-sources.md`.\n- Двойного молчаливого хранения нет: единственная цель записи — `sources/`.\n\n#### Приватность — это граница, а не намерение (NFR-1)\n\n- Принятые документы **никогда** не попадают в `~/.dz/brain`, `dz teach`, `dz recall` или любой\n  общий стор паттернов (проверено grep-гейтом по всей поверхности, а не обещано).\n- Сеть — только один переданный URL. Только `https:`; `user:pass@` отвергается; редиректы\n  перепроверяются на КАЖДОМ шаге и ограничены по числу; литеральные приватные / loopback /\n  link-local адреса отвергаются лексически. **Честная граница:** SSRF через DNS-резолв НЕ закрыт —\n  имя, которое РЕЗОЛВИТСЯ в `169.254.169.254`, лексическую проверку проходит.\n- Подпись presigned-URL не попадает ни в один долговечный файл: один редактор снимает userinfo,\n  query и fragment до любой записи, а `url_sha256` сохраняет сопоставимость источника без хранения\n  подписи.\n- Воркспейс внутри git-репозитория без `.gitignore` на `sources/` даёт **громкое неподавляемое**\n  предупреждение (предупреждение, не блокировка).\n- `--workspace` внутри дерева пакета отвергается сразу: пакет — это то, что публикуется.\n\n**Чего команда сознательно НЕ делает:** OCR, классификацию содержимого, транскрипцию, не-zip\nформаты, zip64, зашифрованные архивы. Она переносит байты туда, где им можно доверять и где их\nможно найти; понимать их — работа других скиллов, по `sources/manifest.json`.\n\n**Используемые скиллы:** intake-archive (+ `case-state` для блокировки хранилища)\n\n---\n\n### Сценарий 8: \"Вернуться к источнику\" (`source_anchor`, v1.8.0)\n\nВ заключении стоит число. Через полгода вопрос: **из какого документа оно взято — и тот ли это ещё\nдокумент?** До 1.8.0 ответа не было: `sources/manifest.json` знал, что за файлы приняты, а `labs[]`\nзнал, какие значения записаны, и ничто не связывало одно с другим.\n\n`source_anchor` — это **ссылка-якорь**: `{entry_id, path, sha256}` — адрес одной строки каталога,\nкоторая адресует один неизменяемый файл в raw-зоне. Поле **необязательное и аддитивное**: документ\nбез него полностью валиден и ведёт себя как раньше.\n\n**Якорь — это АДРЕС, а не копия.** В нём никогда нет содержимого первички, её отрывка, источника\nзагрузки (`url_redacted` / `url_sha256` / `local_path`) и абсолютного пути. Ни якорь, ни содержимое\nне попадают в общий brain (`dz teach` / `dz recall` / `.health-brain`) — граница проверена гейтом.\n\nШаг 1 — принять архив (та же команда, что в Сценарии 7):\n\n```bash\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js intake-archive --workspace <dir> --file <labs.zip>\n```\n\nШаг 2 — **отчеканить якорь** из реальной строки каталога (CLI-глагола нет — это осознанное решение\nслайса; вызов идёт напрямую в модуль, как в Сценарии 7 параметризуются пути):\n\n```bash\nnode -e \"const s=require('/path/to/@dzhechkov/health-advisor/lib/source-anchor-store.js'); console.log(JSON.stringify(s.stampFromManifest({workspace:'<dir>', path:'labs/2026-08-01-report.pdf'}), null, 2))\"\n```\n\n```json\n{\n  \"schema\": \"ha-source-anchor-1\",\n  \"entry_id\": \"0f44938c8e03bfbf0270df68e8d10362\",\n  \"path\": \"labs/2026-08-01-report.pdf\",\n  \"sha256\": \"286abc236f8b52124b441cf791ee792f6c6b515f38a14706d0abffc9183c7db6\",\n  \"archive_id\": \"sha256:f7e9503cba6f34efe4f4ea43a340aa91223a86217c0b720a60f9f6b21ca18e93\",\n  \"ingested_at\": \"2026-08-17T15:52:36.857Z\"\n}\n```\n\nДокумента нет в каталоге → возвращается `null` (это обычный ответ, а не отказ). Якорь **никогда** не\nсинтезируется из строк вызывающего: все три обязательных поля приходят из строки, прочитанной с диска.\n\nШаг 3 — **приписать якорь строке `labs[]`** (через `withCaseLock` + atomic rename, как любая запись\ncase-state; повторная запись того же якоря — идемпотентный no-op, другого якоря — отказ\n`AnchorConflictError`):\n\n```bash\nnode -e \"const s=require('/path/to/@dzhechkov/health-advisor/lib/source-anchor-store.js'); const w=require('/path/to/@dzhechkov/health-advisor/skills/case-state/engine/anchor-write.js'); const a=s.stampFromManifest({workspace:'<dir>', path:'labs/2026-08-01-report.pdf'}); w.stampLabRow({profilePath:'<dir>/profile.json', analyteId:'apoB', observedOn:'2026-08-01', sourceAnchor:a}).then(r=>console.log('stamped: ' + r.stamped))\"\n```\n\nШаг 4 — сколько текущих значений заякорено, видно на **существующем** глаголе `profile validate`\n(новых глаголов слайс не добавляет — их по-прежнему пять):\n\n```bash\nnode /path/to/@dzhechkov/health-advisor/skills/case-state/engine/cli.js profile validate <dir>/profile.json 2026-08-15\n```\n\n```\nprofile OK: /home/u/health/ivan/profile.json\n  2 dated observations, 1 preanalytical context entries\n  open_questions -> /home/u/health/ivan/open_questions.json (0 recorded)\nquestions due  as-of 2026-08-15: none\n  anchored: 1/2 analytes carry a source_anchor\n```\n\nШаг 5 — **вернуться к источнику**: sha256 пересчитывается ДО чтения, и байты выдаются только после\nсовпадения:\n\n```bash\nnode -e \"const s=require('/path/to/@dzhechkov/health-advisor/lib/source-anchor-store.js'); const a=s.stampFromManifest({workspace:'<dir>', path:'labs/2026-08-01-report.pdf'}); const r=s.readAnchoredBytes(a, {workspace:'<dir>', caseDir:'<dir>'}); console.log(JSON.stringify({verified:r.verified, bytes:r.bytes, sha256:r.sha256}))\"\n```\n\n```json\n{\"verified\":true,\"bytes\":52,\"sha256\":\"286abc236f8b52124b441cf791ee792f6c6b515f38a14706d0abffc9183c7db6\"}\n```\n\nШаг 6 — **негатив: первичку подменили** (тем же числом байт, чтобы проверка размера её не увидела).\nОтказ **именованный**, ничего не прочитано, код возврата ненулевой:\n\n```bash\nnode -e \"const s=require('/path/to/@dzhechkov/health-advisor/lib/source-anchor-store.js'); const a=s.stampFromManifest({workspace:'<dir>', path:'labs/2026-08-01-report.pdf'}); try { s.readAnchoredBytes(a, {workspace:'<dir>', caseDir:'<dir>'}); } catch (e) { console.error(e.name + ': ' + e.reason); process.exitCode = 1; }\"\n```\n\n```\nAnchorDriftError: anchor_sha256_drift\n```\n\nФлага, который прочитал бы байты после расхождения, нет. Устаревание — суждение, которое человек\nможет взять на себя (`makeCitedClaim` даёт `acknowledgeStale`); расхождение sha256 означает, что\n**это не те байты, о которых был написан анализ**, и брать на себя тут нечего.\n\n`caseDir` — **обязательный** параметр резолвера: `entry_id` — переносимая строка, а корпус — нет.\nЯкорь из чужого случая отвергается (`AnchorCrossCaseError`), а не молча резолвится в чужие байты.\n\n**Честная граница (обе фразы, дословно):** чистый `resolveAnchor` доказывает, что *эти байты на диске\nвсё ещё совпадают со строкой, которую называет якорь*; `intake-archive --verify` доказывает, что\n*весь корпус всё ещё совпадает со своим индексом*. Это разные проверки, и они дополняют друг друга.\n\nВсе шесть команд выше **прогоняются тестом** `test/anchor-readme-scenario-executable.test.js` — он\nподставляет реальный воркспейс вместо `<dir>` и требует ровно этот вывод, включая отказ на шаге 6.\n\n**Используемые скиллы:** case-state, intake-archive\n\n---\n\n### Сценарий 9: \"Третий мозг — аналитика становится памятью\" (`third-brain`, v1.9.0)\n\nСценарий 7 принёс в кейс **первичку**. Сценарий 8 научил возвращаться к ней от числа в заключении.\nОстался третий слой, и до 1.9.0 его не было вовсе: **сами аналитические документы** — разбор\nконсилиума, трендовый анализ, заключение — нигде не индексировались. «Переиспользовать» означало\n«вспомнить путь к файлу и перечитать его».\n\nглагол `third-brain` кладёт **ПОЛНЫЙ** аналитический документ в `<workspace>/.health-brain` —\n**сегрегированное** хранилище, куда `learning_bridge.py` уже носит дистиллированные уроки, — так что\nчерез полгода документ находится по фразе **из его собственного текста**.\n\n**Приватность — прямым текстом.** После ингеста в `<workspace>/.health-brain` лежит ВТОРАЯ копия\nтекста документа (разбитая на пассажи). Она локальная: сети в движке нет вообще (весь каталог\n`skills/third-brain/` проходит тот же egress-скан, что и `lib/`, и ровно один файл в нём имеет право\nзапустить процесс). Ничего никуда не отправляется. Удалить — `rm -rf <workspace>/.health-brain`;\nпосле этого не остаётся ничего. В **общий** `dz`-store не попадает ни байта — ни текст, ни `doc_id`,\nни sha256, ни путь; это проверяется тестом, который **обходит** общий store целиком и ищет там\nканарейку из тела документа.\n\nШаг 1 — принять архив и отчеканить якорь (Сценарии 7 и 8, без изменений).\n\nШаг 2 — **зафайлить анализ**, сославшись на первичку, из которой он написан:\n\n```bash\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js third-brain ingest analysis/synthesis.md --case ivanov-2026 --kind synthesis --date 2026-08-18 --anchor <entry_id> --workspace <dir> --json\n```\n\n```json\n{\n  \"ok\": true,\n  \"mode\": \"ingest\",\n  \"case\": \"ivanov-2026\",\n  \"kind\": \"synthesis\",\n  \"date\": \"2026-08-18\",\n  \"written\": 2,\n  \"skipped\": 0\n}\n```\n\nКаждый пассаж записывается одной записью, первая строка которой — разбираемый заголовок\n`ha-doc-1 doc_id=… case=… kind=… date=… chunk=n/m doc_sha256=… doc_path=… anchors=…`, а дальше идёт\nтекст пассажа дословно. Метаданные едут **в тексте записи**, а не в поле `type`: у стора закрытое\nобъединение из трёх значений, и `kind: 'consultation'` там молча стал бы `lesson-learned`.\n\nШаг 3 — **найти по фразе из тела**, а не по заголовку:\n\n```bash\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js third-brain search \"миопатия\" --workspace <dir>\n```\n\n```\n[synthesis 2026-08-18 chunk 2/2] analysis/synthesis.md — Кардиологическая линия (`cardiology:d9b4ac56f4ab`) и фармакологическая линия (`clinical-pharmacology:91496d6cfc3f`) не противоречат\n```\n\nШаг 4 — **обратные ссылки**: от найденного документа обратно к первичным байтам, с пересчётом sha256:\n\n```bash\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js third-brain backlinks <doc_id> --workspace <dir> --json\n```\n\n```json\n{\"ok\":true,\"incomplete\":false,\"anchors\":[{\"verified\":true}]}\n```\n\n`incomplete: true` появляется, когда записей в сторе меньше, чем `chunk=n/m` объявляют сами\nзаголовки, — это **поиск по ключу**, а не ранжированный recall, поэтому «нашлось 3 из 5» не может\nбыть выдано за «все».\n\nШаг 5 — **повторный ингест того же документа ТОЙ ЖЕ командой** — успех, который ничего не пишет\n(идемпотентность):\n\n```bash\nnode /path/to/@dzhechkov/health-advisor/bin/health-advisor.js third-brain ingest analysis/synthesis.md --case ivanov-2026 --kind synthesis --date 2026-08-18 --anchor <entry_id> --workspace <dir> --json\n```\n\n```json\n{\"ok\":true,\"written\":0}\n```\n\n**«Той же командой» — не формальность.** Дедуп у стора идёт по ТОЧНОМУ тексту записи, а заголовок\n`ha-doc-1` — часть этого текста, поэтому `--case`, `--kind`, `--date` и список `--anchor` входят в\nличность записи. Повторный ингест с ДРУГИМ набором цитат — это не дубль, а другой факт филинга\n(«тот же текст, но теперь известно, из какой первички он написан»), и он честно пишется новыми\nзаписями. `doc_id` при этом не меняется: он считается только от байт документа и его пути\n(`sha256(doc_sha256 + NUL + doc_path)`), поэтому `backlinks <doc_id>` собирает ОБЪЕДИНЕНИЕ цитат по\nвсем филингам этого документа и печатает `NOTE: N ingests share this doc_id`, если метаданные\nрасходятся, — вместо того чтобы молча выбрать один вариант.\n\n**Отказы — закрытый набор из семи**, и каждый называет, что именно отказано:\n`third_brain_not_segregated` · `third_brain_shared_store_targeted` ·\n`third_brain_document_outside_workspace` · `third_brain_anchor_unresolvable` ·\n`third_brain_write_unverified` · `third_brain_dz_unavailable` · `third_brain_payload_escape`.\n\nОтсутствующий `dz` здесь — **жёсткий отказ**, сознательно расходясь с NOTE-поведением обучающей\nпетли: тот, кто запустил `third-brain ingest`, считает, что документ зафайлен. Один плохой `--anchor`\nотменяет **весь** ингест: документ с меньшим числом цитат, чем указал оператор, — это ровно та\nполомка, которой у провенанс-инструмента быть не должно.\n\n**Параллельные ингесты сериализуются** (fix round 1): на время записи берётся лок воркспейса\n(`.health-brain/.ingest-lock/`), поэтому два одновременных `third-brain ingest` в один воркспейс\nвыполняются по очереди, а не портят друг другу верификацию записи. Ожидание лока ограничено\nтаймаутом (`DZ_STORE_LOCK_TIMEOUT_MS`, по умолчанию 10 с) — не дождавшийся отвечает именованным\nотказом `third_brain_write_unverified` с текстом про лок и ничего не пишет.\n\n**Операторская заметка про `HEALTH_BRAIN_COUNT_STUB`** (тестовый шов, санкционирован ADR-001 D-3):\nэта переменная окружения подменяет ТОЛЬКО показание счётчика в верификации записи — `none` заставит\nкаждый ингест отказывать как «непроверенный», целое число подделает счёт. Перенаправить запись она\nне может (радиус — только верификация), но в рабочем окружении она должна быть **не установлена**:\nесли ингесты внезапно стабильно отказывают `third_brain_write_unverified`, проверьте\n`env | grep HEALTH_BRAIN_COUNT_STUB`.\n\n**Используемые скиллы:** third-brain, intake-archive (`source_anchor`)\n\n---\n\n## Patient values in Solve: предпочтения без инверсии безопасности\n\nHealth Advisor принимает значения пациента в версионированном блоке `patient-values-v1`:\n\n```json\n{\n  \"schema\": \"patient-values-v1\",\n  \"as_of\": \"2026-08-30\",\n  \"preferences\": [\n    {\"id\":\"pv-no-statins\",\"kind\":\"avoid\",\"dimension\":\"drug_class\",\"value\":\"statin\",\"priority\":1,\"statement\":\"не хочу статины\",\"reason\":null},\n    {\"id\":\"pv-non-pharm\",\"kind\":\"prefer\",\"dimension\":\"treatment_approach\",\"value\":\"non_pharmacological\",\"priority\":2,\"statement\":\"предпочитаю немедикаментозное\",\"reason\":null},\n    {\"id\":\"pv-cost\",\"kind\":\"constraint\",\"dimension\":\"cost\",\"value\":\"critical\",\"priority\":3,\"statement\":\"стоимость критична\",\"reason\":null}\n  ],\n  \"life_context\": {\"pregnancy_intent\":\"planning\"}\n}\n```\n\n`patient_values.as_of` — дата подтверждения пациентом. Когда `solve-envelope-v1.as_of` задан, значения\nстарше 30 дней, с отсутствующей/невалидной или будущей датой требуют повторного подтверждения и не\nвлияют на ранжирование. Если именно Solve-оболочка не содержит `as_of`, датированные значения остаются\nприменёнными и видимыми, а состояние документа и сами значения помечаются `freshness_unknown` с явным предупреждением\n`solve_envelope.as_of`; они никогда не объявляются текущими. Намерение беременности — отдельный\nклинический контекст, а не «балл предпочтения». Отсутствующий блок сохраняет состояние\n`absent`; подтверждённый блок без предпочтений — `empty`; оба оставляют исходный порядок неизменным.\nВ частично невалидном блоке валидные соседние поля продолжают работать, а каждое исключённое поле\nпечатается как `PATIENT VALUES INPUT WARNING` и имеет нулевой эффект.\n\n### Safety before values\n\nСначала клиническая линия фиксирует экстренные действия, красные флаги, противопоказания,\nпоказания и полное множество клинически приемлемых вариантов. Только затем значения пациента могут\nстабильно переставить **все и только** приемлемые варианты. Они не являются фильтром: не могут\nскрыть красный флаг, сделать противопоказанный вариант приемлемым, убрать показанный класс или\nотменить клиническую цену отказа. При экстренном действии ранжировщик предпочтений не вызывается.\n\nНапример, «не хочу статины» не удаляет показанный вариант. Любое фактическое понижение показанного\nварианта из-за `avoid`, `prefer` или `constraint` печатает причинившее его предпочтение, само показание,\nссылку на доказательство и последствие отказа; альтернативы могут подняться в списке, но обе истины\nостаются видимы. Экстренный merge дополнительно требует точного исходного порядка даже при пустом\n`option_effects`, а `clinical_integrity` считается по исходной клинической линии до merge и сверяется\nс результатом до глубокой заморозки.\n\n### How Patient Values Changed the Ranking\n\nРезультат выводит каждое учтённое значение и точные позиции до/после, например:\n\n```text\n- Statin therapy: position 1 → 2; pv-non-pharm: neutral (...).\n- Structured lifestyle programme: position 2 → 1; pv-non-pharm: supports (...).\n```\n\nЕсли перестановки не было, печатается `No option changed rank.` — отдельного флага «успешно\nперсонализировано» нет. Невалидные и непереоценённые значения также видны в том же исходном\nMarkdown, поэтому объяснение нельзя получить только из README или необязательного HTML.\n\nВарианты `requires_clinician` и `contraindicated`, содержащие показание, его обоснование или клиническое\nпоследствие отказа, всегда выводятся в собственных разделах и не зависят от наличия дублирующей строки\nв массивах `indications`/`contraindications`. Заголовки локализованы: `locale: \"ru\"` печатает все\nзаголовки раскрытия ценностей по-русски, `locale: \"en\"` — по-английски; отсутствующая или неизвестная\nлокаль использует английские заголовки по умолчанию.\n\nКанонический zero-dependency merge находится в `base/solve/solve-advice.js` в дереве пакета и в\n`solve/solve-advice.js` внутри свежей base-установки мастер-скилла:\n\n```bash\nnode solve/solve-advice.js < solve-envelope.json > solve-advice.md\n```\n\nНа вход подаётся `solve-envelope-v1`; при структурной ошибке команда отказывает без частичного\nMarkdown. Каждый успешный путь безусловно печатает границу: patient values **do not replace a doctor**\nи не отменяют показания, противопоказания, красные флаги или совет обратиться за срочной помощью.\nЭто информационная поддержка разговора с квалифицированным врачом, а не медицинское назначение.\n\n---\n\n## Все команды CLI\n\n| Команда | Что делает | Пример |\n|---------|-----------|--------|\n| `init` | Установить все скиллы | `npx @dzhechkov/health-advisor init` |\n| `init --base` | Только ядро (оркестратор + модули) | `npx @dzhechkov/health-advisor init --base` |\n| `init --extended` | Только 25 мед. скиллов | `npx @dzhechkov/health-advisor init --extended` |\n| `list` | Показать все скиллы (базовые + расширенные) | `npx @dzhechkov/health-advisor list` |\n| `list --base` | Только базовые (20 компонентов ядра) | `npx @dzhechkov/health-advisor list --base` |\n| `list --extended` | Только 25 мед. скиллов с Trust Tier | `npx @dzhechkov/health-advisor list --extended` |\n| `install <name>` | Установить один скилл как `.claude/skills/health-advisor-<name>/` | `npx @dzhechkov/health-advisor install clinpgx` |\n| `validate` | Проверить установленные скиллы (BTO Layer 0) | `npx @dzhechkov/health-advisor validate` |\n| `info <name>` | Детали скилла | `npx @dzhechkov/health-advisor info emergency-card` |\n| `render <file.md>` | Markdown → самодостаточный HTML для пациента (встроенный шаблон, работает из любого cwd — ADR-004) | `node /path/to/@dzhechkov/health-advisor/bin/health-advisor.js render research/diet_foods.md` |\n| `check [dir]` | Гейт парности .md ↔ .html: **exit 1**, если есть `.md` без парного `.html` (fail-closed, не warning) | `node /path/to/@dzhechkov/health-advisor/bin/health-advisor.js check` |\n| `consult-gate <synthesis.md> --lanes <dir>` | Гейт сохранности оговорок (консилиум, v1.6.1): shadow по умолчанию — только отчёт, exit 0 по построению | `npx @dzhechkov/health-advisor consult-gate synthesis.md --lanes lanes/ --json` |\n| `triage --profile <p.json>` | Детерминированный компаратор экстренных порогов (12 канонических строк; действие — из строки таблицы, не из «суждения») | `npx @dzhechkov/health-advisor triage --profile profile.json --json` |\n| `intake-archive --workspace <dir> (--url <https://…> --expect-sha256 <hex> \\| --file <path>)` | Детерминированный приём архива документов (v1.7.0): дайджест ПЕРЕД разбором → закалённая распаковка (path traversal / zip-бомба / симлинки — отказ по имени) → АТОМАРНАЯ выкладка в `sources/raw/sha256-<hex>/` + `sources/manifest.json` + append-only `sources/LOG.jsonl`. Повторный приём идемпотентен | `node /path/to/@dzhechkov/health-advisor/bin/health-advisor.js intake-archive --workspace <dir> --file <labs.zip>` |\n| `intake-archive --verify --workspace <dir>` | Перечитывает каталог с диска и ПЕРЕСЧИТЫВАЕТ sha256 каждого файла в raw-зоне; **exit 1** при расхождении в любую сторону (пропавший файл / файл без строки каталога). Только чтение | `node /path/to/@dzhechkov/health-advisor/bin/health-advisor.js intake-archive --verify --workspace <dir>` |\n| `third-brain ingest <doc.md> --case <slug> --kind <kind> --date <YYYY-MM-DD> [--anchor <id>]…` | Третий мозг (v1.9.0): кладёт ПОЛНЫЙ аналитический документ в СЕГРЕГИРОВАННЫЙ `<workspace>/.health-brain` через существующий четырёхпроверочный гейт `learning_bridge.py`. Каждый `--anchor` чеканится и РЕЗОЛВИТСЯ до записи; один плохой якорь отменяет весь ингест. Повторный ингест — успех с `written: 0` | `node /path/to/@dzhechkov/health-advisor/bin/health-advisor.js third-brain ingest analysis/synthesis.md --case ivanov-2026 --kind synthesis --date 2026-08-18 --workspace <dir>` |\n| `third-brain search \"<query>\" [--limit N]` | Ищет по СОБСТВЕННОМУ тексту зафайленных документов — только в `.health-brain`, никогда в общем store | `node /path/to/@dzhechkov/health-advisor/bin/health-advisor.js third-brain search \"миопатия\" --workspace <dir>` |\n| `third-brain backlinks <doc_id>` | От документа обратно к первичным байтам: каждый якорь резолвится с пересчётом sha256; `incomplete: true`, если записей меньше, чем объявляют заголовки | `node /path/to/@dzhechkov/health-advisor/bin/health-advisor.js third-brain backlinks 3d46562e0c90a1b0 --workspace <dir>` |\n\n`validate` — проверяет УСТАНОВЛЕННЫЕ скиллы. `check` — проверяет ВЫХОДНЫЕ файлы воркспейса (.md ↔ .html).\n\n> Короткая форма через `npx` доступна: для глаголов `render`/`check` — начиная с версии `1.5.0`,\n> для `consult-gate`/`triage` — начиная с `1.6.1`; на более\n> ранних релизах их нет — используйте примеры из строк `render` и `check` таблицы выше (явный путь к\n> бинарю в дереве пакета) или скрипт `assets/html-template.js` изнутри установленного скилла. Алиас\n> `ha` объявлен в `package.json.bin` и появляется как команда после установки пакета / `npm link`.\n\n**Опции** (работают со всеми командами выше):\n\n| Опция | Что делает | Пример |\n|-------|-----------|--------|\n| `--dir <path>` | Своя директория установки/проверки вместо `./.claude/skills/health-advisor` | `npx @dzhechkov/health-advisor init --dir /srv/proj/.claude/skills/health-advisor` |\n| `--base` | Только ядро (оркестратор + модули + промпты) | `init --base`, `list --base` |\n| `--extended` | Только 25 расширенных мед. скиллов | `init --extended`, `list --extended` |\n| `--out <path>` | render: путь выходного HTML (по умолчанию — соседний `<stem>.html`) | `render --out out.html research/diet_foods.md` |\n| `--template <path>` | render: явное переопределение шаблона; путь печатается ДО использования (ADR-004; единственный способ переопределить — env-переменной и авто-поиска НЕТ) | `render --template ./my-template.js research/diet_foods.md` |\n| `--stdout` | render: HTML в stdout вместо файла | `render --stdout research/diet_foods.md` |\n| `--all` | check: сканировать всё дерево, а не только sources/research/analysis/doctors | `check --all` |\n| `--json` | check / consult-gate / triage / intake-archive / third-brain: JSON-вывод с ТЕМИ ЖЕ кодами выхода | `check --json`, `third-brain search \"q\" --json` |\n| `--url <https://…>` | intake-archive: архив в объектном хранилище. Только `https:`; `user:pass@` отвергается | `intake-archive --workspace <dir> --url <https://…> --expect-sha256 <hex>` |\n| `--file <path>` | intake-archive: архив уже на этой машине — сокет не открывается вообще | `intake-archive --workspace <dir> --file <~/Downloads/labs.zip>` |\n| `--expect-sha256 <hex>` | intake-archive: sha256 архива, полученный НЕЗАВИСИМО от него. **ОБЯЗАТЕЛЕН с `--url`** — дайджест, посчитанный с тех же байт, за которые он ручается, доказывает только что байты это байты | `--expect-sha256 f7e9503c…8e93` |\n| `--workspace <dir>` | intake-archive / third-brain: воркспейс пациента. Для intake — внутри дерева пакета отказ; для third-brain — корень, чей `.health-brain` принимает документы | `--workspace <dir>` |\n| `--allow-host <host>` | intake-archive: хост, на который разрешён кросс-хостовый редирект (можно повторять) | `--allow-host mirror.example` |\n| `--limits <file>` | intake-archive: JSON, переопределяющий реестр бюджетов — ЕДИНСТВЕННАЯ ручка лимитов. Неизвестный ключ / не-конечное / отрицательное значение / значение выше потолка ⇒ **exit 2**, никогда молчаливый зажим | `--limits ./tighter-limits.json` |\n| `--dry-run` | intake-archive: проверить вход и напечатать план. Ноль сетевых вызовов, ноль записей (даже лок не берётся). third-brain ingest: разобрать документ и напечатать план — ноль записей, ноль запусков процессов, ни одной строки в LOG | `intake-archive --workspace <dir> --file <labs.zip> --dry-run` |\n| `--verify` | intake-archive: пересчитать raw-зону против каталога (только чтение) | `intake-archive --verify --workspace <dir>` |\n| `--case <slug>` | third-brain ingest: кейс, к которому относится документ (пишется в заголовок КАЖДОЙ записи) | `--case ivanov-2026` |\n| `--kind <kind>` | third-brain ingest: `consultation` \\| `trend` \\| `synthesis` \\| `conclusion` | `--kind synthesis` |\n| `--date <YYYY-MM-DD>` | third-brain ingest: дата САМОГО документа, не дата ингеста | `--date 2026-08-18` |\n| `--anchor <entry_id>` | third-brain ingest: `entry_id` строки каталога, на которую ссылается документ (можно повторять). Каждый чеканится и резолвится ДО записи; один плохой якорь отменяет весь ингест | `--anchor 0f44938c8e03bfbf` |\n| `--limit N` | third-brain search: сколько попаданий запрашивать у стора (по умолчанию 10) | `third-brain search \"миопатия\" --limit 5` |\n| `--help`, `-h` | Справка | `npx @dzhechkov/health-advisor --help` |\n| `--version`, `-v` | Версия | `npx @dzhechkov/health-advisor --version` |\n\n`install <name>` кладёт скилл плоско и с префиксом — рядом с мастером, а не внутрь него:\n\n```\n$ npx @dzhechkov/health-advisor install clinpgx\n+ Installed clinpgx to ./.claude/skills/health-advisor-clinpgx\n  Invoke: /health-advisor-clinpgx\n```\n\n### Форматы для пациента\n\n`init` устанавливает четыре первоклассных формата вывода в `.claude/skills/health-advisor/formats/`:\n\n| Формат | Что задаёт | Несущее свойство |\n|---|---|---|\n| `questions-for-doctor.md` | Вопросы к врачу: находка → что хочу понять → вопрос | Не просить назначение — показать находку и спросить, что она значит |\n| `evaluate-doctor-answer.md` | Как оценить ответ врача (сильный/слабый аргумент, «при каких цифрах…») | **Признание погрешности модели стоит ДО чек-листа** — без него (или с ним после чек-листа) формат превращается в инструмент давления на врача; охраняется именованным тестом |\n| `plain-language-explanation.md` | Объяснение простым языком: аналогия + честная степень тревоги (4-значная шкала) | Вопросы «сколько осталось» переводятся в lifespan/healthspan без числовой оценки срока жизни |\n| `prognosis-horizons.md` | Прогностический блок двумя горизонтами | Прогноз никогда не даётся одной величиной: lifespan И healthspan, с диапазоном и основанием |\n\n---\n\n## Что включено\n\n### Анализы крови\n| Скилл | Описание |\n|-------|----------|\n| preanalytical-guard | Проверяет условия забора крови ДО интерпретации значения (время суток, натощак, washout после голодания и нагрузки, сон, нужен ли повтор) + требует обязательные сопутствующие анализы |\n| lab-results | Интерпретация 34 показателей крови (запускается только на наборе, допущенном preanalytical-guard) |\n| clinical-targets | Клиническая ЦЕЛЬ отдельно от лабораторного РЕФЕРЕНСА — оба числа рядом, цитата порога, рамка «это не диагноз» |\n| health-trend-analyzer | Тренды и визуализация изменений (ECharts) |\n\n### Лекарства\n| Скилл | Описание |\n|-------|----------|\n| tooluniverse-drug-research | Комплексные отчёты о лекарствах (50+ инструментов) |\n| drug-interaction-checker | Проверка взаимодействий между препаратами |\n| tooluniverse-drug-drug-interaction | Предсказание DDI, CYP450, QTc |\n| clinpgx | Фармакогеномика через ClinPGx API |\n\n### Тренировки и реабилитация\n| Скилл | Описание |\n|-------|----------|\n| fitness-analyzer | Анализ тренировок, MET, корреляции |\n| rehabilitation-analyzer | Реабилитация: ROM, MMT, фазы восстановления |\n\n### Питание и вес\n| Скилл | Описание |\n|-------|----------|\n| nutrition-analyzer | Анализ питания, RDA, нутриенты |\n| weightloss-analyzer | BMR, TDEE, энергетический баланс |\n| sleep-analyzer | Анализ сна, PSQI, циркадный ритм |\n\n### Исследования и доказательства\n| Скилл | Описание |\n|-------|----------|\n| deep-research | Автономное мультиисточниковое исследование |\n| pubmed-search | PubMed поиск (PICO, PRISMA, MeSH) |\n| multi-search-engine | 17 поисковых движков + медицинские базы |\n\n### Документы и карты пациента\n| Скилл | Описание |\n|-------|----------|\n| patiently-ai | Упрощение мед. документов для пациентов |\n| emergency-card | Экстренная медицинская карточка |\n| clinical-decision-support | Клинические документы (GRADE, KM) |\n\n### Клиническое мышление\n| Скилл | Описание |\n|-------|----------|\n| clinical-diagnostic-reasoning | Когнитивные bias в диагностике |\n| clinicaltrials-database | Поиск по ClinicalTrials.gov API v2 |\n\n### NLP-извлечение данных\n| Скилл | Описание |\n|-------|----------|\n| clinical-nlp-extractor | Извлечение мед. сущностей из текста |\n| medical-entity-extractor | NER из описаний пациента |\n\n### Приём документов\n| Скилл | Описание |\n|-------|----------|\n| intake-archive | Детерминированный приём архива документов пациента (v1.7.0): дайджест ПЕРЕД разбором, закалённая распаковка, АТОМАРНАЯ выкладка в `sources/raw/sha256-<hex>/`, append-only каталог + журнал, идемпотентный повтор. Определяет канонический layout первичных данных |\n| case-state | Профиль как обязательный вход, реестр фактов и открытые вопросы; store-lock для всего воркспейса |\n\n---\n\n## Условия забора: почему число без них — ещё не факт (`preanalytical-guard`)\n\nОдно и то же значение общего тестостерона `7.9 нмоль/л` значит «дефицит» или «человек голодал\n56 часов» — и по ЛГ/ФСГ эти две ситуации **неразличимы**. Поэтому `preanalytical-guard`\nотрабатывает **до** интерпретации, а не после: движок `lab-results` выпускает свою фразу в тот\nмомент, когда значение в него попало, и фильтровать его вывод — это уже не «до».\n\nЧто кодируется для каждого аналита (это **данные**, `registry/*.json`, а не проза — новый фактор\nдобавляется без правки кода; каждая запись ОБЯЗАНА нести величину эффекта и источник, иначе пакет\nне загрузится):\n\n| Фактор | Величина | Действие |\n|---|---|---|\n| Голодание ≥ 48 ч | `-34 %` при 56 ч (CLAIMED — полевой случай) | **withhold** — по ЛГ/ФСГ артефакт неотличим от истинного дефицита |\n| Окно washout после голодания открыто (< 48 ч) | до `-34 %` — ВЕРХНЯЯ ГРАНИЦА, перенесённая со строки выше (CLAIMED; ни длина окна, ни остаток здесь не измерялись) | **withhold** — `fasting_hours` обнуляется, когда голодание кончилось, а артефакт нет |\n| Сон ≤ 5 ч в среднем за неделю | `-12.5 %` (диапазон `-15…-10 %`, CLAIMED) | caveat — значение допускается, оговорка неотделима |\n| Общий тестостерон без ГСПГ | пропуск вскрылся на 3-й неделе и почти привёл к обсуждению ЗГТ по артефакту (CLAIMED) | **блокировка** — сначала назначить ГСПГ |\n| Первое значение ниже полосы | до `30 %` таких значений возвращаются в полосу при простом повторе, без лечения (CLAIMED) | повтор до любых выводов |\n| Значение не сопоставимо с полосой | нет единицы, необъявленная единица, нечисловое значение | `unit_uncomparable` — «не смогли определить» никогда не равно «не ниже полосы» |\n| Имя не объявлено, но опознаётся как gated-аналит | — | `unrecognised_variant` — **неизвестное имя не может быть безопаснее известного** |\n| Условия неизвестны | — | `conditions_unknown` — полноценное состояние, а не «нет данных» |\n\n**Имена аналитов и единицы (QE-раунд 1, 2026-08-05).** Сопоставление имени идёт по\n**отсортированному множеству токенов**: регистр, пробелы, ПОРЯДОК СЛОВ, пунктуация и скобочные\nуточнения сворачиваются кодом, поэтому одно объявление `Total Testosterone` покрывает и\n`Testosterone, Total`, и `Total testosterone (T)`. Перевод кодом не выводится и объявляется данными\n— `Тестостерон общий` и `ГСПГ` теперь объявлены (MEASURED: до этого все три неперечисленных\nнаписания уходили в движок с `interpretable:true` — репродьюсер\n`node --test /path/to/@dzhechkov/health-advisor/test/preanalytical-guard.test.js`, тест `:: T18`\nитерирует 28+ имён). Добавлять по три алиаса за раз — это «перечисление в одежде\nallowlist»: четвёртое написание сбежало бы так же. Полоса сравнивается **с учётом единиц**\n(`unit_conversions` + обязательный `unit_conversions_source`): `230 ng/dL` — это ~8 нмоль/л, ниже\nдокументированной полосы `<12`, и раньше оно проходило молча.\n\n### Сценарий A: «Проанализируй общий тестостерон 7.9 нмоль/л»\n\n1. Module 0 (Intake) собирает **пакет условий забора** одним блоком: время, натощак и сколько\n   часов, часы с конца длительного голодания, часы после нагрузки, средний сон за неделю, повтор\n   ли это. «Не знаю» записывается явно — это ответ, а не пропуск.\n2. Module 1 запускает `preanalytical-guard` по всей панели.\n3. ГСПГ в наборе нет → значение **не отправляется** в `lab-results` вообще.\n\nОжидаемый вывод:\n\n```text\nWITHHELD (1)\n  - Total Testosterone = 7.9 nmol/L\n      withheld — a required companion analyte is absent, so this value cannot be interpreted alone\n\nREQUIRED BEFORE ANY CONCLUSION (1)\n  - order SHBG alongside Total Testosterone\n      why: a near-miss replacement-therapy discussion built on a probable artefact — total\n           testosterone without SHBG cannot separate a binding-protein shift from a real change\n      source: field-case: Step-0 brief, ha-slice-b\n```\n\nВ том же ответе **нет** ни «низко», ни «норма», ни «высоко». Требование вместо вердикта — это и\nесть смысл слайса.\n\n### Сценарий B: то же значение, но ГСПГ сдан, а забор — после 56 ч голодания\n\nОжидаемый вывод:\n\n```text\nWITHHELD (1)\n  - Total Testosterone = 7.9 nmol/L\n      withheld — a recorded distorting factor was present at sampling\n      factor fasting-washout-prolonged (fasting_hours) decreases this analyte by -34 % at 56 h fast\n      indistinguishable along LH/FSH: at the SAME LH/FSH profile the fasting artefact is\n      indistinguishable from true deficiency — the pituitary axis cannot tell them apart\n```\n\nВеличина эффекта **сообщается, но никогда не применяется**: «исправленного на `-34 %`» числа не\nпоявится — это была бы вторая, неатрибутируемая величина, неотличимая от измерения.\n\n### Когда этим пользоваться\n\nАвтоматически — перед каждым запуском `lab-results`. Напрямую\n(`/health-advisor-preanalytical-guard`) — только чтобы посмотреть аудит условий без шага\nинтерпретации.\n\n### Честная граница\n\nГарантия держится на **API** стража: ни один его путь не выдаёт интерпретацию значения без аудита\nусловий (проверено именованным тестом + доказательством дискриминации: `npm test` при удалённой\nпроверке off-ticket даёт `pass 16 / fail 2`, при возвращённой — `pass 18 / fail 0`, MEASURED\n2026-08-04). Страж **не** может помешать вызвать `/health-advisor-lab-results` напрямую или\nзапустить движок руками: `lab-results` — сторонний скилл, и добавлять защиту внутрь него нельзя.\nЭтот остаточный путь закрыт только строкой **BLOCK** в таблице анти-паттернов роли — то есть\nслабее, и так и написано.\n\n---\n\n## Цель ≠ референс: почему «в референсе» — это ещё не «всё хорошо»\n\nРеференсный интервал — это диапазон, в который попадает бо́льшая часть **популяции**. Клиническая\nцель — это то, где следует быть **именно вам** при задокументированном состоянии. Это разные\nвопросы с разными источниками истины, и одно поле `status` не может нести оба чтения: второе молча\nзатирает первое.\n\nДва случая из практики (**CLAIMED** — числа и пороги приведены так, как они пришли в обращении;\nни одно руководство этим инструментом не открывалось, поэтому обе цели поставляются с классом\nдоказательности `ASSERTED`):\n\n- апоB `106 мг/дл` при референсе `66–133 мг/дл` читается как «в норме». При документированном\n  атеросклерозе применимая цель — ниже `80 мг/дл`.\n- насыщение трансферрина `53 %` при референсе `16–54 %` читается как «в норме». У мужчин порог\n  настороженности начинается с `45 %`.\n\nСкилл `clinical-targets` показывает **оба числа** и вычисляет их расхождение как поле, а не как\nфразу, которую кто-то мог не написать.\n\n### Как запустить\n\nВ пакете лежит готовый пример поля — те же две строки, что печатает `lab-results`, плюс контекст\nпациента и референсы из бланка лаборатории:\n\n```bash\nnode /path/to/@dzhechkov/health-advisor/skills/clinical-targets/engine/cli.js /path/to/@dzhechkov/health-advisor/skills/clinical-targets/examples/apob-field-case.json\n```\n\nСвой ввод подаётся так же — путём к файлу или через stdin\n(`node .../engine/cli.js < мой-ввод.json`). Формат:\n\n```json\n{\n  \"rows\": [\n    { \"test_name\": \"ApoB\", \"value\": 106, \"unit\": \"mg/dL\",\n      \"reference_range\": \"-inf - inf\", \"status\": \"normal\" }\n  ],\n  \"patientContext\": { \"sex\": \"male\", \"conditions\": [\"documented_atherosclerosis\"] },\n  \"labReport\": { \"ApoB\": { \"lo\": 66, \"hi\": 133, \"unit\": \"mg/dL\" } }\n}\n```\n\nВывод (MEASURED 2026-08-04 — то, что печатает команда выше; пример содержит ДВЕ строки анализов,\nниже приведены оба блока. Длинные строки перенесены по ширине README — в терминале они идут одной\nстрокой):\n\n```text\nапоB (аполипопротеин B): 106 mg/dL (1.060 g/L)\n  Референс лаборатории: 66 – 133 mg/dL (источник: lab-report) → В ПРЕДЕЛАХ РЕФЕРЕНСА\n  Цель из руководства: <80 mg/dL (<0.800 g/L) → ВЫШЕ ЦЕЛИ на 26 mg/dL\n  Ваше значение выше цели: 106 mg/dL (1.060 g/L) против <80 mg/dL (<0.800 g/L).\n  Порог: «апоB 106 мг/дл при референсе 66-133 «в норме», но выше цели <80 при документированном\n  атеросклерозе» — ИСТОЧНИК НЕ ОТКРЫТ ЭТИМ ИНСТРУМЕНТОМ — порог заявлен в исходном обращении\n  (field brief), Конкретное руководство в обращении не названо и этим пайплайном не запрашивалось,\n  раздел не указан, год не указан [evidence: ASSERTED]\n  Кому адресован порог: взрослые с документированным атеросклерозом. Ваш контекст сверен по полям:\n  conditions — совпадение подтверждено.\n  Это не диагноз. Референсный интервал приходит из вашей лаборатории; порог — из указанного\n  источника для указанной группы пациентов. Решение о том, применим ли порог к вам, принимает врач.\n  ⚠ РАСХОЖДЕНИЕ: значение внутри референсного интервала, но выше цели.\n\nНасыщение трансферрина: 53 %\n  Референс лаборатории: 16 – 54 % (источник: lab-report) → В ПРЕДЕЛАХ РЕФЕРЕНСА\n  Цель из руководства: ≤45 % → ВЫШЕ ЦЕЛИ на 8 %\n  Ваше значение выше цели: 53 % против ≤45 %.\n  Порог: «насыщение трансферрина 53% при референсе 16-54% «в норме», но у мужчин настораживает\n  с 45%» — ИСТОЧНИК НЕ ОТКРЫТ ЭТИМ ИНСТРУМЕНТОМ — порог заявлен в исходном обращении (field brief),\n  Конкретное руководство в обращении не названо и этим пайплайном не запрашивалось, раздел не\n  указан, год не указан [evidence: ASSERTED]\n  Кому адресован порог: мужчины. Ваш контекст сверен по полям: sex — совпадение подтверждено.\n  Это не диагноз. Референсный интервал приходит из вашей лаборатории; порог — из указанного\n  источника для указанной группы пациентов. Решение о том, применим ли порог к вам, принимает врач.\n  ⚠ РАСХОЖДЕНИЕ: значение внутри референсного интервала, но выше цели.\n```\n\n### Когда этим пользоваться\n\n- анализ «в референсе», но есть задокументированный диагноз, под который написан отдельный порог;\n- в бланке лаборатории нет референса вообще (`ref: -inf - inf`) — движок скажет «референс не указан»,\n  а не «в норме»;\n- нужно перевести значение между единицами (`1.060 г/л ↔ 106 мг/дл`, `8.04 нмоль/л ↔ 232 нг/дл`)\n  и сравнить с порогом с явным допуском, а не «на глазок».\n\n### Что скилл принципиально не делает\n\nНе ставит диагноз и не выносит самостоятельный вердикт. Фраза «выше цели» допустима **только**\nвместе с обоими числами, дословной цитатой источника порога и рамкой «это не диагноз; порог из\nтакого-то руководства для такой-то группы» — и это не договорённость на ревью, а конструктор:\nобъект утверждения невозможно построить без всех трёх частей, а значит и напечатать нечего.\nПорог не применяется к пациенту, чей контекст не совпал; при неизвестном контексте движок называет\nнедостающие поля и явно говорит, что не может определить применимость.\n\nРасширяется данными: новый показатель или новый порог — это JSON-файл в\n`skills/clinical-targets/engine/registry/`, без единой правки кода (`{\"registryDirs\": [\"/свой/путь\"]}`\nво входном JSON подключает внешний каталог).\n\n---\n\n## Класс доказательства: читал ли источник кто-нибудь (v1.3.0)\n\nКриптографическая подпись доказывает, что запись не меняли **после** подписания. Она ничего не\nговорит о том, открывал ли источник кто-нибудь **до**. По опыту эксплуатации это и есть главный\nисточник содержательных ошибок: уверенный пересказ непрочитанного.\n\nПоэтому у факта две независимые оси:\n\n| | вопрос | значения |\n|---|---|---|\n| `trust_class` | запись не подменили? | `ISSUER_SIGNED` · `SELF_ATTESTED` · `UNVERIFIED` |\n| `evidence_class` | источник реально открывали? | `FETCH_VERIFIED` · `LISTING_ONLY` · `ASSERTED` |\n\nФакт бывает подписанным **и** `ASSERTED` одновременно — это легально, выразимо и опасно.\n\n```bash\n# в исследовании: загрузку делает инструмент, а не модель «по памяти»\npython3 scripts/evidence_fetch.py   # используется скиллом; только stdlib, без зависимостей\n\n# перед сдачей отчёта — гейт (код возврата, не совет):\npython3 scripts/check_report_evidence.py --report report.md --facts facts.json\n#   report evidence gate\n#     facts: 3 — FETCH_VERIFIED 1 / LISTING_ONLY 1 / ASSERTED 1 / legacy-unknown 0\n#     FAIL — 2 violation(s):\n#       [ASSERTED_IN_REPORT] the IMEI registration ban was introduced in Turkey\n#       [UNMARKED_LISTING_ONLY] transferrin saturation rose from 37 to 53 percent\n#   → exit 1\n```\n\n**Правила:** `ASSERTED` в отчёт не попадает вовсе. `LISTING_ONLY` — только с видимой пометкой рядом\nс **каждым** упоминанием. Уверенность = `min(подпись, доказательство, тир источника)` — самое\nслабое звено; `ASSERTED` = `0.0`, потому что это не слабое доказательство, а его отсутствие.\n\n**Честная граница, которую печатает сам инструмент:** `FETCH_VERIFIED` означает «скрипт выполнил\nHTTP-запрос и получил тело с таким байт-хешем в такую дату». Это **не** значит, что источник\nавторитетен, что утверждение из него следует или что его правильно поняли. Провенанс, не истина.\n\nСтарые факты (созданные до 1.3.0) продолжают проверяться как раньше: у них доказательство помечено\nкак **неизвестное** — не «asserted» и не «verified». Гейт их считает и называет отдельной строкой,\nно не судит задним числом.\n\n## Применимость к ЭТОМУ пациенту: население исследования и абсолютный риск\n\nПравильно найденный, правильно подписанный и реально прочитанный факт всё ещё может ввести в\nзаблуждение того единственного читателя, ради которого всё делается. Два способа — и оба\nвстречались в реальной работе:\n\n> **Все числа в двух списках ниже — CLAIMED**: они взяты из полевого отчёта, этот пайплайн сами\n> источники не открывал и идентификаторы (DOI/NCT) для них не выдумывает. В фикстурах они несут\n> `evidence_class = ASSERTED`. Проверяют они поведение **матчера**, которое от подлинности цитаты\n> не зависит. Воспроизводимое здесь — только вывод модулей: `cd\n> base/skills/base/goap-research-ed25519/scripts && python3 -m unittest discover -s . -p 'test_*.py'`.\n\n1. **Число получено не в тех людях** (CLAIMED). `Похудение поднимает тестостерон` измеряли у мужчин\n   с ожирением (`ИМТ ≥ 30`) — у пациента `ИМТ 25`. РКИ по обратимости эректильной дисфункции\n   набирало только `ИМТ ≥ 30`. Безопасность TRAVERSE установлена у мужчин **высокого**\n   сердечно-сосудистого риска. `+44.5% ЛПНП от омега-3` наблюдали при триглицеридах `≥ 800 мг/дл` —\n   у пациента `236`.\n2. **Относительный риск без абсолютного** (CLAIMED). `Риск инфаркта выше в 21 раз` — это\n   `1 избыточный случай на 1394 человека`. `Риск удваивается` — это `4 на 1000 за 25 лет`. Оба\n   предложения в каждой паре верны; интерпретируемо только одно, и цитируют обычно другое.\n\n**Население исследования — обязательное поле факта.** Не соглашение, а аргумент без значения по\nумолчанию: пропустил — `TypeError` от самого Python.\n\n```python\n# scripts/population_match.py + scripts/ed25519_verifier.py\nfact = verifier.create_listing_fact(\n    claim=\"Омега-3 повышает ЛПНП на 44.5%\",\n    source_url=\"https://pubmed.ncbi.nlm.nih.gov/…\",\n    reason=\"карточка из выдачи, полный текст не открывался\",\n    study_population={\n        \"description\": \"patients with severe hypertriglyceridemia (baseline triglycerides >= 800 mg/dL)\",\n        \"criteria\": {\"triglycerides_mg_dl_min\": {\n            \"op\": \">=\", \"value\": 800, \"kind\": \"baseline\",\n            \"verbatim\": \"baseline triglycerides >= 800 mg/dL\",\n            \"locator\": \"[Methods, Baseline characteristics]\"}},\n    },\n)\n\nimport population_match as pm\nprint(pm.render_population_match(\n    pm.match_from_fact(fact.study_population, {\"sex\": \"male\", \"bmi\": 25,\n                                               \"triglycerides_mg_dl\": 236, \"cv_risk\": \"moderate\"})))\n```\n\n```\nPOPULATION_MATCH: partial\n  study population: patients with severe hypertriglyceridemia (baseline triglycerides >= 800 mg/dL)\n  triglycerides — patient 236; study requires triglycerides >= 800 (baseline-out-of-range, below)\n      enrollable, but the effect was not measured from this starting value\n      \"baseline triglycerides >= 800 mg/dL\"  [Methods, Baseline characteristics]\n```\n\nВердиктов **четыре**, и сам по себе вердикт ничего не стоит — ценно перечисление расхождений:\n`full` (все критерии выполнены известными значениями), `partial` (**исходное** значение вне\nдиапазона: пациент мог бы участвовать, но эффект мерили не от той точки), `none` (критерий\n**отбора** его исключает — он бы в исследование не попал), `unknown` (источник не указал ось или\nеё нет в профиле). `unknown` **никогда** не сворачивается в `partial`: неустановленный критерий —\nэто не более мягкое совпадение.\n\n**Относительный риск не ходит в одиночку.** `RiskStatement(relative, absolute)` требует обе\nполовины позиционно; `absolute` — это либо реальные абсолютные числа, либо явное\n`UnknownBaseline(reason=…)`. Опустить абсолютную половину нельзя — можно только **сказать**, что\nбазовый риск неизвестен, и это печатается в том месте, где стояло бы число:\n\n```python\nimport risk_statement as rs\nprint(rs.render_risk(rs.RiskStatement(\n    rs.RelativeEffect(kind=\"RR\", value=21.0),\n    rs.AbsoluteEffect(control_events=1, control_denominator=1394),\n    nnt=rs.nnt_from_absolute(rs.AbsoluteEffect(control_events=1, control_denominator=1394)))))\n\nprint(rs.render_risk(rs.RiskStatement(\n    rs.RelativeEffect(kind=\"HR\", value=0.74),\n    rs.UnknownBaseline(reason=\"в источнике нет частоты событий в контрольной группе\"),\n    nnt=rs.nnt_from_absolute(rs.UnknownBaseline(reason=\"в источнике нет частоты событий в контрольной группе\")))))\n```\n\n```\nrisk: RR 21 (relative)\n  absolute: 1 per 1394\n  NNT: n/a — observational association, no intervention arm compared\n\nrisk: HR 0.74 (relative)\n  absolute: BASELINE RISK NOT ESTABLISHED — в источнике нет частоты событий в контрольной группе\n  NNT: n/a — cannot be computed without a baseline — в источнике нет частоты событий в контрольной группе\n```\n\nNNT **вычисляется** из абсолютных чисел (`1/|ARC−ART|` или `M/N` из «N избыточных случаев на M»), а\nне подставляется текстом; если конечного NNT не существует — возвращается **названная** причина, а\nне `Infinity` и не `0`.\n\n**Гейт отчёта** сводит четыре независимых суждения над одним текстом и не теряет ни одного:\n\n```bash\npython3 scripts/check_report_evidence.py --report report.md --facts facts.json --profile patient.json\n#   [UNMARKED_POPULATION_MISMATCH]  вердикт partial/none и рядом не названа расходящаяся ось\n#   [POPULATION_UNKNOWN_UNMARKED]   вердикт unknown, то же правило близости\n#   [MISSING_STUDY_POPULATION]      факт без населения исследования — тут пациент даже не нужен\n#   [RELATIVE_RISK_WITHOUT_ABSOLUTE] «в 21 раз» без абсолютной цифры в пределах 400 символов\n#   → exit 1\n```\n\n`--profile` необязателен; без него правила близости не запускаются, и гейт **печатает**\n`population applicability: NOT CHECKED — no --profile supplied`, а не проходит молча.\n\n**Когда этим пользоваться:** всякий раз, когда число из исследования п","readmeFilename":"README.md"}