{
  "name": "dsh-mask",
  "description": "PII masking middleware for DeepSeek Harness: regex-detect and replace phones, emails, ID cards, bank cards, keys, and (opt-in) IPs with placeholders before they reach the model, keep the restore table host-side (memory plus a controlled storage domain, never the session log) with the /mask restore command and the exported RestoreStore seam, and expose /mask status and the mask_test tool. Name and address recognition needs an external NER recognizer, which this pure-host form does not bundle: mode \"regex+ner\" and the person/address entities fail loudly at load. The phone and ID-card detectors match mainland-China formats only.",
  "version": "0.2.23",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/PerryLink/dsh-mask.git"
  },
  "homepage": "https://github.com/PerryLink/dsh-mask#readme",
  "bugs": {
    "url": "https://github.com/PerryLink/dsh-mask/issues"
  },
  "author": "PerryLink",
  "type": "module",
  "main": "./index.mjs",
  "types": "./types.d.ts",
  "exports": {
    ".": {
      "types": "./types.d.ts",
      "default": "./index.mjs"
    },
    "./cordis.patch.yml": "./cordis.patch.yml",
    "./package.json": "./package.json"
  },
  "files": [
    "index.mjs",
    "types.d.ts",
    "lib",
    "cordis.patch.yml",
    "README.md",
    "README-zh.md",
    "README-es.md",
    "README-pt.md",
    "README-hi.md",
    "ARCHITECTURE.md",
    "CHANGELOG.md",
    "SECURITY.md",
    "LICENSE",
    "THIRD_PARTY_NOTICES.md"
  ],
  "dsh": {
    "manifestVersion": 1,
    "bundle": {
      "patch": "./cordis.patch.yml"
    }
  },
  "dshWorkshop": {
    "schema": "omdsh-workshop-package/v1",
    "type": "plugin",
    "integration": {
      "protocol": "harness-profile",
      "artifact": "cordis.patch.yml"
    },
    "install": {
      "mode": "transactional",
      "adapter": "profile-bundle",
      "failurePolicy": "generation-rollback",
      "touchesCurrentBeforeActivation": false
    },
    "lifecycle": {
      "activation": "restart-profile",
      "dispose": "supported"
    },
    "permissions": [
      "filesystem:read",
      "filesystem:write",
      "storage-domain:read",
      "storage-domain:write",
      "session-log:read",
      "credentials:none",
      "network:none"
    ],
    "compatibility": {
      "dshVersions": [
        "0.1.2-rc.1",
        "0.1.5-rc.2",
        "0.1.7-alpha.2",
        "0.1.7-rc.1",
        "0.1.7-rc.2",
        "0.2.1-alpha.1",
        "0.2.1-rc.2"
      ]
    },
    "capability": {
      "id": "mask",
      "kind": "command",
      "invocation": "/mask status",
      "expected": "the /mask command is registered on the commands service: status reports masked counts and type distribution, on/off toggles masking at runtime, restore <text> unmaps placeholders back to the values stored for this session and delivers the plaintext as a controlled file whose path (never the plaintext) is what the command result and the session log carry; mask_test tool masks a snippet and reports the placeholder result"
    },
    "evidence": {
      "install": null,
      "failureIsolation": null,
      "hotReload": null,
      "remove": null
    }
  },
  "peerDependencies": {
    "@deepseek-ai/cordis": "^4.0.5",
    "@deepseek-ai/dsh-commands": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
    "@deepseek-ai/dsh-session": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
    "@deepseek-ai/dsh-storage": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
    "@deepseek-ai/dsh-storage-domain": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
    "@deepseek-ai/dsh-storage-json": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
    "@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
    "@deepseek-ai/schemastery": "^3.18.5-alpha.2"
  },
  "dependencies": {
    "zod": "4.4.3"
  },
  "devDependencies": {
    "@deepseek-ai/dsh-attachment": "0.2.1-rc.2",
    "@deepseek-ai/cordis": "^4.0.5",
    "@deepseek-ai/cordis-plugin-include": "^1.0.10-alpha.2",
    "@deepseek-ai/cordis-plugin-loader": "^1.0.6",
    "@deepseek-ai/dsh-agent": "0.2.1-rc.2",
    "@deepseek-ai/dsh-commands": "0.2.1-rc.2",
    "@deepseek-ai/dsh-session": "0.2.1-rc.2",
    "@deepseek-ai/dsh-storage": "0.2.1-rc.2",
    "@deepseek-ai/dsh-storage-domain": "0.2.1-rc.2",
    "@deepseek-ai/dsh-storage-json": "0.2.1-rc.2",
    "@deepseek-ai/dsh-system-prompt": "0.2.1-rc.2",
    "@deepseek-ai/dsh-tools": "0.2.1-rc.2",
    "@deepseek-ai/schemastery": "^3.18.5-alpha.2",
    "@types/node": "^22.19.0",
    "oxlint": "0.18.1",
    "typescript": "^5.9.0",
    "@deepseek-ai/dsh-working-directory": "0.2.1-rc.2"
  },
  "scripts": {
    "typecheck": "tsc -p tsconfig.check.json",
    "typecheck:ci": "tsc -p tsconfig.check.ci.json",
    "test": "node --test \"test/*.test.mjs\"",
    "coverage": "node --test --experimental-test-coverage \"test/*.test.mjs\"",
    "lint": "oxlint",
    "verify:self-contained": "node scripts/verify-self-contained.mjs",
    "check:lockfile": "node scripts/check-lockfile-drift.mjs",
    "verify:artifacts": "node scripts/verify-artifacts.mjs",
    "check:readmes": "node scripts/verify-readmes.mjs"
  },
  "keywords": [
    "dsh",
    "dsh-plugin",
    "deepseek-harness",
    "deepseek",
    "cordis",
    "pii",
    "mask",
    "privacy",
    "anonymization",
    "security"
  ],
  "engines": {
    "node": "^22.19.0 || >=24.0.0",
    "dsh": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0"
  },
  "packageManager": "pnpm@11.7.0",
  "publishConfig": {
    "access": "public"
  },
  "license": "Apache-2.0",
  "funding": {
    "type": "individual",
    "url": "https://github.com/sponsors/PerryLink"
  }
}
