Skip to content
Merged
26 changes: 26 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,32 @@ that invokes actual PowerShell; no live sessions or network destinations.
Keep `package-lock.json` tracked. Do not commit dist, node_modules, local
worktrees, credentials, agent state, transcripts or real test evidence.

## Current version maintenance

For a source checkout, package.json is the current-version source. Update package
and lock metadata together through the normal npm workflow, then run:

```sh
npm run version:update
npm run version:check
node scripts/check-repository.mjs
```

The explicit `scripts/current-version-fields.json` inventory covers runtime
VERSION and selected current examples in the four READMEs/guides, API/shorthand
references and PARITY's current display. Only `{{version}}` spans change; the
rest of each authored line is checked exactly. Edit the matching inventory entry
when changing an owned translated line. Missing or unexpected matches refuse
before writes. The check is non-mutating and runs in the normal repository CI.
See `scripts/current-version.md` in the source checkout and
[issue #168](https://github.com/abruption/session-peer-ts/issues/168) for the
inventory boundary and synthetic build/package acceptance.

Dated comparison/release evidence, native/Python/skill versions and hashes,
finite compatibility rows, release policy and installation pins are reviewed
separately. The updater does not approve a release or extend compatibility.
Inspect the diff and rerun build/package checks before proposing a release.

## Safety and documentation

Preserve actual flock/owner evidence, ambiguity rejection, pre-submit revalidation,
Expand Down
82 changes: 81 additions & 1 deletion PARITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,87 @@ observation and explicit operator-confirmed receipt scope below; #130–#132
remain separate platform/collector extensions. Published skill 0.2.1 remains
the installation pin; runtime publication is not companion-skill publication.

## Current comparison — Python 1.1.0 / TypeScript 0.5.0
<a id="current-scoped-feature-matrix"></a>
## Current scoped feature matrix

Current source/package version: **0.5.1**.

Reviewed **2026-10-29 KST** against TS **0.5.1** source
[`90481b148584926ea328ed956327f3050d9be9cb`](https://github.com/abruption/session-peer-ts/tree/90481b148584926ea328ed956327f3050d9be9cb)
and Python **1.3.2** source
[`f5e7c49554ff02771990a151e00b52f2abf3df0a`](https://github.com/abruption/session-peer/tree/f5e7c49554ff02771990a151e00b52f2abf3df0a),
also the [published Python v1.3.2 release](https://github.com/abruption/session-peer/releases/tag/v1.3.2).
The version display above is maintained separately; changing it does not refresh
this dated source review. This matrix describes the reviewed TS baseline;
branch proposals and later publications require their own evidence. Source and
GitHub-state inspection adds no test, live delivery, ACK or platform qualification.

**Shipped** means the bounded TS behavior exists in that baseline. **Partial**
means only the stated subset exists. **Intentional difference** is a maintained
contract choice. **Not planned** records an explicit disposition. **Undecided**
means no TS implementation scope has been approved, including deferred evaluation.
An issue or Python feature alone does not authorize implementation.

| Surface | Reviewed TS behavior and Python comparison | Status / boundary |
| --- | --- | --- |
| Ordinary discovery, input and submission | Unified Claude/Codex list, bounded Codex-home inventory, text/JSON and positional/stdin input, Unicode name matching, Claude inbox and guarded Codex queue submission | Shipped within existing platform/native contracts; submission never proves consumption |
| macOS Claude Orca profiles | TS reads one environment-selected/default registry; Python additionally inventories bounded known macOS Orca profiles when no override is set ([TS source](https://github.com/abruption/session-peer-ts/blob/90481b148584926ea328ed956327f3050d9be9cb/src/discovery.ts#L78-L117), [Python source](https://github.com/abruption/session-peer/blob/f5e7c49554ff02771990a151e00b52f2abf3df0a/session_peer_core/claude.py#L44-L84)) | Partial; [#165](https://github.com/abruption/session-peer-ts/issues/165) is a separate discovery/provenance extension |
| Codex storage classification | TS rejects selected-home root `sqlite_home` and malformed TOML, and strips `CODEX_SQLITE_HOME` from native child environments; Python additionally checks system/requirements, managed-preference and project/cwd layers ([TS source](https://github.com/abruption/session-peer-ts/blob/90481b148584926ea328ed956327f3050d9be9cb/src/discovery.ts#L13-L24), [Python source](https://github.com/abruption/session-peer/blob/f5e7c49554ff02771990a151e00b52f2abf3df0a/session_peer_core/codex.py#L272-L494)) | Partial in published baseline; post-baseline #166 source adds bounded local-layer classification and refusal of unclassifiable storage ([scope](docs/api.md#codex-storage-configuration)). Selected-home or local-layer validation is not whole effective-storage attestation |
| Doctor and return routes | Read-only local/SSH diagnostics, generated From/Reply-To metadata, explicit reply URI and opt-in return-route probe | Shipped bounded behavior; no executable `Reply:` instruction or Antigravity sender identity |
| Ordered SSH and typed jump | Repeated hosts, allowlisted options, IPv6 and POSIX-client single-hop jump; Windows-client jump refuses before effect | Partial; remaining Windows-client qualification in [#20](https://github.com/abruption/session-peer-ts/issues/20); no arbitrary options or multi-hop |
| Remote deployment | TS requires an installed CLI and exactly matching TS versions; Python streams its standalone source | Intentional difference; [#23](https://github.com/abruption/session-peer-ts/issues/23) / [remote deployment design](docs/design/remote-deployment.md) remain bounded follow-ups, with no automatic deployment/update or version-range compatibility |
| Updates and notice suppression | npm-aware `update --check` and manager guidance; cached runtime notices opt in with `SESSION_PEER_UPDATE_NOTICE=1`, and honor `--no-update-notice` and `SESSION_PEER_NO_UPDATE_NOTICE` ([source](https://github.com/abruption/session-peer-ts/blob/90481b148584926ea328ed956327f3050d9be9cb/src/updates.ts#L289-L291)) | Intentional difference from Python's default-on runtime/skill notices and standalone update paths; existing suppression shipped in #22/#85; no self-update, remote push or skill notices |
| Handoff and observation | Private correlated intents and explicit operator-confirmed receipt; exact macOS arm64 Codex 0.160.1/0.162.1 observation only | Partial; Linux [#130](https://github.com/abruption/session-peer-ts/issues/130), Windows [#131](https://github.com/abruption/session-peer-ts/issues/131) and authenticated receipt producer/collector [#132](https://github.com/abruption/session-peer-ts/issues/132) remain separate. No automatic ACK, consumption or exactly-once guarantee |
| Public execution API | Package root exports pure protocol helpers, not a reusable execution/adapter API | Partial; [#24](https://github.com/abruption/session-peer-ts/issues/24) retains validation, permission and single-attempt boundaries |
| Companion skill | Separately installed TS skill with immutable guidance pin and finite exact metadata profiles | Intentional difference; runtime publication does not publish/update the skill or authenticate its contents |
| Paired devices, relay and recovery | Python exposes optional device/relay/setup workflows; TS has no equivalent | Not planned; [#29](https://github.com/abruption/session-peer-ts/issues/29), [#30](https://github.com/abruption/session-peer-ts/issues/30), [#31](https://github.com/abruption/session-peer-ts/issues/31), [#32](https://github.com/abruption/session-peer-ts/issues/32) are closed as not planned; historical Planned rows below are not the current roadmap |
| Wake, Antigravity and MCP integration | No TS wake/resume, Antigravity adapter or policy-restricted MCP server | Undecided implementation scope; [#27](https://github.com/abruption/session-peer-ts/issues/27), [#28](https://github.com/abruption/session-peer-ts/issues/28), [#26](https://github.com/abruption/session-peer-ts/issues/26) track separate work; no inferred Python feature parity |
| Newer Python convenience workflows | Route presets/saved recipients, explain, explicit trusted SSH config and persistent per-version runtime-notice dismissal are absent from the [TS command/options inventory](https://github.com/abruption/session-peer-ts/blob/90481b148584926ea328ed956327f3050d9be9cb/src/cli.ts#L19-L29) | Undecided eventual scope; explicit defer decisions below |

The published 0.5.1 storage coverage gap above is separate from the #166
implementation added after baseline `90481b1`. Its public availability is
determined by the selected release record; source/fixture evidence is not a
publication or native-loader qualification. The source guard's [actual scope](docs/api.md#codex-storage-configuration)
classifies source-qualified local layers and retains opened-file evidence. It
refuses ordinary signed-in/possibly cloud-managed homes when classification would
require reading credentials; the owned app-server path needs actual storage binding.
Windows Codex dispatch remains unqualified and refuses before queueing. Python's
broader checks also explicitly exclude some effective
storage sources; they are not a whole-runtime storage attestation.

### Product decisions for newer Python workflows — 2026-10-29 KST

These are **defer** decisions for this patch, not promises to port. Any later
implementation needs a focused scope and separate approval; this comparison
creates no new feature implementation or automatic follow-up issue.

| Workflow / pinned Python evidence | Decision and prerequisite for reconsideration |
| --- | --- |
| [Route presets and saved addresses](https://github.com/abruption/session-peer/blob/f5e7c49554ff02771990a151e00b52f2abf3df0a/session_peer_core/cli.py#L138-L215), [address commands](https://github.com/abruption/session-peer/blob/f5e7c49554ff02771990a151e00b52f2abf3df0a/session_peer_core/cli.py#L318-L340) | Defer. Decide private local storage, route-versus-recipient identity, revision checks and explicit target confirmation before proposing a port. Existing reply URIs are not saved-address support |
| [Delivery/diagnostic explain](https://github.com/abruption/session-peer/blob/f5e7c49554ff02771990a151e00b52f2abf3df0a/session_peer_core/cli.py#L194-L196), [handoff status explain](https://github.com/abruption/session-peer/blob/f5e7c49554ff02771990a151e00b52f2abf3df0a/session_peer_core/cli.py#L228-L229) | Defer. Define a read-only explanation of existing evidence without promoting queue, turn completion or arbitrary replies to delivery/ACK. Current text output and doctor remain available |
| [Operator-trusted SSH config](https://github.com/abruption/session-peer/blob/f5e7c49554ff02771990a151e00b52f2abf3df0a/session_peer_core/cli.py#L258-L263) | Defer. Explicit trust would authorize local executable SSH configuration, including during inspection/dry-run; it needs a separate consent and execution contract. Existing user/system SSH configuration already remains an operator trust boundary. Constrained options and typed jump do not provide Python's additional `--ssh-config` / `--trust-ssh-config` workflow |
| [Persistent per-version runtime-notice dismissal](https://github.com/abruption/session-peer/blob/f5e7c49554ff02771990a151e00b52f2abf3df0a/session_peer_core/cli.py#L245-L255) | Defer. Specify private version-scoped persistence, reset and interaction with opt-in notices first. This differs from the already supported TS `--no-update-notice` and `SESSION_PEER_NO_UPDATE_NOTICE`; no dismissal flag is advertised for TS |

### Comparison evidence and retained history

The ordinary test oracle remains Python **1.1.0** / commit
`8ca77cf31254c8287a2593fe484bb30a7dba2727`, scoped to
`ordinary-list-discovery-projection` in
[`python-reference.pin.json`](test/fixtures/python-reference.pin.json).
This Python 1.3.2 static review does not repin that oracle, fixtures, CI or
runtime `referenceVersion`; ordinary listing evidence does not establish
send/handoff/SSH interoperability. The frozen handoff design bytes, hashes and
historical Python 1.0.3 baseline also remain unchanged.

See the [dated ordinary comparison](#ordinary-python-110-comparison--2026-10-20-kst),
[historical 0.3.x context](#historical-03x-comparison-context),
[historical feature matrix](#feature-and-command-matrix) and
[frozen handoff checkpoint](#published-python-handoff-checkpoint--2026-10-11).
Their dated release, planned-work and test claims retain their original scope.

<a id="current-comparison--python-110--typescript-050"></a>

## Ordinary Python 1.1.0 comparison — 2026-10-20 KST

Updated 2026-10-20 KST. TypeScript 0.5.0 uses published
Python **1.1.0**, commit
Expand Down
4 changes: 4 additions & 0 deletions README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ Python 不要の Node.js クライアントです。パッケージ名とコマ

</div>

通常の Codex 送信は、ログイン済み home などクラウドポリシーの適用範囲を判定できない場合も拒否します。経路を選ぶ前に[ストレージ検証の範囲](docs/api.md#codex-storage-configuration)を確認してください。

このソースは Codex の追加設定レイヤーを確認します。Windows の Codex 送信・dry-run はローカルストレージ検査が未検証のためキュー提出前に拒否し、通常の Claude 経路とは区別します。導入前に[検証範囲](docs/api.md#codex-storage-configuration)と選択したリリースを確認してください。

## Demo

![TypeScript session-peer 0.2.1 による実際の Codex・Claude Code 間の要求と返信](https://raw.githubusercontent.com/abruption/session-peer-ts/main/docs/assets/session-peer-ts-v0.2.1-roundtrip.gif)
Expand Down
8 changes: 6 additions & 2 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,13 @@ Python을 설치하지 않아도 Node.js에서 실행되는 TypeScript 클라이

</div>

일반 Codex 전송은 로그인 home 등 클라우드 정책 적용 여부를 분류할 수 없는 경우에도 거부합니다. 경로를 선택하기 전에 [저장소 검증 범위](docs/api.md#codex-storage-configuration)를 확인하세요.

이 소스는 Codex의 추가 설정 계층을 검사합니다. Windows Codex 전송과 dry-run은 로컬 저장소 검사 방식이 검증될 때까지 큐 제출 전에 거부하며, 일반 Claude 경로는 별도입니다. 설치 전에 [검증 범위](docs/api.md#codex-storage-configuration)와 선택한 릴리스를 확인하세요.

<!-- docs-contract: stable-release-source; package=session-peer; bin=session-peer; node=22.13+/24; python-reference=1.1.0 -->

**문서·소스 기준 버전: 0.5.1.** 설치 전에 선택한 릴리스와 레지스트리 메타데이터를 확인하세요. 날짜별 준비·검증 기록은 [VALIDATION.md](VALIDATION.md), 릴리스 절차는 [RELEASING.md](RELEASING.md)에 있습니다. SSH 양쪽에는 같은 TypeScript 클라이언트 버전이 필요하며, 0.3.6과 0.5.1은 서로의 SSH 사전 확인을 거부합니다.
**문서·소스 기준 버전: 0.5.1.** 설치 전에 선택한 릴리스와 레지스트리 메타데이터를 확인하세요. 날짜별 준비·검증 기록은 [VALIDATION.md](VALIDATION.md), 릴리스 절차는 [RELEASING.md](RELEASING.md)에 있습니다. SSH 양쪽에는 같은 TypeScript 클라이언트 버전이 필요하며, 0.3.6 버전과 0.5.1 버전은 서로의 SSH 사전 확인을 거부합니다.

**0.4.0 handoff 범위:** 선택 기능인 native 관측은 macOS arm64의 정확한 Codex 0.160.1/0.162.1에 한정되며, 명시적 `operator_confirmed` 수령 확인에는 지원되는 POSIX ledger를 사용합니다. Linux·Windows의 native 관측과 자동 ACK 수집은 미지원입니다. 0.5.1 소스는 선택할 수 없는 Linux arm64 Codex 0.162.1 후보(고정된 업스트림 `aarch64-unknown-linux-musl` 실행 파일, 스키마, 주입 테스트 1회)를 기록하며 Linux 관측을 활성화하지 않습니다. Linux native 관측은 계속 미지원입니다.

Expand Down Expand Up @@ -85,7 +89,7 @@ session-peer --version
### 업데이트

npm으로 설치한 클라이언트는 사용자가 직접 npm으로 업데이트합니다. 사용 가능한 배포 태그
(dist-tag)와 대상 버전을 확인한 뒤 해당 버전을 지정해 설치하세요. 아래 예시는 이전 npm 설치본을 선택한 0.5.1으로
(dist-tag)와 대상 버전을 확인한 뒤 해당 버전을 지정해 설치하세요. 아래 예시는 이전 npm 설치본을 선택한 0.5.1 버전으로
업데이트합니다. `session-peer` CLI는 업데이트를 설치하지 않습니다. `session-peer
update --check`는 새 버전이 있는지 확인할 뿐입니다.

Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ A Node.js client that runs without Python. Package and command: `session-peer`.

</div>

Ordinary Codex sends also refuse signed-in or other cloud-unclassifiable homes; see the [storage scope](docs/api.md#codex-storage-configuration) before choosing a route.

Source storage guards now inspect additional Codex configuration layers. Windows Codex send/dry-run refuse before queue submission while local storage classification is unqualified; ordinary Claude behavior is separate. Review the [guard scope](docs/api.md#codex-storage-configuration) and selected release before installation.

## Demo

![Actual Codex to Claude Code request and reply with TypeScript session-peer 0.2.1](https://raw.githubusercontent.com/abruption/session-peer-ts/main/docs/assets/session-peer-ts-v0.2.1-roundtrip.gif)
Expand Down
4 changes: 4 additions & 0 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@

</div>

普通 Codex 发送也会拒绝登录 home 等无法判定云端策略适用范围的上下文。选择路径前请确认[存储检查范围](docs/api.md#codex-storage-configuration)。

此源码检查 Codex 的更多配置层。Windows 的 Codex 发送和 dry-run 因本地存储检查方式尚未验证而在队列提交前被拒绝;普通 Claude 路径另行处理。安装前请确认[检查范围](docs/api.md#codex-storage-configuration)及所选版本。

## Demo

![TypeScript session-peer 0.2.1 的实际 Codex 与 Claude Code 请求和回复](https://raw.githubusercontent.com/abruption/session-peer-ts/main/docs/assets/session-peer-ts-v0.2.1-roundtrip.gif)
Expand Down
Loading
Loading