Skip to content

Security: MengYuil/dsh-ponytail

Security

SECURITY.md

Security

Published runtime boundary

The npm package publishes only the runtime bundles, declarations, metadata, license, documentation, and Cordis patch. Development scripts under scripts/ are excluded from the tarball (verified by CI).

The package defines no preinstall, install, or postinstall lifecycle hook. The installed runtime entry does not import development scripts, and cordis.patch.yml only inserts the plugin bundle row — it never executes scripts.

Development tooling

scripts/lib/run-command.mjs and scripts/sync-dist.mjs use node:child_process.spawnSync to run local verification and build tools.

scripts/test-persistence.mjs starts four isolated real DSH test processes on Linux. Its test-only host helper sends SIGKILL to itself after a durability barrier, then the runner checks recovery in a new process. It never terminates user processes or uses user profiles/credentials; only an offline fixed-response model adapter is registered. This integration tooling is also excluded from the npm tarball and all runtime/install entry points.

scripts/test-host-ui.mjs installs an explicitly selected published DSH into a temporary test runtime and drives a real browser against an isolated local Profile. It starts/stops only its own child host, skips onboarding without entering credentials, and sends no model requests. Host tokens are redacted from retained diagnostics. This maintainer-only runner is excluded from the npm package and never runs during plugin installation.

They execute only when a maintainer explicitly runs the corresponding repository-maintainer command (node scripts/..., see package.dev.json). This is an intentional capability of local build tooling, not part of the installed plugin runtime. Arguments are passed as arrays. npm verification commands run without a shell on every platform; Windows invokes npm's CLI through the active Node executable. The distribution sync script uses a shell only for fixed checkout-local build-tool launchers on Windows. No command is fed by plugin runtime input, model output, or network input. DSH_CHECKOUT is used only as a local working directory / path resolution target — never as shell code.

Static-analysis disposition

Findings for child_process under scripts/** are classified as accepted development-tooling risk, provided that:

  • scripts/** remains excluded from the npm tarball;
  • no install lifecycle hook invokes it;
  • runtime entries do not import it;
  • command arguments do not accept untrusted runtime input.

CI verifies these boundaries (node scripts/verify-dist.mjs, node scripts/verify-pack.mjs).

Dynamic-code findings

Dynamic-code findings in published runtime bundles (e.g. the previously inlined new Function from schemastery) are tracked separately and are not covered by this accepted development-tooling disposition. Since v0.1.6 the shipped bundle is free of new Function / eval; CI's check-bundle step enforces that.

Reporting

Security issues in this plugin should be reported privately to the repository owner; this is a community port and is not covered by an official security program.

There aren't any published security advisories