{"_id":"@catheadowl/dsh-extras","_rev":"6-cd66af2e69e94a4dafe25679e2bc9091","name":"@catheadowl/dsh-extras","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@catheadowl/dsh-extras","version":"0.1.0","license":"MIT","_id":"@catheadowl/dsh-extras@0.1.0","maintainers":[{"name":"catheadowl","email":"493020956@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"5307625414d4fdbd909e2d98cac0a284bc96b35e","tarball":"https://registry.npmjs.org/@catheadowl/dsh-extras/-/dsh-extras-0.1.0.tgz","fileCount":152,"integrity":"sha512-8+wQObN4NZszO3VwNDk31j6FBbcN/UZ88YseHUFi0+EJcCbzp0StyIIh3/Pc4FrBtOLup1UbgxzUzcUFq4mAjQ==","signatures":[{"sig":"MEYCIQDncbajS+kaXBxCq5GLycHdgiGovrpE25Esydl87hWKgQIhANjkCnIc4ATE+J+sUlfre9PRS61juZa72C+PUksbcGLI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":564825},"type":"module","_from":"file:D:/Document/Projects/dsh-extra/.tmp/publish-sim/catheadowl-dsh-extras-0.1.0.tgz","exports":{"./gates":{"types":"./modules/gates/lib/index.d.ts","default":"./modules/gates/lib/index.js"},"./prompt":{"types":"./modules/prompt/lib/index.d.ts","default":"./modules/prompt/lib/index.js"},"./routes":{"types":"./modules/routes/lib/index.d.ts","default":"./modules/routes/lib/index.js"},"./markdown":{"types":"./modules/markdown/lib/index.d.ts","default":"./modules/markdown/lib/index.js"},"./package.json":"./package.json","./gates/register":{"types":"./modules/gates/lib/register.d.ts","default":"./modules/gates/lib/register.js"},"./markdown/gate-check":{"types":"./modules/markdown/lib/gate-check.d.ts","default":"./modules/markdown/lib/gate-check.js"}},"scripts":{"build":"pnpm run build:gates && pnpm run build:markdown && pnpm run build:prompt && pnpm run build:routes && pnpm run build:client","prepack":"pnpm run build && pnpm run verify:package-face && pnpm run verify:publish-readiness","eval:gates":"dsh-eval run --profile headless --repo ../../deepseek-harness modules/gates/eval","test:gates":"cd modules/gates && node --test --test-isolation=none test/core.test.mjs test/dirty.test.mjs test/fixer.test.mjs test/repo-gates.test.mjs test/skills.test.mjs test/register.test.mjs test/face.test.mjs test/publish.test.mjs test/tool-surface.test.mjs test/toggles.test.mjs test/wire.test.mjs test/client-storage.test.mjs test/examples.test.mjs","build:gates":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd -p modules/gates/tsconfig.json","test:prompt":"cd modules/prompt && node --test --test-isolation=none test/fuzzy.test.mjs test/parse.test.mjs test/resolve.test.mjs test/enumerate.test.mjs test/core.test.mjs test/path-resolver.test.mjs test/register.test.mjs test/declarative.test.mjs test/toggles.test.mjs test/wire.test.mjs test/client-storage.test.mjs","test:routes":"cd modules/routes && node --test --test-isolation=none test/breadcrumb-description.test.mjs test/description-contract.test.mjs test/description.test.mjs test/navigation.test.mjs test/routes.test.mjs","build:client":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd -p modules/client/tsconfig.json && cd modules/client && ..\\..\\..\\..\\deepseek-harness\\node_modules\\.bin\\tsdown.cmd","build:prompt":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd -p modules/prompt/tsconfig.json","build:routes":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd -p modules/routes/tsconfig.json","verify:gates":"pnpm run check-types:gates && pnpm run build:gates && pnpm run test:gates","test:markdown":"cd modules/markdown && node --test --test-isolation=none test/markdown.test.mjs test/anchors.test.mjs test/resolve.test.mjs test/rebase.test.mjs test/rename.test.mjs test/rename-posthoc.test.mjs test/normalize.test.mjs test/git-cache.test.mjs test/spawn-count.test.mjs test/plugin.test.mjs test/doc-link-gate.test.mjs test/metadata-check.test.mjs","test:subagent":"cd modules/subagent && node --test --test-isolation=none test/plugin.test.mjs","build:markdown":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd -p modules/markdown/tsconfig.json","eval:routes:dry":"dsh-review --dry-run modules/routes/eval/comprehension && dsh-review --dry-run modules/routes/eval/schema-intent","eval:prompt:mock":"dsh-eval run --profile headless --repo ../../deepseek-harness --mode mock modules/prompt/eval/behavior/mock","check-types:gates":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd --noEmit -p modules/gates/tsconfig.json","check-types:client":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd --noEmit -p modules/client/tsconfig.check.json","check-types:prompt":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd --noEmit -p modules/prompt/tsconfig.json","check-types:routes":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd --noEmit -p modules/routes/tsconfig.json","eval:markdown:mock":"dsh-eval run --profile headless --repo ../../deepseek-harness --mode mock modules/markdown/eval/behavior/mock","eval:markdown:real":"dsh-eval run --profile headless --repo ../../deepseek-harness modules/markdown/eval/behavior/real","eval:subagent:mock":"dsh-eval run --profile headless --repo ../../deepseek-harness --mode mock modules/subagent/eval/behavior/mock","eval:subagent:real":"dsh-eval run --profile headless --repo ../../deepseek-harness modules/subagent/eval/behavior/real","verify:package-face":"node scripts/verify-package-face.mjs","check-types:markdown":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd --noEmit -p modules/markdown/tsconfig.json","test:gates:composition":"cd modules/gates && node --test --test-isolation=none test/composition.test.mjs","verify:publish-readiness":"node scripts/verify-publish-readiness.mjs","eval:routes:comprehension":"dsh-review --profile headless --repo ../../deepseek-harness modules/routes/eval/comprehension","eval:routes:schema-intent":"dsh-review --profile headless --repo ../../deepseek-harness modules/routes/eval/schema-intent"},"_npmUser":{"name":"catheadowl","email":"493020956@qq.com"},"_resolved":"D:\\Document\\Projects\\dsh-extra\\.tmp\\publish-sim\\catheadowl-dsh-extras-0.1.0.tgz","_integrity":"sha512-8+wQObN4NZszO3VwNDk31j6FBbcN/UZ88YseHUFi0+EJcCbzp0StyIIh3/Pc4FrBtOLup1UbgxzUzcUFq4mAjQ==","deprecated":"broken: subagent row kills the plugin tree on clean installs (dsh-sdk-client is not in any dsh CLI installation closure); use 0.1.1+","_npmVersion":"11.12.1","description":"Curated extras for dsh: one npm package, several independent plugin modules — gates (turn-close quality gates), markdown (md_rename tool + doc-link gate), prompt (declarative prompt injection), routes (any_routes knowledge routing), subagent (subagent_at ","directories":{},"_nodeVersion":"24.11.1","dependencies":{"yaml":"^2.9.0","@types/mdast":"^4.0.4","mdast-util-gfm":"^3.1.0","micromark-extension-gfm":"^3.0.0","mdast-util-from-markdown":"^2.0.3"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.2.0","typescript":"^5.9.0","@types/node":"^22.0.0","@types/react":"^18.3.0","@catheadowl/dsh-eval":"file:../eval"},"peerDependencies":{"react":"*","@deepseek-ai/cordis":"*","@deepseek-ai/dsh-llm":"*","@deepseek-ai/dsh-jobs":"*","@deepseek-ai/dsh-agent":"*","@deepseek-ai/dsh-skill":"*","@deepseek-ai/dsh-tools":"*","@deepseek-ai/dsh-session":"*","@deepseek-ai/schemastery":"*","@deepseek-ai/dsh-commands":"*","@deepseek-ai/dsh-subagent":"*","@deepseek-ai/dsh-sdk-client":"*","@deepseek-ai/dsh-subprocess":"*","@deepseek-ai/dsh-token-meter":"*","@deepseek-ai/dsh-util-values":"*","@deepseek-ai/dsh-client-locale":"*","@deepseek-ai/dsh-client-ui-slots":"*","@deepseek-ai/dsh-typert-protocol":"*","@deepseek-ai/dsh-client-connection":"*","@deepseek-ai/dsh-client-ui-session":"*","@deepseek-ai/dsh-client-ui-renderer":"*","@deepseek-ai/dsh-client-ui-settings":"*","@deepseek-ai/dsh-session-projection":"*","@deepseek-ai/dsh-client-ui-workspace":"*","@deepseek-ai/dsh-client-ui-primitives":"*","@deepseek-ai/dsh-api-session-controller":"*","@deepseek-ai/dsh-api-workspace-controller":"*","@deepseek-ai/dsh-session-persistence-jsonl":"*","@deepseek-ai/dsh-client-ui-settings-plugins":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-extras_0.1.0_1788399709513_0.32991137425359796","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@catheadowl/dsh-extras","version":"0.1.1","license":"MIT","_id":"@catheadowl/dsh-extras@0.1.1","maintainers":[{"name":"catheadowl","email":"493020956@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"49a2bc46c7214d41dfaaf4407aa962aab1c2ac34","tarball":"https://registry.npmjs.org/@catheadowl/dsh-extras/-/dsh-extras-0.1.1.tgz","fileCount":143,"integrity":"sha512-He0uGl7yoSKAFroZr+L0Scc+v0JJB3+OcL829Vao1vXHwg5/GATxPl9+2/5CzkkyatpZXeBmQB+RTLOafpUU+Q==","signatures":[{"sig":"MEYCIQDm/T23XrQKH2kYMj3Y/aVOEugGVYkUFxdjR0x0b6a4GQIhAPBa8X68TPOpVSvAVcQSrxljVuaXPAm0Z/YDXY86WOXL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":536289},"type":"module","_from":"file:.tmp/publish-sim/catheadowl-dsh-extras-0.1.1.tgz","exports":{"./gates":{"types":"./modules/gates/lib/index.d.ts","default":"./modules/gates/lib/index.js"},"./prompt":{"types":"./modules/prompt/lib/index.d.ts","default":"./modules/prompt/lib/index.js"},"./routes":{"types":"./modules/routes/lib/index.d.ts","default":"./modules/routes/lib/index.js"},"./markdown":{"types":"./modules/markdown/lib/index.d.ts","default":"./modules/markdown/lib/index.js"},"./package.json":"./package.json","./gates/register":{"types":"./modules/gates/lib/register.d.ts","default":"./modules/gates/lib/register.js"},"./prompt/register":{"types":"./modules/prompt/lib/register.d.ts","default":"./modules/prompt/lib/register.js"},"./markdown/gate-check":{"types":"./modules/markdown/lib/gate-check.d.ts","default":"./modules/markdown/lib/gate-check.js"}},"scripts":{"build":"pnpm run build:gates && pnpm run build:markdown && pnpm run build:prompt && pnpm run build:routes && pnpm run build:client","prepack":"pnpm run build && pnpm run verify:package-face && pnpm run verify:publish-readiness","eval:gates":"dsh-eval run --profile headless --repo ../../deepseek-harness modules/gates/eval","test:gates":"cd modules/gates && node --test --test-isolation=none test/core.test.mjs test/dirty.test.mjs test/fixer.test.mjs test/repo-gates.test.mjs test/skills.test.mjs test/register.test.mjs test/face.test.mjs test/publish.test.mjs test/tool-surface.test.mjs test/toggles.test.mjs test/wire.test.mjs test/client-storage.test.mjs test/examples.test.mjs","build:gates":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd -p modules/gates/tsconfig.json","test:prompt":"cd modules/prompt && node --test --test-isolation=none test/fuzzy.test.mjs test/parse.test.mjs test/resolve.test.mjs test/enumerate.test.mjs test/core.test.mjs test/path-resolver.test.mjs test/register.test.mjs test/face.test.mjs test/declarative.test.mjs test/toggles.test.mjs test/wire.test.mjs test/client-storage.test.mjs","test:routes":"cd modules/routes && node --test --test-isolation=none test/breadcrumb-description.test.mjs test/description-contract.test.mjs test/description.test.mjs test/navigation.test.mjs test/routes.test.mjs","build:client":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd -p modules/client/tsconfig.json && cd modules/client && ..\\..\\..\\..\\deepseek-harness\\node_modules\\.bin\\tsdown.cmd","build:prompt":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd -p modules/prompt/tsconfig.json","build:routes":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd -p modules/routes/tsconfig.json","verify:gates":"pnpm run check-types:gates && pnpm run build:gates && pnpm run test:gates","test:markdown":"cd modules/markdown && node --test --test-isolation=none test/markdown.test.mjs test/anchors.test.mjs test/resolve.test.mjs test/rebase.test.mjs test/rename.test.mjs test/rename-posthoc.test.mjs test/normalize.test.mjs test/git-cache.test.mjs test/spawn-count.test.mjs test/plugin.test.mjs test/doc-link-gate.test.mjs test/metadata-check.test.mjs","build:markdown":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd -p modules/markdown/tsconfig.json","eval:routes:dry":"dsh-review --dry-run modules/routes/eval/comprehension && dsh-review --dry-run modules/routes/eval/schema-intent","eval:prompt:mock":"dsh-eval run --profile headless --repo ../../deepseek-harness --mode mock modules/prompt/eval/behavior/mock","check-types:gates":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd --noEmit -p modules/gates/tsconfig.json","check-types:client":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd --noEmit -p modules/client/tsconfig.check.json","check-types:prompt":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd --noEmit -p modules/prompt/tsconfig.json","check-types:routes":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd --noEmit -p modules/routes/tsconfig.json","eval:markdown:mock":"dsh-eval run --profile headless --repo ../../deepseek-harness --mode mock modules/markdown/eval/behavior/mock","eval:markdown:real":"dsh-eval run --profile headless --repo ../../deepseek-harness modules/markdown/eval/behavior/real","verify:package-face":"node scripts/verify-package-face.mjs","check-types:markdown":"..\\..\\deepseek-harness\\node_modules\\.bin\\tsc.cmd --noEmit -p modules/markdown/tsconfig.json","test:gates:composition":"cd modules/gates && node --test --test-isolation=none test/composition.test.mjs","verify:publish-readiness":"node scripts/verify-publish-readiness.mjs","eval:routes:comprehension":"dsh-review --profile headless --repo ../../deepseek-harness modules/routes/eval/comprehension","eval:routes:schema-intent":"dsh-review --profile headless --repo ../../deepseek-harness modules/routes/eval/schema-intent"},"_npmUser":{"name":"catheadowl","email":"493020956@qq.com"},"_resolved":"D:\\Document\\Projects\\dsh-extra\\.tmp\\publish-sim\\catheadowl-dsh-extras-0.1.1.tgz","_integrity":"sha512-He0uGl7yoSKAFroZr+L0Scc+v0JJB3+OcL829Vao1vXHwg5/GATxPl9+2/5CzkkyatpZXeBmQB+RTLOafpUU+Q==","_npmVersion":"11.12.1","description":"Curated extras for dsh: one npm package, several independent plugin modules — gates (turn-close quality gates), markdown (md_rename tool + doc-link gate), prompt (declarative prompt injection), routes (any_routes knowledge routing). `dsh plugin add @cathe","directories":{},"_nodeVersion":"24.11.1","dependencies":{"yaml":"^2.9.0","@types/mdast":"^4.0.4","mdast-util-gfm":"^3.1.0","micromark-extension-gfm":"^3.0.0","mdast-util-from-markdown":"^2.0.3"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.2.0","typescript":"^5.9.0","@types/node":"^22.0.0","@types/react":"^18.3.0","@catheadowl/dsh-eval":"file:../eval"},"peerDependencies":{"react":"*","@deepseek-ai/cordis":"*","@deepseek-ai/dsh-llm":"*","@deepseek-ai/dsh-jobs":"*","@deepseek-ai/dsh-agent":"*","@deepseek-ai/dsh-skill":"*","@deepseek-ai/dsh-tools":"*","@deepseek-ai/dsh-session":"*","@deepseek-ai/schemastery":"*","@deepseek-ai/dsh-commands":"*","@deepseek-ai/dsh-subagent":"*","@deepseek-ai/dsh-subprocess":"*","@deepseek-ai/dsh-token-meter":"*","@deepseek-ai/dsh-util-values":"*","@deepseek-ai/dsh-client-locale":"*","@deepseek-ai/dsh-client-ui-slots":"*","@deepseek-ai/dsh-typert-protocol":"*","@deepseek-ai/dsh-client-connection":"*","@deepseek-ai/dsh-client-ui-session":"*","@deepseek-ai/dsh-client-ui-renderer":"*","@deepseek-ai/dsh-client-ui-settings":"*","@deepseek-ai/dsh-session-projection":"*","@deepseek-ai/dsh-client-ui-workspace":"*","@deepseek-ai/dsh-client-ui-primitives":"*","@deepseek-ai/dsh-api-session-controller":"*","@deepseek-ai/dsh-api-workspace-controller":"*","@deepseek-ai/dsh-session-persistence-jsonl":"*","@deepseek-ai/dsh-client-ui-settings-plugins":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-extras_0.1.1_1788403890894_0.5624700924445805","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@catheadowl/dsh-extras","version":"0.1.2","license":"MIT","_id":"@catheadowl/dsh-extras@0.1.2","maintainers":[{"name":"catheadowl","email":"493020956@qq.com"}],"homepage":"https://github.com/CatheadOwl/dsh-extras#readme","bugs":{"url":"https://github.com/CatheadOwl/dsh-extras/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"838e427085ea9074bd99fd70b15210509b1dc534","tarball":"https://registry.npmjs.org/@catheadowl/dsh-extras/-/dsh-extras-0.1.2.tgz","fileCount":152,"integrity":"sha512-JSV18lDCCZfAiYfPNvPtIOtcaUEDjPzmzXUitRk0WrdxlYhDuwsTQLYVDK/d2ibm1O3igOqe2znQmfzx0yeYqw==","signatures":[{"sig":"MEYCIQD/hLMoV0Gwn0OBHJkCWR+jgbaw4wnliFBTLktqW71rPwIhAO4DUC9/BabiSaJ1HWn3OiLvMaTaV6ZSfBrRfpQlbrt7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@catheadowl%2fdsh-extras@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":591352},"type":"module","exports":{"./gates":{"types":"./modules/gates/lib/index.d.ts","default":"./modules/gates/lib/index.js"},"./prompt":{"types":"./modules/prompt/lib/index.d.ts","default":"./modules/prompt/lib/index.js"},"./routes":{"types":"./modules/routes/lib/index.d.ts","default":"./modules/routes/lib/index.js"},"./markdown":{"types":"./modules/markdown/lib/index.d.ts","default":"./modules/markdown/lib/index.js"},"./package.json":"./package.json","./gates/register":{"types":"./modules/gates/lib/register.d.ts","default":"./modules/gates/lib/register.js"},"./prompt/register":{"types":"./modules/prompt/lib/register.d.ts","default":"./modules/prompt/lib/register.js"},"./markdown/gate-check":{"types":"./modules/markdown/lib/gate-check.d.ts","default":"./modules/markdown/lib/gate-check.js"}},"gitHead":"ad6d98763e77cf5b85926bc32dde6e046c438327","scripts":{"build":"pnpm run build:gates && pnpm run build:markdown && pnpm run build:prompt && pnpm run build:routes && pnpm run build:client","prepack":"pnpm run build && pnpm run verify:package-face && pnpm run verify:publish-readiness && pnpm run verify:readme-i18n","eval:gates":"dsh-eval run modules/gates/eval","test:gates":"cd modules/gates && node --test --test-isolation=none test/core.test.mjs test/dirty.test.mjs test/fixer.test.mjs test/repo-gates.test.mjs test/skills.test.mjs test/register.test.mjs test/face.test.mjs test/publish.test.mjs test/tool-surface.test.mjs test/toggles.test.mjs test/wire.test.mjs test/client-storage.test.mjs test/examples.test.mjs","build:gates":"node ../../deepseek-harness/node_modules/typescript/bin/tsc -p modules/gates/tsconfig.json","test:prompt":"cd modules/prompt && node --test --test-isolation=none test/fuzzy.test.mjs test/parse.test.mjs test/resolve.test.mjs test/enumerate.test.mjs test/core.test.mjs test/path-resolver.test.mjs test/register.test.mjs test/face.test.mjs test/declarative.test.mjs test/toggles.test.mjs test/wire.test.mjs test/client-storage.test.mjs","test:routes":"cd modules/routes && node --test --test-isolation=none test/breadcrumb-description.test.mjs test/description-contract.test.mjs test/description.test.mjs test/navigation.test.mjs test/routes.test.mjs","build:client":"node ../../deepseek-harness/node_modules/typescript/bin/tsc -p modules/client/tsconfig.json && cd modules/client && node ../../../../deepseek-harness/node_modules/tsdown/dist/run.mjs","build:prompt":"node ../../deepseek-harness/node_modules/typescript/bin/tsc -p modules/prompt/tsconfig.json","build:routes":"node ../../deepseek-harness/node_modules/typescript/bin/tsc -p modules/routes/tsconfig.json","verify:gates":"pnpm run check-types:gates && pnpm run build:gates && pnpm run test:gates","test:markdown":"cd modules/markdown && node --test --test-isolation=none test/markdown.test.mjs test/anchors.test.mjs test/resolve.test.mjs test/rebase.test.mjs test/rename.test.mjs test/rename-posthoc.test.mjs test/normalize.test.mjs test/git-cache.test.mjs test/spawn-count.test.mjs test/plugin.test.mjs test/doc-link-gate.test.mjs test/metadata-check.test.mjs","build:markdown":"node ../../deepseek-harness/node_modules/typescript/bin/tsc -p modules/markdown/tsconfig.json","eval:routes:dry":"dsh-review --dry-run modules/routes/eval/comprehension && dsh-review --dry-run modules/routes/eval/schema-intent","eval:prompt:mock":"dsh-eval run --mode mock modules/prompt/eval/behavior/mock","check-types:gates":"node ../../deepseek-harness/node_modules/typescript/bin/tsc --noEmit -p modules/gates/tsconfig.json","check-types:client":"node ../../deepseek-harness/node_modules/typescript/bin/tsc --noEmit -p modules/client/tsconfig.check.json","check-types:prompt":"node ../../deepseek-harness/node_modules/typescript/bin/tsc --noEmit -p modules/prompt/tsconfig.json","check-types:routes":"node ../../deepseek-harness/node_modules/typescript/bin/tsc --noEmit -p modules/routes/tsconfig.json","eval:markdown:mock":"dsh-eval run --mode mock modules/markdown/eval/behavior/mock","eval:markdown:real":"dsh-eval run modules/markdown/eval/behavior/real","verify:readme-i18n":"node scripts/verify-readme-i18n.mjs","verify:package-face":"node scripts/verify-package-face.mjs","check-types:markdown":"node ../../deepseek-harness/node_modules/typescript/bin/tsc --noEmit -p modules/markdown/tsconfig.json","test:gates:composition":"cd modules/gates && node --test --test-isolation=none test/composition.test.mjs","verify:publish-readiness":"node scripts/verify-publish-readiness.mjs","eval:routes:comprehension":"dsh-review modules/routes/eval/comprehension","eval:routes:schema-intent":"dsh-review modules/routes/eval/schema-intent"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ba327f34-67b8-40a4-a9b2-4b2db230e750"}},"repository":{"url":"git+https://github.com/CatheadOwl/dsh-extras.git","type":"git"},"_npmVersion":"12.0.2","description":"Curated extras for dsh: one npm package, several independent plugin modules — gates (turn-close quality gates), markdown (md_rename tool + doc-link gate), prompt (declarative prompt injection), routes (any_routes knowledge routing). `dsh plugin add @cathe","directories":{},"_nodeVersion":"22.23.2","dependencies":{"yaml":"^2.9.0","@types/mdast":"^4.0.4","mdast-util-gfm":"^3.1.0","micromark-extension-gfm":"^3.0.0","mdast-util-from-markdown":"^2.0.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.7.0","devDependencies":{"react":"^18.2.0","typescript":"^5.9.0","@types/node":"^22.0.0","@types/react":"^18.3.0","@catheadowl/dsh-eval":"^0.2.0"},"peerDependencies":{"react":"*","@deepseek-ai/cordis":"*","@deepseek-ai/dsh-llm":"*","@deepseek-ai/dsh-agent":"*","@deepseek-ai/dsh-skill":"*","@deepseek-ai/dsh-tools":"*","@deepseek-ai/dsh-session":"*","@deepseek-ai/schemastery":"*","@deepseek-ai/dsh-commands":"*","@deepseek-ai/dsh-subagent":"*","@deepseek-ai/dsh-subprocess":"*","@deepseek-ai/dsh-token-meter":"*","@deepseek-ai/dsh-util-values":"*","@deepseek-ai/dsh-client-locale":"*","@deepseek-ai/dsh-client-ui-slots":"*","@deepseek-ai/dsh-typert-protocol":"*","@deepseek-ai/dsh-client-connection":"*","@deepseek-ai/dsh-client-ui-session":"*","@deepseek-ai/dsh-client-ui-renderer":"*","@deepseek-ai/dsh-client-ui-settings":"*","@deepseek-ai/dsh-session-projection":"*","@deepseek-ai/dsh-client-ui-workspace":"*","@deepseek-ai/dsh-client-ui-primitives":"*","@deepseek-ai/dsh-api-session-controller":"*","@deepseek-ai/dsh-api-workspace-controller":"*","@deepseek-ai/dsh-session-persistence-jsonl":"*","@deepseek-ai/dsh-client-ui-settings-plugins":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-extras_0.1.2_1788606746088_0.7227615433374199","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@catheadowl/dsh-extras","version":"0.2.0","license":"MIT","_id":"@catheadowl/dsh-extras@0.2.0","maintainers":[{"name":"catheadowl","email":"493020956@qq.com"}],"homepage":"https://github.com/CatheadOwl/dsh-extras#readme","bugs":{"url":"https://github.com/CatheadOwl/dsh-extras/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"9707e8463666d4921304ff1214d0fc0653b8713e","tarball":"https://registry.npmjs.org/@catheadowl/dsh-extras/-/dsh-extras-0.2.0.tgz","fileCount":158,"integrity":"sha512-TbkXY/RwV8rSB37d6q6bDGZHP8osqya8TQUL87ij1QRRGoET8N9BHGwVdpy8LXNUdIrhdfjnH8n8duLOb8Urfw==","signatures":[{"sig":"MEUCIA0uRVaopzJmYe2oP2goFVzbvSbNDer2hhssn3yhqx3KAiEAtdZf7zI5nd0YD8F+yPzn3SMcj0E3e6JF3tY8BJV9FSU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@catheadowl%2fdsh-extras@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":664987},"type":"module","exports":{"./gates":{"types":"./modules/gates/lib/index.d.ts","default":"./modules/gates/lib/index.js"},"./prompt":{"types":"./modules/prompt/lib/index.d.ts","default":"./modules/prompt/lib/index.js"},"./routes":{"types":"./modules/routes/lib/index.d.ts","default":"./modules/routes/lib/index.js"},"./markdown":{"types":"./modules/markdown/lib/index.d.ts","default":"./modules/markdown/lib/index.js"},"./package.json":"./package.json","./gates/register":{"types":"./modules/gates/lib/register.d.ts","default":"./modules/gates/lib/register.js"},"./prompt/register":{"types":"./modules/prompt/lib/register.d.ts","default":"./modules/prompt/lib/register.js"},"./markdown/gate-check":{"types":"./modules/markdown/lib/gate-check.d.ts","default":"./modules/markdown/lib/gate-check.js"}},"gitHead":"daa0110c0dd2aef5497cc221d38446a93c64a448","scripts":{"build":"pnpm run build:gates && pnpm run build:markdown && pnpm run build:prompt && pnpm run build:routes && pnpm run build:client","prepack":"pnpm run build && pnpm run verify:package-face && pnpm run verify:publish-readiness && pnpm run verify:readme-i18n","eval:gates":"dsh-eval run modules/gates/eval","test:gates":"cd modules/gates && node --test --test-isolation=none test/core.test.mjs test/dirty.test.mjs test/fixer.test.mjs test/repo-gates.test.mjs test/skills.test.mjs test/register.test.mjs test/face.test.mjs test/publish.test.mjs test/tool-surface.test.mjs test/toggles.test.mjs test/wire.test.mjs test/client-storage.test.mjs test/examples.test.mjs","build:gates":"tsc -p modules/gates/tsconfig.json","test:prompt":"cd modules/prompt && node --test --test-isolation=none test/fuzzy.test.mjs test/parse.test.mjs test/resolve.test.mjs test/enumerate.test.mjs test/core.test.mjs test/sensor.test.mjs test/touch-lane.test.mjs test/path-resolver.test.mjs test/register.test.mjs test/face.test.mjs test/declarative.test.mjs test/toggles.test.mjs test/introspect.test.mjs test/wire.test.mjs test/client-storage.test.mjs test/examples.test.mjs","test:routes":"cd modules/routes && node --test --test-isolation=none test/breadcrumb-description.test.mjs test/description-contract.test.mjs test/description.test.mjs test/navigation.test.mjs test/routes.test.mjs","build:client":"tsc -p modules/client/tsconfig.json && cd modules/client && node ../../scripts/host-tool.mjs tsdown","build:prompt":"tsc -p modules/prompt/tsconfig.json","build:routes":"tsc -p modules/routes/tsconfig.json","verify:gates":"pnpm run check-types:gates && pnpm run build:gates && pnpm run test:gates","test:markdown":"cd modules/markdown && node --test --test-isolation=none test/markdown.test.mjs test/anchors.test.mjs test/resolve.test.mjs test/rebase.test.mjs test/rename.test.mjs test/rename-posthoc.test.mjs test/normalize.test.mjs test/git-cache.test.mjs test/spawn-count.test.mjs test/plugin.test.mjs test/doc-link-gate.test.mjs test/metadata-check.test.mjs","build:markdown":"tsc -p modules/markdown/tsconfig.json","eval:routes:dry":"dsh-review --dry-run modules/routes/eval/comprehension && dsh-review --dry-run modules/routes/eval/schema-intent","eval:prompt:mock":"dsh-eval run --mode mock modules/prompt/eval/behavior/mock","check-types:gates":"tsc --noEmit -p modules/gates/tsconfig.json","check-types:client":"tsc --noEmit -p modules/client/tsconfig.check.json","check-types:prompt":"tsc --noEmit -p modules/prompt/tsconfig.json","check-types:routes":"tsc --noEmit -p modules/routes/tsconfig.json","eval:markdown:mock":"dsh-eval run --mode mock modules/markdown/eval/behavior/mock","eval:markdown:real":"dsh-eval run modules/markdown/eval/behavior/real","verify:readme-i18n":"node scripts/verify-readme-i18n.mjs","verify:package-face":"node scripts/verify-package-face.mjs","check-types:markdown":"tsc --noEmit -p modules/markdown/tsconfig.json","test:gates:composition":"cd modules/gates && node --test --test-isolation=none test/composition.test.mjs","verify:publish-readiness":"node scripts/verify-publish-readiness.mjs","eval:routes:comprehension":"dsh-review modules/routes/eval/comprehension","eval:routes:schema-intent":"dsh-review modules/routes/eval/schema-intent"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ba327f34-67b8-40a4-a9b2-4b2db230e750"}},"repository":{"url":"git+https://github.com/CatheadOwl/dsh-extras.git","type":"git"},"_npmVersion":"12.0.2","description":"Curated extras for dsh: one npm package, several independent plugin modules — gates (turn-close quality gates), markdown (md_rename tool + doc-link gate), prompt (declarative prompt injection), routes (any_nav knowledge routing). `dsh plugin add @catheado","directories":{},"_nodeVersion":"22.23.2","dependencies":{"yaml":"^2.9.0","@types/mdast":"^4.0.4","mdast-util-gfm":"^3.1.0","micromark-extension-gfm":"^3.0.0","mdast-util-from-markdown":"^2.0.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.7.0","devDependencies":{"react":"^18.2.0","typescript":"^5.9.0","@types/node":"^22.0.0","@types/react":"^18.3.0","@catheadowl/dsh-eval":"^0.2.0"},"peerDependencies":{"react":"*","@deepseek-ai/cordis":"*","@deepseek-ai/dsh-llm":"*","@deepseek-ai/dsh-agent":"*","@deepseek-ai/dsh-skill":"*","@deepseek-ai/dsh-tools":"*","@deepseek-ai/dsh-session":"*","@deepseek-ai/schemastery":"*","@deepseek-ai/dsh-commands":"*","@deepseek-ai/dsh-subagent":"*","@deepseek-ai/dsh-subprocess":"*","@deepseek-ai/dsh-token-meter":"*","@deepseek-ai/dsh-util-values":"*","@deepseek-ai/dsh-client-locale":"*","@deepseek-ai/dsh-client-ui-slots":"*","@deepseek-ai/dsh-typert-protocol":"*","@deepseek-ai/dsh-client-connection":"*","@deepseek-ai/dsh-client-ui-session":"*","@deepseek-ai/dsh-client-ui-renderer":"*","@deepseek-ai/dsh-client-ui-settings":"*","@deepseek-ai/dsh-session-projection":"*","@deepseek-ai/dsh-client-ui-workspace":"*","@deepseek-ai/dsh-client-ui-primitives":"*","@deepseek-ai/dsh-api-session-controller":"*","@deepseek-ai/dsh-api-workspace-controller":"*","@deepseek-ai/dsh-session-persistence-jsonl":"*","@deepseek-ai/dsh-client-ui-settings-plugins":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-extras_0.2.0_1788843905393_0.7845243723668498","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@catheadowl/dsh-extras","description":"Curated extras for dsh: one npm package, several independent plugin modules — gates (turn-close quality gates), markdown (md_rename tool + doc-link gate), prompt (declarative prompt injection), routes (any_nav knowledge routing). `dsh plugin add @catheado","version":"0.2.1","license":"MIT","repository":{"type":"git","url":"git+https://github.com/CatheadOwl/dsh-extras.git"},"type":"module","packageManager":"pnpm@11.7.0","exports":{"./gates":{"types":"./modules/gates/lib/index.d.ts","default":"./modules/gates/lib/index.js"},"./markdown":{"types":"./modules/markdown/lib/index.d.ts","default":"./modules/markdown/lib/index.js"},"./prompt":{"types":"./modules/prompt/lib/index.d.ts","default":"./modules/prompt/lib/index.js"},"./routes":{"types":"./modules/routes/lib/index.d.ts","default":"./modules/routes/lib/index.js"},"./gates/register":{"types":"./modules/gates/lib/register.d.ts","default":"./modules/gates/lib/register.js"},"./prompt/register":{"types":"./modules/prompt/lib/register.d.ts","default":"./modules/prompt/lib/register.js"},"./markdown/gate-check":{"types":"./modules/markdown/lib/gate-check.d.ts","default":"./modules/markdown/lib/gate-check.js"},"./package.json":"./package.json"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"scripts":{"build":"pnpm run build:gates && pnpm run build:markdown && pnpm run build:prompt && pnpm run build:routes && pnpm run build:client","build:gates":"tsc -p modules/gates/tsconfig.json","check-types:gates":"tsc --noEmit -p modules/gates/tsconfig.json","test:gates":"cd modules/gates && node --test --test-isolation=none test/core.test.mjs test/dirty.test.mjs test/host-api.test.mjs test/fixer.test.mjs test/repo-gates.test.mjs test/skills.test.mjs test/register.test.mjs test/face.test.mjs test/publish.test.mjs test/tool-surface.test.mjs test/toggles.test.mjs test/wire.test.mjs test/client-storage.test.mjs test/examples.test.mjs","test:gates:composition":"cd modules/gates && node --test --test-isolation=none test/composition.test.mjs","verify:gates":"pnpm run check-types:gates && pnpm run build:gates && pnpm run test:gates","build:markdown":"tsc -p modules/markdown/tsconfig.json","check-types:markdown":"tsc --noEmit -p modules/markdown/tsconfig.json","test:markdown":"cd modules/markdown && node --test --test-isolation=none test/markdown.test.mjs test/anchors.test.mjs test/resolve.test.mjs test/rebase.test.mjs test/rename.test.mjs test/rename-posthoc.test.mjs test/normalize.test.mjs test/git-cache.test.mjs test/spawn-count.test.mjs test/plugin.test.mjs test/doc-link-gate.test.mjs test/metadata-check.test.mjs","build:prompt":"tsc -p modules/prompt/tsconfig.json","check-types:prompt":"tsc --noEmit -p modules/prompt/tsconfig.json","test:prompt":"cd modules/prompt && node --test --test-isolation=none test/fuzzy.test.mjs test/parse.test.mjs test/resolve.test.mjs test/enumerate.test.mjs test/core.test.mjs test/sensor.test.mjs test/touch-lane.test.mjs test/path-resolver.test.mjs test/register.test.mjs test/face.test.mjs test/declarative.test.mjs test/toggles.test.mjs test/introspect.test.mjs test/wire.test.mjs test/client-storage.test.mjs test/examples.test.mjs","build:routes":"tsc -p modules/routes/tsconfig.json","check-types:routes":"tsc --noEmit -p modules/routes/tsconfig.json","test:routes":"cd modules/routes && node --test --test-isolation=none test/breadcrumb-description.test.mjs test/description-contract.test.mjs test/description.test.mjs test/navigation.test.mjs test/routes.test.mjs","eval:gates":"dsh-eval run modules/gates/eval","eval:markdown:mock":"dsh-eval run --mode mock modules/markdown/eval/behavior/mock","eval:markdown:real":"dsh-eval run modules/markdown/eval/behavior/real","eval:prompt:mock":"dsh-eval run --mode mock modules/prompt/eval/behavior/mock","eval:routes:comprehension":"dsh-review modules/routes/eval/comprehension","eval:routes:schema-intent":"dsh-review modules/routes/eval/schema-intent","eval:routes:dry":"dsh-review --dry-run modules/routes/eval/comprehension && dsh-review --dry-run modules/routes/eval/schema-intent","build:client":"tsc -p modules/client/tsconfig.json && cd modules/client && node ../../scripts/host-tool.mjs tsdown","check-types:client":"tsc --noEmit -p modules/client/tsconfig.check.json","verify:package-face":"node scripts/verify-package-face.mjs","verify:publish-readiness":"node scripts/verify-publish-readiness.mjs","verify:readme-i18n":"node scripts/verify-readme-i18n.mjs","prepack":"pnpm run build && pnpm run verify:package-face && pnpm run verify:publish-readiness && pnpm run verify:readme-i18n"},"peerDependencies":{"@deepseek-ai/cordis":"*","@deepseek-ai/dsh-agent":"*","@deepseek-ai/dsh-api-session-controller":"*","@deepseek-ai/dsh-api-workspace-controller":"*","@deepseek-ai/dsh-client-connection":"*","@deepseek-ai/dsh-client-locale":"*","@deepseek-ai/dsh-client-ui-primitives":"*","@deepseek-ai/dsh-client-ui-renderer":"*","@deepseek-ai/dsh-client-ui-session":"*","@deepseek-ai/dsh-client-ui-settings":"*","@deepseek-ai/dsh-client-ui-settings-plugins":"*","@deepseek-ai/dsh-client-ui-slots":"*","@deepseek-ai/dsh-client-ui-workspace":"*","@deepseek-ai/dsh-commands":"*","@deepseek-ai/dsh-llm":"*","@deepseek-ai/dsh-session":"*","@deepseek-ai/dsh-session-persistence-jsonl":"*","@deepseek-ai/dsh-session-projection":"*","@deepseek-ai/dsh-skill":"*","@deepseek-ai/dsh-subagent":"*","@deepseek-ai/dsh-subprocess":"*","@deepseek-ai/dsh-token-meter":"*","@deepseek-ai/dsh-tools":"*","@deepseek-ai/dsh-typert-protocol":"*","@deepseek-ai/dsh-util-values":"*","@deepseek-ai/schemastery":"*","react":"*"},"dependencies":{"@types/mdast":"^4.0.4","mdast-util-from-markdown":"^2.0.3","mdast-util-gfm":"^3.1.0","micromark-extension-gfm":"^3.0.0","yaml":"^2.9.0"},"devDependencies":{"@catheadowl/dsh-eval":"^0.2.0","@types/node":"^22.0.0","@types/react":"^18.3.0","react":"^18.2.0","typescript":"^5.9.0"},"gitHead":"d943d6c05596b27774d2108c7c0adc67c18efeb9","_id":"@catheadowl/dsh-extras@0.2.1","bugs":{"url":"https://github.com/CatheadOwl/dsh-extras/issues"},"homepage":"https://github.com/CatheadOwl/dsh-extras#readme","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-lbZ5gz0RCCXxOTJOy7e8sg/+0BWz9Ecug0lGSKrOa7S91eU0POh3VfAJJNX4fY3TOheEVRI2dx04EJ6QpJ2l1g==","shasum":"bc07851e3e76ae593fd3cfbaddb9b8bcee173cdd","tarball":"https://registry.npmjs.org/@catheadowl/dsh-extras/-/dsh-extras-0.2.1.tgz","fileCount":160,"unpackedSize":670569,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@catheadowl%2fdsh-extras@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDPmH0Ilx5raFZWczp1Ys/S7HBeyntqhhqUNVEUKMFZiAIgNDOwmm9eD9XNXwzh7k3cEPXK8y8XQaMJn5V/QqqN9cE="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ba327f34-67b8-40a4-a9b2-4b2db230e750"}},"directories":{},"maintainers":[{"name":"catheadowl","email":"493020956@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-extras_0.2.1_1789100276787_0.3300713908323465"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-03T01:41:49.284Z","modified":"2026-09-11T04:17:57.339Z","0.1.0":"2026-09-03T01:41:49.649Z","0.1.1":"2026-09-03T02:51:31.097Z","0.1.2":"2026-09-05T11:12:26.238Z","0.2.0":"2026-09-08T05:05:05.563Z","0.2.1":"2026-09-11T04:17:56.943Z"},"bugs":{"url":"https://github.com/CatheadOwl/dsh-extras/issues"},"license":"MIT","homepage":"https://github.com/CatheadOwl/dsh-extras#readme","repository":{"type":"git","url":"git+https://github.com/CatheadOwl/dsh-extras.git"},"description":"Curated extras for dsh: one npm package, several independent plugin modules — gates (turn-close quality gates), markdown (md_rename tool + doc-link gate), prompt (declarative prompt injection), routes (any_nav knowledge routing). `dsh plugin add @catheado","maintainers":[{"name":"catheadowl","email":"493020956@qq.com"}],"readme":"# @catheadowl/dsh-extras\n\n[English](README.md) | 中文\n\n**做 harness 就是做 docs。**`@catheadowl/dsh-extras` 是一次 opinionated 的尝试：让 [dsh](https://github.com/deepseek-ai/deepseek-harness) agent 所依赖的知识做到文档健康与可导航。它把两个常用的 dsh hook 包装成可组合的基础框架——`agent/turn-stopping`（轮末）上的 gates 与 `agent/pre-step` 上的 prompt 中间件，各给一个注册面（`registerGate` / `registerPromptMiddlewareProvider`），而不是每个插件各自裸挂 hook——并随包交付该立场的落地：Markdown 链接治理、按路径注入上下文、知识库路由视图。\n\n`dsh plugin add` 一次全装，每个模块是组合里可独立开关的一行（按行 id 标识），不需要的行关掉即可，互不影响。本包与 dsh 宿主的关系、为什么要包装宿主 hook，见 [docs/host.md](docs/host.md)。\n\n## 安装\n\n```powershell\ndsh plugin add @catheadowl/dsh-extras\n```\n\n要求：已安装 dsh CLI。所有运行时依赖由 dsh 宿主提供（peerDependencies，`plugin add` 时随宿主解析），本包自身只带少量纯 JS 工具依赖。\n\n## 模块\n\n扩展框架（面向消费插件的注册面）：\n\n| 模块 | 行 id | 提供什么 | 文档 |\n|---|---|---|---|\n| gates | `gates` | 质量门禁框架（`ctx.gates`）：turn 收尾自动运行的可组合 gate 与 `registerGate` 消费面 | [modules/gates/README.md](modules/gates/README.md) |\n| prompt | `prompt` | prompt 中间件框架（`ctx.promptMiddleware`）：`agent/pre-step` 上的 provider 注册表，把用户提示词中的路径提及变成受预算约束的 relates 上下文；`registerPromptMiddlewareProvider` / `registerRelatesProvider` 消费面 | [modules/prompt/README.md](modules/prompt/README.md) |\n\n工具与消费行：\n\n| 模块 | 行 id | 提供什么 | 文档 |\n|---|---|---|---|\n| markdown | `markdown` | `md_rename` 工具（搬移并改写 Markdown 内链）+ `doc-link` gate + 内置链接事务库 | [modules/markdown/README.md](modules/markdown/README.md) |\n| routes | `routes` | `any_nav` 工具（Markdown 知识库路由视图）+ breadcrumb relates provider（一个 prompt 中间件 provider） | [modules/routes/README.md](modules/routes/README.md) |\n\n每个模块是宿主插件组合里可独立开关的一行：不共享状态，关掉任何一行，其余模块行为不变。\n\n## 配置\n\n在你的 profile patch 层按行 id 单关一个模块：\n\n```yaml\n- id: gates\n  disabled: true\n```\n\n带默认配置的模块可覆写。各行的全部配置键：\n\n| 行 | 配置键 |\n|---|---|\n| gates | `maxConsecutiveBlocks`（连续阻断上限，默认 3，耗尽后降级放行） |\n| prompt | `providerTimeoutMs` / `totalTimeoutMs` / `renderBudgetChars`（见下例） |\n| markdown / routes | 无插件配置键 |\n\n```yaml\n- id: prompt\n  config:\n    providerTimeoutMs: 2000\n    totalTimeoutMs: 5000\n    renderBudgetChars: 4000\n```\n\n模块上下架走包版本更新：升级本包后 `dsh plugin update` 收缩/扩展组合行。\n\n## API 面\n\n除组合行外，本包导出插件开发者消费的稳定子路径：\n\n- `@catheadowl/dsh-extras/gates/register`——gates 插件消费面（`registerGate` + `GateDefinition` / `GateViolation` 类型）。\n- `@catheadowl/dsh-extras/prompt/register`——prompt 中间件消费面（`registerPromptMiddlewareProvider` / `registerRelatesProvider` + provider 类型）。\n\n各模块自己的次级消费面（如 markdown 的仓库级 `gates.yml` 回退）见对应模块文档。\nWeb Settings Tab（gates / prompt）随本包内嵌合成装载，不需要单独安装。\n\n模块间依赖拓扑与对外消费面（exports 对账）见 [docs/dependencies.md](docs/dependencies.md)。\n\n## 开发\n\n```powershell\n# 从仓库根目录\npnpm run build                  # 四模块 lib + client bundle\npnpm run test:gates             # 各模块单测（test:markdown / test:prompt / test:routes）\npnpm run verify:package-face    # exports / facade 校验\npnpm run verify:publish-readiness  # 发布卫生校验（docs locality、host closure 等）\n```\n\n开发细节——宿主 checkout 摆放、工具链借用、peer junction 接线、host-closure 网络检查——见 [docs/development.md](docs/development.md)。\n\n## 已知限制\n\n- 需要 dsh CLI（本包是插件载体，不是独立应用）；运行时 peer 全部由宿主闭包提供。\n- 根 README 双语（英文主 + 中文），模块页与深度 docs 以中文为主。\n- Settings Tab 目前仅 gates / prompt 两行有（随内置 client 子包 `modules/client` 合成装载，不单独发布）。\n- gates 连续阻断上限（`maxConsecutiveBlocks`，默认 3）耗尽后**降级放行**——是安全阀不是正确性保证；markdown / routes 行无插件配置键。\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.zh.md"}