Zum Hauptinhalt springen
L

dsh-large-jsonl-viewer (large-jsonl-viewer)

liaojianjin/dsh-large-jsonl-viewer/packages/plugins/large-jsonl-viewer

Read-only JSONL and NDJSON viewer with a byte index, record navigation, and streaming previews for large records. Host DSH 0.2.1-rc.2; other versions are not declared compatible.

Installation

dsh plugin --profile web add github:liaojianjin/dsh-large-jsonl-viewer

Dieses Plugin befindet sich im Unterverzeichnis packages/plugins/large-jsonl-viewer des Repositorys.

README

Large JSONL Viewer icon

Large JSONL Viewer

Large files. One record at a time.

A read-only JSONL & NDJSON viewer inside DeepSeek Harness.

npm version Read-only viewer GitHub release Requires DSH >=0.2.1-rc.2 MIT license

English · 简体中文

Features · Install · Benchmarks · FAQ

Browse records by physical line, preserve the original JSON, and inspect oversized records through paged structure and text windows. Files stay in the Host filesystem; this plugin makes no model calls and adds no file contents to chat context.

Actual Harness preview showing physical line 101, a large integer and the structure panel
Actual Harness UI · physical-line navigation · lossless formatting · structure navigation

✨ Features

🧭 Jump to any record
First/previous/next/last, physical-line jumps, random sampling and back/forward history. The initial selector exposes the first 100 indexed lines.
🧾 Keep JSON faithful
Formatting preserves number lexemes, duplicate keys, key order and escapes. Large integers remain exact text.
🌲 Navigate the structure
Read-only Monaco, folding, expansion depth, key navigation, current-record find, word wrap and focus mode.
🌊 Inspect oversized records
Above the ordinary-record budget, switch to paged structure and bounded 64 KiB text windows.
🧩 Open from the file panel
Native document preview for .jsonl / .ndjson, with an optional native file route for Better Sidebar 0.28.0.
💾 Export original bytes
Keep the record and its original line separator. Stream to a native save picker when available; Blob fallback is capped at 16 MiB.
🗂️ Working directory file tree
Open “File tree” to browse folders and files from the current session's working directory, including in fullscreen.
↔️ Keep your place
Switch files without losing record position, expanded folders or tree scrolling; use “Reveal current file” when needed.

File tree rooted at the session working directory, preserving expansion and scrolling between JSONL files
0.1.3 · Working directory file tree · Retained expansion and scrolling

Inside Desktop

Ordinary recordsOversized records
Official Desktop with Better Sidebar: physical line 101, exact integer and duplicate keysOfficial Desktop: a 32 MiB record with an expanded array and its original byte window
Exact 9007199254740993, duplicate keys and navigation history.A 32 MiB record, paged structure and the [1,2,3] byte window.

Screenshots use generated test data. Full Desktop validation →

🚀 Installation

Requires DeepSeek Harness >=0.2.1-rc.2. rc.2 and later versions are allowed, including prereleases. See the validation report for the actual rc.2 / rc.3 Web, official Desktop and Better Sidebar coverage.

Desktop

Open Plugins → Add plugin, enter the package name, install, then choose Enable now:

dsh-large-jsonl-viewer

Open a .jsonl or .ndjson file from the file panel. If Better Sidebar is enabled, JSONL files use this viewer and other files keep their existing editor. Reopen file tabs that were already open before installation.

Web / CLI

Install into an existing Web profile, then start or restart that profile:

dsh plugin --profile web add dsh-large-jsonl-viewer
dsh web

Desktop has its own plugin installation tree. A system CLI's web profile is not necessarily the Desktop profile.

Prebuilt Release archive & updating

Download the archive and SHA-256 checksums from v0.1.4, or paste its fixed URL into Desktop's Add plugin dialog:

https://github.com/liaojianjin/dsh-large-jsonl-viewer/releases/download/v0.1.4/dsh-large-jsonl-viewer-0.1.4.tgz

To replace an installed version in Desktop, uninstall this plugin from its detail page, then install and enable the new version. CLI installation/removal requires restarting the corresponding profile. The repository root is a private development workspace; use the prebuilt package for installation.

⌨️ Everyday controls

ActionControl
Working directory treeClick File tree to show / hide it; expand folders on demand; Reveal current file scrolls to the selection
Browse recordsPhysical-line input, first/last, previous/next, random
Switch recordsAlt+↑ / Alt+↓
Browse historyAlt+← / Alt+→
Inspect the current recordMore → raw/formatted, folding, find, copy, export
Inspect oversized recordsOpen a structure node → View bytes
Source file changedChoose Rebuild index before continuing

