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.
Files changed (25) hide show
  1. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/PKG-INFO +1 -2
  2. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/pyproject.toml +1 -2
  3. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/__main__.py +26 -27
  4. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/PKG-INFO +1 -2
  5. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/requires.txt +0 -3
  6. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/README.md +0 -0
  7. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/setup.cfg +0 -0
  8. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/__init__.py +0 -0
  9. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/config.py +0 -0
  10. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/crypto/__init__.py +0 -0
  11. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/crypto/keys.py +0 -0
  12. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/crypto/messages.py +0 -0
  13. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/exceptions.py +0 -0
  14. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/network/__init__.py +0 -0
  15. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/network/client.py +0 -0
  16. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/network/server.py +0 -0
  17. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/ui/__init__.py +0 -0
  18. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/ui/chat.py +0 -0
  19. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_cli/ui/setup.py +0 -0
  20. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/SOURCES.txt +0 -0
  21. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/dependency_links.txt +0 -0
  22. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/entry_points.txt +0 -0
  23. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/stealth_message_cli.egg-info/top_level.txt +0 -0
  24. {stealth_message_cli-0.1.5 → stealth_message_cli-0.1.7}/tests/test_crypto.py +0 -0
  25. {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.5
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.5"
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
- python -m stealth_cli
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
- python -m stealth_cli --host # default port 8765
390
- python -m stealth_cli --host 9000 # custom port
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
- python -m stealth_cli --host --rooms bob,carol,team
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
- python -m stealth_cli --join ALICE_IP:8765 # ws:// added automatically
405
- python -m stealth_cli --join ALICE_IP:8765 --room bob
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
- python -m stealth_cli
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: `python -m stealth_cli --host`
497
- 5. Others: `python -m stealth_cli --join ALICE_TAILSCALE_IP:8765 --room <name>`
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
- python -m stealth_cli --host --rooms bob,carol
542
+ stealth-cli --host --rooms bob,carol
535
543
  ```
536
544
 
537
545
  **Bob:**
538
546
  ```
539
- python -m stealth_cli --join ALICE_IP:8765 --room bob
547
+ stealth-cli --join ALICE_IP:8765 --room bob
540
548
  ```
541
549
 
542
550
  **Carol:**
543
551
  ```
544
- python -m stealth_cli --join ALICE_IP:8765 --room carol
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
- python -m stealth_cli --host --rooms lobby,team
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
- python -m stealth_cli --join ALICE_IP:8765 --room team
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
- python -m stealth_cli --reset
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
- python -m stealth_cli --host --rooms "sala 1","sala 2"
654
- python -m stealth_cli --join HOST:8765 --room "sala 1"
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)))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stealth-message-cli
3
- Version: 0.1.5
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,9 +4,6 @@ rich>=13.0
4
4
  prompt_toolkit>=3.0
5
5
  platformdirs>=4.0
6
6
 
7
- [:python_version >= "3.13"]
8
- imghdr
9
-
10
7
  [dev]
11
8
  pytest>=8.0
12
9
  pytest-asyncio>=0.23