source-package.json — Chat Cache Exporter

From version 0.1.2 of Chat Cache Exporter, shown publicly by its creator. 5.3 KiB · SHA-256 3460d4c5783b85734b2636f171ba4c327dcf1822bd0bc4e14a4982923fd87431.

{
  "schema_version": 1,
  "runtimes": [
    {
      "name": "python",
      "versions": [
        "3.10",
        "3.14"
      ]
    }
  ],
  "dependencies": [],
  "operations": [
    {
      "kind": "read",
      "description": "Scan and parse the whole user-selected Discord desktop cache, then filter summaries and exports by --channel when supplied.",
      "target_restrictions": [
        "Only regular non-symlink files directly inside the resolved cache directory",
        "--channel filters summaries and exports after the whole selected cache has been scanned and parsed; it does not restrict cache reads to selected channels."
      ]
    },
    {
      "kind": "create",
      "description": "Create a grouped JSON export and one local transcript per selected channel (export subcommand).",
      "target_restrictions": [
        "Only beneath the fully resolved --out directory, whose existing parent and destination identities (st_dev, st_ino) are bound by approval; no directories above --out are created",
        "Only channels selected through repeatable --channel arguments when supplied"
      ]
    }
  ],
  "authorization": {
    "mode": "none",
    "scopes": [],
    "credential_requirements": []
  },
  "network": {
    "domains": [],
    "destinations": [
      "No network destination: the only write target is the local filesystem beneath the resolved output directory approved at dry-run"
    ]
  },
  "safety": {
    "read_only_by_default": true,
    "dry_run_supported": true,
    "consequential_writes_require_authorization": true,
    "validation_controls": [
      "export requires an explicit --out directory chosen by the user",
      "export rejects output content other than its approval state so stale channel files cannot remain",
      "export --dry-run previews creation of --out itself if missing, changes an existing empty output directory to 0700 using fchmod for privacy, lists exact files, and writes only approval state inside --out; its parent must already exist",
      "export without --dry-run refuses before any export write unless approval binds the fully resolved destination, destination and existing parent identities (st_dev, st_ino), and freshly rendered plan",
      "unknown channel identifiers are rejected and available identifiers are reported",
      "partial scans remain marked incomplete and exit with status 2 unless --allow-partial is supplied",
      "array items that are not conforming message objects make the whole cached candidate unreadable and the result incomplete",
      "a failed live-export write removes only the files and directories that attempt created and keeps the approval state",
      "transcript continuation lines carry a fixed prefix and tabs and other control characters are escaped so message text cannot imitate a header line",
      "summary table cells escape control characters and malformed dates are shown as ????-??-??, so cached text cannot add or forge table rows",
      "zstd streams are decoded only with the standard library compression.zstd on Python 3.14 or newer and are otherwise counted as skipped",
      "export (including dry-run) supports macOS and Linux with os.O_NOFOLLOW, os.O_DIRECTORY, and os.open in os.supports_dir_fd; unsupported platforms including Windows refuse before any export write",
      "Live export compares os.fstat identities of opened parent and output directories with the approved digest before any mutation. Resolved components refuse symlinks; files use O_CREAT|O_EXCL|O_NOFOLLOW relative to verified descriptors.",
      "scan defaults support macOS, Windows, and Linux. --channel filters summaries and exports after the whole selected cache has been scanned and parsed; it does not restrict cache reads to selected channels.",
      "Dry-run resolves --out once with os.path.realpath and binds that previewed path, permitting initial symlink prefixes. Both modes walk resolved components with no-follow descriptors, refusing later symlinks; live uses the stored path."
    ],
    "target_restrictions": [
      "Read only regular non-symlink files directly inside the resolved cache directory; --channel filters summaries and exports after the whole selected cache has been scanned and parsed; it does not restrict cache reads to selected channels.",
      "Only beneath the fully resolved --out directory, whose existing parent and destination identities (st_dev, st_ino) are bound by approval; no directories above --out are created",
      "Export only channels selected through repeatable --channel arguments when supplied"
    ]
  },
  "tests": {
    "files": [
      "tests/test_discord_cache_export.py"
    ],
    "fixtures": "synthetic_only",
    "provenance": "creator",
    "evidence": [
      "Creator-authored standard-library unittest suite invoking the CLI as a subprocess with synthetic cache entries",
      "Covers scan, export, approval gate, channel filtering, file modes, deduplication, sorting, transcript framing, escape formats, failed-write cleanup, zstd and partial results.",
      "Synthetic regressions cover destination and parent identity changes, directory swaps during live opening, later symlink replacement, symlinked output prefixes, missing parents, and unsupported no-follow directory-descriptor platforms.",
      "Asserts shipped-file inventory and hygiene boundaries without real cache data or network access"
    ]
  }
}

License: MIT (read it).

MITMIT License

Copyright (c) 2026 Zero Width Lab

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Back to the listing