scamscript 0.4.0__tar.gz → 0.4.1__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.
- {scamscript-0.4.0 → scamscript-0.4.1}/CHANGELOG.md +7 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/PKG-INFO +15 -1
- {scamscript-0.4.0 → scamscript-0.4.1}/README.md +14 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/pyproject.toml +1 -1
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/__init__.py +1 -1
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/client.py +1 -1
- {scamscript-0.4.0 → scamscript-0.4.1}/tests/test_cli.py +1 -1
- {scamscript-0.4.0 → scamscript-0.4.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/.github/SECURITY.md +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/.github/pull_request_template.md +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/.github/workflows/ci.yml +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/.github/workflows/release.yml +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/.gitignore +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/CITATION.cff +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/CODE_OF_CONDUCT.md +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/CONTRIBUTING.md +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/LICENSE +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/docs/banner.svg +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/docs/calibration.md +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/docs/demo.gif +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/docs/sample-report.md +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/docs/social-preview.png +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/adversarial/fake_output_json.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/adversarial/fence_escape.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/adversarial/fixed_attack_type.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/adversarial/non_json_demand.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/adversarial/print_system_prompt.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/adversarial/role_switch.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/adversarial/score_override.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/crude_robocall.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/gov_impersonation_vishing.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/prompt_injection_script.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/romance_scam_sms.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/sophisticated_wire_fraud.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/examples/tech_support_scam.txt +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/scripts/calibrate.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/scripts/injection_eval.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/__main__.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/analysis.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/cli.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/config.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/ingest.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/models.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/prompts.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/redact.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/render.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/report.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/store.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/src/scamscript/verify.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/tests/test_analysis.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/tests/test_client.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/tests/test_ingest.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/tests/test_models.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/tests/test_prompts.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/tests/test_redact.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/tests/test_render.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/tests/test_report.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/tests/test_store.py +0 -0
- {scamscript-0.4.0 → scamscript-0.4.1}/tests/test_verify.py +0 -0
|
@@ -5,6 +5,13 @@ schema are the things that count as public API.
|
|
|
5
5
|
|
|
6
6
|
## Unreleased
|
|
7
7
|
|
|
8
|
+
## 0.4.1 - 2026-11-02
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- README lost the scale and spend section during an earlier edit; restored so the new flags are
|
|
13
|
+
documented where people look.
|
|
14
|
+
|
|
8
15
|
## 0.4.0 - 2026-11-02
|
|
9
16
|
|
|
10
17
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: scamscript
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Reverse-engineer scam scripts and vishing transcripts into structured counter-playbooks
|
|
5
5
|
Project-URL: Homepage, https://github.com/sjdsjadjajdjsa/scamscript
|
|
6
6
|
Project-URL: Repository, https://github.com/sjdsjadjajdjsa/scamscript
|
|
@@ -140,6 +140,20 @@ Rich output on stderr, so it pipes:
|
|
|
140
140
|
scamscript --json batch examples | jq -s 'map(select(.event == "result")) | length'
|
|
141
141
|
```
|
|
142
142
|
|
|
143
|
+
## Scale and spend
|
|
144
|
+
|
|
145
|
+
`--concurrency N` runs up to 16 analyses at once and keeps output in script order. `--max-cost`
|
|
146
|
+
stops scheduling new scripts once the provider reports that much spend, marks the remainder skipped
|
|
147
|
+
and still exits zero when nothing failed.
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
scamscript --concurrency 6 --max-cost 0.25 batch corpus/ --output report.md
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
The cap reads `usage.cost` from the response, so it works only where the provider reports cost and
|
|
154
|
+
says so when none is sent. Spend is printed and logged per run. In-flight requests can overshoot by
|
|
155
|
+
up to the concurrency, so keep headroom on a hard limit.
|
|
156
|
+
|
|
143
157
|
## How it works
|
|
144
158
|
|
|
145
159
|
```text
|
|
@@ -104,6 +104,20 @@ Rich output on stderr, so it pipes:
|
|
|
104
104
|
scamscript --json batch examples | jq -s 'map(select(.event == "result")) | length'
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
+
## Scale and spend
|
|
108
|
+
|
|
109
|
+
`--concurrency N` runs up to 16 analyses at once and keeps output in script order. `--max-cost`
|
|
110
|
+
stops scheduling new scripts once the provider reports that much spend, marks the remainder skipped
|
|
111
|
+
and still exits zero when nothing failed.
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
scamscript --concurrency 6 --max-cost 0.25 batch corpus/ --output report.md
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The cap reads `usage.cost` from the response, so it works only where the provider reports cost and
|
|
118
|
+
says so when none is sent. Spend is printed and logged per run. In-flight requests can overshoot by
|
|
119
|
+
up to the concurrency, so keep headroom on a hard limit.
|
|
120
|
+
|
|
107
121
|
## How it works
|
|
108
122
|
|
|
109
123
|
```text
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "scamscript"
|
|
7
|
-
version = "0.4.
|
|
7
|
+
version = "0.4.1"
|
|
8
8
|
description = "Reverse-engineer scam scripts and vishing transcripts into structured counter-playbooks"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -228,7 +228,7 @@ def test_dry_run_without_endpoint(home, tmp_path, monkeypatch):
|
|
|
228
228
|
def test_version(home):
|
|
229
229
|
result = runner.invoke(cli.app, ["--version"])
|
|
230
230
|
assert result.exit_code == 0
|
|
231
|
-
assert result.stdout.strip() == "scamscript 0.4.
|
|
231
|
+
assert result.stdout.strip() == "scamscript 0.4.1"
|
|
232
232
|
|
|
233
233
|
|
|
234
234
|
def test_json_output_is_one_object_per_script(home, tmp_path, fake):
|
|
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
|
|
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
|