{"_id":"@aiwaretop/dsh-docs-harness","_rev":"6-37c8ab1006cbbbb98f94100ab6b622aa","name":"@aiwaretop/dsh-docs-harness","dist-tags":{"latest":"0.2.2"},"versions":{"0.1.1":{"name":"@aiwaretop/dsh-docs-harness","version":"0.1.1","license":"MIT","_id":"@aiwaretop/dsh-docs-harness@0.1.1","maintainers":[{"name":"aiwarelife","email":"aiwarelife@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-plugins"],"platform":"web"}},"dist":{"shasum":"69207c9c901875e2389d7e9a610461605d424d7b","tarball":"https://registry.npmjs.org/@aiwaretop/dsh-docs-harness/-/dsh-docs-harness-0.1.1.tgz","fileCount":51,"integrity":"sha512-+kz/Wlhl19VfsqO1tXtEb7cI9Wc2dtz0tT3xc8Rfcmw7jx3dA5NIDLH4Zln8KGimtnqBZ51rlGG/24Imu208IQ==","signatures":[{"sig":"MEUCIEf2nhO/LdLv7/JytqBMKVfpRNG1JyZtPYozJnBQhwrUAiEAtOjTGtNBSft2TMLIZ+cx+LG8YkTdqfu7ocY8S2zmELs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":507570},"main":"src/host/index.js","type":"module","exports":{".":"./src/host/index.js","./client":"./lib/client.js","./invariant":"./src/host/invariant.js","./package.json":"./package.json"},"gitHead":"977d87265c6347deca7a63d0ae6e3e4befad3e01","scripts":{"test":"node --test --import ./tests/register-jsx.mjs --test-timeout=300000 \"tests/*.test.js\"","build":"node scripts/build-client.mjs","verify":"node scripts/verify-package.mjs","prepack":"npm run extract-block && node scripts/build-client.mjs && node scripts/verify-package.mjs","pretest":"npm run extract-block","seed-vendor":"node scripts/seed-vendor.mjs","extract-block":"npm run seed-vendor && node scripts/extract-managed-block.mjs"},"_npmUser":{"name":"aiwarelife","email":"aiwarelife@gmail.com"},"_npmVersion":"11.12.1","description":"Docs Harness for the dsh GUI: project governance rules injected per session, the plan lifecycle as tools, a live plan progress bubble, and user-driven install/upgrade/removal of the Python engine.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^18.3.1","esbuild":"^0.25.0","react-dom":"^18.3.1","@deepseek-ai/dsh-tools":"0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"0.1.0-rc.6"},"peerDependencies":{"zod":"^4.4.3","react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6","@deepseek-ai/dsh-system-prompt":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6","@deepseek-ai/dsh-session-projection":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-docs-harness_0.1.1_1787039096662_0.07908854703602342","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aiwaretop/dsh-docs-harness","version":"0.1.2","license":"MIT","_id":"@aiwaretop/dsh-docs-harness@0.1.2","maintainers":[{"name":"aiwarelife","email":"aiwarelife@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-plugins"],"platform":"web"}},"dist":{"shasum":"f920a0567cb7bd9168a0e0b8e90428e3525c6cb3","tarball":"https://registry.npmjs.org/@aiwaretop/dsh-docs-harness/-/dsh-docs-harness-0.1.2.tgz","fileCount":51,"integrity":"sha512-wlLcHukVAG/Huf+Lp1FwYbnF82N0fP5Oz0LYVi76G51bovI4VjLleH6HMJQcV3nnjx0qAvNsiygin1aJQGh11g==","signatures":[{"sig":"MEUCICDLt9KwV2oEkIkBj8nJkhOotEXggXC4IythKHkYDgtsAiEAyVS5jI9bICnMS8R+fYFkf1sBP4v5X6Tr+7QlfASeEeU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":511577},"main":"src/host/index.js","type":"module","exports":{".":"./src/host/index.js","./client":"./lib/client.js","./invariant":"./src/host/invariant.js","./package.json":"./package.json"},"gitHead":"b9fe3a7a88a9b7eb17d561007499a28d8dedbc86","scripts":{"test":"node --test --import ./tests/register-jsx.mjs --test-timeout=300000 \"tests/*.test.js\"","build":"node scripts/build-client.mjs","verify":"node scripts/verify-package.mjs","prepack":"npm run extract-block && node scripts/build-client.mjs && node scripts/verify-package.mjs","pretest":"npm run extract-block","seed-vendor":"node scripts/seed-vendor.mjs","extract-block":"npm run seed-vendor && node scripts/extract-managed-block.mjs"},"_npmUser":{"name":"aiwarelife","email":"aiwarelife@gmail.com"},"_npmVersion":"11.12.1","description":"Docs Harness for the dsh GUI: project governance rules injected per session, the plan lifecycle as tools, a live plan progress bubble, and user-driven install/upgrade/removal of the Python engine.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^18.3.1","esbuild":"^0.25.0","react-dom":"^18.3.1","@deepseek-ai/dsh-tools":"0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"0.1.0-rc.6"},"peerDependencies":{"zod":"^4.4.3","react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6","@deepseek-ai/dsh-system-prompt":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6","@deepseek-ai/dsh-session-projection":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-docs-harness_0.1.2_1787056763684_0.38879947617533195","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@aiwaretop/dsh-docs-harness","version":"0.1.3","license":"MIT","_id":"@aiwaretop/dsh-docs-harness@0.1.3","maintainers":[{"name":"aiwarelife","email":"aiwarelife@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-plugins"],"platform":"web"}},"dist":{"shasum":"69f194e95941a6d394f52d92e7bd7ca353d677b2","tarball":"https://registry.npmjs.org/@aiwaretop/dsh-docs-harness/-/dsh-docs-harness-0.1.3.tgz","fileCount":51,"integrity":"sha512-AgFd6fAZeEDnE7EUN06zJkwP/RAVejwsly2h9iv/0QmE4VnUUBJlcTEyoAsDMcmGtgDfM7nRiQ0ROQ7evwtUVg==","signatures":[{"sig":"MEUCIQCKWPYmvzHb36QMOXlqY3+YiowTgH7hjfCbK4ppDASPCAIgFYJSV9v1+Dl3RJPiZVLDM5Sroxb/VACchMnrbPLHLps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":512451},"main":"src/host/index.js","type":"module","exports":{".":"./src/host/index.js","./client":"./lib/client.js","./invariant":"./src/host/invariant.js","./package.json":"./package.json"},"gitHead":"8b0872864627983c146aa2cc566490ace897f8bc","scripts":{"test":"node --test --import ./tests/register-jsx.mjs --test-timeout=300000 \"tests/*.test.js\"","build":"node scripts/build-client.mjs","verify":"node scripts/verify-package.mjs","prepack":"npm run extract-block && node scripts/build-client.mjs && node scripts/verify-package.mjs","pretest":"npm run extract-block","seed-vendor":"node scripts/seed-vendor.mjs","extract-block":"npm run seed-vendor && node scripts/extract-managed-block.mjs"},"_npmUser":{"name":"aiwarelife","email":"aiwarelife@gmail.com"},"_npmVersion":"11.12.1","description":"Docs Harness for the dsh GUI: project governance rules injected per session, the plan lifecycle as tools, a live plan progress bubble, and user-driven install/upgrade/removal of the Python engine.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^18.3.1","esbuild":"^0.25.0","react-dom":"^18.3.1","@deepseek-ai/dsh-tools":"0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"0.1.0-rc.6"},"peerDependencies":{"zod":"^4.4.3","react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6","@deepseek-ai/dsh-system-prompt":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6","@deepseek-ai/dsh-session-projection":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-docs-harness_0.1.3_1787133612835_0.12080079650400677","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aiwaretop/dsh-docs-harness","version":"0.2.0","license":"MIT","_id":"@aiwaretop/dsh-docs-harness@0.2.0","maintainers":[{"name":"aiwarelife","email":"aiwarelife@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-plugins"],"platform":"web"}},"dist":{"shasum":"8b946475377d44b47ef365a3f00e63e7d9649ad3","tarball":"https://registry.npmjs.org/@aiwaretop/dsh-docs-harness/-/dsh-docs-harness-0.2.0.tgz","fileCount":51,"integrity":"sha512-g5kVIjj3xpQujIeL//dJdZGtT+qhqeo/Fm/LQb2l5f5M9ZyOs4t0DRTht1NK9UQ1hmDjN7TN4UiZvYmRDSj6Zg==","signatures":[{"sig":"MEUCIC+EpwLawbFg+jyIlwooYiADTlQc4PtxIiGrauxwtWv8AiEA8+OGmH7RB27Y/tfKIvGbEdiMet6KKR9sJCsTZEL7s5Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":539507},"main":"src/host/index.js","type":"module","exports":{".":"./src/host/index.js","./client":"./lib/client.js","./invariant":"./src/host/invariant.js","./package.json":"./package.json"},"gitHead":"a6656d75549485a61f902a1603ba395247858da5","scripts":{"test":"node --test --import ./tests/register-jsx.mjs --test-timeout=300000 \"tests/*.test.js\"","build":"node scripts/build-client.mjs","verify":"node scripts/verify-package.mjs","prepack":"npm run extract-block && node scripts/build-client.mjs && node scripts/verify-package.mjs","pretest":"npm run extract-block","seed-vendor":"node scripts/seed-vendor.mjs","extract-block":"npm run seed-vendor && node scripts/extract-managed-block.mjs"},"_npmUser":{"name":"aiwarelife","email":"aiwarelife@gmail.com"},"_npmVersion":"11.12.1","description":"Docs Harness for the dsh GUI: project governance rules injected per session, the plan lifecycle as tools, a live plan progress bubble, and user-driven install/upgrade/removal of the Python engine.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^18.3.1","esbuild":"^0.25.0","react-dom":"^18.3.1","@deepseek-ai/dsh-tools":"0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"0.1.0-rc.6"},"peerDependencies":{"zod":"^4.4.3","react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6","@deepseek-ai/dsh-system-prompt":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6","@deepseek-ai/dsh-session-projection":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-docs-harness_0.2.0_1787284689400_0.2718701602863014","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@aiwaretop/dsh-docs-harness","version":"0.2.1","license":"MIT","_id":"@aiwaretop/dsh-docs-harness@0.2.1","maintainers":[{"name":"aiwarelife","email":"aiwarelife@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-plugins"],"platform":"web"}},"dist":{"shasum":"7e073167e6cc7f72a1a06ae24d43e4832d85fa31","tarball":"https://registry.npmjs.org/@aiwaretop/dsh-docs-harness/-/dsh-docs-harness-0.2.1.tgz","fileCount":51,"integrity":"sha512-JQ1YL1CH7LuGpRxKBKe/iinEDjqRVHBYZr8e8pvOYgGD0AXK03iG8TArfxBrRZqTs4Ilw8wo/bi03vrxpdk1fg==","signatures":[{"sig":"MEYCIQDPugkf/6cZGZEb+/rDO9Q3rWbIkn9MMDCr2D8v6BHhzQIhAOoMggNR9KpbObnrTeO2zN8MGMDLsPpVkNOEVXTVm2OS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":536281},"main":"src/host/index.js","type":"module","exports":{".":"./src/host/index.js","./client":"./lib/client.js","./invariant":"./src/host/invariant.js","./package.json":"./package.json"},"gitHead":"928ed552533310227db2bc1652ce7fe58188fcb0","scripts":{"test":"node --test --import ./tests/register-jsx.mjs --test-timeout=300000 \"tests/*.test.js\"","build":"node scripts/build-client.mjs","verify":"node scripts/verify-package.mjs","prepack":"npm run extract-block && node scripts/build-client.mjs && node scripts/verify-package.mjs","pretest":"npm run extract-block","seed-vendor":"node scripts/seed-vendor.mjs","extract-block":"npm run seed-vendor && node scripts/extract-managed-block.mjs"},"_npmUser":{"name":"aiwarelife","email":"aiwarelife@gmail.com"},"_npmVersion":"11.16.0","description":"Docs Harness for the dsh GUI: project governance rules injected per session, the plan lifecycle as tools, a live plan progress bubble, and user-driven install/upgrade/removal of the Python engine.","directories":{},"_nodeVersion":"24.18.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^18.3.1","esbuild":"^0.25.0","react-dom":"^18.3.1","@deepseek-ai/dsh-tools":"0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"0.1.0-rc.6"},"peerDependencies":{"zod":"^4.4.3","react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6","@deepseek-ai/dsh-system-prompt":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6","@deepseek-ai/dsh-session-projection":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-docs-harness_0.2.1_1787469434713_0.30253764384035176","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"_id":"@aiwaretop/dsh-docs-harness@0.2.2","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-plugins"],"platform":"web"}},"dist":{"shasum":"636c0bacfebe5f5d45da58c35c2f171d27bead4b","tarball":"https://registry.npmjs.org/@aiwaretop/dsh-docs-harness/-/dsh-docs-harness-0.2.2.tgz","fileCount":52,"integrity":"sha512-GFDbwpwC1Xo9NfxZFJvR80wfG3QD8CAFBgiIZ+4mdrnArUAHz3BH0JbQ6ethJvNh+9epiSnZC9Ff9idaIgPs6w==","signatures":[{"sig":"MEYCIQDADlRy1B0RovWzcOR6Xu8QAxWmzxKcCxpPQi+xiFEtTAIhALl/1ic3sRyXadESbKosDVX3bO4r4tMeKBMBDXKmLd9N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIED1Z7gdbVW1R0FtbkDeMX6LyySDGgGXfyevcHpbfLXSAiEAg5PgAPk9oOI2gXn1atqqoGslTtDDdFjmcpt7LNWQQJM="}],"unpackedSize":573312},"main":"src/host/index.js","name":"@aiwaretop/dsh-docs-harness","type":"module","exports":{".":"./src/host/index.js","./client":"./lib/client.js","./invariant":"./src/host/invariant.js","./package.json":"./package.json"},"gitHead":"3a75c82726025f29d750d591131b540bef8d885a","license":"MIT","scripts":{"test":"node --test --import ./tests/register-jsx.mjs --test-timeout=300000 \"tests/*.test.js\"","build":"node scripts/build-client.mjs","verify":"node scripts/verify-package.mjs","prepack":"npm run extract-block && node scripts/build-client.mjs && node scripts/verify-package.mjs","pretest":"npm run extract-block","seed-vendor":"node scripts/seed-vendor.mjs","extract-block":"npm run seed-vendor && node scripts/extract-managed-block.mjs"},"version":"0.2.2","_npmUser":{"name":"aiwarelife","email":"aiwarelife@gmail.com"},"_npmVersion":"11.12.1","description":"Docs Harness for the dsh GUI: project governance rules injected per session, the plan lifecycle as tools, a live plan progress bubble, and user-driven install/upgrade/removal of the Python engine.","directories":{},"maintainers":[{"name":"aiwarelife","email":"aiwarelife@gmail.com"}],"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","react":"^18.3.1","esbuild":"^0.25.0","react-dom":"^18.3.1","@deepseek-ai/dsh-tools":"0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"0.1.0-rc.6"},"peerDependencies":{"zod":"^4.4.3","react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.0-rc.6","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.5-rc.1","@deepseek-ai/dsh-system-prompt":"^0.1.0-rc.6","@deepseek-ai/dsh-user-questions":"^0.1.0-rc.6","@deepseek-ai/dsh-session-projection":"^0.1.0-rc.6"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-docs-harness_0.2.2_1789031136079_0.5079695166780638"}}},"time":{"created":"2026-08-18T07:44:56.442Z","modified":"2026-09-10T09:05:36.398Z","0.1.1":"2026-08-18T07:44:56.826Z","0.1.2":"2026-08-18T12:39:23.818Z","0.1.3":"2026-08-19T10:00:13.014Z","0.2.0":"2026-08-21T03:58:09.551Z","0.2.1":"2026-08-23T07:17:14.862Z","0.2.2":"2026-09-10T09:05:36.198Z"},"license":"MIT","description":"Docs Harness for the dsh GUI: project governance rules injected per session, the plan lifecycle as tools, a live plan progress bubble, and user-driven install/upgrade/removal of the Python engine.","maintainers":[{"name":"aiwarelife","email":"aiwarelife@gmail.com"}],"readme":"# dsh-docs-harness\n\nDocs Harness 是一套「方案 → 验收 → 知识」的项目治理纪律,由一份 Python 引擎\n(`harness.py`)实现,装在**用户自己的仓库里**。这个插件把它接进 dsh 图形界面:\n\n- 把项目自己的治理规则注入 agent 的系统提示词;\n- 把方案(plan)生命周期做成 agent 能调用的工具族;\n- 把当前方案的进度做成输入框上方的一枚气泡;\n- 把引擎在项目里的**安装 / 升级 / 移除**做成只有用户能点的入口。\n\n它不是一个「AI 自动帮你建流程」的插件。恰恰相反,它的大部分设计成本花在**限制**上:\n写盘由谁发起、规则谁说了算、关掉之后还剩什么。\n\n## 三条边界\n\n**1. 写盘只由用户发起。**\n`project init` / `upgrade` / `uninstall` 会往用户仓库里写文件,因此它们**不是工具**——\nagent 的工具表里根本没有这三个动作,只有 HTTP 路由,而路由只由输入框上方的提示条和\n「设置 → 插件 → Docs Harness」触发。agent 在未启用的项目里调用方案工具,拿到的是一句\n明确的说明:*不要自己启用,告诉用户去那两个入口*。\n\n**2. 总开关默认开,关掉即等于没装。**\n关掉后整个子 fiber 被 dispose:不注册工具、不注入提示词、不建投影、不挂项目路由。\n会话行为与没安装这个包完全一致,而不是「装着但沉默」。唯一留下的是设置读写这一条\n控制面路由——它是把开关拨回来的通道,拆了它关闭就成了单行道。\n\n**3. 注入的规则是项目自己的规则,一字不改。**\n文本取自项目 `AGENTS.md` 的受管块原文(按 mtime 缓存),整段注入;插件只在后面追加\n一小段说明,把「怎么调用」从命令行改写为工具名。项目文件损坏时回落到同版本的内置\n种子文本——已经被标记为「装了 Docs Harness」的项目,不该因为一个文件坏掉就静默失去\n治理。\n\n## 安装\n\n插件随 [DSH Buddy](https://github.com/HackSing/dsh-buddy) 的 web profile 预装。手工装入\n某个 profile:\n\n```bash\ndsh plugin --profile web add @aiwaretop/dsh-docs-harness\n```\n\n运行需要用户机器上有 Python 3(`python3` 或 `python` 在 PATH 上)。没有时,启用动作会\n报出一条带下载地址的说明,而不是静默失败。\n\n## 界面\n\n| 位置 | 内容 |\n|---|---|\n| 输入框上方(dock) | 方案进度气泡:`进度 3/7` + 本方案累计改动行数;悬停或聚焦展开条目清单 |\n| 输入框上方(dock) | 启用 / 升级提示条:说明将写入什么,按钮触发,可「不再提示」(按项目记住) |\n| 工具卡片 | `plan_progress` 等四个工具的专用卡片,渲染清单而不是原始 JSON |\n| 设置 → 插件 | 总开关、自动启用、自动升级、从当前项目移除 |\n\n## 工具族\n\n| 工具 | 作用 |\n|---|---|\n| `harness_plan_select` | 取方案模板的字段契约 |\n| `harness_plan_create` | 冻结方案;先经用户确认卡片批准,退回则方案不成立 |\n| `harness_plan_settle` | 结算方案(implemented / deprecated) |\n| `plan_progress` | 发布整张清单(整表替换语义),驱动气泡与卡片 |\n\n`plan_progress` 与内置 `todo_write` 的关键区别:**它是常驻状态**。内置待办每轮清空,而\n冻结的方案要跨轮次活着——它描述的是这次任务的合同,不是这一轮的便签。\n\n## 开发\n\n```bash\nnpm test          # node --test:host + client 全量单测\nnpm run build     # esbuild 产出 lib/client.js(__ModuleLoader__ 工厂包装)\nnpm run verify    # 发布自检:产物、种子完整性、manifest 字段\nnpm run extract-block   # 从内置引擎重新生成 vendor/harness/managed-entry.md\n```\n\n目录:\n\n- `src/host/` —— host 半边:工具族、投影、规则注入、项目状态检测、HTTP 路由\n- `src/client/` —— 浏览器半边:气泡、提示条、工具卡片、设置卡片\n- `src/shared/` —— 两边都要的纯常量与纯窄化函数(不含任何 `node:` 导入)\n- `vendor/harness/` —— 引擎种子:`scripts/harness.py` 及其模块、`plan-templates/`、\n  以及与引擎写出的受管块逐字节一致的 `managed-entry.md`\n\n## 已知边界与 roadmap\n\n- **自定义会话事件不可用**。`KNOWN_SESSION_EVENT_TYPES` 是封闭集合,写入表外类型会让\n  会话日志在重启后加载失败(用户的对话直接丢)。所以方案投影折叠的是本插件自己的\n  `tool/call` / `tool/result`,项目安装状态则走 HTTP 而不是投影。\n- **自定义确认卡片意图不可用**。确认卡片的意图是封闭联合类型,因此方案批准复用了\n  内置的 `plan-review` 意图——渲染效果正是要的那张卡,且零客户端代码。\n- **第三方设置命名空间不过网关**。`settings.describe` / `settings.update` 只服务网关\n  编译进去的命名空间白名单,插件自己注册的命名空间会被读时过滤、写时拒绝(上游注释\n  称「插件自暴露」是 deferred work)。所以本插件的开关走自己的\n  `/docs-harness-settings` loopback 路由,host 侧仍经 `settings` 服务读写,settings.yaml\n  仍是唯一真源。\n- [ ] knowledge / acceptance 资产的前端可视化(目前只有方案一条线上了界面)\n- [ ] 引擎种子升级的应用层增量语义:版本戳分流,未改动整体替换、有自定义则只加不改\n- [ ] 发布到 npm 后,宿主清单条目从本地 tarball 转为钉死版本\n\n## License\n\nMIT\n","readmeFilename":"README.md"}