nulltap 0.1.0__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.
nulltap-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Justin Howe
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
nulltap-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,98 @@
1
+ Metadata-Version: 2.4
2
+ Name: nulltap
3
+ Version: 0.1.0
4
+ Summary: Read the nulltap.sh cybersecurity feed from a terminal.
5
+ Author: Justin Howe
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://nulltap.sh
8
+ Project-URL: Repository, https://github.com/JustinHowe/nulltap
9
+ Keywords: cybersecurity,news,cli,nulltap
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Console
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Security
18
+ Requires-Python: >=3.10
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Dynamic: license-file
22
+
23
+ # nulltap
24
+
25
+ Nulltap in your terminal. This client reads the public [nulltap.sh](https://nulltap.sh) JSON feed and prints cybersecurity and AI coverage without requiring an account.
26
+
27
+ ## Install
28
+
29
+ Python 3.10 or newer is required. After the first PyPI release, install it with [pipx](https://pipx.pypa.io/):
30
+
31
+ ```sh
32
+ pipx install nulltap
33
+ ```
34
+
35
+ Until then, install the current version from GitHub with `pipx install git+https://github.com/JustinHowe/nulltap.git`.
36
+
37
+ Run `nulltap --help` after installation.
38
+
39
+ ## Commands
40
+
41
+ ```sh
42
+ nulltap # paginated recent articles; type a number to read
43
+ nulltap browse # explicit form of the default command
44
+ nulltap latest -n 20 # browse the newest 20 articles
45
+ nulltap latest --topic identity
46
+ nulltap topics # choose a topic, then choose an article
47
+ nulltap topic ai # paginated articles tagged AI
48
+ nulltap topic # choose a topic interactively
49
+ nulltap search # enter search words interactively
50
+ nulltap search "token theft"
51
+ nulltap search gateway --topic appsec
52
+ nulltap read 1 # directly read the newest article
53
+ nulltap read # browse first when no number is supplied
54
+ nulltap --plain # print once; no prompts or pager
55
+ ```
56
+
57
+ Interactive lists show five articles per page so a page fits a normal terminal window. Enter the displayed number to read an article, `n` for the next page, `p` for the previous page, or `q` to leave. Use `--page-size N` to change the page size.
58
+
59
+ Articles open in the terminal pager. Headings, lists, quotations, code blocks, images, inline links, and primary sources are formatted for terminal reading. Press `q` to leave the pager and return to the article list. No browser is required.
60
+
61
+ When output is redirected, nulltap automatically disables menus and the pager. `--plain` does the same thing explicitly. Article IDs, slugs, and URLs remain accepted as direct targets for scripts, but ordinary readers should not need them.
62
+
63
+ ## Search
64
+
65
+ Search belongs in the CLI because it is useful when the browser is not. It runs locally over article titles, summaries, and topic tags. Search terms are never sent to nulltap or another service.
66
+
67
+ Every word in the query must match. Title matches rank above tag and summary matches, with publication date breaking ties.
68
+
69
+ ## Scripts
70
+
71
+ Add `--json` to `browse`, `latest`, `topics`, `topic`, `search`, `read`, or `show`:
72
+
73
+ ```sh
74
+ nulltap search ransomware --json
75
+ nulltap topics --json
76
+ ```
77
+
78
+ Use a different compatible feed during development:
79
+
80
+ ```sh
81
+ nulltap --feed http://127.0.0.1:4321/feed.json
82
+ # or
83
+ NULLTAP_FEED_URL=http://127.0.0.1:4321/feed.json nulltap
84
+ ```
85
+
86
+ Listing and search commands make one read-only feed request. Reading an article makes a second request for that article's text. The client has no analytics, login, local database, or background process. Feed and article text are stripped of terminal control sequences before display.
87
+
88
+ ## Development
89
+
90
+ ```sh
91
+ python -m venv .venv
92
+ # Windows: .venv\Scripts\activate
93
+ # macOS/Linux: source .venv/bin/activate
94
+ python -m pip install -e .
95
+ python -m unittest discover -s tests -v
96
+ ```
97
+
98
+ Licensed under the MIT License.
@@ -0,0 +1,76 @@
1
+ # nulltap
2
+
3
+ Nulltap in your terminal. This client reads the public [nulltap.sh](https://nulltap.sh) JSON feed and prints cybersecurity and AI coverage without requiring an account.
4
+
5
+ ## Install
6
+
7
+ Python 3.10 or newer is required. After the first PyPI release, install it with [pipx](https://pipx.pypa.io/):
8
+
9
+ ```sh
10
+ pipx install nulltap
11
+ ```
12
+
13
+ Until then, install the current version from GitHub with `pipx install git+https://github.com/JustinHowe/nulltap.git`.
14
+
15
+ Run `nulltap --help` after installation.
16
+
17
+ ## Commands
18
+
19
+ ```sh
20
+ nulltap # paginated recent articles; type a number to read
21
+ nulltap browse # explicit form of the default command
22
+ nulltap latest -n 20 # browse the newest 20 articles
23
+ nulltap latest --topic identity
24
+ nulltap topics # choose a topic, then choose an article
25
+ nulltap topic ai # paginated articles tagged AI
26
+ nulltap topic # choose a topic interactively
27
+ nulltap search # enter search words interactively
28
+ nulltap search "token theft"
29
+ nulltap search gateway --topic appsec
30
+ nulltap read 1 # directly read the newest article
31
+ nulltap read # browse first when no number is supplied
32
+ nulltap --plain # print once; no prompts or pager
33
+ ```
34
+
35
+ Interactive lists show five articles per page so a page fits a normal terminal window. Enter the displayed number to read an article, `n` for the next page, `p` for the previous page, or `q` to leave. Use `--page-size N` to change the page size.
36
+
37
+ Articles open in the terminal pager. Headings, lists, quotations, code blocks, images, inline links, and primary sources are formatted for terminal reading. Press `q` to leave the pager and return to the article list. No browser is required.
38
+
39
+ When output is redirected, nulltap automatically disables menus and the pager. `--plain` does the same thing explicitly. Article IDs, slugs, and URLs remain accepted as direct targets for scripts, but ordinary readers should not need them.
40
+
41
+ ## Search
42
+
43
+ Search belongs in the CLI because it is useful when the browser is not. It runs locally over article titles, summaries, and topic tags. Search terms are never sent to nulltap or another service.
44
+
45
+ Every word in the query must match. Title matches rank above tag and summary matches, with publication date breaking ties.
46
+
47
+ ## Scripts
48
+
49
+ Add `--json` to `browse`, `latest`, `topics`, `topic`, `search`, `read`, or `show`:
50
+
51
+ ```sh
52
+ nulltap search ransomware --json
53
+ nulltap topics --json
54
+ ```
55
+
56
+ Use a different compatible feed during development:
57
+
58
+ ```sh
59
+ nulltap --feed http://127.0.0.1:4321/feed.json
60
+ # or
61
+ NULLTAP_FEED_URL=http://127.0.0.1:4321/feed.json nulltap
62
+ ```
63
+
64
+ Listing and search commands make one read-only feed request. Reading an article makes a second request for that article's text. The client has no analytics, login, local database, or background process. Feed and article text are stripped of terminal control sequences before display.
65
+
66
+ ## Development
67
+
68
+ ```sh
69
+ python -m venv .venv
70
+ # Windows: .venv\Scripts\activate
71
+ # macOS/Linux: source .venv/bin/activate
72
+ python -m pip install -e .
73
+ python -m unittest discover -s tests -v
74
+ ```
75
+
76
+ Licensed under the MIT License.
@@ -0,0 +1,34 @@
1
+ [build-system]
2
+ requires = ["setuptools>=69"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "nulltap"
7
+ version = "0.1.0"
8
+ description = "Read the nulltap.sh cybersecurity feed from a terminal."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = "MIT"
12
+ authors = [{ name = "Justin Howe" }]
13
+ keywords = ["cybersecurity", "news", "cli", "nulltap"]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "Environment :: Console",
17
+ "Programming Language :: Python :: 3",
18
+ "Programming Language :: Python :: 3.10",
19
+ "Programming Language :: Python :: 3.11",
20
+ "Programming Language :: Python :: 3.12",
21
+ "Programming Language :: Python :: 3.13",
22
+ "Topic :: Security"
23
+ ]
24
+ dependencies = []
25
+
26
+ [project.scripts]
27
+ nulltap = "nulltap.cli:main"
28
+
29
+ [project.urls]
30
+ Homepage = "https://nulltap.sh"
31
+ Repository = "https://github.com/JustinHowe/nulltap"
32
+
33
+ [tool.setuptools.packages.find]
34
+ where = ["src"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """nulltap command-line client."""
2
+
3
+ __version__ = "0.1.0"
@@ -0,0 +1,5 @@
1
+ from .cli import main
2
+
3
+
4
+ if __name__ == "__main__":
5
+ raise SystemExit(main())