shramikfont 0.2.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.
- shramikfont-0.2.0/LICENSE +23 -0
- shramikfont-0.2.0/PKG-INFO +239 -0
- shramikfont-0.2.0/README.md +214 -0
- shramikfont-0.2.0/pyproject.toml +38 -0
- shramikfont-0.2.0/setup.cfg +4 -0
- shramikfont-0.2.0/shramikfont/__init__.py +45 -0
- shramikfont-0.2.0/shramikfont/banner.py +50 -0
- shramikfont-0.2.0/shramikfont/cli.py +139 -0
- shramikfont-0.2.0/shramikfont/colors.py +61 -0
- shramikfont-0.2.0/shramikfont/demo.py +51 -0
- shramikfont-0.2.0/shramikfont/effects.py +172 -0
- shramikfont-0.2.0/shramikfont/lovable.py +287 -0
- shramikfont-0.2.0/shramikfont/mission/__init__.py +53 -0
- shramikfont-0.2.0/shramikfont/mission/achievements.py +88 -0
- shramikfont-0.2.0/shramikfont/mission/airgap.py +51 -0
- shramikfont-0.2.0/shramikfont/mission/authorization.py +37 -0
- shramikfont-0.2.0/shramikfont/mission/dashboard.py +53 -0
- shramikfont-0.2.0/shramikfont/mission/evidence.py +37 -0
- shramikfont-0.2.0/shramikfont/mission/fingerprint.py +73 -0
- shramikfont-0.2.0/shramikfont/mission/gate.py +94 -0
- shramikfont-0.2.0/shramikfont/mission/integrity.py +74 -0
- shramikfont-0.2.0/shramikfont/mission/patch.py +86 -0
- shramikfont-0.2.0/shramikfont/mission/readiness.py +131 -0
- shramikfont-0.2.0/shramikfont/mission/timeline.py +57 -0
- shramikfont-0.2.0/shramikfont/profiles.py +60 -0
- shramikfont-0.2.0/shramikfont/safety.py +105 -0
- shramikfont-0.2.0/shramikfont/themes.py +153 -0
- shramikfont-0.2.0/shramikfont.egg-info/PKG-INFO +239 -0
- shramikfont-0.2.0/shramikfont.egg-info/SOURCES.txt +34 -0
- shramikfont-0.2.0/shramikfont.egg-info/dependency_links.txt +1 -0
- shramikfont-0.2.0/shramikfont.egg-info/entry_points.txt +2 -0
- shramikfont-0.2.0/shramikfont.egg-info/top_level.txt +1 -0
- shramikfont-0.2.0/tests/test_fingerprint.py +36 -0
- shramikfont-0.2.0/tests/test_readiness_gate.py +92 -0
- shramikfont-0.2.0/tests/test_safety.py +63 -0
- shramikfont-0.2.0/tests/test_themes_isolated.py +46 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SHRAMIK
|
|
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.
|
|
22
|
+
|
|
23
|
+
shramik.io · shramik.ai · shramik.tech
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: shramikfont
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Mission-assurance personality layer for command-line tools. The worker. The mission. The font.
|
|
5
|
+
Author: SHRAMIK
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://shramik.io
|
|
8
|
+
Project-URL: Documentation, https://shramik.io/docs
|
|
9
|
+
Project-URL: Repository, https://github.com/SHRAMIK-IO/shramikfont
|
|
10
|
+
Keywords: cli,terminal,ui,mission-assurance,load-testing,federal,ansi,shramik
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
18
|
+
Classifier: Topic :: Software Development :: Testing
|
|
19
|
+
Classifier: Topic :: System :: Monitoring
|
|
20
|
+
Classifier: Topic :: Terminals
|
|
21
|
+
Requires-Python: >=3.8
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Dynamic: license-file
|
|
25
|
+
|
|
26
|
+
# SHRAMIK · The worker. The mission. The font.
|
|
27
|
+
|
|
28
|
+
[](https://github.com/SHRAMIK-IO/shramikfont/actions/workflows/test.yml)
|
|
29
|
+
[](https://pypi.org/project/shramikfont/)
|
|
30
|
+
[](https://pypi.org/project/shramikfont/)
|
|
31
|
+
[](LICENSE)
|
|
32
|
+
|
|
33
|
+
> Drop-in mission-assurance personality for your command-line tools.
|
|
34
|
+
> Pure Python. **Zero dependencies.** CI/CD safe. Federal-friendly.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
◉ SHRAMIK MISSION ASSURANCE PLATFORM
|
|
38
|
+
Validation → Performance → Readiness → Evidence → Authorization
|
|
39
|
+
One Platform. One Workflow. One Mission.
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Why
|
|
45
|
+
|
|
46
|
+
Most CLI tools look like CLI tools. **SHRAMIK** tools look like *mission consoles* — without losing a single deterministic guarantee. The engine stays boring. Reports stay clean. The exit code is still the contract. The CLI just gets a soul.
|
|
47
|
+
|
|
48
|
+
Fonts wrap text in personality. **ShramikFont** wraps your CLI in personality. Drop it in, pick a theme, ship it.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## The five-line drop-in
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
import shramikfont as sf
|
|
56
|
+
from shramikfont.cli import add_shramik_args
|
|
57
|
+
|
|
58
|
+
parser = add_shramik_args(your_existing_argparser)
|
|
59
|
+
args = parser.parse_args()
|
|
60
|
+
theme, _ = sf.resolve_theme(args.ui_theme) # auto-falls-back to 'none' in CI
|
|
61
|
+
sf.print_banner(theme, edition="Lite") # silent in CI, hype in futuristic mode
|
|
62
|
+
# ... your engine runs untouched ...
|
|
63
|
+
sf.mission.print_dashboard(theme, metrics) # executive-friendly post-run summary
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
That's the deal. **Engine logic stays where it is.** ShramikFont only writes to stdout, only after the engine asks it to, and only when the environment allows.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## What it looks like
|
|
71
|
+
|
|
72
|
+
| Theme | Use for | Vibe |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| `classic` | Lite & Pro defaults | Familiar. Minimal. Doesn't show off. |
|
|
75
|
+
| `vintage` | Titan default. Federal proof runs. | Mature federal engineering aesthetic. No animation. |
|
|
76
|
+
| `futuristic` | Sales demos. Walkthroughs. `--demo-ui`. | Full Palantir / Anduril hype. Cyber-glitch banner, pulses, loading bars. |
|
|
77
|
+
| `none` | CI/CD, `--raw`, `--json`, pipes | Pure machine-readable. Auto-forced. |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Mission profiles
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
--profile smoke # Quick dev validation. Minimal output.
|
|
85
|
+
--profile stress # Heavy load. Vintage theme. Minimal UI.
|
|
86
|
+
--profile ci-gate # CI/CD. Forces theme=none, suppresses banner, deterministic.
|
|
87
|
+
--profile federal-proof # Fingerprint + integrity manifest + authorization badge + mission patch.
|
|
88
|
+
--profile airgap # Highlights no-internet, no-telemetry posture.
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## The 12 lovable features
|
|
94
|
+
|
|
95
|
+
1. **Mission Readiness Score** (0–100) blending SLA / errors / latency / throughput
|
|
96
|
+
2. **Deployment Gate** — `PASS` or `BLOCKED` with enumerated reasons. Drives exit code.
|
|
97
|
+
3. **Run Fingerprint** — `SK-LITE-YYYYMMDD-HHMMSS-XXXX`. Short, sortable, shareable.
|
|
98
|
+
4. **Mission Control Dashboard** — executive-friendly ASCII summary
|
|
99
|
+
5. **Evidence Vault** — tidy summary of report artifacts with status badges
|
|
100
|
+
6. **Mission Timeline** — Anduril-style timestamped event log
|
|
101
|
+
7. **SHA256 Integrity Manifest** — federal-audit-grade artifact verification
|
|
102
|
+
8. **Authorization Badge** — `READY FOR REVIEW` / `REQUIRES REMEDIATION` (RMF / ATO language)
|
|
103
|
+
9. **Air-Gap Readiness Panel** — declares the run's air-gap posture, screenshot-worthy
|
|
104
|
+
10. **Mission Patch** — ASCII patch in-terminal + SVG export for Slack / stickers
|
|
105
|
+
11. **Achievement Unlocks** — `ZERO_ERROR_MISSION`, `SUSTAINED_TPS_500`, etc.
|
|
106
|
+
12. **Mission Log** — `~/.shramik/log.jsonl` remembers your last N runs
|
|
107
|
+
|
|
108
|
+
Plus a handful of pure-delight extras:
|
|
109
|
+
|
|
110
|
+
- `shramikfont vibe` — today's mission vibe (morning / afternoon / Friday / weekend)
|
|
111
|
+
- `shramikfont fortune` — Unix-style mission aphorisms
|
|
112
|
+
- `shramikfont demo` — the full boot-sequence hype reel
|
|
113
|
+
- `shramikfont screensaver` — looping MISSION READY pulse until Ctrl+C
|
|
114
|
+
- `shramikfont readme` — pretty-prints this README in-terminal
|
|
115
|
+
- `shramikfont missions` — your last 10 missions, color-coded
|
|
116
|
+
- `shramikfont forge --plan pro` — mints a demo license key (cosmetic)
|
|
117
|
+
- `shramikfont patch --export run.svg` — exports an SVG mission patch
|
|
118
|
+
- `--sfx` — opt-in sound effects on PASS / BLOCK (macOS / Linux / Windows)
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Safety guarantees
|
|
123
|
+
|
|
124
|
+
ShramikFont **never** influences the engine. Hard rules enforced by `shramikfont.safety`:
|
|
125
|
+
|
|
126
|
+
- `CI=true`, `GITHUB_ACTIONS`, `GITLAB_CI`, `JENKINS_HOME`, `TF_BUILD`, `BUILDKITE`, `CIRCLECI`, `TRAVIS`, `BAMBOO_BUILD_NUMBER`, `TEAMCITY_VERSION`, `CODEBUILD_BUILD_ID`, `DRONE` → **theme forced to `none`**
|
|
127
|
+
- `--raw` / `--json` / `--output-json` → **theme forced to `none`** (cannot be overridden, ever)
|
|
128
|
+
- Stdout not a TTY (piped or redirected) → **theme forced to `none`**
|
|
129
|
+
- `--force-ui` overrides CI auto-detect but **not** `--raw` / `--json`
|
|
130
|
+
- Themes carry an explicit `sleep_multiplier`. Non-futuristic themes set it to `0.0` — no animation, no delays, no surprises in long-running sessions.
|
|
131
|
+
|
|
132
|
+
The headline guarantee: **switching themes never changes engine metrics.** Covered by `tests/test_themes_isolated.py::test_readiness_score_identical_regardless_of_theme`.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Try it now
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# 1. Run the full hype-reel demo
|
|
140
|
+
python3 -m shramikfont.cli demo
|
|
141
|
+
|
|
142
|
+
# 2. Run the example load tester in futuristic mode
|
|
143
|
+
python3 examples/shramik_lite.py --url https://httpbin.org/get \
|
|
144
|
+
--users 10 --duration 10 --ui-theme futuristic
|
|
145
|
+
|
|
146
|
+
# 3. Run the same thing as a federal proof
|
|
147
|
+
python3 examples/shramik_lite.py --url https://httpbin.org/get \
|
|
148
|
+
--users 10 --duration 10 \
|
|
149
|
+
--profile federal-proof --mission-patch \
|
|
150
|
+
--export-patch ~/Desktop/run.svg
|
|
151
|
+
|
|
152
|
+
# 4. Run it as a CI/CD gate (auto-disables all UI, deterministic 2-line output)
|
|
153
|
+
python3 examples/shramik_lite.py --url https://httpbin.org/get \
|
|
154
|
+
--users 10 --duration 10 --raw
|
|
155
|
+
|
|
156
|
+
# 5. Have fun
|
|
157
|
+
python3 -m shramikfont.cli vibe
|
|
158
|
+
python3 -m shramikfont.cli fortune
|
|
159
|
+
python3 -m shramikfont.cli patch --edition LITE --status READY
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Install
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
pip install -e . # for now (PyPI later)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Or just drop the `shramikfont/` folder next to your script. **Pure stdlib means zero install friction.**
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Editions
|
|
175
|
+
|
|
176
|
+
ShramikFont ships with one PoC: `examples/shramik_lite.py`. It's a real load-tester (the engine from the v1.7.0 production Lite binary) with ShramikFont wrapped around it.
|
|
177
|
+
|
|
178
|
+
Future PoCs will follow the same pattern: take an existing engine, leave the engine alone, wrap the CLI surface in ShramikFont.
|
|
179
|
+
|
|
180
|
+
| Edition | Default theme | Status |
|
|
181
|
+
|---|---|---|
|
|
182
|
+
| `shramik_lite.py` | classic | ✅ v0.1.0 (`examples/`) — single-file load tester |
|
|
183
|
+
| `shramik_pro.py` | classic | ✅ v0.2.0 (`examples/`) — full Pro engine: SLA, --rampup, --pacing, bearer/basic auth, HTML/CSV/JSON exports, CPU/mem telemetry |
|
|
184
|
+
| `shramik_check.py` | classic | ✅ v0.2.0 (`examples/`) — functional API validation (subcommand CLI: `doctor` / `run`) |
|
|
185
|
+
| `shramik_flow.py` | classic | ✅ v0.2.0 (`examples/`) — CI/CD operational validation (subcommand CLI: `version` / `doctor` / `check` / `report`) |
|
|
186
|
+
| `shramik_titan.py` | vintage | planned (when the Titan async engine lands) |
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Architecture
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
your_cli.py
|
|
194
|
+
↓
|
|
195
|
+
parse args → add_shramik_args()
|
|
196
|
+
↓
|
|
197
|
+
resolve theme → sf.resolve_theme() (auto-safe in CI / --raw / --json)
|
|
198
|
+
↓
|
|
199
|
+
print banner → sf.print_banner() (silent if theme.name == 'none')
|
|
200
|
+
↓
|
|
201
|
+
─────── your engine runs untouched ───────
|
|
202
|
+
↓
|
|
203
|
+
collect metrics → dict
|
|
204
|
+
↓
|
|
205
|
+
sf.mission.print_dashboard(theme, metrics)
|
|
206
|
+
sf.mission.print_readiness(theme, inputs)
|
|
207
|
+
sf.mission.print_gate(theme, gate_result)
|
|
208
|
+
sf.mission.print_fingerprint(theme, run_id)
|
|
209
|
+
sf.mission.print_timeline(theme, events)
|
|
210
|
+
sf.mission.print_mission_patch(theme, run_id)
|
|
211
|
+
↓
|
|
212
|
+
sys.exit(gate_result.exit_code)
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
The presentation layer **never** lives inside the request loop, latency collection, metrics engine, report serializer, or SLA evaluator. That's the contract.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Tests
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
python3 -m pytest tests/ -v
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
27 tests covering safety guardrails, readiness scoring, deployment gate logic, fingerprint format, and the theme-isolation guarantee.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Domains
|
|
230
|
+
|
|
231
|
+
- **shramik.io** — primary
|
|
232
|
+
- **shramik.ai** — reserved
|
|
233
|
+
- **shramik.tech** — reserved
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## License
|
|
238
|
+
|
|
239
|
+
MIT · © 2026 SHRAMIK · [shramik.io](https://shramik.io)
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# SHRAMIK · The worker. The mission. The font.
|
|
2
|
+
|
|
3
|
+
[](https://github.com/SHRAMIK-IO/shramikfont/actions/workflows/test.yml)
|
|
4
|
+
[](https://pypi.org/project/shramikfont/)
|
|
5
|
+
[](https://pypi.org/project/shramikfont/)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
8
|
+
> Drop-in mission-assurance personality for your command-line tools.
|
|
9
|
+
> Pure Python. **Zero dependencies.** CI/CD safe. Federal-friendly.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
◉ SHRAMIK MISSION ASSURANCE PLATFORM
|
|
13
|
+
Validation → Performance → Readiness → Evidence → Authorization
|
|
14
|
+
One Platform. One Workflow. One Mission.
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Why
|
|
20
|
+
|
|
21
|
+
Most CLI tools look like CLI tools. **SHRAMIK** tools look like *mission consoles* — without losing a single deterministic guarantee. The engine stays boring. Reports stay clean. The exit code is still the contract. The CLI just gets a soul.
|
|
22
|
+
|
|
23
|
+
Fonts wrap text in personality. **ShramikFont** wraps your CLI in personality. Drop it in, pick a theme, ship it.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## The five-line drop-in
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
import shramikfont as sf
|
|
31
|
+
from shramikfont.cli import add_shramik_args
|
|
32
|
+
|
|
33
|
+
parser = add_shramik_args(your_existing_argparser)
|
|
34
|
+
args = parser.parse_args()
|
|
35
|
+
theme, _ = sf.resolve_theme(args.ui_theme) # auto-falls-back to 'none' in CI
|
|
36
|
+
sf.print_banner(theme, edition="Lite") # silent in CI, hype in futuristic mode
|
|
37
|
+
# ... your engine runs untouched ...
|
|
38
|
+
sf.mission.print_dashboard(theme, metrics) # executive-friendly post-run summary
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
That's the deal. **Engine logic stays where it is.** ShramikFont only writes to stdout, only after the engine asks it to, and only when the environment allows.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## What it looks like
|
|
46
|
+
|
|
47
|
+
| Theme | Use for | Vibe |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| `classic` | Lite & Pro defaults | Familiar. Minimal. Doesn't show off. |
|
|
50
|
+
| `vintage` | Titan default. Federal proof runs. | Mature federal engineering aesthetic. No animation. |
|
|
51
|
+
| `futuristic` | Sales demos. Walkthroughs. `--demo-ui`. | Full Palantir / Anduril hype. Cyber-glitch banner, pulses, loading bars. |
|
|
52
|
+
| `none` | CI/CD, `--raw`, `--json`, pipes | Pure machine-readable. Auto-forced. |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Mission profiles
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
--profile smoke # Quick dev validation. Minimal output.
|
|
60
|
+
--profile stress # Heavy load. Vintage theme. Minimal UI.
|
|
61
|
+
--profile ci-gate # CI/CD. Forces theme=none, suppresses banner, deterministic.
|
|
62
|
+
--profile federal-proof # Fingerprint + integrity manifest + authorization badge + mission patch.
|
|
63
|
+
--profile airgap # Highlights no-internet, no-telemetry posture.
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## The 12 lovable features
|
|
69
|
+
|
|
70
|
+
1. **Mission Readiness Score** (0–100) blending SLA / errors / latency / throughput
|
|
71
|
+
2. **Deployment Gate** — `PASS` or `BLOCKED` with enumerated reasons. Drives exit code.
|
|
72
|
+
3. **Run Fingerprint** — `SK-LITE-YYYYMMDD-HHMMSS-XXXX`. Short, sortable, shareable.
|
|
73
|
+
4. **Mission Control Dashboard** — executive-friendly ASCII summary
|
|
74
|
+
5. **Evidence Vault** — tidy summary of report artifacts with status badges
|
|
75
|
+
6. **Mission Timeline** — Anduril-style timestamped event log
|
|
76
|
+
7. **SHA256 Integrity Manifest** — federal-audit-grade artifact verification
|
|
77
|
+
8. **Authorization Badge** — `READY FOR REVIEW` / `REQUIRES REMEDIATION` (RMF / ATO language)
|
|
78
|
+
9. **Air-Gap Readiness Panel** — declares the run's air-gap posture, screenshot-worthy
|
|
79
|
+
10. **Mission Patch** — ASCII patch in-terminal + SVG export for Slack / stickers
|
|
80
|
+
11. **Achievement Unlocks** — `ZERO_ERROR_MISSION`, `SUSTAINED_TPS_500`, etc.
|
|
81
|
+
12. **Mission Log** — `~/.shramik/log.jsonl` remembers your last N runs
|
|
82
|
+
|
|
83
|
+
Plus a handful of pure-delight extras:
|
|
84
|
+
|
|
85
|
+
- `shramikfont vibe` — today's mission vibe (morning / afternoon / Friday / weekend)
|
|
86
|
+
- `shramikfont fortune` — Unix-style mission aphorisms
|
|
87
|
+
- `shramikfont demo` — the full boot-sequence hype reel
|
|
88
|
+
- `shramikfont screensaver` — looping MISSION READY pulse until Ctrl+C
|
|
89
|
+
- `shramikfont readme` — pretty-prints this README in-terminal
|
|
90
|
+
- `shramikfont missions` — your last 10 missions, color-coded
|
|
91
|
+
- `shramikfont forge --plan pro` — mints a demo license key (cosmetic)
|
|
92
|
+
- `shramikfont patch --export run.svg` — exports an SVG mission patch
|
|
93
|
+
- `--sfx` — opt-in sound effects on PASS / BLOCK (macOS / Linux / Windows)
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Safety guarantees
|
|
98
|
+
|
|
99
|
+
ShramikFont **never** influences the engine. Hard rules enforced by `shramikfont.safety`:
|
|
100
|
+
|
|
101
|
+
- `CI=true`, `GITHUB_ACTIONS`, `GITLAB_CI`, `JENKINS_HOME`, `TF_BUILD`, `BUILDKITE`, `CIRCLECI`, `TRAVIS`, `BAMBOO_BUILD_NUMBER`, `TEAMCITY_VERSION`, `CODEBUILD_BUILD_ID`, `DRONE` → **theme forced to `none`**
|
|
102
|
+
- `--raw` / `--json` / `--output-json` → **theme forced to `none`** (cannot be overridden, ever)
|
|
103
|
+
- Stdout not a TTY (piped or redirected) → **theme forced to `none`**
|
|
104
|
+
- `--force-ui` overrides CI auto-detect but **not** `--raw` / `--json`
|
|
105
|
+
- Themes carry an explicit `sleep_multiplier`. Non-futuristic themes set it to `0.0` — no animation, no delays, no surprises in long-running sessions.
|
|
106
|
+
|
|
107
|
+
The headline guarantee: **switching themes never changes engine metrics.** Covered by `tests/test_themes_isolated.py::test_readiness_score_identical_regardless_of_theme`.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Try it now
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# 1. Run the full hype-reel demo
|
|
115
|
+
python3 -m shramikfont.cli demo
|
|
116
|
+
|
|
117
|
+
# 2. Run the example load tester in futuristic mode
|
|
118
|
+
python3 examples/shramik_lite.py --url https://httpbin.org/get \
|
|
119
|
+
--users 10 --duration 10 --ui-theme futuristic
|
|
120
|
+
|
|
121
|
+
# 3. Run the same thing as a federal proof
|
|
122
|
+
python3 examples/shramik_lite.py --url https://httpbin.org/get \
|
|
123
|
+
--users 10 --duration 10 \
|
|
124
|
+
--profile federal-proof --mission-patch \
|
|
125
|
+
--export-patch ~/Desktop/run.svg
|
|
126
|
+
|
|
127
|
+
# 4. Run it as a CI/CD gate (auto-disables all UI, deterministic 2-line output)
|
|
128
|
+
python3 examples/shramik_lite.py --url https://httpbin.org/get \
|
|
129
|
+
--users 10 --duration 10 --raw
|
|
130
|
+
|
|
131
|
+
# 5. Have fun
|
|
132
|
+
python3 -m shramikfont.cli vibe
|
|
133
|
+
python3 -m shramikfont.cli fortune
|
|
134
|
+
python3 -m shramikfont.cli patch --edition LITE --status READY
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Install
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
pip install -e . # for now (PyPI later)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Or just drop the `shramikfont/` folder next to your script. **Pure stdlib means zero install friction.**
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Editions
|
|
150
|
+
|
|
151
|
+
ShramikFont ships with one PoC: `examples/shramik_lite.py`. It's a real load-tester (the engine from the v1.7.0 production Lite binary) with ShramikFont wrapped around it.
|
|
152
|
+
|
|
153
|
+
Future PoCs will follow the same pattern: take an existing engine, leave the engine alone, wrap the CLI surface in ShramikFont.
|
|
154
|
+
|
|
155
|
+
| Edition | Default theme | Status |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| `shramik_lite.py` | classic | ✅ v0.1.0 (`examples/`) — single-file load tester |
|
|
158
|
+
| `shramik_pro.py` | classic | ✅ v0.2.0 (`examples/`) — full Pro engine: SLA, --rampup, --pacing, bearer/basic auth, HTML/CSV/JSON exports, CPU/mem telemetry |
|
|
159
|
+
| `shramik_check.py` | classic | ✅ v0.2.0 (`examples/`) — functional API validation (subcommand CLI: `doctor` / `run`) |
|
|
160
|
+
| `shramik_flow.py` | classic | ✅ v0.2.0 (`examples/`) — CI/CD operational validation (subcommand CLI: `version` / `doctor` / `check` / `report`) |
|
|
161
|
+
| `shramik_titan.py` | vintage | planned (when the Titan async engine lands) |
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Architecture
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
your_cli.py
|
|
169
|
+
↓
|
|
170
|
+
parse args → add_shramik_args()
|
|
171
|
+
↓
|
|
172
|
+
resolve theme → sf.resolve_theme() (auto-safe in CI / --raw / --json)
|
|
173
|
+
↓
|
|
174
|
+
print banner → sf.print_banner() (silent if theme.name == 'none')
|
|
175
|
+
↓
|
|
176
|
+
─────── your engine runs untouched ───────
|
|
177
|
+
↓
|
|
178
|
+
collect metrics → dict
|
|
179
|
+
↓
|
|
180
|
+
sf.mission.print_dashboard(theme, metrics)
|
|
181
|
+
sf.mission.print_readiness(theme, inputs)
|
|
182
|
+
sf.mission.print_gate(theme, gate_result)
|
|
183
|
+
sf.mission.print_fingerprint(theme, run_id)
|
|
184
|
+
sf.mission.print_timeline(theme, events)
|
|
185
|
+
sf.mission.print_mission_patch(theme, run_id)
|
|
186
|
+
↓
|
|
187
|
+
sys.exit(gate_result.exit_code)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
The presentation layer **never** lives inside the request loop, latency collection, metrics engine, report serializer, or SLA evaluator. That's the contract.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Tests
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
python3 -m pytest tests/ -v
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
27 tests covering safety guardrails, readiness scoring, deployment gate logic, fingerprint format, and the theme-isolation guarantee.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Domains
|
|
205
|
+
|
|
206
|
+
- **shramik.io** — primary
|
|
207
|
+
- **shramik.ai** — reserved
|
|
208
|
+
- **shramik.tech** — reserved
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## License
|
|
213
|
+
|
|
214
|
+
MIT · © 2026 SHRAMIK · [shramik.io](https://shramik.io)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "shramikfont"
|
|
7
|
+
version = "0.2.0"
|
|
8
|
+
description = "Mission-assurance personality layer for command-line tools. The worker. The mission. The font."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.8"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [{name = "SHRAMIK"}]
|
|
13
|
+
keywords = ["cli", "terminal", "ui", "mission-assurance", "load-testing", "federal", "ansi", "shramik"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 4 - Beta",
|
|
16
|
+
"Environment :: Console",
|
|
17
|
+
"Intended Audience :: Developers",
|
|
18
|
+
"License :: OSI Approved :: MIT License",
|
|
19
|
+
"Operating System :: OS Independent",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.8",
|
|
22
|
+
"Topic :: Software Development :: Testing",
|
|
23
|
+
"Topic :: System :: Monitoring",
|
|
24
|
+
"Topic :: Terminals",
|
|
25
|
+
]
|
|
26
|
+
dependencies = []
|
|
27
|
+
|
|
28
|
+
[project.urls]
|
|
29
|
+
Homepage = "https://shramik.io"
|
|
30
|
+
Documentation = "https://shramik.io/docs"
|
|
31
|
+
Repository = "https://github.com/SHRAMIK-IO/shramikfont"
|
|
32
|
+
|
|
33
|
+
[project.scripts]
|
|
34
|
+
shramikfont = "shramikfont.cli:main"
|
|
35
|
+
|
|
36
|
+
[tool.setuptools.packages.find]
|
|
37
|
+
where = ["."]
|
|
38
|
+
include = ["shramikfont*"]
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ShramikFont — Mission-assurance personality for command-line tools.
|
|
3
|
+
|
|
4
|
+
The worker. The mission. The font.
|
|
5
|
+
|
|
6
|
+
Drop ShramikFont into any CLI script and the script gets:
|
|
7
|
+
- 4 themes (classic / vintage / futuristic / none) with safe defaults
|
|
8
|
+
- Auto-disable in CI/CD and --raw / --json modes
|
|
9
|
+
- Mission readiness score + deployment gate + run fingerprint
|
|
10
|
+
- Evidence vault, integrity manifest, authorization badge
|
|
11
|
+
- All the lovable extras (vibe, fortune, mission patches, achievements)
|
|
12
|
+
|
|
13
|
+
Pure stdlib. Zero dependencies. Python 3.8+.
|
|
14
|
+
|
|
15
|
+
shramik.io · © 2026 SHRAMIK
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
__version__ = "0.2.0"
|
|
19
|
+
__author__ = "SHRAMIK"
|
|
20
|
+
__license__ = "MIT"
|
|
21
|
+
__url__ = "https://shramik.io"
|
|
22
|
+
|
|
23
|
+
from .themes import Theme, get_theme, resolve_theme
|
|
24
|
+
from .safety import is_safe_mode, force_none_if_unsafe, ci_detected
|
|
25
|
+
from .banner import print_banner, mission_subtitle
|
|
26
|
+
from .effects import cyber_glitch, pulse, loading_bar, panel, divider, fast_type
|
|
27
|
+
from . import colors
|
|
28
|
+
|
|
29
|
+
__all__ = [
|
|
30
|
+
"Theme",
|
|
31
|
+
"get_theme",
|
|
32
|
+
"resolve_theme",
|
|
33
|
+
"is_safe_mode",
|
|
34
|
+
"force_none_if_unsafe",
|
|
35
|
+
"ci_detected",
|
|
36
|
+
"print_banner",
|
|
37
|
+
"mission_subtitle",
|
|
38
|
+
"cyber_glitch",
|
|
39
|
+
"pulse",
|
|
40
|
+
"loading_bar",
|
|
41
|
+
"panel",
|
|
42
|
+
"divider",
|
|
43
|
+
"fast_type",
|
|
44
|
+
"colors",
|
|
45
|
+
]
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""
|
|
2
|
+
The SHRAMIK banner — the first impression every command makes.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from .effects import cyber_glitch, fast_type, divider
|
|
6
|
+
from .themes import _THEMES as _NAMED_THEMES, CLASSIC
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
SHRAMIK_TITLE = "SHRAMIK MISSION ASSURANCE PLATFORM"
|
|
10
|
+
|
|
11
|
+
SHRAMIK_PILLARS = "Validation → Performance → Readiness → Evidence → Authorization"
|
|
12
|
+
|
|
13
|
+
SHRAMIK_TAGLINE = "One Platform. One Workflow. One Mission."
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def print_banner(theme=None, *, edition=None, title=None):
|
|
17
|
+
"""
|
|
18
|
+
Print the standard SHRAMIK banner. Behaviour scales with the theme:
|
|
19
|
+
futuristic — cyber-glitch animation + pillars + tagline
|
|
20
|
+
vintage — clean bold title + pillars
|
|
21
|
+
classic — minimal one-line banner
|
|
22
|
+
none — silent (auto-disabled in CI / --raw / --json)
|
|
23
|
+
"""
|
|
24
|
+
t = theme or CLASSIC
|
|
25
|
+
if t.name == "none":
|
|
26
|
+
return
|
|
27
|
+
|
|
28
|
+
display_title = title or SHRAMIK_TITLE
|
|
29
|
+
if edition:
|
|
30
|
+
display_title = f"{display_title} · {edition.upper()}"
|
|
31
|
+
|
|
32
|
+
if t.name == "futuristic":
|
|
33
|
+
cyber_glitch(display_title, theme=t)
|
|
34
|
+
fast_type(SHRAMIK_PILLARS, theme=t, color=t.accent, speed=0.003)
|
|
35
|
+
fast_type(SHRAMIK_TAGLINE, theme=t, color=t.success, speed=0.004)
|
|
36
|
+
elif t.name == "vintage":
|
|
37
|
+
divider(theme=t)
|
|
38
|
+
print(t.color(f" ◉ {display_title}", t.accent, bold=True))
|
|
39
|
+
print(t.color(f" {SHRAMIK_PILLARS}", t.info))
|
|
40
|
+
divider(theme=t)
|
|
41
|
+
else: # classic
|
|
42
|
+
print(t.color(f"── {display_title} ──", t.accent, bold=True))
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def mission_subtitle(text, theme=None):
|
|
46
|
+
"""Smaller secondary line below the main banner."""
|
|
47
|
+
t = theme or CLASSIC
|
|
48
|
+
if t.name == "none":
|
|
49
|
+
return
|
|
50
|
+
print(t.color(f" // {text}", t.info))
|