Shortcuts respond only while the viewer is focused. Random sampling uses the indexed range. Pausing/cancelling an index affects other views of that file in the same Session; cancelling a pending line jump affects only the current view.

📊 Measured performance

Backend measurements on macOS arm64 · Apple M5 Pro · 64 GiB · Node 26.7 · local SSD. OS caches were not evicted.

FixtureIndex session¹First record boundaryRandom read/parse p95Host + workers peak RSS
~1 GiB · 100 KiB/record413 ms33 ms33.6 ms280.4 MiB
~10 GiB · 100 KiB/record3894 ms33 ms31.4 ms286.0 MiB

¹ Includes index completion, closing and checkpoint commit. These are warm/uncontrolled-cache backend results, excluding browser RPC and Monaco rendering; total RSS includes the runtime, not just the plugin's incremental memory. They are not end-to-end UI latency guarantees.

32/256 MiB single-record scans and 1,000 backend record switches were also measured. Methodology, raw reports and limits →

⚙️ Configuration & limits

Defaults suit stable, uncompressed UTF-8 regular files. The source may be an object, array or scalar; blank lines still count as physical lines. Final-path symlinks, directories, devices and unknown-size sources are refused.

Host configuration

Override the plugin row in the profile's cordis.patch.yml using a complete configuration object:

- id: large-jsonl-viewer
  config:
    cacheDirectory: /absolute/path/to/jsonl-cache
    scanChunkMiB: 4
    recordLimitMiB: 8
    cacheLimitMiB: 512
    maxLines: 10000000
    maxFiles: 2
    maxViews: 32
    maxRecordTasks: 2
    pollMs: 2000

Scan chunks accept 1/4/8 MiB; the ordinary-record budget accepts 1–16 MiB. The default formatting budget is 16 MiB, 100,000 nodes, 128 levels and about 2 seconds; exceeding it switches to streaming mode. Streaming metadata is capped at 2,000 nodes and the parser stack at 2,048 levels. Later pages of long containers may require another scan.

Cache, filesystem and export boundaries
  • Host cache defaults to ~/.cache/dsh-large-jsonl-viewer. It stores byte indexes, versions and fingerprints, not record contents. An unwritable directory or writer-lock conflict falls back to temporary storage; temporary indexes are removed on close. Stale crash locks are not forcibly reclaimed.
  • Inactive caches use LRU eviction. Active indexes have explicit line and concurrency limits. Dense short-line files may reach the default 10-million-line cap; this is not a promise of unrestricted 100 GB support.
  • A browser connected to a remote Host reads that Host's filesystem. Stable source files are required; version checks are not transactional snapshots.
  • File System Access saves in chunks where supported. Other carriers use a Blob download capped at 16 MiB. Clipboard copying is limited to ordinary, valid UTF-8 records.
  • Preferences and history last until the tab closes. Record text is not stored in the persistent layout.

Scope: read-only viewing. Editing, automatic tailing, compressed files, whole-file search and cross-record JSONPath are not implemented. Windows/Linux, SSH, 50/100 GB, cold-cache performance, full browser p95 and long-run browser memory remain unverified. Compatibility notes →

❓ FAQ

QuestionAnswer
Better Sidebar still shows its own JSONL cards?Open the file again from its file tree. Tabs opened before installing retain their original viewer.
The source changed?Old content stops displaying. Explicitly rebuild the index to continue.
A record is too large for Monaco?Use the paged structure and text windows. The plugin enforces its configured record budgets.
Can it edit or send records to a model?It is read-only and makes no model calls. It does not add file contents to chat context.

🛠️ Development

pnpm install --frozen-lockfile
pnpm build
pnpm typecheck
pnpm test
pnpm test:integration
pnpm pack:plugin
pnpm test:packaging

Builds compile Host and Client separately, generate strict Typert protocols, and include Monaco, workers, fonts, CSS and licenses. No CDN or separate plugin server is needed. The pinned Typert analyzer needs a build-only declaration inventory; build notes explain it.

Changelog · Validation · Issues · Catalog submission

An additional scoped distribution is published through GitHub Packages Actions; the npmjs.org package and install command above retain their original identity.

📄 License & acknowledgements

MIT. The implementation adapts code from VS Code Large JSONL Viewer, reference commit 9c90a87433b82ab615094a39d0ef1c17dadbc5b7, and uses Harness APIs from reference commit 687f282e8625c6b8d11ff58211a90524be2e4317. See LICENSE and the package's third-party notices.

Ähnliche Plugins