stealth-message-cli 0.1.5__tar.gz → 0.1.7__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.
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/PKG-INFO +1 -2
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/pyproject.toml +1 -2
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/__main__.py +26 -27
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/PKG-INFO +1 -2
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/requires.txt +0 -3
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/README.md +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/setup.cfg +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/__init__.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/config.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/crypto/__init__.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/crypto/keys.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/crypto/messages.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/exceptions.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/network/__init__.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/network/client.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/network/server.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/ui/__init__.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/ui/chat.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/ui/setup.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/SOURCES.txt +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/dependency_links.txt +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/entry_points.txt +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/top_level.txt +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/tests/test_crypto.py +0 -0
- {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/tests/test_network.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: stealth-message-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.7
|
|
4
4
|
Summary: Terminal client for stealth-message — end-to-end encrypted PGP chat
|
|
5
5
|
License: GPL-3.0-only
|
|
6
6
|
Project-URL: Homepage, https://syberiancode.com/stealth-message
|
|
@@ -23,7 +23,6 @@ Requires-Dist: websockets>=12.0
|
|
|
23
23
|
Requires-Dist: rich>=13.0
|
|
24
24
|
Requires-Dist: prompt_toolkit>=3.0
|
|
25
25
|
Requires-Dist: platformdirs>=4.0
|
|
26
|
-
Requires-Dist: imghdr; python_version >= "3.13"
|
|
27
26
|
Provides-Extra: dev
|
|
28
27
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
29
28
|
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "stealth-message-cli"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.7"
|
|
8
8
|
description = "Terminal client for stealth-message — end-to-end encrypted PGP chat"
|
|
9
9
|
readme = {file = "README.md", content-type = "text/markdown"}
|
|
10
10
|
license = {text = "GPL-3.0-only"}
|
|
@@ -27,7 +27,6 @@ dependencies = [
|
|
|
27
27
|
"rich>=13.0",
|
|
28
28
|
"prompt_toolkit>=3.0",
|
|
29
29
|
"platformdirs>=4.0",
|
|
30
|
-
"imghdr; python_version >= '3.13'",
|
|
31
30
|
]
|
|
32
31
|
|
|
33
32
|
[project.optional-dependencies]
|
|
@@ -13,6 +13,15 @@ Flow:
|
|
|
13
13
|
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
|
+
# Python 3.13+ removed imghdr from stdlib; pgpy uses it for image detection.
|
|
17
|
+
# Inject a minimal shim before pgpy is imported.
|
|
18
|
+
import sys as _sys
|
|
19
|
+
if _sys.version_info >= (3, 13) and "imghdr" not in _sys.modules:
|
|
20
|
+
import types as _types
|
|
21
|
+
_imghdr = _types.ModuleType("imghdr")
|
|
22
|
+
_imghdr.what = lambda *_a, **_kw: None # type: ignore[attr-defined]
|
|
23
|
+
_sys.modules["imghdr"] = _imghdr
|
|
24
|
+
|
|
16
25
|
import argparse
|
|
17
26
|
import asyncio
|
|
18
27
|
import logging
|
|
@@ -26,7 +35,6 @@ from rich.console import Console
|
|
|
26
35
|
from rich.markdown import Markdown
|
|
27
36
|
from rich.padding import Padding
|
|
28
37
|
from rich.panel import Panel
|
|
29
|
-
from rich.rule import Rule
|
|
30
38
|
from rich.text import Text
|
|
31
39
|
|
|
32
40
|
from stealth_cli import config
|
|
@@ -363,7 +371,7 @@ All roles send and receive messages equally once connected.
|
|
|
363
371
|
The first time you run the program, a setup wizard starts automatically:
|
|
364
372
|
|
|
365
373
|
```
|
|
366
|
-
|
|
374
|
+
stealth-cli
|
|
367
375
|
```
|
|
368
376
|
|
|
369
377
|
The wizard asks for:
|
|
@@ -386,14 +394,14 @@ independent channel (in person, by phone) so they can verify your identity.
|
|
|
386
394
|
### Alice — host mode (single 1-on-1 room)
|
|
387
395
|
|
|
388
396
|
```
|
|
389
|
-
|
|
390
|
-
|
|
397
|
+
stealth-cli --host # default port 8765
|
|
398
|
+
stealth-cli --host 9000 # custom port
|
|
391
399
|
```
|
|
392
400
|
|
|
393
401
|
### Alice — host mode (multiple rooms)
|
|
394
402
|
|
|
395
403
|
```
|
|
396
|
-
|
|
404
|
+
stealth-cli --host --rooms bob,carol,team
|
|
397
405
|
```
|
|
398
406
|
|
|
399
407
|
This creates three independent rooms. Peers connect to a specific room by name.
|
|
@@ -401,14 +409,14 @@ This creates three independent rooms. Peers connect to a specific room by name.
|
|
|
401
409
|
### Bob — join mode
|
|
402
410
|
|
|
403
411
|
```
|
|
404
|
-
|
|
405
|
-
|
|
412
|
+
stealth-cli --join ALICE_IP:8765 # ws:// added automatically
|
|
413
|
+
stealth-cli --join ALICE_IP:8765 --room bob
|
|
406
414
|
```
|
|
407
415
|
|
|
408
416
|
### Interactive mode (no flags)
|
|
409
417
|
|
|
410
418
|
```
|
|
411
|
-
|
|
419
|
+
stealth-cli
|
|
412
420
|
```
|
|
413
421
|
|
|
414
422
|
When joining interactively, after entering the server address the program
|
|
@@ -493,8 +501,8 @@ No router configuration needed.
|
|
|
493
501
|
2. Alice shares her device with peers from the Tailscale web console
|
|
494
502
|
("Share node" — they only see Alice's machine, not her whole network).
|
|
495
503
|
3. Run `tailscale status` to see each other's `100.x.x.x` addresses.
|
|
496
|
-
4. Alice: `
|
|
497
|
-
5. Others: `
|
|
504
|
+
4. Alice: `stealth-cli --host`
|
|
505
|
+
5. Others: `stealth-cli --join ALICE_TAILSCALE_IP:8765 --room <name>`
|
|
498
506
|
6. Revoke the share when done.
|
|
499
507
|
|
|
500
508
|
> With Tailscale, messages travel encrypted by WireGuard AND by PGP —
|
|
@@ -531,17 +539,17 @@ No router configuration needed.
|
|
|
531
539
|
|
|
532
540
|
**Alice (host):**
|
|
533
541
|
```
|
|
534
|
-
|
|
542
|
+
stealth-cli --host --rooms bob,carol
|
|
535
543
|
```
|
|
536
544
|
|
|
537
545
|
**Bob:**
|
|
538
546
|
```
|
|
539
|
-
|
|
547
|
+
stealth-cli --join ALICE_IP:8765 --room bob
|
|
540
548
|
```
|
|
541
549
|
|
|
542
550
|
**Carol:**
|
|
543
551
|
```
|
|
544
|
-
|
|
552
|
+
stealth-cli --join ALICE_IP:8765 --room carol
|
|
545
553
|
```
|
|
546
554
|
|
|
547
555
|
Alice uses `/switch bob` and `/switch carol` to alternate between conversations.
|
|
@@ -553,7 +561,7 @@ Neither Bob nor Carol can see each other's messages.
|
|
|
553
561
|
|
|
554
562
|
**Alice (host):**
|
|
555
563
|
```
|
|
556
|
-
|
|
564
|
+
stealth-cli --host --rooms lobby,team
|
|
557
565
|
[Alice@lobby] /group team # convert team to group mode
|
|
558
566
|
[Alice@lobby] /move Bob team # move Bob — pre-approved
|
|
559
567
|
```
|
|
@@ -566,7 +574,7 @@ python -m stealth_cli --host --rooms lobby,team
|
|
|
566
574
|
|
|
567
575
|
**Carol** (joins directly):
|
|
568
576
|
```
|
|
569
|
-
|
|
577
|
+
stealth-cli --join ALICE_IP:8765 --room team
|
|
570
578
|
⏳ Waiting for host to approve your entry into room team…
|
|
571
579
|
```
|
|
572
580
|
|
|
@@ -632,7 +640,7 @@ A wrong passphrase exits immediately without loading any data.
|
|
|
632
640
|
To delete your saved keypair and start over with a new alias:
|
|
633
641
|
|
|
634
642
|
```
|
|
635
|
-
|
|
643
|
+
stealth-cli --reset
|
|
636
644
|
```
|
|
637
645
|
|
|
638
646
|
This wipes the stored keys and config and immediately runs the setup wizard
|
|
@@ -650,8 +658,8 @@ Room names can contain any characters, including spaces, and can be up to
|
|
|
650
658
|
wrap it in quotes:
|
|
651
659
|
|
|
652
660
|
```
|
|
653
|
-
|
|
654
|
-
|
|
661
|
+
stealth-cli --host --rooms "sala 1","sala 2"
|
|
662
|
+
stealth-cli --join HOST:8765 --room "sala 1"
|
|
655
663
|
```
|
|
656
664
|
|
|
657
665
|
Inside the chat (interactive commands) quotes are not needed — everything
|
|
@@ -678,15 +686,6 @@ after the command is taken as the room name:
|
|
|
678
686
|
| `--debug` | Enable verbose debug logging |
|
|
679
687
|
| `--help` | Show short usage summary |
|
|
680
688
|
|
|
681
|
-
---
|
|
682
|
-
|
|
683
|
-
## Running the tests
|
|
684
|
-
|
|
685
|
-
```
|
|
686
|
-
cd cli
|
|
687
|
-
source .venv/bin/activate
|
|
688
|
-
pytest tests/ -v
|
|
689
|
-
```
|
|
690
689
|
"""
|
|
691
690
|
|
|
692
691
|
c.print(Padding(Markdown(manual), (0, 2)))
|
{stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: stealth-message-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.7
|
|
4
4
|
Summary: Terminal client for stealth-message — end-to-end encrypted PGP chat
|
|
5
5
|
License: GPL-3.0-only
|
|
6
6
|
Project-URL: Homepage, https://syberiancode.com/stealth-message
|
|
@@ -23,7 +23,6 @@ Requires-Dist: websockets>=12.0
|
|
|
23
23
|
Requires-Dist: rich>=13.0
|
|
24
24
|
Requires-Dist: prompt_toolkit>=3.0
|
|
25
25
|
Requires-Dist: platformdirs>=4.0
|
|
26
|
-
Requires-Dist: imghdr; python_version >= "3.13"
|
|
27
26
|
Provides-Extra: dev
|
|
28
27
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
29
28
|
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
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
|
{stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|