Skip to content

feat(distribution): evaluate a Node.js/TypeScript client and npm package #186

Open

Description

@abruption

Goal

Determine whether session-peer should offer a supported npm package for Node.js/TypeScript users and, only after choosing an explicit architecture, implement and publish that package. codex-unlock is already a separate TypeScript/npm product; this issue concerns session-peer.

First decision: what does npm install provide?

Compare and document at least these options before coding a public package:

  1. A thin TypeScript adapter that invokes an explicitly installed, version-checked Python session-peer CLI (no hidden Python installation or runtime download).
  2. An independently implemented Node.js CLI/client with no Python requirement.
  3. No npm package if demand does not justify a second security-sensitive runtime.

The chosen package must state its platform and runtime prerequisites, ownership/update model, and feature scope. Do not label a Python-dependent wrapper as a Python-free implementation. Do not port or replace the hosted Relay service as part of this issue.

Compatibility and safety gates

  • Keep Python v1 CLI/JSON compatibility as the reference contract. Define a cross-runtime conformance suite using the existing compatibility fixtures and tests before any native port.
  • Preserve the distinction between target discovery, dry-run validation, submission/queueing, actual consumption/ACK, and unknown outcomes. Never retry an uncertain send automatically.
  • Preserve target identity and live-writer checks, SSH destination validation, reply-route behavior, output schema and exit semantics, and the local/SSH/paired-device security boundaries for whichever features are claimed supported. Unsupported features must fail explicitly, not silently degrade.
  • Exercise macOS, Linux, and Windows only where the package claims support; include real native inbox/queue integration tests rather than only mocks. Keep tokens, keys, and message bodies out of diagnostics.
  • If publishing: use a fixed, reproducible npm artifact; verify package contents, clean install, provenance/checksums as applicable, version mapping to the Python runtime, and uninstall behavior. The package must not silently install Python, skills, or operating services.

Release boundary

Start with a bounded prototype or design decision. A full CLI rewrite and simultaneous protocol maintenance are not assumed or approved by opening this issue. Keep the stable Python CLI and Relay service unchanged until conformance evidence and a separate release decision exist.

Context: session-peer v1.0.0 uses a dependency-free Python core CLI that can run on SSH destinations as the same script; optional MCP and encrypted Relay paths have separate dependencies. A parallel Node implementation would introduce a second implementation of the messaging and security contracts, so an npm install path must justify that cost.

Activity

  1. added this to the Long-term milestone on Sep 24, 2026
  2. abruption commented on Sep 27, 2026

    @abruption
    OwnerAuthor

    Implementation moved to https://github.com/abruption/session-peer-ts after user-approved local/SSH validation. It retains the prototype history and pins Python v1.0.2 commit 47c2371 as the conformance reference. Local 14-test suite and package checks pass; actual Claude/Codex ACKs were verified on both local and SSH routes (4/4 one-shot checks). Details and limitations: https://github.com/abruption/session-peer-ts/blob/main/VALIDATION.md . PR #225 is superseded without merging Python/Relay changes. New repository CI is running. This issue remains open because registry publication/provenance and broader platform/compatibility gates are separate; package private=true and no npm release was made.

  3. abruption commented on Sep 27, 2026

    @abruption
    OwnerAuthor

    Post-split verification complete: https://github.com/abruption/session-peer-ts/actions/runs/36305982795 passed all four macOS/Linux × Node 22/24 jobs (conformance, package smoke and audit). The standalone checkout also passes 14 tests and clean-install/uninstall checks. Dedicated test TUIs have exited; task-owned local/KR/MacBook package installations and tarballs were removed. MacBook startup-hook-created files in its test TUI folder were preserved rather than deleting unowned hook output. No npm publication or Python/Relay deployment occurred.

  4. added
    priority:P3Deferred convenience or long-term work.
    status:completion-reviewVerify completion evidence before closing; does not mean implemented, merged or released.
    on Oct 13, 2026
  5. removed this from the Long-term milestone on Oct 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestpriority:P3Deferred convenience or long-term work.status:completion-reviewVerify completion evidence before closing; does not mean implemented, merged or released.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions