session-peer 0.9.0__tar.gz → 0.9.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {session_peer-0.9.0 → session_peer-0.9.2}/PKG-INFO +18 -3
- {session_peer-0.9.0 → session_peer-0.9.2}/README.ja.md +16 -2
- {session_peer-0.9.0 → session_peer-0.9.2}/README.ko.md +16 -2
- {session_peer-0.9.0 → session_peer-0.9.2}/README.md +17 -2
- {session_peer-0.9.0 → session_peer-0.9.2}/README.zh-CN.md +16 -2
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/cli-reference.md +33 -10
- session_peer-0.9.2/docs/releases/v0.9.1.md +26 -0
- session_peer-0.9.2/docs/releases/v0.9.2.md +42 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/pyproject.toml +2 -2
- {session_peer-0.9.0 → session_peer-0.9.2}/session_peer.py +24 -4
- {session_peer-0.9.0 → session_peer-0.9.2}/.agents/plugins/marketplace.json +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/.gitignore +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/LICENSE +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/SECURITY.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/deploy/session-peer-relay.service +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/agent-adapters.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/antigravity.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/architecture/agent-transports.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/mcp.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/multi-home-list.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/paired-devices.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/relay-development-plan.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/relay-public-pilot-2026-09-17.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/releases/v0.9.0.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/validation/85-antigravity.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/docs/wake.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/plugins/session-peer/.codex-plugin/plugin.json +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/plugins/session-peer/.mcp.json +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/plugins/session-peer/README.md +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/session_peer_mcp.py +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/session_peer_relay/__init__.py +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/session_peer_relay/app.py +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/session_peer_relay/cli.py +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/session_peer_relay/identity.py +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/session_peer_relay/native.py +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/session_peer_relay/relay.py +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/session_peer_relay/store.py +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/session_peer_relay/wire.py +0 -0
- {session_peer-0.9.0 → session_peer-0.9.2}/session_peer_relay/worker.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: session-peer
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.2
|
|
4
4
|
Summary: Message coding agent sessions locally and over SSH
|
|
5
5
|
Project-URL: Homepage, https://github.com/abruption/session-peer
|
|
6
6
|
Project-URL: Repository, https://github.com/abruption/session-peer
|
|
@@ -82,8 +82,23 @@ threads may be inactive. Ask for an explicit reply when completion matters.
|
|
|
82
82
|
|
|
83
83
|
## Installation options
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
Install the Python CLI with `pipx` or `uv`, or run
|
|
86
|
+
`python -m pip install session-peer` in an activated virtual environment.
|
|
87
|
+
Install the agent skill separately for Claude Code, Codex, and Antigravity:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npx -y skills@latest add abruption/session-peer \
|
|
91
|
+
--skill session-peer --global \
|
|
92
|
+
--agent claude-code --agent codex --agent antigravity --copy --yes
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
This writes `SKILL.md` to `~/.claude/skills/session-peer/` and the shared
|
|
96
|
+
`~/.agents/skills/session-peer/` path used for Codex and Antigravity. Update it
|
|
97
|
+
independently with
|
|
98
|
+
`npx -y skills@latest update session-peer --global --yes`. The currently
|
|
99
|
+
verified `skills@1.7.0` requires Node.js 22.20 or newer.
|
|
100
|
+
|
|
101
|
+
For a standalone POSIX installation without the skills CLI:
|
|
87
102
|
|
|
88
103
|
```bash
|
|
89
104
|
git clone https://github.com/abruption/session-peer
|
|
@@ -47,8 +47,22 @@ session-peer自体をインストールする必要はありません。
|
|
|
47
47
|
|
|
48
48
|
## インストール方法
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
Python CLIは`pipx`や`uv`、または有効化した仮想環境で
|
|
51
|
+
`python -m pip install session-peer`を実行してインストールします。Claude Code、
|
|
52
|
+
Codex、Antigravity用のエージェントスキルは別にインストールします。
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npx -y skills@latest add abruption/session-peer \
|
|
56
|
+
--skill session-peer --global \
|
|
57
|
+
--agent claude-code --agent codex --agent antigravity --copy --yes
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
このコマンドは`SKILL.md`を`~/.claude/skills/session-peer/`と、CodexとAntigravityが共有する
|
|
61
|
+
`~/.agents/skills/session-peer/`にインストールします。更新は
|
|
62
|
+
`npx -y skills@latest update session-peer --global --yes`で別途行ってください。
|
|
63
|
+
検証済みの`skills@1.7.0`にはNode.js 22.20以降が必要です。
|
|
64
|
+
|
|
65
|
+
skills CLIを使わずPOSIX向けの単独実行方式でインストールするには:
|
|
52
66
|
|
|
53
67
|
```bash
|
|
54
68
|
git clone https://github.com/abruption/session-peer
|
|
@@ -47,8 +47,22 @@ session-peer를 별도로 설치할 필요는 없어요.
|
|
|
47
47
|
|
|
48
48
|
## 설치 방법
|
|
49
49
|
|
|
50
|
-
`pipx`·`uv`를 사용하거나 활성화된 가상 환경에서
|
|
51
|
-
|
|
50
|
+
Python CLI는 `pipx`·`uv`를 사용하거나 활성화된 가상 환경에서
|
|
51
|
+
`python -m pip install session-peer`를 실행해 설치하세요. Claude Code·Codex·Antigravity용
|
|
52
|
+
에이전트 스킬은 별도로 설치합니다.
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npx -y skills@latest add abruption/session-peer \
|
|
56
|
+
--skill session-peer --global \
|
|
57
|
+
--agent claude-code --agent codex --agent antigravity --copy --yes
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
이 명령은 `SKILL.md`를 `~/.claude/skills/session-peer/`와 Codex·Antigravity가 함께
|
|
61
|
+
사용하는 `~/.agents/skills/session-peer/`에 설치해요. 업데이트는
|
|
62
|
+
`npx -y skills@latest update session-peer --global --yes`로 별도 수행하세요.
|
|
63
|
+
현재 검증한 `skills@1.7.0`은 Node.js 22.20 이상이 필요해요.
|
|
64
|
+
|
|
65
|
+
skills CLI 없이 POSIX 독립 실행 방식으로 설치하려면:
|
|
52
66
|
|
|
53
67
|
```bash
|
|
54
68
|
git clone https://github.com/abruption/session-peer
|
|
@@ -48,8 +48,23 @@ threads may be inactive. Ask for an explicit reply when completion matters.
|
|
|
48
48
|
|
|
49
49
|
## Installation options
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
Install the Python CLI with `pipx` or `uv`, or run
|
|
52
|
+
`python -m pip install session-peer` in an activated virtual environment.
|
|
53
|
+
Install the agent skill separately for Claude Code, Codex, and Antigravity:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npx -y skills@latest add abruption/session-peer \
|
|
57
|
+
--skill session-peer --global \
|
|
58
|
+
--agent claude-code --agent codex --agent antigravity --copy --yes
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
This writes `SKILL.md` to `~/.claude/skills/session-peer/` and the shared
|
|
62
|
+
`~/.agents/skills/session-peer/` path used for Codex and Antigravity. Update it
|
|
63
|
+
independently with
|
|
64
|
+
`npx -y skills@latest update session-peer --global --yes`. The currently
|
|
65
|
+
verified `skills@1.7.0` requires Node.js 22.20 or newer.
|
|
66
|
+
|
|
67
|
+
For a standalone POSIX installation without the skills CLI:
|
|
53
68
|
|
|
54
69
|
```bash
|
|
55
70
|
git clone https://github.com/abruption/session-peer
|
|
@@ -47,8 +47,22 @@ session-peer send --host worker --to 'codex:<full-thread-uuid>' --message "请
|
|
|
47
47
|
|
|
48
48
|
## 安装方式
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
使用`pipx`、`uv`,或在已激活的虚拟环境中运行
|
|
51
|
+
`python -m pip install session-peer`来安装Python CLI。Claude Code、Codex和Antigravity的
|
|
52
|
+
代理技能需单独安装:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npx -y skills@latest add abruption/session-peer \
|
|
56
|
+
--skill session-peer --global \
|
|
57
|
+
--agent claude-code --agent codex --agent antigravity --copy --yes
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
此命令会将`SKILL.md`安装到`~/.claude/skills/session-peer/`,以及Codex和Antigravity共用的
|
|
61
|
+
`~/.agents/skills/session-peer/`。请使用
|
|
62
|
+
`npx -y skills@latest update session-peer --global --yes`单独更新技能。
|
|
63
|
+
目前已验证的`skills@1.7.0`需要Node.js 22.20或更高版本。
|
|
64
|
+
|
|
65
|
+
如需在不使用skills CLI的情况下进行POSIX独立安装:
|
|
52
66
|
|
|
53
67
|
```bash
|
|
54
68
|
git clone https://github.com/abruption/session-peer
|
|
@@ -34,8 +34,8 @@ English and Korean reports are welcome.
|
|
|
34
34
|
|
|
35
35
|
## Quick start
|
|
36
36
|
|
|
37
|
-
Install the CLI with `pipx install session-peer` or `uv tool install session-peer
|
|
38
|
-
|
|
37
|
+
Install the CLI with `pipx install session-peer` or `uv tool install session-peer`,
|
|
38
|
+
then install the skill with the open agent skills CLI. See [Install](#install).
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
41
|
session-peer list # Claude, Codex + registered Antigravity
|
|
@@ -120,16 +120,23 @@ Or with [pipx](https://pipx.pypa.io/) for an isolated install:
|
|
|
120
120
|
pipx install session-peer
|
|
121
121
|
```
|
|
122
122
|
|
|
123
|
-
Alternatively, use `uv tool install session-peer`.
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
Alternatively, use `uv tool install session-peer`. Python package managers own
|
|
124
|
+
the command; install the [agent skill](#the-skill) separately for Claude Code,
|
|
125
|
+
Codex, and Antigravity:
|
|
126
126
|
|
|
127
127
|
```bash
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
npx -y skills@latest add abruption/session-peer \
|
|
129
|
+
--skill session-peer --global \
|
|
130
|
+
--agent claude-code --agent codex --agent antigravity --copy --yes
|
|
131
131
|
```
|
|
132
132
|
|
|
133
|
+
The verified command copies the official repository skill to
|
|
134
|
+
`~/.claude/skills/session-peer/SKILL.md` and the shared
|
|
135
|
+
`~/.agents/skills/session-peer/SKILL.md` path used for Codex and Antigravity.
|
|
136
|
+
At the time of this release,
|
|
137
|
+
`skills@1.7.0` declares Node.js 22.20 or newer. Review skills before installing
|
|
138
|
+
them because agents follow their instructions with the agent's permissions.
|
|
139
|
+
|
|
133
140
|
### install.sh
|
|
134
141
|
|
|
135
142
|
Installs both the command and the skill in one step. Use this for air-gapped
|
|
@@ -168,6 +175,9 @@ chmod +x session_peer.py
|
|
|
168
175
|
|
|
169
176
|
### The skill
|
|
170
177
|
|
|
178
|
+
The recommended `skills` CLI command above installs the same repository-owned
|
|
179
|
+
skill for Claude Code, Codex, and Antigravity and records its source for
|
|
180
|
+
explicit updates.
|
|
171
181
|
The standalone installer puts the program in `~/.local/share/session-peer/`
|
|
172
182
|
and the skill separately in `~/.claude/skills/session-peer/SKILL.md`. Skill placement
|
|
173
183
|
respects `CLAUDE_CONFIG_DIR`, then `ANTHROPIC_CONFIG_DIR`, before the default.
|
|
@@ -352,6 +362,17 @@ without replacing package-owned files. `session-peer update --check` checks the
|
|
|
352
362
|
latest stable GitHub release, refreshes the shared cache, and reports the exact
|
|
353
363
|
upgrade command, but still does not replace those files.
|
|
354
364
|
|
|
365
|
+
The agent skill has a separate update lifecycle. Refresh global copies installed
|
|
366
|
+
with the skills CLI by running:
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
npx -y skills@latest update session-peer --global --yes
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
Upgrading session-peer with pip, pipx, or uv intentionally does not modify agent
|
|
373
|
+
configuration directories. Run both upgrades when both the Python command and
|
|
374
|
+
the agent instructions need updating.
|
|
375
|
+
|
|
355
376
|
For standalone programs:
|
|
356
377
|
|
|
357
378
|
```bash
|
|
@@ -369,8 +390,10 @@ from GitHub. Remote version probes inspect only
|
|
|
369
390
|
remote update installs that standalone path and its CLI link. For a
|
|
370
391
|
package-managed remote CLI, upgrade it with its own manager on that host instead.
|
|
371
392
|
|
|
372
|
-
Neither local nor remote `update` refreshes
|
|
373
|
-
from the desired release checkout to refresh
|
|
393
|
+
Neither local nor remote standalone `session-peer update` refreshes its Claude
|
|
394
|
+
skill copy. Re-run `install.sh` from the desired release checkout to refresh
|
|
395
|
+
both standalone program and skill; installations managed by the skills CLI use
|
|
396
|
+
the separate `skills update` command above.
|
|
374
397
|
Local `session-peer update --check` and `session-peer update` also populate the
|
|
375
398
|
same cache used by automatic notices.
|
|
376
399
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# session-peer v0.9.1
|
|
2
|
+
|
|
3
|
+
This documentation hotfix separates Python package management from agent skill
|
|
4
|
+
management. Install or upgrade the CLI with pip, pipx, or uv, and install the
|
|
5
|
+
official skill for Claude Code, Codex, and Antigravity with the open agent
|
|
6
|
+
skills CLI:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npx -y skills@latest add abruption/session-peer \
|
|
10
|
+
--skill session-peer --global \
|
|
11
|
+
--agent claude-code --agent codex --agent antigravity --copy --yes
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The verified command writes the skill to
|
|
15
|
+
`~/.claude/skills/session-peer/SKILL.md` and the shared
|
|
16
|
+
`~/.agents/skills/session-peer/SKILL.md` path used for Codex and Antigravity.
|
|
17
|
+
Skill updates remain explicit and
|
|
18
|
+
independent from Python package upgrades:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npx -y skills@latest update session-peer --global --yes
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The validation used `skills@1.7.0`, which declares Node.js 22.20 or newer. This
|
|
25
|
+
release does not add a package-install hook and does not make pip write into
|
|
26
|
+
agent configuration directories.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# session-peer v0.9.2 — Windows Claude authentication hotfix
|
|
2
|
+
|
|
3
|
+
Prepared candidate; not yet published.
|
|
4
|
+
|
|
5
|
+
This patch is based on v0.9.1 and does not include the 1.0 beta/RC features.
|
|
6
|
+
It fixes the authentication envelope sent to native Windows Claude Code named
|
|
7
|
+
pipes. The registry's `peerToken` is now mapped to the wire protocol's `token`
|
|
8
|
+
field, rather than forwarding the registry JSON and process metadata verbatim.
|
|
9
|
+
Malformed key records and missing, empty or non-string tokens are not used.
|
|
10
|
+
|
|
11
|
+
The bug is present in v0.9.1 and in the initial Windows implementation; it is
|
|
12
|
+
not established to be a Claude Code update regression. On Claude Code 2.1.278,
|
|
13
|
+
the old envelope closes the pipe without delivering the message. An isolated
|
|
14
|
+
test changing only the auth envelope delivered a real message and produced a
|
|
15
|
+
receiver response. Exact ACK and final candidate validation are separate gates.
|
|
16
|
+
|
|
17
|
+
No permission settings or inbound policies are changed. A successful send
|
|
18
|
+
still reports a transport write, not proof that the agent consumed or accepted
|
|
19
|
+
the message. Existing unknown sends must not be replayed automatically.
|
|
20
|
+
|
|
21
|
+
The same correction must be carried forward to the 1.0 RC line. This release
|
|
22
|
+
does not add the RC's native Windows Codex writer checks or WSL/native Codex
|
|
23
|
+
bridge. It also improves SSH diagnostics for missing `python3` and Windows Store
|
|
24
|
+
aliases (#151): remote source streaming still requires working Python and a
|
|
25
|
+
POSIX-compatible SSH shell. It does not install Python, change SSH shells or
|
|
26
|
+
automatically resend messages.
|
|
27
|
+
|
|
28
|
+
## Before publication
|
|
29
|
+
|
|
30
|
+
- Review the minimal v0.9.1-based diff and run Windows/macOS/Linux CI.
|
|
31
|
+
- Confirm the built wheel and sdist report 0.9.2, exclude the frozen legacy
|
|
32
|
+
`cc_peer.py`, and preserve the stable package contents.
|
|
33
|
+
- Validate a fresh candidate on native Windows: select the actual interactive
|
|
34
|
+
receiver, send one unique authorized marker, and observe its exact ACK.
|
|
35
|
+
- Use the maintenance publication path in `RELEASING.md`. It requires protected
|
|
36
|
+
release/0.9.x tip, a merged PR and successful push CI for that exact commit,
|
|
37
|
+
canonical 0.9.x tag/version, pinned v0.9.1 ancestry, clean source, reproducible
|
|
38
|
+
artifacts, independent installs, dependency audit and pre-upload revalidation.
|
|
39
|
+
Do not publish from unmerged PR commits, reuse the old v0.9.1 workflow, bypass
|
|
40
|
+
the release gate, weaken protections or relabel the RC code as 0.9.2.
|
|
41
|
+
- Obtain final approval before creating/publishing the release tag. Verify
|
|
42
|
+
GitHub and PyPI artifacts after publication; do not overwrite an existing tag.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["hatchling"]
|
|
2
|
+
requires = ["hatchling==1.32.4"]
|
|
3
3
|
build-backend = "hatchling.build"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
@@ -50,7 +50,7 @@ pattern = '__version__ = "(?P<version>[^"]+)"'
|
|
|
50
50
|
|
|
51
51
|
[tool.hatch.build.targets.sdist]
|
|
52
52
|
exclude = ["/experiments"]
|
|
53
|
-
include = ["session_peer_relay", "session_peer.py", "session_peer_mcp.py", "LICENSE", "SECURITY.md", "README.md", "README.ko.md", "README.ja.md", "README.zh-CN.md", "docs/cli-reference.md", "docs/releases/v0.9.0.md", "docs/mcp.md", "docs/wake.md", "docs/multi-home-list.md", "docs/agent-adapters.md", "docs/paired-devices.md", "docs/relay-development-plan.md", "docs/relay-public-pilot-2026-09-17.md", "deploy/session-peer-relay.service", "docs/antigravity.md", "docs/validation/85-antigravity.md", "docs/architecture/agent-transports.md", "plugins", ".agents/plugins/marketplace.json"]
|
|
53
|
+
include = ["session_peer_relay", "session_peer.py", "session_peer_mcp.py", "LICENSE", "SECURITY.md", "README.md", "README.ko.md", "README.ja.md", "README.zh-CN.md", "docs/cli-reference.md", "docs/releases/v0.9.0.md", "docs/releases/v0.9.1.md", "docs/releases/v0.9.2.md", "docs/mcp.md", "docs/wake.md", "docs/multi-home-list.md", "docs/agent-adapters.md", "docs/paired-devices.md", "docs/relay-development-plan.md", "docs/relay-public-pilot-2026-09-17.md", "deploy/session-peer-relay.service", "docs/antigravity.md", "docs/validation/85-antigravity.md", "docs/architecture/agent-transports.md", "plugins", ".agents/plugins/marketplace.json"]
|
|
54
54
|
|
|
55
55
|
[tool.hatch.build.targets.wheel]
|
|
56
56
|
only-include = ["session_peer_relay", "session_peer.py", "session_peer_mcp.py"]
|
|
@@ -42,7 +42,7 @@ try:
|
|
|
42
42
|
except ImportError: # Windows has no POSIX flock; activity stays unknown there.
|
|
43
43
|
fcntl = None
|
|
44
44
|
|
|
45
|
-
__version__ = "0.9.
|
|
45
|
+
__version__ = "0.9.2"
|
|
46
46
|
GITHUB_REPO = "abruption/session-peer"
|
|
47
47
|
|
|
48
48
|
# Claude Code refuses a same-machine message once its serialized form passes
|
|
@@ -1013,9 +1013,15 @@ def _read_win_auth(pid: int) -> str | None:
|
|
|
1013
1013
|
data = json.loads(key_file.read_text(encoding="utf-8"))
|
|
1014
1014
|
except (OSError, ValueError):
|
|
1015
1015
|
continue
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1016
|
+
if not isinstance(data, dict):
|
|
1017
|
+
continue
|
|
1018
|
+
token = data.get("peerToken")
|
|
1019
|
+
if not isinstance(token, str) or not token.strip():
|
|
1020
|
+
continue
|
|
1021
|
+
# The registry schema is not the wire protocol. Windows requires a
|
|
1022
|
+
# first-line {"type": "auth", "token": ...}; forwarding peerToken and
|
|
1023
|
+
# process metadata verbatim causes the receiver to drop the connection.
|
|
1024
|
+
return json.dumps({"type": "auth", "token": token}, ensure_ascii=False)
|
|
1019
1025
|
return None
|
|
1020
1026
|
|
|
1021
1027
|
|
|
@@ -1687,6 +1693,20 @@ def run_remote(host: str, argv: list[str], ssh_opts: list[str]) -> dict:
|
|
|
1687
1693
|
)
|
|
1688
1694
|
if failure:
|
|
1689
1695
|
raise ssh_failure_error(host, ssh_info, failure, detail)
|
|
1696
|
+
runtime_output = (completed.stdout + "\n" + completed.stderr).strip().lower()
|
|
1697
|
+
if (runtime_output == "python"
|
|
1698
|
+
or "python was not found" in runtime_output
|
|
1699
|
+
or ("python3" in runtime_output and any(marker in runtime_output for marker in (
|
|
1700
|
+
"command not found", "not recognized as", "no such file", "python3: not found",
|
|
1701
|
+
)))):
|
|
1702
|
+
raise CcPeerError(
|
|
1703
|
+
f"{host}: remote python3 did not start a usable interpreter. "
|
|
1704
|
+
"Source-streamed SSH requires a working python3 and a POSIX-compatible "
|
|
1705
|
+
"remote shell. A Windows Store execution alias is not sufficient. "
|
|
1706
|
+
"For native Windows, run the installed CLI locally, or use a WSL SSH "
|
|
1707
|
+
"endpoint with Python installed. No fallback or resend was attempted.",
|
|
1708
|
+
{**ssh_info, "remoteRuntimeFailure": "python3_unavailable_or_unsupported_shell"},
|
|
1709
|
+
)
|
|
1690
1710
|
if not stdout:
|
|
1691
1711
|
raise CcPeerError(f"{host}: {detail}", ssh_info)
|
|
1692
1712
|
try:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|