dante-watch 0.1.2 → 0.1.3
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.
- package/README.md +56 -23
- package/package.json +1 -1
- package/src/bib/answers.mjs +2 -2
- package/src/bib/bib.json +1 -1
- package/src/bib/ear.mjs +19 -18
- package/src/bib/net.json +1 -1
- package/src/bib/net.mjs +7 -9
- package/src/bib/probe.mjs +7 -8
- package/src/bib/pruef.json +1 -0
- package/src/bib/router.mjs +16 -19
- package/src/bib/system.mjs +14 -15
- package/src/bib/wash.mjs +5 -13
- package/src/checks/battery.mjs +15 -10
- package/src/checks/common.mjs +5 -5
- package/src/checks/demo.mjs +2 -2
- package/src/checks/formats.mjs +221 -0
- package/src/checks/hf.mjs +252 -0
- package/src/checks/loc.mjs +2 -4
- package/src/checks/php2shell.mjs +8 -9
- package/src/checks/rechte.mjs +2 -3
- package/src/checks/secrets.mjs +2 -4
- package/src/checks/sshd.mjs +3 -5
- package/src/checks/webshell.mjs +3 -5
- package/src/cli.mjs +15 -10
- package/src/core/check.mjs +4 -8
- package/src/core/consent.mjs +7 -7
- package/src/core/render.mjs +2 -2
- package/src/core/sh.mjs +12 -7
- package/src/i18n-checks.mjs +2 -3
- package/src/i18n.mjs +54 -14
- package/src/mascot.mjs +3 -5
- package/src/me/deep.mjs +37 -0
- package/src/me/diary.mjs +51 -0
- package/src/me/home.mjs +10 -0
- package/src/me/lock.mjs +41 -0
- package/src/me/nudge.mjs +52 -0
- package/src/me/onboard.mjs +102 -0
- package/src/me/overview.mjs +10 -0
- package/src/me/patrol.mjs +43 -0
- package/src/me/pick.mjs +64 -0
- package/src/me/pool.mjs +15 -0
- package/src/me/recon.mjs +94 -0
- package/src/me/refresh.mjs +70 -0
- package/src/me/schedule-deep.mjs +86 -0
- package/src/me/schedule.mjs +120 -0
- package/src/me/texts.mjs +291 -0
- package/src/me/user.mjs +67 -0
- package/src/pack/builtin.mjs +67 -4
- package/src/pack/ere.mjs +87 -0
- package/src/pack/install.mjs +6 -8
- package/src/pack/key.mjs +2 -3
- package/src/pack/know.mjs +4 -5
- package/src/pack/pack.mjs +14 -10
- package/src/pack/rules.mjs +109 -1
- package/src/pack/texts.mjs +8 -7
- package/src/session.mjs +199 -37
- package/src/ticker.mjs +10 -9
- package/src/ui/footer.mjs +3 -5
- package/src/ui/job-worker.mjs +3 -3
- package/src/ui/job.mjs +7 -6
- package/src/ui/quips.mjs +1 -2
- package/src/ui/wait.mjs +3 -4
- package/src/version.mjs +11 -0
package/README.md
CHANGED
|
@@ -4,37 +4,70 @@
|
|
|
4
4
|
|
|
5
5
|
```
|
|
6
6
|
npx dante-watch # open a session: talk to Dante in German, English or Spanish
|
|
7
|
+
npx dante-watch --version # which version runs
|
|
7
8
|
npx dante-watch --ssh root@host --key ~/.ssh/id # check a server you own, once
|
|
8
9
|
```
|
|
9
10
|
|
|
10
11
|
Every verdict carries the real line it came from. If Dante cannot read the proof, it says
|
|
11
12
|
`unknown` — never `safe`. Safe is a thing it proves, not a thing it assumes.
|
|
12
13
|
|
|
13
|
-
## What Dante sends
|
|
14
|
-
|
|
15
|
-
**By default and on its own: nothing.** The code has no `fetch`, no HTTP client, no telemetry, no
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
14
|
+
## What Dante sends, reads and writes
|
|
15
|
+
|
|
16
|
+
**By default and on its own: nothing.** The code has no `fetch`, no HTTP client, no telemetry, no update check.
|
|
17
|
+
While you talk to him, and while he patrols, he calls nobody.
|
|
18
|
+
|
|
19
|
+
Exactly two things can reach our server, and **you** start both, after a clear *yes* to the command he prints:
|
|
20
|
+
|
|
21
|
+
- `update` (German `aktualisier`, Spanish `actualiza`): one `curl` to `https://api.nm-streetwear.space/dante/packs`
|
|
22
|
+
carrying **your license token** and nothing else. `update` also looks around again on your machine (see below).
|
|
23
|
+
- `buy` (`kaufen`, `comprar`), or a question once a week when his knowledge is 30 days old: one `curl` to the
|
|
24
|
+
**public** catalog `https://api.nm-streetwear.space/dante/catalog`. Nothing of yours goes out, not even a token.
|
|
25
|
+
Only if there are packs you lack does he ask whether to open the shop page in your browser.
|
|
26
|
+
|
|
27
|
+
You can skip both forever. The free state is complete and runs offline. Download a pack in a browser and install it
|
|
28
|
+
with `pack <file>`, and Dante never touches the network at all.
|
|
29
|
+
|
|
30
|
+
**Getting to know you (`user.md`).** On the first start he asks *"May I look around?"*. On a *yes* he reads, on this
|
|
31
|
+
machine only: the system name, your Git name, the hosts in `~/.ssh/config` and the readable ones in
|
|
32
|
+
`~/.ssh/known_hosts`, and the **names** of your project folders (folders with a `.git`). He does not read file
|
|
33
|
+
contents and not your shell history. He writes it into `~/.dante/user.md` — plain Markdown you can open and change.
|
|
34
|
+
Every 20 days he asks whether to look again; `update` does it too. He knocks at a server over SSH only if you said yes
|
|
35
|
+
to that server, read-only, with your own key.
|
|
36
|
+
|
|
37
|
+
**The schedule (armed).** Only after a separate, clear *yes* he writes a schedule — a launchd agent on a Mac, a cron
|
|
38
|
+
entry elsewhere — that starts `dante-watch --patrol` four times a day (00, 06, 12, 18 h). A patrol runs the checks on
|
|
39
|
+
this machine and on the servers you approved, writes `~/.dante/diary.jsonl` and changes nothing; its only connections are
|
|
40
|
+
SSH to those servers. You can ask him *"what happened?"* and he answers from the diary. `abschalten` / `disarm` /
|
|
41
|
+
`desarmar` removes both schedules again; it is shown in plain words before it is written.
|
|
42
|
+
|
|
43
|
+
**The deep run (`deep`, weekly if you said yes).** This is the one place where Dante **reads the content of your files**
|
|
44
|
+
— locally, read-only: he searches your project folders (and the web roots of servers you approved) for keys, tokens
|
|
45
|
+
and passwords left in code, with the formats of his check library (hundreds of patterns for AWS, GitHub, Stripe, private
|
|
46
|
+
keys, database URLs, … built per system: he first looks which systems are there — `package.json`, `composer.json`,
|
|
47
|
+
`requirements.txt` … — and uses only those patterns). On a hit he looks closer: file rights, is it in Git, was it ever
|
|
48
|
+
committed, is it git-ignored. **He shows the file, the line and the kind of secret — never the value.** A key in a private,
|
|
49
|
+
git-ignored file (your local `.env`) is normal and says so. Example files (`*.example`) and placeholder lines are skipped.
|
|
50
|
+
He skips `node_modules`, `.git`, `vendor` and build folders. Nothing leaves your machine. It has its own schedule entry
|
|
51
|
+
(Monday, 03:30) with its own yes, and while it runs it closes the lane: the patrol sees the lock and steps aside instead
|
|
52
|
+
of waiting. A lock left behind by a crash is ignored after a few hours.
|
|
53
|
+
|
|
54
|
+
**Models and agents (the pack "Hugging Face Analysis", `models`).** With this pack Dante looks at the AI models you downloaded
|
|
55
|
+
(the Hugging Face cache `~/.cache/huggingface/hub`, `~/models`, your project folders) and at the configuration of your AI
|
|
56
|
+
agents (for example `~/.claude.json`, Claude Desktop, Cursor, `.mcp.json`). For a model he reads names, sizes, the head of the
|
|
57
|
+
README (the model card) and `config.json` — **never the weights**; for the Python files a model ships he reports the file, the
|
|
58
|
+
line and the kind of pattern, not the code. For an agent configuration he reads the JSON locally and reports server, what it
|
|
59
|
+
can do and what stands out — **never the values**, so no key or token is shown. Nothing leaves your machine. Without the pack
|
|
60
|
+
he says what it is and offers to open the shop page.
|
|
61
|
+
|
|
62
|
+
What he reads and writes on your machine: the folder `~/.dante/` — your token (mode 0600), the packs you installed,
|
|
63
|
+
`user.md`, the diary, the small scripts the schedules start (`patrol.sh`, `deep.sh`), a lock file while the deep run is on, a note of when he last asked — plus the schedule entry if you
|
|
64
|
+
armed him. Fixes happen only after a clear *yes*, with the exact commands shown first.
|
|
32
65
|
|
|
33
66
|
- **No install hooks.** `npm install` runs no scripts. No `postinstall`, nothing executes on install.
|
|
34
|
-
- **No dependencies.** Only Node (≥18) and its own modules (`child_process`, `fs`, `os`, `path`,
|
|
35
|
-
`
|
|
36
|
-
- **The code is readable.** The rest of the package is data: the language books and rules as plain
|
|
37
|
-
|
|
67
|
+
- **No dependencies.** Only Node (≥18) and its own modules (`child_process`, `fs`, `os`, `path`, `readline`, `crypto`,
|
|
68
|
+
`worker_threads`, `url`). Nothing is pulled in that you did not read.
|
|
69
|
+
- **The code is readable.** The rest of the package is data: the language books and rules as plain JSON
|
|
70
|
+
(`src/bib/*.json`), no blobs, no obfuscation.
|
|
38
71
|
|
|
39
72
|
If you review packages for a living: this one does not phone home, and it says so here on purpose.
|
|
40
73
|
Questions: info@nm-streetwear.space.
|
package/package.json
CHANGED
package/src/bib/answers.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
1
|
+
// Canned answers for questions Dante can answer without running anything: five lines at most each.
|
|
2
|
+
// None of them states a result; verdicts come only from a check and its evidence line.
|
|
3
3
|
export const ANSWERS = {
|
|
4
4
|
frage_luecke: {
|
|
5
5
|
de: ["PHP2Shell (CVE-2026-109618/-619) ist eine Lücke im PHP-Kern.", "Wer sie trifft, kann über eine Webanfrage eigene Befehle auf dem Server ausführen (RCE).", "Betroffen sind nur Rechner mit PHP. Ob deiner es ist, sag ich dir erst mit echter Zeile:", "„prüf“ für diesen Rechner, „server user@host“ für einen Server."],
|